Vstúpiť
Všetky počítačové tajomstvá pre začiatočníkov a profesionálov
  • Zmena farby textu a pozadia
  • Vytvorenie vlastnej prezentácie Ako zmeniť pozadie v prezentácii openoffice
  • Ako odstrániť hlavičky a päty v Exceli Vložte hlavičku a päty v Exceli
  • Ako nastaviť, zmeniť, zmenšiť rozmery v AutoCADe?
  • Služba FTP - prenos súborov
  • Používanie vrstiev v aplikácii AutoCAD Vytvorenie novej vrstvy v aplikácii AutoCAD
  • Typ rozloženia binárne dáta 1s. Práca s binárnymi dátami

    Typ rozloženia binárne dáta 1s.  Práca s binárnymi dátami

    V sklade hodnôt je možné uložiť takmer akúkoľvek informáciu, napr.

    ... obrázky (fotky):

    CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Enumerations.Types of Additional Information of Objects.Image; Storage = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

    // na tomto mieste zobrazí všetko... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

    ...tabuľkový dokument:

    TabDoc=Nový tabuľkový dokument; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); Napíšte ();

    Koniec procedúry

    Postup RestoreFromStoragePress (prvok)

    TabDoc=Storage.Get(); Ak TabDoc<>Undefined ThenFormElements.TabularDocumentField1.Output(TabDoc); koniec Ak;

    Koniec procedúry

    ...ľubovoľné súbory (binárne dáta):

    XZ = NewValueStorage(NewBinaryData(súbor));

    Osem podporuje kompresiu údajov umiestnených v úložisku:

    XZ = NewValueStorage(NewBinaryData(file),NewDataCompression(9));

    ... externé spracovanie a podávanie správ:

    Postup LoadProcessingIntoStorage(PropsStorageType)

    CompressionRate = NewDataCompression(9); //9 maximum PropsStorageType = New StorageValues(New BinaryData("c:\reports\report.epf", Compression Ratio));

    Koniec procedúry

    Postup StartProcessingFromStorage(PropsStorageType)

    TemporaryFileName = TemporaryFileDirectory()+"report.epf"; BinaryData = PropsStorageType.Get(); BinaryData.Write(TemporaryFileName); ExternalProcessing = ExternalProcessing.Create(TemporaryFileName); ExternalProcessing.GetForm().Open();

    Koniec procedúry

    Práca s úložiskom

    Ak to boli binárne údaje, potom ich možno obnoviť z úložiska hodnôt pomocou metódy Get a zapísať do súboru pomocou metódy Write().

    Ak TypeValue(Storage)<>Zadajte("BinaryData") Potom

    BinaryData = Storage.Get();

    BinaryData = Úložisko;

    koniec Ak; BinaryData.Write(Názov súboru);

    Ak to bol napríklad dokument programu Word (súbor doc alebo iný registrovaný typ súboru), možno ho otvoriť takto:

    LaunchApplication(FileName);

    Ak chcete vymazať pole typu Ukladanie hodnôt, musíte mu priradiť Nedefinované:

    PropsStorage = Nedefinované;

    Práca so súbormi a obrázkami vo vstavanom jazyku 1C:Enterprise 8

    Účel

    Spravovaná aplikácia implementuje nový mechanizmus pre prácu so súbormi. Poskytuje výmenu súborov medzi infobázou a klientskou aplikáciou. Zvláštnosťou tohto mechanizmu je, že je navrhnutý na použitie v tenkom klientovi a webovom klientovi a je navrhnutý s ohľadom na obmedzenia práce so súbormi uložené webovými prehliadačmi.

    Mechanizmus je súbor metód, pomocou ktorých možno umiestniť údaje uložené lokálne na počítači používateľa do dočasného úložiska informačnej základne, preniesť tieto informácie z dočasného úložiska do databázy a prijať ich späť do počítača používateľa. Najčastejšími aplikačnými problémami riešenými týmto mechanizmom je ukladanie sprievodných informácií, napríklad obrázkov tovaru, dokumentov súvisiacich so zmluvami atď.

    Rozsah metódy

    Dočasné uloženie

    Dočasné úložisko je špecializovaná oblasť informačnej základne, do ktorej možno umiestniť binárne údaje. Hlavným účelom je dočasné ukladanie informácií počas interakcie klient-server pred ich prenosom do databázy.

    Potreba dočasného úložiska vzniká, pretože prevádzkový model webového prehliadača vyžaduje, aby užívateľom vybraný súbor bol prenesený priamo na server bez možnosti jeho uloženia na klientovi. Keď sa súbor prenesie, uloží sa do dočasného úložiska a potom sa dá použiť pri zápise objektu do databázy.

    Najtypickejšou aplikačnou úlohou riešenou dočasným úložiskom je poskytovanie prístupu k súborom alebo obrázkom predtým, ako je objekt zaznamenaný v informačnej databáze, napríklad vo forme prvku.

    Súbor alebo binárne údaje umiestnené v úložisku sú identifikované jedinečnou adresou, ktorú možno neskôr použiť pri operáciách zápisu, čítania alebo vymazania. Táto adresa je daná metódami zápisu súboru do dočasného úložiska. Samostatná metóda v zabudovanom jazyku vám umožňuje určiť, či odovzdaná adresa je adresou smerujúcou na údaje v dočasnom úložisku.

    Informačná základňa

    Mechanizmus umožňuje prístup k binárnym údajom uloženým v atribútoch typu Value Storage.

    Rovnako ako v prípade dočasného uloženia je prístup k informáciám možný prostredníctvom špeciálnej adresy. Môžete ho získať špeciálnou metódou odovzdaním odkazu na objekt alebo kľúča vstupu do registra informácií a názvu atribútu. V prípade tabuľkovej časti je navyše potrebné preniesť index riadku tabuľkovej časti.

    Metódy práce so súbormi majú obmedzenia pri práci s podrobnosťami infobáze. Pre nich je na rozdiel od dočasného úložiska k dispozícii iba čítanie informácií, ale nie ich zapisovanie ani mazanie.

    Popis metód práce so súbormi

    Ukladanie údajov do dočasného úložiska

    Najtypickejší scenár použitia tohto mechanizmu zahŕňa počiatočné umiestnenie používateľských údajov do dočasného úložiska. Existujú na to dve metódy: PlaceFile() a PlaceFileInTemporaryStorage().

    Prvá metóda, PlaceFile(), umiestni súbor z lokálneho súborového systému do dočasného úložiska. Metóda môže prijať cieľovú adresu v úložisku. Ak nie je definovaný alebo je prázdny, vytvorí sa nový súbor a metóda vráti svoju adresu cez príslušný parameter.

    Ak je parameter, ktorý určuje interaktívny režim prevádzky, True, potom metóda zobrazí štandardné dialógové okno výberu súboru, v ktorom môžete vybrať súbor, ktorý chcete uložiť. V tomto prípade metóda vráti aj adresu zvoleného súboru.

    Výsledkom je, že metóda vráti hodnotu False, ak používateľ interaktívne odmietol vykonať operáciu v dialógovom okne výberu súboru. Metóda je dostupná len u klienta.

    Druhá metóda, PlaceFileInTemporaryStorage(), je podobná predchádzajúcej, s tým rozdielom, že je dostupná na serveri a údaje, ktoré sa majú zapísať do dočasného úložiska, nie sú reprezentované ako cesta v súborovom systéme, ale ako premenná typu Binárne údaje. Podobne, ak nie je zadaná žiadna cieľová adresa, v úložisku sa vytvorí nový súbor. Jeho adresa sa vráti ako výsledok funkcie.

    Načítanie súboru z dočasného úložiska

    Pri zápise objektu do informačnej databázy možno budete musieť extrahovať údaje z dočasného úložiska a umiestniť ich napríklad do atribútu. Na to existuje zodpovedajúca serverová metóda - GetFileFromTemporaryStorage(). Táto metóda získava údaje z dočasného úložiska a v dôsledku toho ich vracia. Ak to chcete urobiť, musíte zadať adresu v dočasnom úložisku. Táto adresa je vrátená vyššie popísanými metódami PlaceFile() a PlaceFileInTemporaryStorage(), ak sú úspešne spustené.

    Odstránenie súboru z dočasného úložiska

    Po uložení údajov do podrobností je možné súbor v dočasnom úložisku vymazať. Na tento účel existuje metóda DeleteFileFromTemporaryStorage(), ktorá vymaže súbor z dočasného úložiska. Metóda berie ako parameter adresu súboru v dočasnom úložisku. Dostupné na serveri.

    Kontrola adresy pre dočasné uloženie

    Adresa súboru môže označovať dočasné úložisko aj podrobnosti v informačnej databáze. Na kontrolu jeho typu existuje metóda This isTemporaryStorageAddress().

    Skontroluje, či odovzdaná adresa je adresou smerujúcou do obchodu. Ak adresa ukazuje na dočasné úložisko, vráti hodnotu True. Metóda je dostupná na serveri.

    Prijímanie adresy rekvizít

    Po umiestnení údajov do podrobností v informačnej databáze k nim možno budete musieť pristupovať pomocou súborových metód.

    Ale predtým, ako dostanete údaje, napríklad z nehnuteľnosti, musíte získať adresu tejto nehnuteľnosti. Na tento účel existuje metóda GetFileAddressInInformationBase().

    Jeho účelom je vrátiť adresu súboru v infobáze podľa pôvodných parametrov. Ak to chcete urobiť, musíte odovzdať kľúč objektu (môže to byť buď odkaz na objekt alebo kľúč vstupu do registra informácií) a názov atribútu. Ak potrebujete získať adresu súboru uloženého v atribúte tabuľkovej časti, pred názov atribútu v parametri určujúcom názov atribútu musíte pridať názov tabuľkovej časti a bodku „.“. Metóda je dostupná na klientovi aj na serveri.

    Načítanie súboru z informačnej databázy

    Metóda GetFile() prijme súbor z informačnej databázy a uloží ho do lokálneho systému súborov používateľa. Prvý parameter určuje adresu súboru v rekvizitách alebo dočasnom úložisku súborov. Druhý parameter určuje cieľové umiestnenie výsledného súboru. V neinteraktívnom režime musíte zadať cestu. V interaktívnom režime je parameter voliteľný.

    Štandardne sa metóda vykonáva v interaktívnom režime, to znamená, že posledný parameter je True. To znamená, že sa zobrazí dialógové okno, v ktorom môžete určiť akciu s prijatým súborom: spustiť ho alebo uložiť na miesto určené používateľom. Ak je aktívny interaktívny režim a nie je zadaný parameter Cesta k súboru cieľového disku, operácia otvorenia súboru nie je dostupná. Vráti boolovskú hodnotu. False znamená, že používateľ sa rozhodol zrušiť operáciu v dialógovom okne interaktívneho uloženia súboru.

    Príklad použitia súborových metód

    // Príjem súboru z disku v interaktívnom režime // a jeho umiestnenie do dočasného úložiska &Na klientskej procedúre SelectDiskFileAndWrite()

    Premenná SelectedName; VariableTemporaryStorageAddress; If PutFile(TemporaryStorageAddress, SelectedName, True) Then Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); koniec Ak;

    Koniec procedúry

    // Kopírovanie súboru z dočasného úložiska do adresára // atribút, zaznamenanie objektu, vymazanie súboru z dočasného // úložiska &Na server Postup Umiestniť súbor objektu (adresa dočasného úložiska)

    Element adresára = Form AttributesValue("Object"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); Element Directory.File Data = NewValueStorage(BinaryData); FilePathOnDisk = Nový súbor(DirectoryItem.FileName); Adresár Item.FileName = FilePathOnDisk.Name; Element adresára.Write(); Upravené = False; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueВFormAttributes(prvok adresára, "Objekt");

    Koniec procedúry

    // Čítanie súboru z rekvizít a jeho uloženie // na lokálny disk v interaktívnom režime &Na klientskej procedúre ReadFileAndSaveToDisk()

    Adresa = GetFileAddressInInformationBase(Object.Link, "FileData"); GetFile(Address, Object.FileName, True);

    Koniec procedúry

    Podpora adries v poli obrázka

    Ovládací prvok Pole obrázkov podporuje zobrazenie obrázka určeného adresou súboru v dočasnom úložisku alebo v databáze.

    Ak to chcete urobiť, musíte nastaviť atribút typu reťazca vo vlastnosti Data prvku formulára. Hodnota tohto atribútu bude interpretovaná ako adresa obrázka.

    Príklad // Väzba poľa obrázka s adresou obrázka v dočasnom // úložisku. AddressPictures tvoria podrobnosti o type reťazca

    PlaceFile(PictureAddress,True)

    Picture.Data = AddressPictures

    Obmedzenia pri práci s webovým klientom

    Prevádzka opísaného mechanizmu pri používaní webového klienta má určité obmedzenia. Tieto obmedzenia súvisia s bezpečnostným modelom prehliadača. Klient teda napríklad nemôže samostatne uložiť súbor do lokálneho súborového systému, to znamená, že je k dispozícii iba interaktívna verzia klientskych metód PlaceFile() a GetFile(). Pri pokuse o použitie neinteraktívneho režimu sa vyvolá výnimka. Dialógové okná, ktoré sa zobrazujú interaktívne, sú špecifické pre váš typ prehliadača.

    Funkcie pri práci s Value Storage na klientovi

    problém:

    Ak má dokument v tabuľkovej časti atribút typu Uloženie hodnoty, spomalí to otváranie formulára dokumentu, ak tento atribút obsahuje veľké množstvo údajov.

    Predpokladaný dôvod:

    Možno, že pri otváraní formulára sa klientovi neodošle odkaz na údaje nachádzajúce sa v obchode hodnôt, ale samotné údaje.

    Riešenie

    • Vo vlastnostiach atribútu tabuľky formulára je príznak "Vždy použiť". Ak je nastavené, obsah poľa sa vždy prenáša medzi serverom a klientom – napríklad pri otváraní formulára. Tento príznak musí byť zakázaný, ale musí sa to zohľadniť v kóde, pretože v predvolenom nastavení nebude mať toto pole na klientovi žiadnu hodnotu. Príklad nájdete v 1C:Archive.

    Ešte lepšie je použiť dočasné uskladnenie na prenos súborov medzi klientom a serverom.

    Tlačiť (Ctrl+P)

    16.3. Práca s binárnymi údajmi

    16.3.1. všeobecné informácie

    Pri implementácii aplikačných riešení môžu nastať situácie, kedy je potrebné analyzovať rôzne binárne dáta. Napríklad musíte určiť typ súboru pomocou podpisu alebo vykonať nejaké manipulácie s obrázkom. Na prácu s binárnymi údajmi poskytuje 1C:Enterprise špeciálne softvérové ​​rozhrania. Ďalej sa pozrieme na možnosti práce s binárnymi dátami.
    Celá práca s binárnymi údajmi je založená na koncepte streamu. Prietok je logické zovšeobecnenie ľubovoľného (vo všeobecnosti) zdroja údajov (objekt Stream). Systém neposkytuje možnosť vytvoriť nezávislý objekt Stream, ktorý nie je spojený so žiadnym zdrojom. Existujú však odvodené objekty, ktoré je možné vytvoriť – prúd spojený so súborom na disku (objekt FileStream) alebo prúd vytvorený v pamäti (objekt MemoryStream). Stream vám umožňuje čítať aj zapisovať údaje. Na určenie možnosti vykonania určitých operácií má prúd (a odvodené objekty) špeciálne metódy, ktoré vám umožňujú určiť, ktoré
    operácie sú dostupné s týmto vláknom (metódy AvailableRecord(), DostupnéPrečítanie(), AvailableChangePosition()).
    Ak potrebujete pracovať s prúdom na vyššej úrovni, najmä čítať/zapisovať dáta ako číslo (rôznej bitovej hĺbky) alebo reťazec, tak sú na to určené objekty DataRead/DataWrite. Pomocou týchto objektov môžete zaujať štruktúrovanejší prístup k binárnym údajom umiestneným v prúde. Napríklad, ak poznáte formát súboru, môžete takýto súbor celkom pohodlne prečítať, získať potrebné údaje z hlavičiek (ktoré sú spravidla reprezentované počtom typov a reťazcom), preskočiť nepotrebné bloky údajov a načítanie potrebných na spracovanie.
    Všeobecnú schému pre prácu s binárnymi údajmi možno znázorniť takto:

    1. Prebieha príjem streamu
    2. Vytvorí sa objekt Data Reader alebo Data Writer.
    3. Pomocou objektu vytvoreného v kroku 2 sa vykonajú požadované akcie.
    4. Objekt vytvorený v kroku 2 sa zatvorí.
    5. Ak nie sú potrebné žiadne ďalšie operácie, prúd získaný v kroku 1 sa uzavrie.
    6. Ak potrebujete pokračovať v práci so streamom, môžete nastaviť novú pozíciu v streame (ak je táto operácia podporovaná) a pokračovať v práci od kroku 2.

    Stojí za zmienku, že je možné kombinovať odseky 1 a 2. Inými slovami, systém poskytuje možnosť vytvárať objekty Čítanie údajov/zápis údajov priamo napríklad z objektu BinaryData.
    Na vykonávanie rôznych operácií s binárnymi údajmi systém poskytuje možnosť získať určitú časť toku ako samostatný fragment s náhodným (bajt po byte) prístupom (objekt BufferBinaryData). Veľkosť vyrovnávacej pamäte je nastavená pri vytváraní a nemožno ju neskôr zmeniť. Pri práci s binárnym dátovým bufferom je možné pracovať s číslami rôznych bitových hĺbok ako
    ako jeden celok. V tomto prípade je možné zadať poradie bajtov slovami: „little endian“ alebo „big endian“ (big endian). Je tiež možné rozdeliť jednu vyrovnávaciu pamäť na niekoľko a spojiť niekoľko vyrovnávacích pamätí binárnych údajov do jednej výslednej vyrovnávacej pamäte.
    Je dôležité poznamenať, že práca s vyrovnávacou pamäťou binárnych údajov môže výrazne zjednodušiť implementáciu, ak je práca s binárnymi údajmi implementovaná na strane klientskej aplikácie v asynchrónnom režime. V tomto prípade bude čítanie údajov do vyrovnávacej pamäte prebiehať ako asynchrónna operácia a práca s údajmi vyrovnávacej pamäte bude synchrónna.
    Práca s binárnymi dátami je dostupná na strane klienta (vrátane webového klienta) aplikácie a na strane servera, ako aj v synchrónnych a asynchrónnych pracovných schémach. Ďalšie príklady budú používať schému synchrónnej práce.

    16.3.2. Čítanie binárnych údajov

    Ako príklad čítania binárnych údajov zvážime úlohu určenia správneho formátu súboru, ktorý bol v systéme vybraný na ďalšie použitie. Ako kontrolovaný súbor sa použije súbor .wav so zvukovými údajmi. Na ukladanie súborov .wav sa používa formát RIFF (Resource Interchange File Format), ktorého popis je uvedený na odkaze:

    https://msdn.microsoft.com/enus/library/windows/desktop/ee415713.aspx (v angličtine). Pre príklad čítania sa použijú nasledujúce informácie o formáte:
    1. Prvé 4 bajty súboru obsahujú identifikátor formátu: RIFF.
    2. ďalšie 4 bajty obsahujú veľkosť skutočných zvukových dát v poradí bajtov little-endian.
    3. Nasledujúce 4 bajty obsahujú textový typ použitých údajov: WAVE.
    Na vykonanie týchto akcií budete potrebovať nasledujúci kód v zabudovanom jazyku:

    Čítať = Nové ReadData(FileName, ByteEndian.LittleEndian);
    FileFormat = Read.ReadCharacters(4);
    DataSize = Read.ReadInteger32();
    FileType = Read.ReadCharacters(4);
    Ak Formát súboru<>"RIFF" Potom
    Report("Toto nie je súbor RIFF");
    Návrat ;
    Koniec Ak ;
    Ak FileType = "WAVE" Potom
    Správa („Toto je súbor WAV s údajmi, veľkosť ” + DataSize + ” bajty”);
    Inak
    Správa („Toto nie je súbor WAV“);
    Návrat;
    koniec Ak;

    Pozrime sa na príklad podrobnejšie.
    Najprv sa otvorí súbor, ktorého názov je obsiahnutý v premennej FileName, súbor sa otvorí na čítanie ( FileOpenMode.Open), bude čítať iba zo súboru ( FileAccess.Read) a na čítanie sa použije 16-bajtová vyrovnávacia pamäť.
    Potom sa na čítanie dát vygeneruje stream, ktorý bude mať najmenej významné poradie bajtov pre dáta typu Číslo. Potom sa z výsledného toku načítajú 4 znaky, 32-bitové celé číslo a 4 ďalšie znaky. Výsledné dáta sa analyzujú a na základe výsledkov analýzy sa rozhodne, či vybraný súbor je súbor .wav alebo nie.

    16.3.3. Zápis binárnych údajov

    Zápis binárnych údajov do súboru sa v najjednoduchšom prípade vykonáva takto:

    Vstup = Nové WriteData (Názov súboru);
    Pre Index = 0 až 255 Cyklus
    Write.WriteByte(Index);
    EndCycle;
    Record.Close() ;

    Tento príklad zapíše do súboru sekvenciu bajtov od 0 do 255 (0xFF v šestnástkovej sústave). Toto je najjednoduchšia možnosť nahrávania.
    Môžete tiež použiť metódu podobnú metóde čítania diskutovanej v predchádzajúcom príklade, kde sa získava súborový prúd a údaje sa zapisujú do tohto súborového prúdu.

    16.3.4. Práca s vyrovnávacou pamäťou binárnych údajov

    Ako bolo uvedené vyššie, vyrovnávacia pamäť binárnych údajov poskytuje pohodlný spôsob manipulácie s fragmentmi binárnych údajov.
    Podporované je nielen čítanie dát, ale aj zápis.
    Ako príklad budeme uvažovať analýzu hlavičky súboru RIFF z príkladu čítania údajov (pozri tu). Na zostavenie príkladu sa použijú presne tie isté informácie o formáte súboru. Preto je potrebné zo zdrojového súboru načítať buffer veľkosti hlavičky súboru. Hlavička pozostáva z troch 4-bajtových polí. Preto je potrebné prečítať 12 bajtov.

    Buffer = Nový BufferBinaryData(12);
    Súbor = FileStreams.Open(Adresár dočasných súborov() + „Windows Logon.wav“, FileOpenMode.Open, FileAccess.Read);
    File.Read(Buffer, 0, 12);
    Veľkosť = Buffer.ReadInteger32(4);
    StreamString = newStreamInMemory(Buffer);
    StreamRows.Go(0, PositionInStream.Start);

    FileFormat = ReadLines.ReadCharacters(4, „windows-1251“);
    ReadLines.Close();
    StreamRows.Go(8, PositionInStream.Start);
    RowReader = new DataReader(RowStream);
    FileType = ReadLines.ReadCharacters( 4, „windows-1251“);
    ReadLines.Close();

    Proces získavania údajov do vyrovnávacej pamäte binárnych údajov nie je ničím výnimočným. Ďalšie operácie si vyžadujú niekoľko komentárov. Čítanie čísel akejkoľvek podporovanej bitovej hĺbky je možné z ľubovoľnej pozície vo vyrovnávacej pamäti. V tomto príklade Buffer.ReadInteger32(4); znamená čítanie 32-bitového celého čísla od bajtu 4 vyrovnávacej pamäte. Ak teda potrebujete prečítať viacero čísel umiestnených na rôznych miestach vo vyrovnávacej pamäti, môžete to urobiť bez priameho umiestnenia v tejto vyrovnávacej pamäti.
    Čítanie reťazca však vyrovnávacia pamäť binárnych údajov nepodporuje. Preto by ste mali použiť objekt, ktorý vám to umožňuje: Čítať dáta. Objekt DataReader nemožno vytvoriť z vyrovnávacej pamäte binárnych údajov. Ale na základe vyrovnávacej pamäte binárnych údajov môžete vytvoriť tok, ktorý je univerzálnym prostredníkom medzi miestom fyzického uloženia informácií (súbor, vyrovnávacia pamäť binárnych údajov) a objektom na vysokej úrovni, ktorý vám umožňuje s týmito údajmi pracovať.
    Keď je objekt DataReader vytvorený na základe prúdu, začne čítať údaje z pozície, ktorá je aktuálne nainštalovaná v prúde. Preto sa v príklade najprv nastaví pozícia v streame a potom sa vytvorí objekt DataReader a načíta sa potrebný počet znakov. Podrobný popis rozdielu medzi počtom bajtov a znakov pri čítaní reťazcov nájdete v ďalšej časti 16.3.5

    16.3.5. Vlastnosti použitia

    Pri používaní binárnych údajov by ste mali brať do úvahy vlastnosti práce s údajmi typu String. Zvláštnosťou je, že dĺžka reťazca, ktorý funkcia globálneho kontextu StrLength() vracia, sa meria v znakoch. V symboloch by ste mali uviesť veľkosť údajov, ktoré sa majú čítať/zapisovať v metódach zápisu/čítania reťazcov v objektoch na prácu s binárnymi údajmi ( ReadCharacters(),
    ReadString(), WriteCharacters(), WriteString()). Neexistuje však jednoznačná možnosť prevodu dĺžky reťazca v znakoch na podobný parameter v bajtoch. V závislosti od obsahu reťazca a kódovania sa tento pomer bude líšiť. Preto pri práci s akýmikoľvek dátovými štruktúrami, ktoré obsahujú reťazce premenlivej dĺžky, by ste mali jasne pochopiť, v akých jednotkách sú dĺžky reťazcov vyjadrené.
    Ak je v dostupných údajoch dĺžka reťazca uvedená v bajtoch a reťazec je špecifikovaný vo viacbajtovom kódovaní s premennou dĺžkou (napríklad UTF-8), potom pomocou binárnych dátových objektov načítaním takejto štruktúry zo súboru do údaje typu String sú vo všeobecnosti nemožné.
    Ale v tomto prípade môžete jednoducho zmeniť pozíciu čítania/zápisu v prúde súborov. Ak je dĺžka reťazca špecifikovaná v znakoch, potom je možné čítať takýto reťazec do údajov typu String, ale nie je možné zmeniť pozíciu čítania/zápisu v takomto toku.
    Ak chcete získať dĺžku reťazca v bajtoch, môžete použiť nasledujúcu funkciu na konverziu reťazca na objekt BinaryData:

    Funkcia Získajte binárne údaje z reťazca(Value StrParameter, Kódovanie hodnoty = „UTF-8“)
    MemoryThread = NewMemoryThread;
    Spisovateľ = Nový WriteData (StreamMemory);
    Writer.Write String(StrParameter, Kódovanie);
    Spisovateľ.Zavrieť();
    Vráti StreamMemory.CloseAndGetBinaryData();
    EndFunction

    Skutočnú veľkosť v bajtoch možno získať volaním funkcie Size() na objekte BinaryData, ktorý sa získa ako výsledok funkcie.
    Súčasné používanie predmetov sa neodporúča Čítanie údajov/zápis údajov a prúdové objekty. Ak medzi dvoma po sebe nasledujúcimi operáciami čítania z ReadData alebo dvoma po sebe nasledujúcimi operáciami zápisu do WriteData dôjde k zmene pozície v prúde, s ktorým objekty Ch pracujú ShadowData/WriteData– vygeneruje sa výnimka. Nasledujúci príklad teda demonštruje správnu zmenu polohy v toku pri zapisovaní údajov do toku:

    Stream = newStreamInMemory();

    WriteData.WriteString("Ahoj Svet!");
    WriteData.Close();
    Stream.Go (0, PositionInStream.Start);
    DataWrite = newDataWrite(Stream);
    WriteData.WriteString("Zbohom!");
    WriteData.Close();
    Nasledujúci príklad ahoj na vyvolanú výnimku:

    Stream = NewStreamInMemory();

    WriteData.WriteString("Ahoj, svet!");
    Stream.Go(0, PositionInStream.Start);
    // Ďalší riadok vyvolá výnimku
    WriteData.WriteString("Dovidenia!");
    Zároveň sú možné situácie, keď správanie systému bude nesprávne, ale nebudú sa generovať žiadne chyby:

    Stream = GetStream();
    ReadData = new ReadData(Stream);
    TestString = ReadData.Read();
    InitialPosition = Stream.CurrentPosition();
    DataWrite = newDataWrite(Stream);
    WriteData.WriteString(“Neočakávaný reťazec”);
    WriteData.Close();
    Stream.Go(InitialPosition, PositionInStream.Start);
    // Vo všeobecnosti nie je možné určiť, aká hodnota bude umiestnená v premennej TestString2
    TestLine2 = ReadData.ReadLine();

    Správanie opísané v tejto časti je spôsobené o Objekty Data Reader/Data Writer používajú pri práci s prúdom svoje vlastné vyrovnávacie pamäte. V dôsledku toho sa skutočná poloha vlákna líši od logickej polohy, ktorá sa vytvára v dôsledku dokončených operácií.
    Taktiež nie je podporované súčasné používanie objektov Data Reader a Data Writer, ktoré na svoju prácu používajú jedno vlákno.

    Binárne dáta v 1C sú určené na ukladanie súborov ľubovoľného formátu. S ich pomocou môžete:

    • Organizujte interakciu pomocou binárneho protokolu s rôznymi zariadeniami;
    • Ukladať súbory ľubovoľných formátov ako atribúty objektu metadát;
    • Prevod textových údajov na binárne (najčastejšie používané na odosielanie správ);
    • Práca s binárnymi údajmi v pamäti.

    Čo systém dokáže

    Pri práci s binárnymi údajmi môže Platforma 8.3 vykonávať nasledujúce akcie:

    1. Čítanie a zápis binárnych údajov;
    2. Presuňte údaje z klienta na server a späť pomocou dočasného úložiska;
    3. Inicializujte objekt typu „Obrázok“ pomocou binárnych súborov;
    4. Prečítajte si ich z World Wide Web pomocou objektov „Mail Attachment“, „HTTP Connection“ atď.
    5. Používajte kryptografické nástroje na šifrovanie a podpisovanie dôležitých príloh;
    6. Pomocou objektu „Hashovanie údajov“ vypočítajte hašovaciu funkciu.

    Ukladanie údajov do detailov

    Vytvorte si napríklad adresár v testovacej konfigurácii.

    V skutočnosti je použitie rovnakého adresára na ukladanie informácií o nomenklatúre a binárnych obrazových údajoch trochu nesprávne. Pri dostatočne veľkých objemoch dát a ťažkých, veľkých súboroch môže dochádzať k nechceným prestojom a „brzdám“ v prevádzke systému. Z hľadiska systému by bolo oveľa správnejšie usporiadať samostatný adresár „Obrázky“, na ktorý by sme mohli nastaviť odkaz ako typ rekvizít.


    Je dôležité poznamenať, že vzhľadom na skutočnosť, že atribúty typu „ValueStorage“ obsahujúce binárne údaje nie sú dostupné v režime riadenej aplikácie, je možné k nim pristupovať iba pomocou metódy FormAttributesValue.


    Pole správy predstavuje binárny dátový záznam uloženia hodnôt.

    Čítanie údajov z rekvizít

    Vytvorme spracovanie, ktoré vypíše súbor uložený v binárnej forme v našej konfigurácii do tabuľkového dokumentu (je to potrebné napr. na tlač loga firmy).


    V podstate je to všetok kód, ktorý potrebujeme. Pomocou operátora Get() načítame binárne dáta uložené v príslušnom atribúte adresára a prenesieme ich do objektu „Picture“, ktorý sa zobrazí v ľavej hornej bunke tabuľkového dokumentu formulára (obr. 9).

    Obr.9

    Konverzia dát

    Nie je to bežné, ale stáva sa, že pri práci s neštandardnými ústredňami s externými systémami je potrebné previesť dáta z binárneho formátu do formátu Base64 alebo naopak.

    Vo väčšine prípadov platforma automaticky konvertuje údaje; ak sa tak nestane, musíte použiť globálne funkcie prekladu:

    1. Base64String – prevedie zadanú hodnotu na reťazec zodpovedajúceho kódovania;
    2. Base64Value – vykoná spätnú konverziu.

    Optimalizácia vyššie uvedeného kódu

    Kód uvedený na Obr. 4 určite funguje, ale s jednou významnou výhradou: ak je vo vlastnostiach konfigurácie zaškrtnuté políčko „Modality use mode“ (Obr. 10). V opačnom prípade spôsobí jeho použitie chybu.
    Obr.10

    Aby ste tomu zabránili, v module formulára prvku adresára prejdite do ponuky Text->Refaktoring->Zastarané synchrónne volania->Konvertovať volania modulu.

    Po určitom čase sa synchrónne hovory automaticky skonvertujú na asynchrónne a kód bude mať tvar (obr. 11)

    Obr.11

    Implementované vo verzii 8.3.10.2168.

    Postupne zvyšujeme funkcionalitu pre prácu s binárnymi dátami. Má to viacero dôvodov. Po prvé, nerealizovali sme všetko, čo sme plánovali. A po druhé, v procese diskusie o nových príležitostiach sme od vás dostali množstvo prianí, ktoré sme sa rozhodli aj zrealizovať.

    Nové funkcie na konverziu binárnych dát do rôznych formátov

    V globálnom kontexte sme pridali veľké množstvo nových funkcií na konverziu binárnych dát. Môžete teda napríklad vykonať doprednú a spätnú konverziu binárnych údajov na bežný reťazec, formátovací reťazec Základ 64 a formátovací reťazec BinHex. Okrem toho môžete konvertovať samotné binárne dáta do formátov Základ 64, BinHex a späť.

    Pre typ sú podporované podobné konverzie BufferBinaryData. Okrem toho môžete konvertovať vyrovnávaciu pamäť binárnych údajov na binárne údaje a naopak.

    Dve nové funkcie navyše umožňujú rozdeliť binárne dáta na niekoľko častí a naopak, spojiť niekoľko objektov typu Binárne údaje do jedného. V tomto prípade bude nový objekt obsahovať údaje všetkých častí v poradí, ktoré určíte.

    Tieto funkcie sú svojou koncepciou podobné rozdeľovaniu a spájaniu súborov, no v mnohých prípadoch sú efektívnejšie. Pretože nie je potrebné najskôr ukladať binárne dáta do súboru a pretože nedochádza k zbytočnému kopírovaniu dát pri delení.

    Pridanie možnosti pracovať s prúdmi do objektov, ktoré pracujú so súbormi

    Keďže používanie binárnych dát vo veľkej miere súvisí so súborovými operáciami, považovali sme za úplne logické a prirodzené pridať prácu s prúdmi aj tým objektom, ktoré v súčasnosti čítajú a zapisujú súbory tak či onak.

    Výsledkom je, že teraz môžete otvárať prúdy na čítanie a zápis pri použití objektov, ako sú:

    • Čítanie textu A WriteText;
    • ReadingFastInfoSet A EntryFastInfoSet;
    • Čítanie HTML A PostHtml;
    • Čítanie JSON A Vstup JSON;
    • Čítanie XML A Vstup XML;
    • Čítanie súboru ZIP A Nahrať súbor ZIP.

    Pri práci s HTTP môžete telo prijať ako stream:

    • HTTPRequest A HTTPResponse;
    • HTTPServiceRequest A HTTPServiceResponse.
    • Textový dokument;
    • TabularDocument;
    • Formátovaný dokument;
    • GeographicalScheme;
    • GraphicScheme;
    • FTP pripojenie.

    Pri práci s typmi je teraz k dispozícii zápis do streamu Obrázok A ConvertToCanonicalXML. A okrem toho je teraz práca s prúdmi podporovaná rôznymi metódami, ktoré typy majú Konverzia XSL, Správca kryptografie, CertifikátKryptografia A HashingData.

    Efektívne kopírovanie čítaním a zapisovaním údajov

    Binárne nástroje, ktoré sme implementovali, umožnili kopírovať streamy. Pri veľkých objemoch údajov však táto operácia nebola vykonaná veľmi efektívne.

    Preto typ ReadData zaviedli sme novú metódu CopyB(). Nielenže tento problém odstraňuje, ale aj zjednodušuje text, vďaka čomu je zrozumiteľnejší.

    Napríklad predtým bolo možné prijímať binárne dáta z jedného streamu a zapisovať ich do iného streamu.

    Teraz nie je potrebné prijímať binárne dáta, kopírovanie prebieha vo fáze čítania dát.

    Sympatické je, že kopírovať môžete nielen do streamu, ale aj do objektu WriteData. Táto možnosť je vhodná, keď okrem údajov zo zdrojového toku potrebujete do výstupného toku zapísať aj nejaké vlastné údaje.

    Bitové logické operácie na vyrovnávacej pamäti binárnych údajov

    Teraz môžete pri práci s vyrovnávacími pamäťami binárnych údajov používať bitové logické operácie. V dôsledku týchto operácií sa výsledok bitovej kombinácie pôvodných bajtov a bajtov v danom bufferi zapíše do zdrojového buffera podľa pravidiel zvolenej logickej operácie. Realizovali sme tieto operácie:

    • WriteBitAnd();
    • WriteBitOr();
    • WriteBitExclusiveOr();
    • WriteBitIne();
    • Invert().

    Dobrým príkladom použitia bitových logických operácií je úloha dekódovania výmenného formátu pomocou maloobchodných zariadení. Napríklad výmenný formát s maloobchodným vybavením je opísaný 1-bajtovým poľom. Toto pole obsahuje súbor charakteristík popisujúcich sortiment:

    • Bity 0-2: sadzba dane;
    • Bit 3: 0 - kusový tovar, 1 - hmotnosť tovaru;
    • Bit 4: 0 - povolenie predaja, 1 - zákaz predaja;
    • Bit 5: 0 - zapnutie počítania množstva, 1 - vypnutie počítania množstva;
    • Bit 6: 0 - jednorázový predaj je zakázaný, 1 - jednorázový predaj je povolený;
    • Bit 7: Vyhradené.

    Potom môže kód, ktorý extrahuje tieto informácie a prezentuje ich vo forme vhodnej na ďalšie spracovanie, vyzerať takto.

    Získanie čísla z hexadecimálnych a binárnych literálov

    • NumberFromHexString();
    • NumberFromBinaryString().

    Binárne literály sú užitočné na definovanie masiek, keď sa používajú v spojení s bitovými operáciami. Napríklad v predchádzajúcom príklade s analýzou formátu výmeny s komerčným zariadením sú masky špecifikované pomocou desatinných čísel. To nie je príliš pohodlné, pretože pri písaní a čítaní kódu musíte neustále mentálne prekladať desatinné číslo do binárneho systému.

    Oveľa pohodlnejšie je namiesto toho použiť binárne literály. Kód sa zároveň stáva prehľadnejším a výrazne sa znižuje pravdepodobnosť chýb.

    Hexadecimálne literály sú vhodné na použitie pri analýze technických formátov: obrazové, zvukové, video formáty.

    Zmeny v technológii externých komponentov NativeAPI

    Predtým existovalo množstvo obmedzení pri prenose binárnych údajov medzi 1C:Enterprise a externým komponentom. Napríklad bolo nemožné preniesť binárne dáta na externý komponent a pri práci vo webovom klientovi bola výmena binárnych dát vo všeobecnosti nemožná.

    Teraz všetky tieto obmedzenia odstraňujeme. Binárne dáta si môžete vymieňať oboma smermi a dokonca aj vo webovom klientovi.

    To nijako neovplyvní fungovanie existujúcich externých komponentov. Budú fungovať ako doteraz. Ale v novovytvorených komponentoch teraz môžete odovzdávať objekty ako parametre Binárne údaje.