Jak uložit binární data do souboru 1c. Práce s binárními daty. Čtení dat z rekvizit

Tisknout (Ctrl+P)

16.3. Práce s binárními daty

16.3.1. obecná informace

Při implementaci aplikačních řešení mohou nastat situace, kdy je nutné analyzovat různá binární data. Například musíte určit typ souboru pomocí podpisu nebo provést nějaké manipulace s obrázkem. Pro práci s binárními daty poskytuje 1C:Enterprise speciální softwarová rozhraní. Dále se podíváme na možnosti práce s binárními daty.
Veškerá práce s binárními daty je založena na konceptu streamu. Tok je logické zobecnění libovolného (obecně) zdroje dat (objekt Stream). Systém neposkytuje možnost vytvořit nezávislý objekt Stream, který není přidružen k žádnému zdroji. Existují však odvozené objekty, které lze vytvořit – proud spojený se souborem na disku (objekt FileStream) nebo proud vytvořený v paměti (objekt MemoryStream). Stream umožňuje jak číst data, tak je zapisovat. Pro určení možnosti provádění určitých operací má proud (a odvozené objekty) speciální metody, které vám umožňují určit, které
operace jsou dostupné s tímto vláknem (metody AvailableRecord(), AvailableRead(), AvailableChangePosition()).
Pokud potřebujete pracovat s proudem na vyšší úrovni, zejména číst/zapisovat data jako je číslo (různé bitové hloubky) nebo řetězec, pak jsou k tomu určeny objekty DataRead/DataWrite. Pomocí těchto objektů můžete zaujmout strukturovanější přístup k binárním datům umístěným v proudu. Takže například, když znáte formát souboru, můžete takový soubor docela pohodlně číst, získávat potřebná data z hlaviček (které jsou zpravidla reprezentovány typy číslo a řetězec), přeskakovat zbytečné datové bloky a načtení potřebných pro zpracování.
Obecné schéma pro práci s binárními daty lze znázornit takto:

  1. Probíhá příjem streamu
  2. Vytvoří se objekt Data Reader nebo Data Writer.
  3. Pomocí objektu vytvořeného v kroku 2 se provedou požadované akce.
  4. Objekt vytvořený v kroku 2 se zavře.
  5. Pokud nejsou vyžadovány žádné další operace, proud získaný v kroku 1 se uzavře.
  6. Pokud potřebujete pokračovat v práci se streamem, můžete nastavit novou pozici ve streamu (pokud je tato operace podporována) a pokračovat v práci od kroku 2.

Za zmínku stojí, že je možné kombinovat odstavce 1 a 2. Jinými slovy, systém poskytuje možnost vytvářet objekty Čtení dat/zápis dat přímo například z objektu BinaryData.
Pro provádění různých operací s binárními daty systém poskytuje možnost získat část toku jako samostatný fragment s náhodným (bajt po bajtu) přístupem (objekt BufferBinaryData). Velikost vyrovnávací paměti je nastavena při vytvoření a nelze ji později změnit. Při práci s binárním datovým bufferem je možné pracovat s čísly různých bitových hloubek jako
jako jeden celek. V tomto případě je možné zadat pořadí bytů slovy: „little endian“ nebo „big endian“ (big endian). Je také možné rozdělit jeden buffer na několik a spojit několik binárních datových bufferů do jednoho výsledného bufferu.
Je důležité si uvědomit, že práce s vyrovnávací pamětí binárních dat může výrazně zjednodušit implementaci, pokud je práce s binárními daty implementována na straně klientské aplikace v asynchronním režimu. V tomto případě bude čtení dat do bufferu prováděno jako asynchronní operace a práce s daty bufferu bude synchronní.
Práce s binárními daty je dostupná na straně klienta (včetně webového klienta) aplikace a na straně serveru, stejně jako v synchronních a asynchronních pracovních schématech. Další příklady budou používat schéma synchronní práce.

16.3.2. Čtení binárních dat

Jako příklad čtení binárních dat uvážíme úkol určit správný formát souboru, který byl v systému vybrán pro další použití. Jako kontrolovaný soubor bude použit soubor .wav se zvukovými daty. Pro ukládání souborů .wav se používá formát RIFF (Resource Interchange File Format), jehož popis je uveden na odkazu:

https://msdn.microsoft.com/enus/library/windows/desktop/ee415713.aspx (na anglický jazyk). Pro příklad čtení budou použity následující informace o formátu:
1. První 4 bajty souboru obsahují identifikátor formátu: RIFF.
2. další 4 bajty obsahují velikost skutečných zvukových dat v pořadí bajtů little-endian.
3. Další 4 bajty obsahují textový typ použitých dat: WAVE.
K provedení těchto akcí budete potřebovat následující kód ve vestavěném jazyce:

Číst = Nové ReadData(název souboru, ByteEndian.LittleEndian);
FileFormat = Read.ReadCharacters(4);
DataSize = Read.ReadInteger32();
FileType = Read.ReadCharacters(4);
Pokud Formát souboru<>"RIFF" Pak
Report("Toto není soubor RIFF");
Vrátit se ;
EndIf;
Pokud FileType = "WAVE" Pak
Zpráva („Toto je soubor WAV s daty, velikost ” + DataSize + ” bajty”);
v opačném případě
Zpráva („Toto není soubor WAV“);
Vrátit se;
endIf;

Podívejme se na příklad podrobněji.
Nejprve se otevře soubor, jehož jméno je obsaženo v proměnné FileName, soubor se otevře pro čtení ( FileOpenMode.Open), bude číst pouze ze souboru ( FileAccess.Read) a pro čtení bude použita 16bajtová vyrovnávací paměť.
Poté se vygeneruje stream pro čtení dat, který bude mít nejméně významné pořadí bajtů pro data typu Číslo. Poté se z výsledného proudu přečtou 4 znaky, 32bitové celé číslo a 4 další znaky. Výsledná data jsou analyzována a na základě výsledků analýzy je rozhodnuto, zda vybraný soubor je soubor .wav či nikoli.

16.3.3. Zápis binárních dat

Zápis binárních dat do souboru se v nejjednodušším případě provádí následovně:

Vstup = Novinka WriteData (název souboru);
Pro Index = 0 až 255 Cyklus
Write.WriteByte(Index);
EndCycle;
Record.Close() ;

Tento příklad zapíše do souboru sekvenci bajtů od 0 do 255 (0xFF v šestnáctkové soustavě). Toto je nejjednodušší možnost nahrávání.
Můžete také použít metodu podobnou metodě čtení popsané v předchozím příkladu, kde se získá souborový proud a data se zapíší do tohoto souborového proudu.

16.3.4. Práce s vyrovnávací pamětí binárních dat

Jak bylo uvedeno výše, vyrovnávací paměť binárních dat poskytuje pohodlný způsob manipulace s fragmenty binárních dat.
Podporováno je nejen čtení dat, ale i zápis.
Jako příklad budeme uvažovat analýzu hlavičky souboru RIFF z příkladu čtení dat (viz zde). K sestavení příkladu budou použity přesně stejné informace o formátu souboru. Je tedy nutné ze zdrojového souboru načíst buffer o velikosti hlavičky souboru. Záhlaví se skládá ze tří 4bajtových polí. Je tedy potřeba přečíst 12 bajtů.

Buffer = Nový BufferBinaryData(12);
Soubor = FileStreams.Open(Adresář dočasných souborů() + „Windows Logon.wav“, FileOpenMode.Open, FileAccess.Read);
File.Read(Buffer, 0, 12);
Velikost = 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ískávání dat do vyrovnávací paměti binárních dat není nic zvláštního. Další operace vyžadují několik komentářů. Čtení čísel libovolné podporované bitové hloubky je možné z libovolné pozice ve vyrovnávací paměti. V v tomto příkladu Buffer.ReadInteger32(4); znamená čtení 32bitového celého čísla počínaje od bytu 4 vyrovnávací paměti. Pokud tedy potřebujete číst více čísel umístěných na různých místech ve vyrovnávací paměti, lze to provést bez přímého umístění v této vyrovnávací paměti.
Čtení řetězce však není podporováno vyrovnávací pamětí binárních dat. Proto byste měli použít objekt, který vám to umožní: Číst data. Objekt DataReader nelze vytvořit z vyrovnávací paměti binárních dat. Ale na základě vyrovnávací paměti binárních dat můžete vytvořit proud, který je univerzálním prostředníkem mezi místem fyzického úložiště informací (soubor, vyrovnávací paměť binárních dat) a objektem na vysoké úrovni, který vám umožňuje s těmito daty pracovat.
Když je objekt DataReader vytvořen na základě proudu, začne číst data od pozice v tento moment nainstalované ve streamu. V příkladu se tedy nejprve nastaví pozice v proudu a poté se vytvoří objekt DataReader a načte se požadovaný počet znaků. Detailní popis rozdíl mezi počtem bajtů a znaků při čtení řetězců viz další část 16.3.5

16.3.5. Vlastnosti použití

Při používání binárních dat byste měli vzít v úvahu vlastnosti práce s daty typu String. Zvláštností je, že délka řetězce, kterou funkce globálního kontextu StrLength() vrací, se měří ve znacích. V symbolech byste měli v metodách pro zápis/čtení řetězců v objektech pro práci s binárními daty uvést velikost dat, která se mají číst/zapisovat ( ReadCharacters(),
ReadString(), WriteCharacters(), WriteString()). Neexistuje však jednoznačná možnost převodu délky řetězce ve znacích na podobný parametr v bajtech. V závislosti na obsahu řetězce a kódování se tento poměr bude lišit. Proto byste při práci s jakýmikoli datovými strukturami, které obsahují řetězce proměnné délky, měli jasně rozumět, v jakých jednotkách jsou délky řetězců vyjádřeny.
Pokud je v dostupných datech délka řetězce uvedena v bajtech a řetězec je specifikován ve vícebajtovém kódování s proměnnou délkou (například UTF-8), pak pomocí binárních datových objektů načtete takovou strukturu ze souboru do data typu String jsou obecně nemožná.
Ale v tomto případě můžete snadno změnit pozici čtení/zápisu v toku souborů. Pokud je délka řetězce specifikována ve znacích, pak je možné takový řetězec načíst do dat typu String, ale nebude možné změnit pozici čtení/zápisu v takovém proudu.
Chcete-li získat délku řetězce v bajtech, můžete pomocí následující funkce převést řetězec na objekt BinaryData:

Funkce Získejte binární data z řetězce(Value StrParameter, Kódování hodnoty = „UTF-8“)
MemoryThread = NewMemoryThread;
Spisovatel = Nový WriteData (StreamMemory);
Writer.Write řetězec(StrParameter, Kódování);
Spisovatel.Zavřít();
Vraťte StreamMemory.CloseAndGetBinaryData();
EndFunction

Skutečnou velikost v bajtech lze získat voláním funkce Size() na objektu BinaryData, který je získán jako výsledek funkce.
Současné používání předmětů se nedoporučuje Čtení dat/zápis dat a streamované objekty. Pokud mezi dvěma po sobě jdoucími operacemi čtení z ReadData nebo dvěma po sobě jdoucími operacemi zápisu do WriteData dojde ke změně pozice v proudu, se kterým objekty Ch pracují ShadowData/WriteData– vygeneruje se výjimka. Následující příklad tedy demonstruje správnou změnu pozice v proudu při zápisu dat do proudu:

Stream = newStreamInMemory();

WriteData.WriteString("Ahoj světe!");
WriteData.Close();
Stream.Go (0, PositionInStream.Start);
DataWrite = newDataWrite(Stream);
WriteData.WriteString("Sbohem!");
WriteData.Close();
Následující příklad ahoj na vyvolání výjimky:

Stream = NewStreamInMemory();

WriteData.WriteString(“Ahoj světe!“);
Stream.Go(0, PositionInStream.Start);
// Další řádek vyvolá výjimku
WriteData.WriteString(“Sbohem!”);
Současně jsou možné situace, kdy chování systému bude nesprávné, ale nebudou generovány žádné chyby:

Stream = GetStream();
ReadData = new ReadData(Stream);
TestString = ReadData.Read();
InitialPosition = Stream.CurrentPosition();
DataWrite = newDataWrite(Stream);
WriteData.WriteString(“Neočekávaný řetězec”);
WriteData.Close();
Stream.Go(InitialPosition, PositionInStream.Start);
// Obecně je nemožné určit, jaká hodnota bude umístěna do proměnné TestString2
TestLine2 = ReadData.ReadLine();

Chování popsané v této části je způsobeno o Objekty Data Reader/Data Writer používají při práci s proudem své vlastní vyrovnávací paměti. V důsledku toho se skutečná poloha vlákna liší od logické polohy, která je vytvořena jako výsledek dokončených operací.
Rovněž není podporováno současné použití objektů Data Reader a Data Writer, které pro svou práci používají jedno vlákno.

Technologická platforma 1C:Enterprise 8 umožňuje ukládat libovolné soubory do informační základny, odtud je získávat a používat různé způsoby. Podívejme se na tyto operace na příkladech.

Před nahráním souboru do informační databáze 1C musíte získat úplnou adresu souboru na disku. Práce s dialogy pro výběr souboru je popsána v .

K ukládání souborů použijte atribut (nebo prostředek registru) s typem StorageValues.

Nahrání libovolného souboru do informační základny 1C

Jakýkoli soubor může být reprezentován jako binární data a načten do Ukládání hodnoty.

Při převodu binárních dat na objekt StorageValues použitý design nové hodnoty úložiště (data, komprese) se dvěma parametry:

  1. Data— binární data, která je třeba uložit do úložiště
  2. Komprese— kompresní poměr deflace algoritmu. Celé číslo v rozsahu -1...9. -1 je výchozí úroveň komprese. 0 - žádná komprese, 9 - maximální komprese. Výchozí hodnota: -1. Parametr je volitelný, pokud není zadán, komprese se nepoužije.

//Převod souboru na binární data
Soubor = New BinaryData(Cesta) ;

//Vytvoří nový objekt úložiště hodnot

DataStorage = NewValueStorage(Soubor, NewDataCompression(9) ) ;

Uložení libovolného souboru z infobáze 1C na disk

Chcete-li uložit soubor z databáze 1C na disk, musíte určit cestu a název souboru. K tomu slouží dialog pro uložení souboru, práce s nímž je popsána v.

//Získání binárních dat z úložiště
//Data Storage - atribut objektu s typem Value Storage

//Zapíše přijatá data na disk
//V proměnná cesta je úplná adresa souboru na disku
Data. Write(Cesta) ;

Zobrazení souboru umístěného v informační základně 1C

Chcete-li zobrazit soubor uložený v databázi, musíte mít v počítači nainstalovanou aplikaci, která soubor otevře.

//Získejte název dočasného souboru s požadovanou příponou
//Do proměnné Přípona musíte zadat příponu souboru, například "pdf"
Cesta = GetTemporaryFileName(Extension) ;

//Příjem dat z úložiště
//Data Storage - atribut objektu s typem Value Storage
Data = úložiště dat. Dostat() ;

//Zápis dat do dočasného souboru
Data. Write(Cesta) ;

//Pokouším se otevřít soubor v zamýšlené aplikaci
//Pokud aplikace není nalezena, zobrazí se systémový dialog "Otevřít pomocí...".
LaunchApplication(Path) ;

V úložišti hodnot lze uložit téměř jakoukoli informaci, např.

... obrázky (fotky):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Enumerations.Types dalších informací o Objects.Image; Storage = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// na tomto místě zobrazí vše... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

...tabulkový dokument:

TabDoc=Nový tabulkový dokument; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); Napsat();

Konec procedury

Postup RestoreFromStoragePress (prvek)

TabDoc=Storage.Get(); Pokud TabDoc<>Nedefinováno ThenFormElements.TabularDocumentField1.Output(TabDoc); endIf;

Konec procedury

...libovolné soubory (binární data):

XZ = NewValueStorage(NewBinaryData(soubor));

Osmička podporuje kompresi dat umístěných v úložišti:

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

... externí zpracování a reportování:

Postup LoadProcessingIntoStorage(PropsStorageType)

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

Konec procedury

Postup StartProcessingFromStorage(PropsStorageType)

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

Konec procedury

Práce s úložištěm

Pokud se jednalo o binární data, lze je obnovit z úložiště hodnot pomocí metody Get a zapsat do souboru pomocí metody Write().

Pokud TypeValue(Storage)<>Zadejte("BinaryData") Potom

BinaryData = Storage.Get();

BinaryData = Úložiště;

endIf; BinaryData.Write(NázevSouboru);

Pokud to byl například dokument aplikace Word (soubor doc nebo jiný registrovaný typ souboru), lze jej otevřít takto:

LaunchApplication(FileName);

Chcete-li vymazat pole typu Úložiště hodnoty, musíte mu přiřadit Nedefinováno:

PropsStorage = Nedefinováno;

Práce se soubory a obrázky ve vestavěném jazyce 1C:Enterprise 8

Účel

Spravovaná aplikace implementuje nový mechanismus pro práci se soubory. Poskytuje výměnu souborů mezi infobází a klientskou aplikací. Vlastnosti tento mechanismus je, že je určen k použití v tenký klient a Web Client a je navržen tak, aby zohlednil omezení zpracování souborů uložená webovými prohlížeči.

Mechanismus je sada metod, které lze použít k umístění dat uložených lokálně uživatelem do dočasného úložiště informační základna, přeneste tyto informace z dočasného úložiště do databáze a získejte je zpět do počítače uživatele. Nejčastějšími aplikačními problémy řešenými tímto mechanismem je ukládání doprovodných informací, například obrázků zboží, dokumentů souvisejících se smlouvami atd.

Metoda Rozsah

Dočasné úložiště

Dočasné úložiště je specializovaná oblast informační základny, do které lze umístit binární data. Hlavním účelem je dočasné uložení informací během interakce klient-server před jejich přenesením do databáze.

Potřeba dočasného úložiště vyvstává, protože operační model webového prohlížeče vyžaduje, aby uživatelem vybraný soubor byl přenesen přímo na server bez možnosti jeho uložení na klientovi. Když je soubor přenesen, je umístěn do dočasného úložiště a lze jej pak použít při zápisu objektu do databáze.

Nejtypičtějším aplikačním úkolem řešeným dočasným úložištěm je poskytování přístupu k souborům nebo obrázkům předtím, než je objekt zaznamenán v informační databázi, například ve formě prvku.

Soubor nebo binární data umístěná v úložišti jsou identifikována jedinečnou adresou, kterou lze později použít při operacích zápisu, čtení nebo mazání. Tato adresa je dána metodami pro zápis souboru do dočasného úložiště. Samostatná metoda ve vestavěném jazyce umožňuje určit, zda je předaná adresa adresou ukazující na data v dočasném úložišti.

Informační základna

Mechanismus umožňuje přístup k binárním datům uloženým v atributech typu Value Storage.

Stejně jako v případě dočasného úložiště je přístup k informacím možný prostřednictvím speciální adresy. Můžete jej získat speciální metodou předáním odkazu na objekt nebo vstupního klíče informačního registru a názvu atributu. V případě tabulkové části je navíc nutné přenést index řádku tabulkové části.

Metody pro práci se soubory mají omezení při práci s detaily infobáze. Pro ně je na rozdíl od dočasného úložiště dostupné pouze čtení informací, nikoli však jejich zápis nebo mazání.

Popis metod práce se soubory

Ukládání dat do dočasného úložiště

Nejtypičtější scénář pro použití tohoto mechanismu zahrnuje počáteční umístění uživatelských dat do dočasného úložiště. Existují dvě metody: PlaceFile() a PlaceFileInTemporaryStorage().

První metoda, PlaceFile(), umístí soubor z místního souborového systému do dočasného úložiště. Metoda může přijmout cílovou adresu v úložišti. Pokud není definován nebo je prázdný řádek, pak se vytvoří nový soubor a metoda vrátí svou adresu přes odpovídající parametr.

Pokud je parametr, který určuje interaktivní režim provozu, True, pak metoda zobrazí standardní dialogové okno pro výběr souboru, ve kterém můžete vybrat soubor, který chcete uložit do úložiště. V tomto případě metoda také vrátí adresu vybraného souboru.

Výsledkem je, že metoda vrátí hodnotu False, pokud uživatel interaktivně odmítl provést operaci v dialogovém okně pro výběr souboru. Metoda je dostupná pouze u klienta.

Druhá metoda, PlaceFileInTemporaryStorage(), je podobná předchozí, s tím rozdílem, že je dostupná na serveru a data, která mají být zapsána do dočasného úložiště, nejsou reprezentována jako cesta v systému souborů, ale jako variabilní typ Binární data. Podobně, pokud není zadána žádná cílová adresa, vytvoří se v úložišti nový soubor. Jeho adresa je vrácena jako výsledek funkce.

Načtení souboru z dočasného úložiště

Při zápisu objektu do infobáze možná budete muset extrahovat data z dočasného úložiště a umístit je například do atributu. K tomu existuje odpovídající serverová metoda - GetFileFromTemporaryStorage(). Tato metoda načítá data z dočasného úložiště a jako výsledek je vrací. Chcete-li to provést, musíte zadat adresu v dočasném úložišti. Tato adresa je vrácena výše popsanými metodami PlaceFile() a PlaceFileInTemporaryStorage(), pokud jsou úspěšně provedeny.

Odstranění souboru z dočasného úložiště

Po uložení dat do podrobností lze soubor v dočasném úložišti smazat. Pro tento účel existuje metoda DeleteFileFromTemporaryStorage(), která smaže soubor z dočasného úložiště. Metoda bere jako parametr adresu souboru v dočasném úložišti. Dostupné na serveru.

Kontrola adresy pro dočasné uložení

Adresa souboru může označovat dočasné úložiště i podrobnosti v informační databázi. Pro kontrolu jeho typu existuje metoda This isTemporaryStorageAddress().

Zkontroluje, že předaná adresa je adresa směřující do obchodu. Vrátí hodnotu True, pokud adresa ukazuje na dočasné úložiště. Metoda je dostupná na serveru.

Příjem adresy rekvizit

Poté, co jsou data umístěna do podrobností v infobázi, možná k nim budete muset přistupovat pomocí souborových metod.

Než ale obdržíte data, například z nemovitosti, musíte získat adresu této nemovitosti. Pro tento účel existuje metoda GetFileAddressInInformationBase().

Jeho účelem je vrátit adresu souboru v infobázi podle původních parametrů. Chcete-li to provést, musíte předat klíč objektu (může to být buď odkaz na objekt nebo klíč položky registru informací) a název atributu. Pokud potřebujete získat adresu souboru uloženého v atributu tabulkové části, musíte před název atributu v parametru určujícím název atributu přidat název tabulkové části a tečku „.“. Metoda je dostupná jak na klientovi, tak na serveru.

Načtení souboru z infobáze

Metoda GetFile() přijme soubor z informační databáze a uloží jej do místního umístění souborový systém uživatel. První parametr určuje adresu souboru v rekvizitách nebo dočasném úložišti souborů. Druhý parametr určuje cílové umístění výsledného souboru. V neinteraktivním režimu musíte zadat cestu. V interaktivním režimu je parametr nepovinný.

Ve výchozím nastavení se metoda provádí v interaktivním režimu, to znamená, že poslední parametr je True. To znamená, že se zobrazí dialogové okno, ve kterém můžete určit akci s přijatým souborem: spustit jej nebo uložit na uživatelem určené místo. Pokud je aktivní interaktivní režim a není zadán parametr Cesta k souboru cílového disku, operace otevření souboru není dostupná. Vrátí booleovskou hodnotu. False znamená, že uživatel zvolil zrušení operace v dialogovém okně interaktivního uložení souboru.

Příklad použití souborových metod

// Příjem souboru z disku v interaktivním režimu // a jeho umístění do dočasného úložiště &Na klientské procedurě SelectDiskFileAndWrite()

Proměnná SelectedName; VariableTemporaryStorageAddress; If PutFile(TemporaryStorageAddress, SelectedName, True) Then Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); endIf;

Konec procedury

// Kopírování souboru z dočasného úložiště do adresáře // atribut, záznam objektu, smazání souboru z dočasného // úložiště &Na serveru Postup Umístění souboru objektu (adresa dočasného úložiště)

Element adresáře = Form AttributesValue("Object"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); Data adresáře Element.File = NewValueStorage(BinaryData); FilePathOnDisk = Nový soubor(DirectoryItem.FileName); Adresář Item.FileName = FilePathOnDisk.Name; Element adresáře.Write(); Upraveno = False; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueВFormAttributes(prvek adresáře, "Objekt");

Konec procedury

// Načtení souboru z rekvizit a jeho uložení // do lokální disk v interaktivním režimu &Na klientské proceduře ReadFileAndSaveToDisk()

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

Konec procedury

Podpora adres v poli obrázku

Ovládací prvek Picture Field podporuje zobrazení obrázku určeného adresou souboru v dočasném úložišti nebo v databázi.

Chcete-li to provést, musíte nastavit atribut ve vlastnosti Data prvku formuláře typ řetězce. Hodnota tohoto atributu bude interpretována jako adresa obrázku.

Příklad // Vazba pole obrázku s adresou obrázku v dočasném // úložišti. AddressPictures tvoří podrobnosti typu řetězce

PlaceFile(PictureAddress,True)

Picture.Data = AddressPictures

Omezení při práci s webovým klientem

Činnost popsaného mechanismu při použití webového klienta má určitá omezení. Tato omezení souvisejí s modelem zabezpečení prohlížeče. Klient tedy například nemůže samostatně uložit soubor do lokálního souborového systému, to znamená, že je k dispozici pouze interaktivní verze klientských metod PlaceFile() a GetFile(). Při pokusu o použití neinteraktivního režimu je vyvolána výjimka. Dialogová okna, zobrazené interaktivně, jsou specifické pro konkrétní typ prohlížeče.

Funkce při práci s Value Storage na klientovi

Problém:

Pokud má dokument v tabulkové části atribut typu Úložiště hodnoty, zpomaluje otevírání formuláře dokumentu, pokud tento atribut obsahuje velká data.

Předpokládaný důvod:

Možná, že při otevírání formuláře se klientovi neodešle odkaz na data umístěná ve Value Store, ale data samotná.

Řešení

  • Ve vlastnostech atributu tabulky formuláře je příznak "Vždy použít". Pokud je nastaveno, obsah pole se vždy přenáší mezi serverem a klientem – např. při otevírání formuláře. Tento příznak musí být deaktivován, ale to musí být zohledněno v kódu, protože ve výchozím nastavení nebude mít toto pole na klientovi žádnou hodnotu. Příklad lze nalézt v 1C:Archive.

Ještě lepší je použít dočasné úložiště pro přenos souborů mezi klientem a serverem.