Kako shraniti binarne podatke v datoteko 1c. Delo z binarnimi podatki. Branje podatkov iz rekvizitov

Natisni (Ctrl+P)

16.3. Delo z binarnimi podatki

16.3.1. splošne informacije

Pri implementaciji aplikativnih rešitev lahko pride do situacij, ko je treba analizirati različne binarne podatke. Na primer, morate določiti vrsto datoteke s podpisom ali izvesti nekaj manipulacij s sliko. Za delo z binarnimi podatki 1C:Enterprise ponuja posebne programske vmesnike. Nato si bomo ogledali možnosti za delo z binarnimi podatki.
Vse delo z binarnimi podatki temelji na konceptu toka. Tok je logična posplošitev poljubnega (v splošnem primeru) vira podatkov (Stream object). Sistem ne omogoča ustvarjanja neodvisnega objekta Stream, ki ni povezan z nobenim virom. Obstajajo pa izpeljani objekti, ki jih je mogoče ustvariti – tok, povezan z datoteko na disku (objekt FileStream), ali tok, ustvarjen v pomnilniku (objekt MemoryStream). Tok vam omogoča branje in pisanje podatkov. Za določitev možnosti izvajanja določenih operacij ima tok (in izpeljani objekti) posebne metode, ki vam omogočajo, da ugotovite, kateri
operacije so na voljo s to nitjo (metode AvailableRecord(), AvailableRead(), AvailableChangePosition()).
Če morate delati s tokom na višji ravni, zlasti brati/pisati podatke, kot je število (različne bitne globine) ali niz, potem so temu namenjeni objekti DataRead/DataWrite. Z uporabo teh objektov lahko uporabite bolj strukturiran pristop k binarnim podatkom, ki se nahajajo v toku. Tako lahko na primer, če poznate obliko datoteke, takšno datoteko precej udobno preberete, pridobite potrebne podatke iz glav (ki so praviloma predstavljene s številko vrste in nizom), preskočite nepotrebne bloke podatkov in nalaganje potrebnih za obdelavo.
Splošna shema za delo z binarnimi podatki je lahko predstavljena na naslednji način:

  1. Prejemanje toka v teku
  2. Ustvari se objekt Data Reader ali Data Writer.
  3. Z uporabo predmeta, ustvarjenega v 2. koraku, se izvedejo zahtevana dejanja.
  4. Objekt, ustvarjen v koraku 2, je zaprt.
  5. Če niso potrebne nobene druge operacije, se tok, pridobljen v 1. koraku, zapre.
  6. Če morate nadaljevati delo s tokom, lahko nastavite nov položaj v toku (če je ta operacija podprta) in nadaljujete z delom od 2. koraka.

Omeniti velja, da je mogoče združiti odstavka 1 in 2. Z drugimi besedami, sistem omogoča ustvarjanje predmetov Branje podatkov/pisanje podatkov neposredno iz, na primer, objekta BinaryData.
Za izvajanje različnih operacij z binarnimi podatki sistem omogoča pridobitev določenega dela toka kot ločenega fragmenta z naključnim (bajt za bajtom) dostopom (objekt BufferBinaryData). Velikost vmesnega pomnilnika je nastavljena, ko je ustvarjena in je pozneje ni mogoče spremeniti. Pri delu z vmesnim pomnilnikom binarnih podatkov je mogoče delati s števili različnih bitnih globin
kot ena celota. V tem primeru je možno določiti vrstni red bajtov z besedami: "little endian" ali "big endian" (big endian). Možno je tudi razdeliti en vmesni pomnilnik na več in združiti več medpomnilnikov binarnih podatkov v en nastali medpomnilnik.
Pomembno je omeniti, da lahko delo z vmesnim pomnilnikom binarnih podatkov bistveno poenostavi izvedbo, če je delo z binarnimi podatki implementirano na strani odjemalske aplikacije v asinhronem načinu. V tem primeru bo branje podatkov v medpomnilnik izvedeno kot asinhrona operacija, delo s podatki medpomnilnika pa bo sinhrono.
Delo z binarnimi podatki je na voljo na strani odjemalca (vključno s spletnim odjemalcem) aplikacije in na strani strežnika ter v sinhronih in asinhronih shemah dela. Nadaljnji primeri bodo uporabljali shemo sinhronega dela.

16.3.2. Branje binarnih podatkov

Kot primer branja binarnih podatkov bomo obravnavali nalogo določanja pravilne oblike zapisa datoteke, ki je bila izbrana v sistemu za nadaljnjo uporabo. Datoteka .wav z zvočnimi podatki bo uporabljena kot datoteka, ki se preverja. Za shranjevanje datotek .wav se uporablja Resource Interchange File Format (RIFF), katerega opis je podan na povezavi:

https://msdn.microsoft.com/enus/library/windows/desktop/ee415713.aspx (na angleški jezik). Za primer branja bodo uporabljene naslednje informacije o formatu:
1. Prvi 4 bajti datoteke vsebujejo identifikator formata: RIFF.
2. naslednji 4 bajti vsebujejo velikost dejanskih zvočnih podatkov v vrstnem redu bajtov po malem.
3. Naslednji 4 bajti vsebujejo besedilni tip uporabljenih podatkov: WAVE.
Za izvajanje teh dejanj boste potrebovali naslednjo kodo v vgrajenem jeziku:

Prebrano = Novo ReadData(FileName, ByteEndian.LittleEndian);
FileFormat = Read.ReadCharacters(4);
Velikost podatkov = Read.ReadInteger32();
FileType = Read.ReadCharacters(4);
Če je format datoteke<>"RIFF" Potem
Poročilo ("To ni datoteka RIFF");
Vrnitev ;
EndIf ;
Če je FileType = "WAVE", potem
Poročilo ("To je datoteka WAV s podatki, velikost " + DataSize + "bajti");
V nasprotnem primeru
Poročilo ("To ni datoteka WAV");
Vrnitev;
endIf;

Oglejmo si primer podrobneje.
Najprej se odpre datoteka, katere ime je vsebovano v spremenljivki FileName, datoteka se odpre za branje ( FileOpenMode.Open), bo bral samo iz datoteke ( FileAccess.Read) in 16-bajtni medpomnilnik bo uporabljen za branje.
Nato se ustvari tok za branje podatkov, ki bo imel najmanj pomemben vrstni red bajtov za podatke tipa Število. Nato se iz nastalega toka preberejo 4 znaki, 32-bitno celo število in še 4 znaki. Dobljene podatke analiziramo in na podlagi rezultatov analize sprejmemo odločitev, ali je izbrana datoteka datoteka .wav ali ne.

16.3.3. Pisanje binarnih podatkov

Zapisovanje binarnih podatkov v datoteko v najpreprostejšem primeru poteka na naslednji način:

Vnos = Novo WriteData(FileName);
Za indeks = 0 do 255 ciklov
Write.WriteByte(indeks);
EndCycle;
Zapis.Zapri() ;

Ta primer zapiše v datoteko zaporedje bajtov od 0 do 255 (0xFF v šestnajstiški obliki). To je najpreprostejša možnost snemanja.
Uporabite lahko tudi metodo, ki je podobna metodi branja, obravnavani v prejšnjem primeru, kjer se pridobi tok datoteke in se podatki zapišejo v ta tok datoteke.

16.3.4. Delo z vmesnim pomnilnikom binarnih podatkov

Kot je omenjeno zgoraj, vmesni pomnilnik binarnih podatkov zagotavlja priročen način za manipulacijo fragmentov binarnih podatkov.
Podprto ni samo branje podatkov, ampak tudi pisanje.
Kot primer bomo razmislili o razčlenjevanju glave datoteke RIFF iz primera branja podatkov (glejte tukaj). Za izdelavo primera bodo uporabljene popolnoma enake informacije o formatu datoteke. Zato je treba iz izvorne datoteke prebrati medpomnilnik v velikosti glave datoteke. Glava je sestavljena iz treh 4-bajtnih polj. Tako je treba prebrati 12 bajtov.

Medpomnilnik = Novo BufferBinaryData(12);
Datoteka = FileStreams.Open(Imenik začasnih datotek() + “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 = nov DataReader(RowStream);
FileType = ReadLines.ReadCharacters( 4, "windows-1251");
ReadLines.Close();

Postopek pridobivanja podatkov v medpomnilniku binarnih podatkov ni nič posebnega. Nadaljnje operacije zahtevajo nekaj komentarjev. Branje števil katere koli podprte bitne globine je možno s katerega koli mesta v medpomnilniku. IN v tem primeru Buffer.ReadInteger32(4); pomeni branje 32-bitnega celega števila, ki se začne od bajta 4 medpomnilnika. Torej, če morate prebrati več številk, ki se nahajajo na različnih mestih v medpomnilniku, lahko to storite brez neposrednega pozicioniranja v tem medpomnilniku.
Branje niza pa medpomnilnik za binarne podatke ne podpira. Zato bi morali uporabiti objekt, ki vam to omogoča: Branje podatkov. Objekta DataReader ni mogoče ustvariti iz medpomnilnika binarnih podatkov. Toda na podlagi medpomnilnika binarnih podatkov lahko ustvarite tok, ki je univerzalni posrednik med fizičnim mestom shranjevanja informacij (datoteka, medpomnilnik binarnih podatkov) in objektom na visoki ravni, ki vam omogoča delo s temi podatki.
Ko je objekt DataReader ustvarjen na podlagi toka, začne brati podatke s položaja v ta trenutek nameščen v toku. Zato se v primeru najprej nastavi položaj v toku, nato pa se ustvari objekt DataReader in prebere zahtevano število znakov. Natančen opis za razliko med številom bajtov in znakov pri branju nizov glejte naslednji razdelek 16.3.5

16.3.5. Značilnosti uporabe

Pri uporabi binarnih podatkov je treba upoštevati značilnosti dela s podatki vrste String. Posebnost je, da se dolžina niza, ki ga vrne globalna kontekstna funkcija StrLength(), meri v znakih. V simbolih navedite velikost podatkov, ki jih želite prebrati/zapisati v metodah za pisanje/branje nizov v objektih za delo z binarnimi podatki ( ReadCharacters(),
ReadString(), WriteCharacters(), WriteString()). Vendar pa ni nedvoumne možnosti za pretvorbo dolžine niza v znakih v podoben parameter v bajtih. Odvisno od vsebine niza in kodiranja bo to razmerje drugačno. Zato morate pri delu s katero koli podatkovno strukturo, ki vključuje nize spremenljive dolžine, jasno razumeti, v katerih enotah so izražene dolžine nizov.
Če je v razpoložljivih podatkih dolžina niza navedena v bajtih in je niz določen v večbajtnem kodiranju s spremenljivo dolžino (na primer UTF-8), potem z uporabo binarnih podatkovnih objektov branje take strukture iz datoteke v podatkov tipa String na splošno ni mogoče.
Toda v tem primeru lahko preprosto spremenite položaj branja/pisanja v datotečnem toku. Če je dolžina niza podana v znakih, potem je takšen niz mogoče prebrati v podatke tipa String, vendar postane nemogoče spremeniti položaj branja/pisanja v takem toku.
Če želite pridobiti dolžino niza v bajtih, lahko uporabite naslednjo funkcijo za pretvorbo niza v objekt BinaryData:

funkcija Pridobite binarne podatke iz niza(Vrednost StrParameter, kodiranje vrednosti = “UTF-8”)
MemoryThread = Nova pomnilniška nit;
Pisatelj = Novo WriteData(StreamMemory);
Writer.Write String(StrParameter, kodiranje);
Pisatelj. Zapri();
Vrni StreamMemory.CloseAndGetBinaryData();
EndFunction

Dejansko velikost v bajtih lahko dobite s klicem funkcije Size() na objektu BinaryData, ki je pridobljen kot rezultat funkcije.
Hkratna uporaba predmetov ni priporočljiva Branje podatkov/pisanje podatkov in pretočne predmete. Če med dvema zaporednima operacijama branja iz ReadData ali dvema zaporednima operacijama pisanja v WriteData pride do spremembe položaja v toku, s katerim delujejo objekti Ch ShadowData/WriteData– se ustvari izjema. Tako naslednji primer prikazuje pravilno spremembo položaja v toku pri zapisovanju podatkov v tok:

Stream = newStreamInMemory();

WriteData.WriteString("Pozdravljen, svet!");
WriteData.Close();
Stream.Go (0, PositionInStream.Start);
DataWrite = newDataWrite(Stream);
WriteData.WriteString("Adijo!");
WriteData.Close();
Naslednji primer hi na vrženo izjemo:

Tok = NewStreamInMemory();

WriteData.WriteString(“Pozdravljen, svet!”);
Stream.Go(0, PositionInStream.Start);
// Naslednja vrstica bo vrgla izjemo
WriteData.WriteString(“Adijo!”);
Hkrati so možne situacije, ko bo vedenje sistema nepravilno, vendar napake ne bodo ustvarjene:

Tok = GetStream();
ReadData = new ReadData(Stream);
TestString = ReadData.Read();
Začetni položaj = Stream.CurrentPosition();
DataWrite = newDataWrite(Stream);
WriteData.WriteString(“Nepričakovan niz”);
WriteData.Close();
Stream.Go(InitialPosition, PositionInStream.Start);
// Na splošno je nemogoče določiti, katera vrednost bo postavljena v spremenljivko TestString2
TestLine2 = ReadData.ReadLine();

Obnašanje, opisano v tem razdelku, je posledica o Objekti Data Reader/Data Writer uporabljajo lastne medpomnilnike, ko delajo s tokom. Zaradi tega se dejanski položaj navoja razlikuje od logičnega položaja, ki nastane kot rezultat opravljenih operacij.
Prav tako ni podprta sočasna uporaba objektov Data Reader in Data Writer, ki za svoje delo uporabljata eno nit.

Tehnološka platforma 1C:Enterprise 8 vam omogoča, da poljubne datoteke shranite v informacijsko bazo, jih od tam pridobite in uporabite. različne poti. Oglejmo si te operacije na primerih.

Preden naložite datoteko v informacijsko bazo 1C, morate pridobiti polni naslov datoteke na disku. Delo s pogovornimi okni za izbiro datotek je opisano v .

Za shranjevanje datotek uporabite atribut (ali registrirajte vir) z vrsto StorageValues.

Nalaganje poljubne datoteke v informacijsko bazo 1C

Vsako datoteko je mogoče predstaviti kot binarne podatke in vanj naložiti Shranjevanje vrednosti.

Pri pretvorbi binarnih podatkov v objekt StorageValues uporabljen dizajn nove StorageValues ​​(podatki, stiskanje) z dvema parametroma:

  1. podatki— binarni podatki, ki jih je treba shraniti v shrambo
  2. Stiskanje— kompresijsko razmerje algoritma deflacije. Celo število v območju -1...9. -1 je privzeta stopnja stiskanja. 0 - brez kompresije, 9 - največja kompresija. Privzeta vrednost: -1. Parameter je neobvezen; če ni določen, se stiskanje ne uporablja.

//Pretvori datoteko v binarne podatke
File = New BinaryData(Path) ;

//Ustvarite nov objekt za shranjevanje vrednosti

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

Shranjevanje poljubne datoteke iz informacijske baze 1C na disk

Če želite datoteko iz baze podatkov 1C shraniti na disk, morate določiti pot in ime datoteke. Če želite to narediti, obstaja pogovorno okno za shranjevanje datotek, delo s katerim je opisano v.

//Pridobi binarne podatke iz pomnilnika
//Shranjevanje podatkov - atribut objekta s tipom Shranjevanje vrednosti

//Zapiši prejete podatke na disk
//IN spremenljiva pot je polni naslov datoteke na disku
podatki. Napiši (pot);

Ogled datoteke, ki se nahaja v informacijski bazi 1C

Za ogled datoteke, shranjene v zbirki podatkov, morate imeti v računalniku nameščeno aplikacijo, ki odpre datoteko.

//Pridobite ime začasne datoteke z zahtevano pripono
//V spremenljivko Razširitev morate vnesti pripono datoteke, na primer "pdf"
Pot = GetTemporaryFileName(Extension) ;

//Prejemanje podatkov iz pomnilnika
//Shranjevanje podatkov - atribut objekta s tipom Shranjevanje vrednosti
Podatki = shramba podatkov. Get() ;

//Zapisovanje podatkov v začasno datoteko
podatki. Napiši (pot);

//Poskus odpreti datoteko v predvideni aplikaciji
//Če aplikacije ni mogoče najti, se prikaže sistemsko pogovorno okno "Odpri z ...".
LaunchApplication(Path) ;

Skoraj vse informacije se lahko shranijo v shrambo vrednosti, npr.

... slike (fotografije):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Enumerations.Types dodatnih informacij o Objects.Image; Storage = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// na tem mestu prikaže vse ... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

...dokument preglednice:

TabDoc=Nov tabelarični dokument; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); Napiši();

Konec postopka

Postopek RestoreFromStoragePress(Element)

TabDoc=Storage.Get(); Če TabDoc<>Nedefinirano ThenFormElements.TabularDocumentField1.Output(TabDoc); endIf;

Konec postopka

... poljubne datoteke (binarni podatki):

XZ = NewValueStorage(NewBinaryData(file));

Eight podpira stiskanje podatkov, shranjenih v pomnilniku:

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

... zunanja obdelava in poročanje:

Postopek LoadProcessingIntoStorage(PropsStorageType)

Stopnja stiskanja = Stiskanje novih podatkov (9); //9 največjih PropsStorageType = New StorageValues(New BinaryData("c:\reports\report.epf", stopnja stiskanja));

Konec postopka

Postopek StartProcessingFromStorage(PropsStorageType)

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

Konec postopka

Delo s shranjevanjem

Če so bili binarni podatki, jih je mogoče obnoviti iz shrambe vrednosti z metodo Get in zapisati v datoteko z metodo Write().

If TypeValue(Storage)<>Vnesite ("BinaryData") Nato

BinaryData = Storage.Get();

BinaryData = shranjevanje;

endIf; BinaryData.Write(FileName);

Če je bil na primer Wordov dokument (datoteka doc ali druga registrirana vrsta datoteke), ga je mogoče odpreti takole:

LaunchApplication(FileName);

Če želite počistiti polje vrste Shramba vrednosti, mu morate dodeliti Nedefinirano:

PropsStorage = Nedefinirano;

Delo z datotekami in slikami v vgrajenem jeziku 1C:Enterprise 8

Namen

Upravljana aplikacija izvaja nov mehanizem za delo z datotekami. Omogoča izmenjavo datotek med informacijsko bazo in odjemalsko aplikacijo. Funkcija ta mehanizem je, da je namenjeno uporabi v tanek odjemalec in spletnega odjemalca ter je zasnovan tako, da upošteva omejitve ravnanja z datotekami, ki jih nalagajo spletni brskalniki.

Mehanizem je nabor metod, ki jih je mogoče uporabiti za shranjevanje podatkov, ki jih lokalno shrani uporabnik, v začasno shrambo informacijsko bazo, prenese te podatke iz začasne shrambe v bazo podatkov in jih vrne v uporabnikov računalnik. Najpogostejše težave z aplikacijami, ki jih rešuje ta mehanizem, so shranjevanje spremljajočih informacij, na primer slik blaga, dokumentov, povezanih s pogodbami itd.

Obseg metode

Začasno skladiščenje

Začasna shramba je specializirano področje informacijske baze, v katero je mogoče postaviti binarne podatke. Glavni namen je začasno shranjevanje informacij med interakcijo med odjemalcem in strežnikom, preden se prenesejo v bazo podatkov.

Potreba po začasnem shranjevanju se pojavi, ker model delovanja spletnega brskalnika zahteva, da se uporabniško izbrana datoteka prenese neposredno na strežnik brez možnosti shranjevanja na odjemalca. Ko je datoteka prenesena, se postavi v začasno shrambo in se lahko nato uporabi pri zapisovanju predmeta v bazo podatkov.

Najbolj tipična aplikacijska naloga, ki jo rešuje začasno shranjevanje, je zagotavljanje dostopa do datotek ali slik, preden je predmet zabeležen v informacijski bazi, na primer v obliki elementa.

Datoteka ali binarni podatki, shranjeni v pomnilniku, so identificirani z edinstvenim naslovom, ki se lahko kasneje uporabi pri operacijah pisanja, branja ali brisanja. Ta naslov podajo metode za pisanje datoteke v začasno shrambo. Ločena metoda v vgrajenem jeziku vam omogoča, da ugotovite, ali je posredovani naslov naslov, ki kaže na podatke v začasni shrambi.

Informacijska baza

Mehanizem vam omogoča dostop do binarnih podatkov, shranjenih v atributih tipa Value Storage.

Tako kot v primeru začasne hrambe je dostop do informacij možen preko posebnega naslova. Dobite ga s posebno metodo, tako da posredujete povezavo do predmeta ali ključa za vnos registra informacij in ime atributa. V primeru tabelarnega dela je dodatno potreben prenos indeksa vrstice tabelarnega dela.

Metode za delo z datotekami imajo omejitve pri delu s podrobnostmi informacijske baze. Zanje je za razliko od začasne hrambe na voljo samo branje informacij, ne pa tudi pisanje ali brisanje.

Opis metod za delo z datotekami

Shranjevanje podatkov v začasno shrambo

Najbolj tipičen scenarij za uporabo tega mehanizma vključuje prvotno namestitev uporabniških podatkov v začasno shrambo. Za to obstajata dve metodi: PlaceFile() in PlaceFileInTemporaryStorage().

Prva metoda, PlaceFile(), postavi datoteko iz lokalnega datotečnega sistema v začasno shrambo. Metoda lahko sprejme ciljni naslov v shrambo. Če ni definiran oz prazna vrstica, potem bo ustvarjena nova datoteka in metoda bo vrnila svoj naslov prek ustreznega parametra.

Če je parameter, ki določa interaktivni način delovanja, nastavljen na True, potem bo metoda prikazala standardno pogovorno okno za izbiro datoteke, v katerem lahko izberete datoteko za shranjevanje. V tem primeru bo metoda vrnila tudi naslov izbrane datoteke.

Posledično metoda vrne False, če je uporabnik interaktivno zavrnil izvedbo operacije v pogovornem oknu za izbiro datoteke. Metoda je na voljo samo na odjemalcu.

Druga metoda, PlaceFileInTemporaryStorage(), je podobna prejšnji, le da je na voljo na strežniku in podatki, ki jih je treba zapisati v začasno shrambo, niso predstavljeni kot pot v datotečnem sistemu, temveč kot variabilni tip BinaryData. Podobno, če ciljni naslov ni naveden, se v pomnilniku ustvari nova datoteka. Njegov naslov je vrnjen kot rezultat funkcije.

Pridobivanje datoteke iz začasnega pomnilnika

Ko pišete objekt v informacijsko bazo, boste morda morali izvleči podatke iz začasne shrambe in jih postaviti na primer v atribut. Za to obstaja ustrezna strežniška metoda - GetFileFromTemporaryStorage(). Ta metoda pridobi podatke iz začasnega pomnilnika in jih vrne kot rezultat. Če želite to narediti, morate navesti naslov v začasni shrambi. Ta naslov vrneta zgoraj opisani metodi PlaceFile() in PlaceFileInTemporaryStorage(), če sta uspešno izvedeni.

Brisanje datoteke iz začasne shrambe

Ko so podatki shranjeni v podrobnosti, lahko datoteko v začasni shrambi izbrišete. V ta namen obstaja metoda DeleteFileFromTemporaryStorage(), ki izbriše datoteko iz začasnega pomnilnika. Metoda vzame kot parameter naslov datoteke v začasni shrambi. Na voljo na strežniku.

Preverjanje naslova za začasno hrambo

Naslov datoteke lahko označuje začasno shranjevanje in podrobnosti v informacijski bazi. Za preverjanje njegove vrste obstaja metoda This isTemporaryStorageAddress().

Preveri, ali je posredovan naslov naslov, ki kaže na trgovino. Vrne True, če naslov kaže na začasno shrambo. Metoda je na voljo na strežniku.

Prejem naslova rekvizitov

Ko so podatki postavljeni v podrobnosti v informacijski bazi, boste morda morali do njih dostopati z uporabo datotečnih metod.

Toda preden prejmete podatke, na primer od nepremičnine, morate pridobiti naslov te nepremičnine. V ta namen obstaja metoda GetFileAddressInInformationBase().

Njegov namen je vrniti naslov datoteke v informacijski bazi v skladu z izvirnimi parametri. Če želite to narediti, morate posredovati ključ objekta (lahko je povezava do objekta ali ključ za vnos registra informacij) in ime atributa. Če želite pridobiti naslov datoteke, shranjene v atributu tabelarnega dela, morate pred imenom atributa v parametru, ki določa ime atributa, dodati ime tabelarnega dela in piko ».«. Metoda je na voljo tako na odjemalcu kot na strežniku.

Pridobivanje datoteke iz informacijske baze

Metoda GetFile() prejme datoteko iz informacijske baze in jo shrani v lokalno datotečni sistem uporabnik. Prvi parameter podaja naslov datoteke v rekvizitih ali začasni shrambi datotek. Drugi parameter določa ciljno lokacijo nastale datoteke. V neinteraktivnem načinu morate določiti pot. V interaktivnem načinu je parameter neobvezen.

Privzeto se metoda izvaja v interaktivnem načinu, kar pomeni, da je zadnji parameter True. To pomeni, da se prikaže pogovorno okno, v katerem lahko določite dejanje s prejeto datoteko: zaženete jo ali shranite na lokacijo, ki jo določi uporabnik. Če je interaktivni način aktiven in parameter Target disk file path ni podan, operacija odpiranja datoteke ni na voljo. Vrne logično vrednost. False pomeni, da se je uporabnik odločil za preklic operacije v pogovornem oknu za interaktivno shranjevanje datoteke.

Primer uporabe datotečnih metod

// Prejemanje datoteke z diska v interaktivnem načinu // in postavitev v začasno shrambo &V odjemalskem postopku SelectDiskFileAndWrite()

Spremenljivka SelectedName; VariableTemporaryStorageAddress; If PutFile(TemporaryStorageAddress, SelectedName, True) Then Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); endIf;

Konec postopka

// Kopiranje datoteke iz začasnega pomnilnika v imenik // atribut, snemanje predmeta, brisanje datoteke iz začasnega // pomnilnika &Na strežniškem postopku Postavite datoteko predmeta (naslov začasne shrambe)

Element imenika = Form AttributesValue("Object"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); Element imenika.Podatki datoteke = NovaVrednostShranjevalnik(BinarniPodatki); FilePathOnDisk = Nova datoteka(DirectoryItem.FileName); Imenik Item.FileName = FilePathOnDisk.Name; Element imenika.Write(); Spremenjeno = False; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueВFormAttributes(Element imenika, "Predmet");

Konec postopka

// Branje datoteke iz rekvizitov in njeno shranjevanje // v lokalni disk v interaktivnem načinu &Na odjemalskem postopku ReadFileAndSaveToDisk()

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

Konec postopka

Podpora za naslove v slikovnem polju

Kontrolnik Picture Field podpira prikaz slike, določene z naslovom datoteke v začasni shrambi ali v bazi podatkov.

Če želite to narediti, morate atribut nastaviti v lastnosti Podatki elementa obrazca vrsto niza. Vrednost tega atributa bo interpretirana kot naslov slike.

Primer // Povezovanje slikovnega polja z naslovom slike v začasni // shrambi. AddressPictures tvorijo podrobnosti vrste niza

PlaceFile(PictureAddress,True)

Picture.Data = AddressPictures

Omejitve pri delu s spletnim odjemalcem

Delovanje opisanega mehanizma pri uporabi spletnega odjemalca ima nekaj omejitev. Te omejitve so povezane z varnostnim modelom brskalnika. Tako na primer odjemalec ne more samostojno shraniti datoteke v lokalni datotečni sistem, kar pomeni, da je na voljo samo interaktivna različica odjemalskih metod PlaceFile() in GetFile(). Pri poskusu uporabe neinteraktivnega načina se sproži izjema. Pogovorna okna, prikazane interaktivno, so značilne za določeno vrsto brskalnika.

Funkcije pri delu z Value Storage na odjemalcu

Težava:

Kadar ima dokument v tabelarnem delu atribut tipa Shramba vrednosti, upočasni odpiranje obrazca dokumenta, če ta atribut vsebuje velike količine podatkov.

Domnevni razlog:

Morda se pri odpiranju obrazca odjemalcu ne pošlje povezava do podatkov, ki se nahajajo v Value Store, ampak podatki sami.

rešitev

  • V lastnostih atributa tabele obrazca je zastavica "Vedno uporabi". Če je nastavljeno, se vsebina polja vedno prenaša med strežnikom in odjemalcem – na primer pri odpiranju obrazca. Ta zastavica mora biti onemogočena, vendar je treba to upoštevati v kodi, saj privzeto za to polje na odjemalcu ne bo vrednosti. Primer najdete v 1C:Arhiv.

Še bolje je uporabiti začasna hramba za prenos datotek med odjemalcem in strežnikom.