Ako previesť binárne údaje na 1 s. Práca s binárnymi dátami

Binárne údaje v 1C sú navrhnuté tak, aby ukladali súbory akéhokoľvek formátu. S ich pomocou môžete:

  • Organizujte interakciu pomocou binárneho protokolu s rôznymi zariadeniami;
  • Ukladajte súbory ľubovoľného formátu ako atribút objektu metadát;
  • Konvertujte textové údaje na binárne (najčastejšie sa používajú 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 je platforma 8.3 schopná vykonávať nasledujúce činnosti:

  1. Čítať a zapisovať binárne údaje;
  2. Presúvajte ú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 „Post Attachment“, „NTTRC Connection“ atď.
  5. Na šifrovanie a podpisovanie dôležitých príloh používajte kryptografické nástroje;
  6. Vypočítajte hašovaciu funkciu pomocou objektu Data Hash.

Ukladanie údajov do rekvizít

Vytvorme napríklad referenciu v konfigurácii testu.

V skutočnosti je trochu nesprávne používať ten istý adresár na ukladanie informácií o nomenklatúre a binárnych údajoch obrázkov. Pri dostatočne veľkom množstve dát a ťažkých súboroch veľkej veľkosti môže dôjsť k nechceným prestojom a „brzdám“ pri prevádzke systému. Oveľa správnejšie by bolo z pohľadu systému zorganizovať samostatnú príručku „Obrázky“, ktorej odkaz by sme mohli nastaviť ako typ atribútu.


Je dôležité poznamenať, že vzhľadom na skutočnosť, že atribúty typu „ValueStore“ obsahujúce binárne údaje nie sú k dispozícii v režime spravovanej aplikácie, je prístup k nim možný iba pomocou metódy FormAttributeValue.


Pole správy predstavuje binárny dátový záznam úložiska hodnôt.

Čítanie údajov z rekvizít

Vytvorme spracovanie, ktoré vygeneruje súbor uložený v našej binárnej forme v našej konfigurácii do tabuľkového dokumentu (je to potrebné napríklad na vytlačenie loga spoločnosti).


V zásade je to celý kód, ktorý potrebujeme. Pomocou operátora Get () prečítame binárne údaje uložené v zodpovedajúcom atribúte referencie a prenesieme ich do objektu „Obrázok“, ktorý sa zobrazí v ľavej hornej bunke tabuľkového dokumentu formulára (obr. 9).

Obr

Transformácia údajov

Nestáva sa to často, ale stáva sa, že pri práci s neštandardnými výmenami s externými systémami je potrebné prevádzať údaje z binárneho formátu do formátu Base64 alebo naopak.

Vo väčšine prípadov platforma nezávisle transformuje údaje, ak sa tak nestane, musíte použiť funkcie globálneho prekladu:

  1. Base64String - preloží zadanú hodnotu do reťazca zodpovedajúceho kódovania;
  2. Hodnota Base64 - robí opačnú konverziu.

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

Kód zobrazený na obr. 4 určite funguje, ale s jednou významnou výhradou: ak je vo vlastnostiach konfigurácie začiarknuté políčko „Režim používania režimu“ (obr. 10). V opačnom prípade jeho použitie spôsobí chybu.
Obr

Aby ste tomu zabránili, v module vo forme referenčného prvku prejdite do ponuky Text-> Refaktoring-> Zastarané synchrónne hovory-> Konvertovať hovory modulu.

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

Obr

Technologická platforma 1C: Enterprise 8 vám umožňuje ukladať ľubovoľné súbory do informačnej základne, prijímať ich odtiaľ a používať ich rôznymi spôsobmi. Uvažujme tieto operácie s príkladmi.

Pred stiahnutím súboru na informačnú základňu 1C musíte získať úplnú adresu súboru na disku. Práca s dialógmi na výber súborov je popísaná v.

Na ukladanie súborov použite atribút (alebo prostriedok registrácie) s typom Hodnoty úložiska.

Odovzdanie ľubovoľného súboru na informačnú základňu 1C

Akýkoľvek súbor môže byť reprezentovaný ako binárne údaje a načítaný do Obchod s hodnotami.

Pri prevode binárnych údajov na objekt Hodnoty úložiska konštrukcia je použitá newValueStore (údaje, kompresia) s dvoma parametrami:

  1. Údaje- binárne údaje, ktoré sa majú uložiť
  2. Kompresia- kompresný pomer deflačného algoritmu. Celé číslo v rozsahu -1 ... 9. -1 je predvolený kompresný pomer. 0 - žiadna kompresia, 9 - maximálny kompresný pomer. Predvolená hodnota: -1. Parameter je voliteľný; ak nie je zadaný, nepoužije sa žiadna kompresia.

// Previesť súbor na binárne údaje
Súbor = New BinaryData (Path);

// Vytvorte nový objekt StoreValues

Úložisko údajov = Nové úložisko hodnôt (súbor, nová kompresia údajov (9));

Uloženie ľubovoľného súboru z informačnej základne 1C na disk

Ak chcete uložiť súbor z databázy 1C na disk, musíte určiť cestu a názov súboru. Na to slúži dialógové okno na ukladanie súborov, ktorého práca je popísaná v.

// Získajte binárne údaje z úložiska
// DataStore - atribút objektu s typomValuesStorage

// Zapíšte prijaté údaje na disk
// Premenná Cesta obsahuje úplnú adresu súboru na disku
Údaje. Napíšte (cesta);

Zobrazenie súboru umiestneného na informačnej základni 1C

Ak chcete zobraziť súbor uložený v databáze, musí byť v počítači nainštalovaná aplikácia, ktorá tento súbor otvára.

// Získať názov dočasného súboru s požadovanou príponou
// Do premennej Prípona zadajte príponu súboru, napríklad „pdf“
Cesta = GetTemporaryFileName (rozšírenie);

// Získajte údaje z úložiska
// DataStore - atribút objektu s typomValuesStorage
Data = Data Store. Získať ();

// Zapisujte údaje do dočasného súboru
Údaje. Napíšte (cesta);

// Pokus o otvorenie súboru v zamýšľanej aplikácii
// Ak sa aplikácia nenájde, zobrazí sa systémové dialógové okno „Otvoriť pomocou ...“
Spustiť aplikáciu (cesta);

Tlačiť (Ctrl + P)

16.3. Práca s binárnymi dátami

16.3.1. všeobecné informácie

Pri implementácii aplikovaných riešení sú možné situácie, keď je potrebné analyzovať rôzne binárne údaje. Napríklad je potrebné určiť typ súboru podľa podpisu alebo vykonať určité manipulácie s obrázkom. Na prácu s binárnymi údajmi poskytuje 1C: Enterprise špeciálne softvérové ​​rozhrania. Ďalej zvážime možnosti práce s binárnymi údajmi.
Celá práca s binárnymi údajmi je založená na koncepte streamu. Prietok Je logickou generalizáciou ľubovoľného (vo všeobecnom prípade) zdroja údajov (objekt streamu). Systém neposkytuje príležitosť na vytvorenie nezávislého objektu Stream, ktorý nie je spojený so žiadnym zdrojom. Existujú však odvodené objekty, ktoré môžete vytvoriť - stream spojený so súborom na disku (objekt FileStream) alebo prúd vytvorený v pamäti (objekt MemoryStream). Stream umožňuje čítanie aj zápis údajov. Na určenie možnosti vykonávania určitých operácií má stream (a odvodené objekty) špeciálne metódy, ktoré vám umožňujú určiť, ktoré
v tomto prúde sú k dispozícii operácie (metódy AvailableRecord (), AvailableRead (), AvailableChangePosition ()).
Ak je potrebné pracovať s prúdom na vyššej úrovni, najmä na čítanie / zápis údajov, ako je číslo (rôzna bitová šírka) alebo reťazec, potom sú na to určené objekty ReadData / WriteData. Pomocou týchto objektov je možné pristupovať k binárnym dátam umiestneným v prúde štruktúrovanejším spôsobom. Napríklad, keď poznáte formát súboru, môžete taký súbor celkom pohodlne prečítať, získať potrebné údaje z hlavičiek (ktoré sú spravidla reprezentované počtom a typmi reťazcov), preskočiť nepotrebné dátové bloky a načítanie údajov potrebných na spracovanie.
Všeobecnú schému práce s binárnymi údajmi je možné znázorniť nasledovne:

  1. Prijímajúci stream
  2. Vytvorí sa objekt na čítanie alebo zapisovanie údajov.
  3. S pomocou objektu vytvoreného v kroku 2 sa vykonajú požadované akcie.
  4. Objekt vytvorený v kroku 2 je zatvorený.
  5. Ak nie sú potrebné žiadne ďalšie operácie, prúd získaný v kroku 1 sa uzavrie.
  6. Ak chcete pokračovať v práci so streamom, môžete v streame nastaviť novú pozíciu (ak je táto operácia podporovaná) a pokračovať v práci od kroku 2.

Stojí za zmienku, že je možné kombinovať doložky 1 a 2. Inými slovami, systém poskytuje možnosť vytvárať objekty ReadData / WriteData 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ť streamu ako samostatný fragment s náhodným (bajtovým) 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árnou vyrovnávacou pamäťou údajov je možné pracovať s číslami rôznych číslic ako s
ako jeden celok. V takom prípade je možné určiť poradie bajtov slovami: „malý endian“ alebo „veľký endian“. Je tiež možné rozdeliť jednu vyrovnávaciu pamäť na niekoľko a kombinovať viac 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 takom prípade bude čítanie údajov do vyrovnávacej pamäte vykonávané asynchrónne a práca s údajmi vo vyrovnávacej pamäti je synchrónna.
Práca s binárnymi údajmi je k dispozícii na strane klienta (vrátane webového klienta) aplikácie a na strane servera, ako aj v synchrónnych a asynchrónnych schémach. Ďalšie príklady použijú synchrónnu schému práce.

16.3.2. Čítanie binárnych údajov

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

https://msdn.microsoft.com/enus/library/windows/desktop/ee415713.aspx (v angličtine). Pre príklad čítania budú použité nasledujúce formátové údaje:
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 údajov v bajtovom poradí endian.
3. nasledujúce 4 bajty obsahujú textový typ použitých údajov: WAVE.
Na vykonanie týchto krokov potrebujete nasledujúci vložený kód:

Čítanie = Nové ReadData (FileName, Byte Order.LittleEndian);
Formát súboru = Prečítajte si. Prečítajte si symboly(4);
DataSize = Read.ReadInteger32();
Typ súboru = Read.ReadSymbols(4);
Ak je formát súboru<>„RIFF“ Potom
Správa („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ťou“ + veľkosť údajov + „bajty“);
Inak
Správa („Toto nie je súbor WAV“);
Návrat;
Koniec Ak;

Uvažujme príklad podrobnejšie.
Najprv sa otvorí súbor, ktorého názov je obsiahnutý v premennej FileName, súbor sa otvorí na čítanie ( Režim otvorenia súboru.), budú čítať iba zo súboru ( Prístup k súboru. Prečítajte si) a na čítanie bude použitý 16-bajtový buffer.
Potom sa vytvorí prúd určený na čítanie údajov, ktoré budú pre údaje typu Číslo v najmenej významnom bajtovom poradí. Potom sa z výsledného prúdu načítajú 4 znaky, 32-bitové celé číslo a 4 ďalšie znaky. Výsledné údaje sa analyzujú a na základe výsledkov analýzy sa rozhodne, či je vybraný súbor vo formáte .wav alebo nie.

16.3.3. Zápis binárnych údajov

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

Vstup = nový Záznam údajov (názov súboru);
Pre index = 0 až 255 cyklov
Write.WriteByte (index);
Koniec cyklu;
Record.Close ();

Tento príklad zapisuje do súboru sekvenciu bajtov od 0 do 255 (0xFF v hexadecimálnom formáte). Toto je najjednoduchšia možnosť nahrávania.
Môžete tiež použiť metódu podobnú metóde čítania popísanej v predchádzajúcom príklade, keď je prijatý tok súborov a do tohto toku súborov sú zapísané údaje.

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

Ako bolo uvedené vyššie, vyrovnávacia pamäť binárnych údajov poskytuje pohodlný spôsob manipulácie s kusmi binárnych údajov.
Podporované je nielen čítanie údajov, ale aj zápis.
Ako príklad zvážime analýzu záhlavia súboru RIFF z príkladu čítania údajov (pozri tu). Na zostavenie príkladu budú použité presne rovnaké informácie o formáte súboru. Preto je potrebné zo zdrojového súboru načítať vyrovnávaciu pamäť o veľkosti hlavičky súboru. Hlavička sa skladá z troch 4-bajtových polí. Preto je potrebné prečítať 12 bajtov.

Buffer = nový BufferBinaryData(12);
Súbor = FileStreams.Open (TempFile Directory() + „Windows Logon.wav“, Režim otvorenia súboru., Prístup k súboru. Prečítajte si);
File.Read (Buffer, 0, 12);
Veľkosť = Buffer.ReadInteger32(4);
LineStream = NewMemoryStream (vyrovnávacia pamäť);
StreamStrings.Go(0, PositionInStream.Start);

Formát súboru = ReadStrings.ReadSymbols(4, „okná-1251“);
ReadLines.Close();
StreamStrings.Go(8, PositionInStream.Start);
LineReader = NewDataReader (LineStream);
Typ súboru = ReadStrings.ReadCharacter ( 4, „windows-1251“);
ReadLines.Close();

Proces získavania údajov do vyrovnávacej pamäte binárnych údajov nie je ničím zvláštnym. Ďalšie operácie si vyžadujú niekoľko pripomienok. Čítanie čísiel akejkoľvek podporovanej šírky bitu je možné z akejkoľvek polohy vo vyrovnávacej pamäti. V tomto prípade Buffer.ReadInteger32 (4); znamená čítanie 32-bitového celého čísla začínajúceho na 4 bajtoch vyrovnávacej pamäte. Ak je teda potrebné prečítať niekoľko čísel umiestnených na rôznych miestach vyrovnávacej pamäte, môže sa to uskutočniť 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žní: Čítanie údajov. Objekt DataReader nemožno vytvoriť na základe vyrovnávacej pamäte binárnych údajov. Ale na základe vyrovnávacej pamäte binárnych údajov môžete vytvoriť stream, ktorý je univerzálnym sprostredkovateľom medzi umiestnením fyzického úložiska informácií (súbor, binárna vyrovnávacia pamäť) a objektom na vysokej úrovni, ktorý vám umožní pracovať s týmito údajmi.
Keď je objekt DataReader vytvorený na základe streamu, začne čítať údaje z pozície, ktorá je v streame aktuálne nastavená. Preto sa v tomto prípade v príklade najskôr nastaví pozícia v prúde a potom sa vytvorí objekt DataReader a načíta sa požadovaný 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žití binárnych údajov by ste mali vziať do úvahy zvláštnosti práce s údajmi typu String. Zvláštnosťou je, že dĺžka reťazca vráteného globálnou kontextovou funkciou StrLength () sa meria v znakoch. V symboloch by mali byť veľkosti údajov na čítanie / zápis uvedené v metódach zápisu / čítania riadkov v objektoch na prácu s binárnymi údajmi ( Symboly na čítanie (),
ReadString (), Napíšte symboly (), WriteString ()). Súčasne neexistuje 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 bude tento pomer odlišný. Pri práci s akýmikoľvek dátovými štruktúrami, ktoré obsahujú reťazce s premenlivou dĺžkou, by ste preto 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 zadaný vo viacbajtovom kódovaní s variabilnou dĺžkou (napríklad UTF-8), potom je pri použití objektov na prácu s binárnymi údajmi spravidla nemožné načítať takú štruktúru zo súboru do údajov typu String.
V tomto prípade však môžete ľahko zmeniť pozíciu čítania / zápisu v prúde súborov. Ak je dĺžka reťazca špecifikovaná v znakoch, potom je možné takýto reťazec načítať do údajov typu String, ale v takom prúde nie je možné zmeniť pozíciu na čítanie / zápis.
Ak chcete zistiť dĺžku reťazca v bajtoch, môžete použiť nasledujúcu funkciu na konverziu reťazca na objekt BinaryData:

Funkcia GetBinaryDataFromString(Hodnota StrParameter, kódovanie hodnoty = "UTF-8")
Memory Stream = Nový prúd pamäte;
Spisovateľ = Nový Zápis dát (Stream pamäte);
Writer.WriteString(StrParameter, kódovanie);
Spisovateľ. Zavrieť();
Vráťte StreamMemory.Close & GetBinaryData();
EndFunction

Skutočnú veľkosť v bajtoch je možné 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 ReadData / WriteData a streamované objekty. Ak medzi dvoma sekvenčnými operáciami čítania z ReadData alebo dvoma sekvenčnými operáciami zápisu na WriteData dôjde k zmene polohy v prúde, s ktorou objekty H Streamovanie údajov / zápis údajov- vyvolá sa výnimka. Nasledujúci príklad teda ukazuje správnu zmenu polohy v streame pri zápise údajov do streamu:

Stream = New StreamInMemory ();

WriteData.WriteString(„Hello World!“);
Záznam údajov. Zatvorte();
Stream.Go (0, PositionInStream.Start);
Záznam údajov = nový záznam údajov (stream);
WriteData.WriteString("Zbohom!");
Záznam údajov. Zatvorte();
Nasledujúci príklad ahoj vyvolal výnimku:

Stream = New StreamInMemory ();

WriteData.WriteStrok („Ahoj, svet!“);
Stream.Go (0, PositionInStream.Start);
// Ďalší riadok vyvolá výnimku
WriteData.WriteStrok („Ahoj!“);
Súčasne sú možné situácie, keď bude správanie systému nesprávne, ale nebudú generované žiadne chyby:

Stream = GetStream ();
ReadData = Nová ReadData (stream);
TestString = ReadData.Read ();
SourcePosition = Stream.CurrentPosition ();
Záznam údajov = nový záznam údajov (stream);
WriteData.WriteString ("Neočakávaný reťazec");
Záznam údajov. Zatvorte ();
Stream.Go (StartPosition, PositionInStream.Start);
// Vo všeobecnosti nie je možné určiť, aká hodnota bude umiestnená v premennej TestString2
TestString2 = ReadData.ReadString ();

Správanie popísané v tejto časti je spôsobené tým, že o Objekty ReadData / WriteData používajú pri práci so streamom svoje vlastné vyrovnávacie pamäte. V dôsledku toho sa skutočná poloha toku líši od logickej polohy, ktorá sa tvorí v dôsledku vykonaných operácií.
Nie je podporované ani súčasné používanie objektov na čítanie a zapisovanie údajov, ktoré na svoju prácu používajú jedno vlákno.

Do úložiska hodnôt je možné uložiť takmer všetky informácie, napríklad

... obrázky (obrázky):

TekImage.Object = SprFabric.Link; TekImage.DataType = Enumerations.AdditionalInformationTypesObjects.Image; Storage = New StorageValue (New Picture, New Data Compression ()); TekImage.Storage = Storage.Get ();

// na tomto mieste zobrazuje všetko ... Form Elements.PictureField1.Picture = Storage.Get (); TekImage.Write ();

... tabuľkový dokument:

TabDoc = Nový tabuľkový dokument; TabDoc.Output (Form Elements.TableDocumentField1); Ukladací priestor = nové ukladanie hodnôt (TabDoc); Napíšte ();

Koniec postupu

Postup Obnovenie z úložiska Stlačte (položka)

TabDoc = Storage.Get (); Ak TabDoc<>Nedefinované potom FormElements.TableDocumentField1.Output (TabDoc); Koniec Ak;

Koniec postupu

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

HZ = NewValueStore (New BinaryData (súbor));

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

HZ = NewValueStore (New BinaryData (súbor), New DataCompression (9));

... externé spracovanie a reporting:

Procedúra LoadProcessingIn Storage (Props StorageType)

Stupeň kompresie = nová kompresia údajov (9); // 9 maximum PropsStorageType = NewValueStore (New BinaryData ("c: \ reports \ report.epf", Compression Degree));

Koniec postupu

Procedúra Spustiť Spracovanie Z úložiska (rekvizita Typ úložiska)

TempFileName = TempFileDir () + "report.epf"; BinaryData = PropsTypeStorage.Get (); BinaryData.Write (TemporaryFileName); ExternalProcessing = ExternalProcessing.Create (TemporaryFileName); ExternalProcessing.GetForm (). Open ();

Koniec postupu

Práca s úložiskom

Ak to bola BinaryData, potom ju možno obnoviť z úložiska hodnôt pomocou metódy Get a zapísať do súboru metódou Write ().

Ak TypeZnch (úložisko)<>Potom zadajte („BinaryData“)

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ý súbor registrovaného typu), je možné ho otvoriť takto:

Spustite aplikáciu (názov súboru);

Ak chcete vymazať pole typu Úložisko hodnôt, musíte ho priradiť Nedefinované:

Ukladanie rekvizít = nedefinované;

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

Vymenovanie

Spravovaná aplikácia má nový mechanizmus na 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 zameraný na použitie v tenkom klientovi a vo webovom klientovi a je navrhnutý tak, aby zohľadňoval obmedzenia práce so súbormi uložené webovými prehliadačmi.

Mechanizmus je sada metód, ktoré je možné použiť na umiestnenie údajov uložených lokálne k užívateľovi v dočasnom úložisku informačnej základne, na prenos týchto informácií z dočasného úložiska do databázy a ich načítanie späť do počítača používateľa. Najbežnejšími aplikačnými úlohami riešenými týmto mechanizmom je ukladanie sprievodných informácií, napríklad obrázkov tovaru, dokumentov týkajúcich sa zmlúv atď.

Rozsah metódy

Dočasné skladovanie

Dočasné úložisko je špecializovaná oblasť informačnej základne, kde je možné ukladať binárne údaje. Hlavným účelom je dočasne uložiť informácie počas interakcie klient-server pred ich prenosom do databázy.

Potreba dočasného ukladania vzniká z toho dôvodu, že v modeli webového prehliadača sa vyžaduje prenos súboru vybraného používateľom priamo na server bez možnosti jeho uloženia v klientovi. Pri prenose súboru je umiestnený v dočasnom úložisku a až potom ho možno použiť pri zápise objektu do databázy.

Najbežnejším problémom aplikácie, ktorý je vyriešený dočasným ukladaním, je poskytnúť prístup k súborom alebo obrázkom predtým, ako je objekt zapísaný do informačnej základne, napríklad vo forme prvku.

Súbor alebo binárne údaje umiestnené v úložisku sú označené jedinečnou adresou, ktorú je možné neskôr použiť pri operáciách zápisu, čítania alebo odstraňovania. Táto adresa je daná spôsobmi zápisu súboru do dočasného úložiska. Samostatná metóda vstavanom jazyku vám umožňuje určiť, či je odovzdaná adresa adresou, ktorá ukazuje 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 ValueStore.

Rovnako ako v prípade dočasného úložiska je k informáciám prístup prostredníctvom špeciálnej adresy. Môžete to získať špeciálnou metódou tak, že pošlete odkaz na objekt alebo kľúč záznamu informačného registra a názov rekvizity. V prípade tabuľkovej sekcie sa dodatočne požaduje prenos indexu riadkov tabuľkovej sekcie.

Metódy práce so súbormi majú pri práci s podrobnosťami informačnej základne obmedzenie. Pre nich je na rozdiel od dočasného úložiska k dispozícii iba informácia o čítaní, nie však jeho zápis alebo vymazanie.

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 užívateľských údajov v dočasnom úložisku. Na to existujú dve metódy: PlaceFile () a PlaceFileToTemporaryStorage ().

Prvá metóda, PlaceFile (), umiestni súbor z lokálneho systému súborov do dočasného úložiska. Metóda môže mať cieľovú adresu v obchode. Ak nie je definovaný alebo je prázdnym reťazcom, vytvorí sa nový súbor a metóda vráti svoju adresu prostredníctvom zodpovedajúceho parametra.

Ak je parameter, ktorý určuje interaktívny režim prevádzky, True, potom metóda zobrazí štandardné dialógové okno na výber súboru, v ktorom môžete vybrať súbor, ktorý sa má umiestniť do úložiska. V takom prípade metóda vráti aj adresu vybraté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 k dispozícii iba pre klienta.

Druhá metóda, PlaceFileTemporaryStorage (), je podobná predchádzajúcej metóde, okrem toho, že je k dispozícii na serveri a údaje, ktoré sa majú zapísať do dočasného úložiska, nie sú v systéme súborov reprezentované ako cesta, ale ako premenná BinaryData . Rovnako tak, 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 na informačnú základňu možno budete musieť extrahovať údaje z dočasného úložiska a umiestniť ich napríklad do rekvizít. Na to existuje zodpovedajúca metóda servera - GetFileFrom TemporaryStorage (). Táto metóda získava údaje z dočasného úložiska a vo výsledku ich vracia. Ak to chcete urobiť, musíte zadať adresu v dočasnom úložisku. Táto adresa je vrátená vyššie uvedenými metódami PlaceFile () a PlaceFileTemporaryStorage (), ak sú úspešné.

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

Potom, čo sú údaje uložené v rekvizitách, je možné súbor v dočasnom úložisku odstrániť. Na tento účel existuje metóda DeleteFileFromTemporaryStorage (), ktorá odstráni súbor z dočasného úložiska. Metóda preberá v parametri adresu súboru v dočasnom úložisku. K dispozícii na serveri.

Kontrola adresy, či patrí do dočasného úložiska

Adresa súboru môže ukazovať na dočasné úložisko aj na premennú infobase. Ak chcete skontrolovať jeho typ, existuje metóda ThisTemporaryStorageAddress ().

Overuje, či je zadaná adresa adresa smerujúca do obchodu. Ak adresa ukazuje na dočasné úložisko, vráti hodnotu True. Metóda je k dispozícii na serveri.

Získanie adresy rekvizít

Potom, čo sú údaje umiestnené do rekvizít v informačnej databáze, môže byť potrebné k nim pristupovať pomocou súborových metód.

Pred získaním údajov, napríklad z rekvizít, však musíte zistiť adresu týchto rekvizít. Na tento účel existuje metóda GetFileAddressVinformationBase ().

Jeho účelom je vrátiť adresu súboru v informačnej databáze podľa pôvodných parametrov. Na tento účel musíte odovzdať kľúč objektu (môže to byť buď odkaz na objekt alebo kľúč záznamu informačného registra) a názov atribútu. Ak potrebujete získať adresu súboru uloženú v atribúte tabuľkovej sekcie, pred názov atribútu v parametri určujúcom názov atribútu musíte pridať názov tabuľkovej sekcie a bodku „.“. Metóda je k dispozícii na klientovi aj na serveri.

Načítanie súboru z informačnej základne

Metóda GetFile () získa súbor z informačnej základne a uloží ho do lokálneho systému súborov používateľa. Prvý parameter definuje adresu súboru v rekvizitách alebo v 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 interaktívne, to znamená, že posledný parameter je True. To znamená, že sa zobrazí dialógové okno, v ktorom môžete zadať akciu s výsledným súborom: spustiť ho alebo uložiť na miesto určené používateľom. Ak je aktívny interaktívny režim a parameter Cieľová cesta k súboru na disku nie je zadaný, operácia otvorenia súboru nie je k dispozícii. Vráti booleovskú hodnotu. False znamená, že používateľ sa rozhodol zrušiť operáciu v dialógovom okne online uloženia.

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

// Interaktívne načítanie súboru z disku // a jeho umiestnenie do dočasného úložiska & Na klientskom postupe SelectSDiskFileUsewrite ()

Premenná SelectedName; Variabilná adresa dočasného úložiska; Ak PutFile (adresa dočasného úložiska, SelectedName, True), potom Object.FileName = SelectedName; PlaceObjectFile (TemporaryStorageAddress); Koniec Ak;

Koniec postupu

// Kopírovanie súboru z dočasného úložiska na // požadovaný adresár, zaznamenanie objektu, vymazanie súboru z dočasného // úložiska a postup OnServer PlaceObjectFile (adresa dočasného úložiska)

DirectoryElement = FormInValue ("Objekt"); BinaryData = GetFileFrom TemporaryStorage (adresa TemporaryStorage); DirectoryElement.FileData = NewValueStore (BinaryData); FileDiskPath = Nový súbor (DirectoryElement.FileName); DirectoryElement.FileName = FilePathNaDisk.Name; DirectoryElement.Write (); Úprava = nepravda; DeleteFileFrom z dočasného úložiska (adresa dočasného úložiska); ValueVFormAttribute (DirectoryElement, "Object");

Koniec postupu

// Čítanie súboru z rekvizít a jeho uloženie // na lokálny disk v interaktívnom režime & V procedúre klienta ReadFile AND Save OnDisk ()

Adresa = GetAddressFileInInformationBase (Object.Link, "FileData"); GetFile (adresa, Object.FileName, True);

Koniec postupu

Podpora adries v poli s obrázkom

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

Aby ste to urobili, vo vlastnosti Data elementu formulára musíte zadať atribút typu reťazca. Hodnota tejto premennej bude interpretovaná ako adresa obrázku.

Príklad // Viazanie poľa obrázka na adresu obrázku v dočasnom // úložisku. Atribút AddressPictures typu reťazca

PlaceFile (ImageAddress, True)

Image.Data = ImageAddress

Obmedzenia pri práci s webovým klientom

Prevádzka popísaného mechanizmu pri použití webového klienta má určité obmedzenia. Tieto obmedzenia súvisia so špecifikami modelu zabezpečenia prehliadača. Klient napríklad nemôže sám uložiť súbor do lokálneho systému súborov, 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 je udelená výnimka. Dialógové okná zobrazené v interaktívnom režime sú špecifické pre konkrétny typ prehliadača.

Funkcie pri práci s Obchodom s hodnotami na strane klienta

Problém:

Keď má dokument v tabuľkovej časti atribút typu ValueStorage, spomaľuje otváranie formulára dokumentu, ak tento atribút obsahuje veľké údaje.

Predpokladaný dôvod:

Možno pri otvorení formulára klient nedostane odkaz na údaje uložené v obchode Values ​​Store, ale na samotné údaje.

Riešenie

  • Vo vlastnostiach atribútu tabuľky formulára je príznak „Vždy používať“. 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ť vypnutý, ale musíte to vziať do úvahy v kóde, pretože v predvolenom nastavení nebude hodnota tohto poľa na klientovi. Príklad možno nájsť v 1C: Archív.

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