Kako spremiti binarne podatke u 1c datoteku. Rad s binarnim podacima. Čitanje podataka s rekvizita

Ispis (Ctrl+P)

16.3. Rad s binarnim podacima

16.3.1. opće informacije

Prilikom implementacije aplikativnih rješenja mogu postojati situacije u kojima je potrebno analizirati razne binarne podatke. Na primjer, morate odrediti vrstu datoteke pomoću potpisa ili izvršiti neke manipulacije sa slikom. Za rad s binarnim podacima, 1C:Enterprise nudi posebna softverska sučelja. Zatim ćemo pogledati mogućnosti rada s binarnim podacima.
Sav rad s binarnim podacima temelji se na konceptu toka. Teći je logična generalizacija proizvoljnog (u općem slučaju) izvora podataka (Stream object). Sustav ne pruža mogućnost stvaranja neovisnog Stream objekta koji nije povezan ni s jednim izvorom. Ali postoje izvedeni objekti koji se mogu stvoriti - tok povezan s datotekom na disku (FileStream objekt) ili tok stvoren u memoriji (MemoryStream objekt). Tok vam omogućuje i čitanje i pisanje podataka. Za određivanje mogućnosti izvođenja određenih operacija, tok (i izvedeni objekti) ima posebne metode koje vam omogućuju da odredite koji
operacije su dostupne s ovom niti (metode Dostupan zapis(), DostupnoPročitaj(), DostupnoPromijeniPoziciju()).
Ako trebate raditi s streamom na višoj razini, posebno čitati/pisati podatke kao što je broj (različite dubine bita) ili niz, tada su za to namijenjeni objekti DataRead/DataWrite. Koristeći ove objekte, možete imati strukturiraniji pristup binarnim podacima koji se nalaze u toku. Tako, na primjer, znajući format datoteke, možete sasvim udobno čitati takvu datoteku, dobivajući potrebne podatke iz zaglavlja (koja su, u pravilu, predstavljena vrstama broj i niz), preskačući nepotrebne blokove podataka i učitavanje potrebnih za obradu.
Opća shema za rad s binarnim podacima može se predstaviti na sljedeći način:

  1. Prijem streama u tijeku
  2. Stvara se objekt Data Reader ili Data Writer.
  3. Pomoću objekta stvorenog u koraku 2 izvode se potrebne radnje.
  4. Objekt stvoren u koraku 2 je zatvoren.
  5. Ako nisu potrebne dodatne operacije, tok dobiven u koraku 1 se zatvara.
  6. Ako trebate nastaviti raditi s streamom, možete postaviti novu poziciju u streamu (ako je ova operacija podržana) i nastaviti s radom počevši od koraka 2.

Važno je napomenuti da je moguće kombinirati odlomke 1 i 2. Drugim riječima, sustav pruža mogućnost stvaranja objekata Čitanje podataka/pisanje podataka izravno iz, na primjer, objekta BinaryData.
Za izvođenje različitih operacija s binarnim podacima, sustav pruža mogućnost dobivanja nekog dijela toka kao zasebnog fragmenta s nasumičnim (bajt po bajt) pristupom (objekt BufferBinaryData). Veličina međuspremnika postavljena je prilikom kreiranja i ne može se kasnije mijenjati. Kada radite s međuspremnikom binarnih podataka, moguće je raditi s brojevima različitih dubina bita kao
kao jednu cjelinu. U ovom slučaju, moguće je odrediti redoslijed bajtova riječima: “little endian” ili “big endian” (big endian). Također je moguće podijeliti jedan međuspremnik u nekoliko i kombinirati nekoliko međuspremnika binarnih podataka u jedan rezultirajući međuspremnik.
Važno je napomenuti da rad s međuspremnikom binarnih podataka može značajno pojednostaviti implementaciju ako je rad s binarnim podacima implementiran na strani klijentske aplikacije u asinkronom načinu rada. U ovom slučaju, čitanje podataka u međuspremnik bit će izvedeno kao asinkrona operacija, a rad s podacima međuspremnika bit će sinkroni.
Rad s binarnim podacima dostupan je na strani klijenta (uključujući web klijenta) aplikacije i na strani poslužitelja te u sinkronim i asinkronim shemama rada. Daljnji primjeri koristit će shemu sinkronog rada.

16.3.2. Čitanje binarnih podataka

Kao primjer čitanja binarnih podataka, razmotrit ćemo zadatak određivanja ispravnog formata datoteke koji je odabran u sustavu za daljnju upotrebu. Kao datoteka koja se provjerava koristit će se .wav datoteka sa audio podacima. Za pohranjivanje .wav datoteka koristi se Resource Interchange File Format (RIFF) čiji je opis dat na poveznici:

https://msdn.microsoft.com/enus/library/windows/desktop/ee415713.aspx (na Engleski jezik). Za primjer čitanja koristit će se sljedeće informacije o formatu:
1. Prva 4 bajta datoteke sadrže identifikator formata: RIFF.
2. sljedeća 4 bajta sadrže veličinu stvarnih audio podataka u malom redoslijedu bajtova.
3. Sljedeća 4 bajta sadrže tekstualnu vrstu korištenih podataka: WAVE.
Za izvođenje ovih radnji trebat će vam sljedeći kôd na ugrađenom jeziku:

Pročitano = Novo ReadData(FileName, ByteEndian.LittleEndian);
FileFormat = Read.ReadCharacters(4);
Veličina podataka = Read.ReadInteger32();
FileType = Read.ReadCharacters(4);
Ako Format datoteke<>“RIFF” Zatim
Izvješće ("Ovo nije RIFF datoteka");
Povratak ;
Završi ako ;
Ako je FileType = “WAVE” Zatim
Izvješće (“Ovo je WAV datoteka s podacima, veličina ” + Veličina podataka + ” bajtova”);
Inače
Izvješće ("Ovo nije WAV datoteka");
Povratak;
završi ako;

Pogledajmo primjer detaljnije.
Najprije se otvara datoteka čije je ime sadržano u varijabli FileName, datoteka se otvara za čitanje ( FileOpenMode.Open), čitat će samo iz datoteke ( FileAccess.Read) i 16-bajtni međuspremnik će se koristiti za čitanje.
Zatim se generira tok za čitanje podataka, koji će imati najmanje značajan poredak bajtova za podatke tipa Broj. Zatim se iz dobivenog toka čitaju 4 znaka, 32-bitni cijeli broj i još 4 znaka. Dobiveni podaci se analiziraju i na temelju rezultata analize donosi se odluka je li odabrana datoteka .wav datoteka ili ne.

16.3.3. Zapisivanje binarnih podataka

Zapisivanje binarnih podataka u datoteku, u najjednostavnijem slučaju, radi se na sljedeći način:

Ulaz = Novo WriteData(FileName);
Za indeks = 0 do 255 ciklus
Write.WriteByte(Index);
EndCycle;
Zapis.Zatvori() ;

Ovaj primjer zapisuje u datoteku niz bajtova od 0 do 255 (0xFF u heksadecimalnom obliku). Ovo je najjednostavnija opcija snimanja.
Također možete koristiti metodu sličnu metodi čitanja opisanoj u prethodnom primjeru, gdje se dobiva tok datoteke i podaci se zapisuju u taj tok datoteke.

16.3.4. Rad s međuspremnikom binarnih podataka

Kao što je gore spomenuto, međuspremnik binarnih podataka pruža prikladan način za manipuliranje fragmentima binarnih podataka.
Podržano je ne samo čitanje podataka, već i pisanje.
Kao primjer, razmotrit ćemo raščlanjivanje zaglavlja RIFF datoteke iz primjera čitanja podataka (pogledajte ovdje). Za izradu primjera koristit će se točno iste informacije o formatu datoteke. Dakle, potrebno je iz izvorne datoteke pročitati međuspremnik veličine zaglavlja datoteke. Zaglavlje se sastoji od tri polja od 4 bajta. Dakle, potrebno je pročitati 12 bajtova.

Međuspremnik = Novo BufferBinaryData(12);
Datoteka = FileStreams.Open(Imenik privremenih datoteka() + “Windows prijava.wav”, FileOpenMode.Open, FileAccess.Read);
File.Read(Buffer, 0, 12);
Veličina = Međuspremnik.ReadInteger32(4);
StreamString = newStreamInMemory(Buffer);
StreamRows.Go(0, PositionInStream.Start);

Format datoteke = ReadLines.ReadCharacters(4, “windows-1251”);
ReadLines.Close();
StreamRows.Go(8, PositionInStream.Start);
RowReader = novi DataReader(RowStream);
Vrsta datoteke = ReadLines.ReadCharacters( 4, "windows-1251");
ReadLines.Close();

Proces unosa podataka u međuspremnik binarnih podataka nije ništa posebno. Daljnje operacije zahtijevaju neke komentare. Čitanje brojeva bilo koje podržane dubine bita moguće je s bilo koje pozicije u međuspremniku. U u ovom primjeru Međuspremnik.ReadInteger32(4); znači čitanje 32-bitnog cijelog broja počevši od bajta 4 međuspremnika. Dakle, ako trebate pročitati više brojeva koji se nalaze na različitim mjestima u međuspremniku, to se može učiniti bez izravnog pozicioniranja u tom međuspremniku.
Čitanje niza, međutim, nije podržano od strane međuspremnika binarnih podataka. Stoga biste trebali koristiti objekt koji vam to omogućuje: Čitanje podataka. Objekt DataReader ne može se stvoriti iz međuspremnika binarnih podataka. Ali na temelju međuspremnika binarnih podataka možete stvoriti tok koji je univerzalni posrednik između fizičke lokacije za pohranu informacija (datoteka, međuspremnik binarnih podataka) i objekta visoke razine koji vam omogućuje rad s tim podacima.
Kada se objekt DataReader kreira na temelju toka, on počinje čitati podatke od pozicije u ovaj trenutak instaliran u potoku. Dakle, u primjeru se prvo postavlja pozicija u streamu, a zatim se kreira objekt DataReader i čita potreban broj znakova. Detaljan opis za razliku između broja bajtova i znakova prilikom čitanja nizova, pogledajte sljedeći odjeljak 16.3.5

16.3.5. Značajke korištenja

Kada koristite binarne podatke, trebali biste uzeti u obzir značajke rada s podacima tipa String. Posebnost je u tome što se duljina niza koju vraća funkcija globalnog konteksta StrLength() mjeri u znakovima. U simbolima treba naznačiti veličinu podataka za čitanje/pisanje u metodama za pisanje/čitanje nizova u objektima za rad s binarnim podacima ( ReadCharacters(),
ReadString(), Napiši znakove(), WriteString()). Međutim, ne postoji jednoznačna opcija za pretvaranje duljine niza u znakovima u sličan parametar u bajtovima. Ovisno o sadržaju niza i kodiranju, ovaj će omjer biti drugačiji. Stoga, kada radite s bilo kojom strukturom podataka koja uključuje nizove promjenjive duljine, trebali biste jasno razumjeti u kojim jedinicama su izražene duljine niza.
Ako je u dostupnim podacima duljina niza navedena u bajtovima, a niz je naveden u višebajtnom kodiranju varijabilne duljine (na primjer, UTF-8), tada korištenje binarnih podatkovnih objekata, čitanje takve strukture iz datoteke u podaci tipa String općenito su nemogući.
Ali u ovom slučaju možete jednostavno promijeniti poziciju čitanja/pisanja u toku datoteke. Ako je duljina niza navedena u znakovima, tada postaje moguće pročitati takav niz u podatke tipa String, ali postaje nemoguće promijeniti poziciju čitanja/pisanja u takvom toku.
Da biste dobili duljinu niza u bajtovima, možete koristiti sljedeću funkciju za pretvaranje niza u objekt BinaryData:

Funkcija Dobivanje binarnih podataka iz niza(Vrijednost StrParameter, kodiranje vrijednosti = “UTF-8”)
MemoryThread = NovaMemoryThread;
Pisac = Novo WriteData(StreamMemory);
Writer.Write String(StrParametar, Kodiranje);
Književnik.Zatvori();
Vrati StreamMemory.CloseAndGetBinaryData();
EndFunction

Stvarna veličina u bajtovima može se dobiti pozivom funkcije Size() na objektu BinaryData, koji se dobiva kao rezultat funkcije.
Ne preporučuje se istodobna uporaba predmeta Čitanje podataka/pisanje podataka i potočni objekti. Ako između dvije uzastopne operacije čitanja iz ReadData ili dvije uzastopne operacije pisanja u WriteData dođe do promjene položaja u toku s kojim Ch objekti rade ShadowData/WriteData– generira se iznimka. Dakle, sljedeći primjer pokazuje ispravnu promjenu položaja u toku prilikom pisanja podataka u tok:

Stream = newStreamInMemory();

WriteData.WriteString("Pozdrav svijete!");
WriteData.Close();
Stream.Go (0, PositionInStream.Start);
DataWrite = newDataWrite(Stream);
WriteData.WriteString("Pozdrav!");
WriteData.Close();
Sljedeći primjer hi za izbacivanje iznimke:

Stream = NewStreamInMemory();

WriteData.WriteString(“Zdravo, svijete!”);
Stream.Go(0, PositionInStream.Start);
// Sljedeći redak izbacit će iznimku
WriteData.WriteString(“Ćao!”);
Istodobno, moguće su situacije kada će ponašanje sustava biti neispravno, ali se neće generirati greške:

Stream = GetStream();
ReadData = novi ReadData(Stream);
TestString = ReadData.Read();
Početni položaj = Stream.CurrentPosition();
DataWrite = newDataWrite(Stream);
WriteData.WriteString(“Neočekivani niz”);
ZapišiPodatke.Zatvori();
Stream.Go(InitialPosition, PositionInStream.Start);
// Općenito, nemoguće je odrediti koja će vrijednost biti smještena u varijablu TestString2
TestLine2 = ReadData.ReadLine();

Ponašanje opisano u ovom odjeljku uzrokovano je o Objekti Data Reader/Data Writer koriste vlastite međuspremnike kada rade s streamom. Zbog toga se stvarni položaj niti razlikuje od logičnog položaja koji nastaje kao rezultat izvršenih operacija.
Također, nije podržana istovremena upotreba Data Reader i Data Writer objekata koji za svoj rad koriste jednu nit.

Tehnološka platforma 1C:Enterprise 8 omogućuje vam spremanje proizvoljnih datoteka u informacijsku bazu, dohvaćanje od tamo i korištenje različiti putevi. Pogledajmo ove operacije na primjerima.

Prije učitavanja datoteke u informacijsku bazu 1C morate dobiti punu adresu datoteke na disku. Rad s dijalozima za odabir datoteke opisan je u .

Za pohranu datoteka koristite atribut (ili registrirajte resurs) s tipom StorageValues.

Prijenos proizvoljne datoteke u informacijsku bazu 1C

Bilo koja datoteka može se predstaviti kao binarni podatak i učitati u nju Pohranjivanje vrijednosti.

Prilikom pretvaranja binarnih podataka u objekt StorageValues korišten dizajn nove StorageValues ​​(podaci, kompresija) sa dva parametra:

  1. Podaci— binarni podaci koje je potrebno pohraniti u pohranu
  2. Kompresija— omjer kompresije algoritma deflacije. Cijeli broj u rasponu -1...9. -1 je zadana razina kompresije. 0 - bez kompresije, 9 - maksimalna kompresija. Zadana vrijednost: -1. Parametar je neobavezan; ako nije naveden, kompresija se ne koristi.

//Pretvori datoteku u binarne podatke
File = New BinaryData(Path) ;

//Stvorite novi objekt za pohranu vrijednosti

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

Spremanje proizvoljne datoteke iz 1C infobaze na disk

Da biste datoteku iz baze podataka 1C spremili na disk, morate odrediti put i naziv datoteke. Da biste to učinili, postoji dijaloški okvir za spremanje datoteke, rad s kojim je opisan u.

//Dohvati binarne podatke iz pohrane
//Pohrana podataka - atribut objekta s tipom Pohrana vrijednosti

//Zapisati primljene podatke na disk
//U varijabla Path je puna adresa datoteke na disku
Podaci. Napiši (put) ;

Pregled datoteke koja se nalazi u informacijskoj bazi 1C

Za pregled datoteke spremljene u bazi podataka morate imati instaliranu aplikaciju na računalu koja otvara datoteku.

//Dohvatite naziv privremene datoteke sa traženim nastavkom
//U varijablu Extension trebate staviti nastavak datoteke, na primjer "pdf"
Put = GetTemporaryFileName(Extension) ;

//Primi podatke iz pohrane
//Pohrana podataka - atribut objekta s tipom Pohrana vrijednosti
Podaci = Spremište podataka. Get() ;

//Pisanje podataka u privremenu datoteku
Podaci. Napiši (put) ;

//Pokušavam otvoriti datoteku u predviđenoj aplikaciji
//Ako aplikacija nije pronađena, pojavit će se dijaloški okvir sustava "Otvori s...".
Pokreni aplikaciju(put) ;

Gotovo sve informacije mogu se pohraniti u pohranu vrijednosti, npr.

... slike (fotografije):

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

// na ovom mjestu prikazuje sve... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

...dokument proračunske tablice:

TabDoc=Novi tabularni dokument; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); Pisati();

Kraj postupka

Procedura RestoreFromStoragePress(Element)

TabDoc=Storage.Get(); Ako TabDoc<>Nedefinirano ThenFormElements.TabularDocumentField1.Output(TabDoc); završi ako;

Kraj postupka

...proizvoljne datoteke (binarni podaci):

XZ = NewValueStorage(NewBinaryData(file));

Osam podržava kompresiju podataka smještenih u pohranu:

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

... vanjska obrada i izvješćivanje:

Procedura LoadProcessingIntoStorage(PropsStorageType)

Stupanj kompresije = NewDataCompression(9); //9 maksimalnih PropsStorageType = New StorageValues(New BinaryData("c:\reports\report.epf", Compression Rate));

Kraj postupka

Procedura StartProcessingFromStorage(PropsStorageType)

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

Kraj postupka

Rad s pohranom

Ako su to bili binarni podaci, tada se mogu vratiti iz pohrane vrijednosti pomoću metode Get i zapisati u datoteku pomoću metode Write().

If TypeValue(Storage)<>Upišite ("BinaryData") Zatim

BinarniPodaci = Storage.Get();

Binarni podaci = pohrana;

završi ako; BinaryData.Write(FileName);

Ako je to bio npr. Word dokument (doc datoteka ili druga registrirana vrsta datoteke), onda se može otvoriti ovako:

Pokreni aplikaciju (naziv datoteke);

Za brisanje polja tipa Value Storage, morate mu dodijeliti Nedefinirano:

PropsStorage = Nedefinirano;

Rad s datotekama i slikama na ugrađenom jeziku 1C:Enterprise 8

Svrha

Upravljana aplikacija implementira novi mehanizam za rad s datotekama. Omogućuje razmjenu datoteka između infobaze i klijentske aplikacije. Značajka ovaj mehanizam je da je namijenjen za korištenje u tanak klijent i Web Client te je dizajniran da uzme u obzir ograničenja rukovanja datotekama koja nameću web preglednici.

Mehanizam je skup metoda koje se mogu koristiti za smještaj podataka koje korisnik lokalno pohranjuje u privremenu pohranu informacijska baza, prenijeti te podatke iz privremene pohrane u bazu podataka i vratiti ih na računalo korisnika. Najčešći aplikacijski problemi koje rješava ovaj mehanizam su pohranjivanje popratnih informacija, primjerice slika robe, dokumenata vezanih uz ugovore itd.

Opseg metode

Privremeno skladištenje

Privremena pohrana je specijalizirano područje informacijske baze u koju se mogu smjestiti binarni podaci. Glavna svrha je privremeno pohranjivanje informacija tijekom interakcije klijent-poslužitelj prije nego što se prebace u bazu podataka.

Potreba za privremenom pohranom javlja se jer model rada web preglednika zahtijeva da se datoteka koju korisnik odabere izravno prenese na poslužitelj bez mogućnosti pohranjivanja na klijentu. Kada se datoteka prenese, ona se stavlja u privremenu pohranu i zatim se može koristiti prilikom pisanja objekta u bazu podataka.

Najčešći aplikacijski zadatak koji rješava privremena pohrana je omogućavanje pristupa datotekama ili slikama prije nego što se objekt zabilježi u informacijskoj bazi, na primjer, u obliku elementa.

Datoteka ili binarni podaci smješteni u pohranu identificiraju se jedinstvenom adresom, koja se kasnije može koristiti u operacijama pisanja, čitanja ili brisanja. Ovu adresu daju metode za pisanje datoteke u privremenu pohranu. Zasebna metoda u ugrađenom jeziku omogućuje vam da odredite je li proslijeđena adresa adresa koja upućuje na podatke u privremenoj pohrani.

Informacijska baza

Mehanizam vam omogućuje pristup binarnim podacima pohranjenim u atributima tipa Value Storage.

Kao iu slučaju privremene pohrane, pristup informacijama moguć je putem posebne adrese. Možete ga dobiti posebnom metodom prosljeđivanjem poveznice na objekt ili ključ unosa registra informacija i naziva atributa. U slučaju tabelarnog dijela dodatno je potrebno prenijeti indeks retka tabelarnog dijela.

Metode za rad s datotekama imaju ograničenja kada rade s detaljima infobaze. Njima je, za razliku od privremene pohrane, dostupno samo čitanje informacija, ali ne i njihovo pisanje ili brisanje.

Opis metoda za rad s datotekama

Spremanje podataka u privremenu pohranu

Najtipičniji scenarij za korištenje ovog mehanizma uključuje početno stavljanje korisničkih podataka u privremenu pohranu. Za to postoje dvije metode: PlaceFile() i PlaceFileInTemporaryStorage().

Prva metoda, PlaceFile(), smješta datoteku iz lokalnog datotečnog sustava u privremenu pohranu. Metoda može prihvatiti ciljnu adresu u pohranu. Ako nije definiran ili jest prazna linija, tada će se stvoriti nova datoteka i metoda će vratiti svoju adresu kroz odgovarajući parametar.

Ako je parametar koji određuje interaktivni način rada True, tada će metoda prikazati standardni dijaloški okvir za odabir datoteke u kojem možete odabrati datoteku za pohranu. U ovom slučaju, metoda će također vratiti adresu odabrane datoteke.

Kao rezultat, metoda vraća False ako je korisnik interaktivno odbio izvršiti operaciju u dijaloškom okviru za odabir datoteke. Metoda je dostupna samo na klijentu.

Druga metoda, PlaceFileInTemporaryStorage(), slična je prethodnoj, osim što je dostupna na poslužitelju, a podaci koji se upisuju u privremenu pohranu nisu predstavljeni kao staza u datotečnom sustavu, već kao varijabilni tip BinarniPodaci. Isto tako, ako ciljna adresa nije navedena, nova datoteka se stvara u memoriji. Njegova adresa se vraća kao rezultat funkcije.

Dohvaćanje datoteke iz privremene pohrane

Prilikom pisanja objekta u informacijsku bazu, možda ćete morati izdvojiti podatke iz privremene pohrane i smjestiti ih, na primjer, u atribut. Za to postoji odgovarajuća poslužiteljska metoda - GetFileFromTemporaryStorage(). Ova metoda dohvaća podatke iz privremene pohrane i vraća ih kao rezultat. Da biste to učinili, morate navesti adresu u privremenoj pohrani. Ovu adresu vraćaju gore opisane metode PlaceFile() i PlaceFileInTemporaryStorage() ako se uspješno izvedu.

Brisanje datoteke iz privremene pohrane

Nakon što su podaci spremljeni u detaljima, datoteka u privremenoj pohrani može se izbrisati. U tu svrhu postoji metoda DeleteFileFromTemporaryStorage(), koja briše datoteku iz privremene memorije. Metoda kao parametar uzima adresu datoteke u privremenoj pohrani. Dostupno na poslužitelju.

Provjera adrese za privremeno skladištenje

Adresa datoteke može označavati i privremenu pohranu i detalje u informacijskoj bazi. Za provjeru njegove vrste postoji metoda This isTemporaryStorageAddress().

Provjerava je li proslijeđena adresa adresa koja upućuje na trgovinu. Vraća True ako adresa upućuje na privremenu pohranu. Metoda je dostupna na poslužitelju.

Primanje adrese rekvizita

Nakon što se podaci smjeste u detalje u informacijskoj bazi, možda ćete im trebati pristupiti pomoću metoda datoteke.

Ali prije nego što primite podatke, na primjer s nekretnine, morate dobiti adresu te nekretnine. U tu svrhu postoji metoda GetFileAddressInInformationBase().

Njegova je svrha vratiti adresu datoteke u infobazu prema izvornim parametrima. Da biste to učinili, morate proslijediti ključ objekta (to može biti veza na objekt ili ključ unosa registra informacija) i naziv atributa. Ako trebate dobiti adresu datoteke pohranjene u atributu tabličnog dijela, prije naziva atributa u parametru koji specificira naziv atributa trebate dodati naziv tabličnog dijela i točku “.”. Metoda je dostupna i na klijentu i na poslužitelju.

Dohvaćanje datoteke iz infobaze

Metoda GetFile() prima datoteku iz infobaze i sprema je u lokal sustav datoteka korisnik. Prvi parametar specificira adresu datoteke u rekvizite ili privremenoj pohrani datoteka. Drugi parametar određuje odredišnu lokaciju rezultirajuće datoteke. U neinteraktivnom načinu rada morate navesti stazu. U interaktivnom načinu rada parametar nije obavezan.

Prema zadanim postavkama, metoda se izvršava u interaktivnom načinu rada, to jest, posljednji parametar je True. To znači da se prikazuje dijaloški okvir u kojem možete odrediti radnju s primljenom datotekom: pokrenuti je ili spremiti na mjesto koje odredi korisnik. Ako je interaktivni način rada aktivan, a parametar Target disk file path nije naveden, operacija otvaranja datoteke nije dostupna. Vraća Booleovu vrijednost. False znači da je korisnik odlučio poništiti operaciju u interaktivnom dijaloškom okviru za spremanje datoteke.

Primjer korištenja metoda datoteke

// Primanje datoteke s diska u interaktivnom načinu // i njezino stavljanje u privremenu pohranu &Na klijentskom postupku SelectDiskFileAndWrite()

Varijabla SelectedName; VariableTemporaryStorageAddress; If PutFile(TemporaryStorageAddress, SelectedName, True) Then Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); završi ako;

Kraj postupka

// Kopiranje datoteke iz privremene pohrane u direktorij // atribut, snimanje objekta, brisanje datoteke iz privremene // pohrane &Na poslužiteljski postupak Postavite datoteku objekta (Adresa privremene pohrane)

Element direktorija = Form AttributesValue("Object"); BinarniPodaci = GetFileFromTemporaryStorage(TemporaryStorageAddress); Element direktorija.Podaci datoteke = NewValueStorage(BinaryData); FilePathOnDisk = Nova datoteka(DirectoryItem.FileName); Direktorij Item.FileName = FilePathOnDisk.Name; Element imenika.Write(); Modificirano = False; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueÂFormAttributes(Directory Element, "Object");

Kraj postupka

// Čitanje datoteke iz propsa i njezino spremanje // u lokalni disk u interaktivnom načinu rada &Na klijentskom postupku ReadFileAndSaveToDisk()

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

Kraj postupka

Podrška za adrese u polju slike

Kontrola polja slike podržava prikaz slike određene adresom datoteke u privremenoj pohrani ili u bazi podataka.

Da biste to učinili, morate postaviti atribut u svojstvu Podaci elementa obrasca vrsta niza. Vrijednost ovog atributa bit će protumačena kao adresa slike.

Primjer // Povezivanje polja slike s adresom slike u privremenoj // pohrani. AddressPictures oblikuje pojedinosti string tipa

PlaceFile(PictureAddress,True)

Slika.Podaci = AdresaSlike

Ograničenja pri radu s web klijentom

Rad opisanog mehanizma pri korištenju web klijenta ima određena ograničenja. Ta su ograničenja povezana sa sigurnosnim modelom preglednika. Tako npr. klijent ne može samostalno spremiti datoteku u lokalni datotečni sustav, odnosno dostupna je samo interaktivna verzija klijentskih metoda PlaceFile() i GetFile(). Iznimka se javlja pri pokušaju korištenja neinteraktivnog načina rada. Dijaloški okviri, prikazani interaktivno, specifični su za određenu vrstu preglednika.

Značajke pri radu s pohranom vrijednosti na klijentu

Problem:

Kada dokument ima atribut tipa Value Storage u tabelarnom dijelu, on usporava otvaranje obrasca dokumenta ako ovaj atribut sadrži velike podatke.

Pretpostavljeni razlog:

Možda se prilikom otvaranja obrasca klijentu ne šalje poveznica na podatke koji se nalaze u Value Storeu, već sami podaci.

Riješenje

  • U svojstvima atributa tablice obrasca nalazi se zastavica "Uvijek koristi". Ako je postavljeno, sadržaj polja se uvijek prenosi između poslužitelja i klijenta - npr. prilikom otvaranja obrasca. Ova zastavica mora biti onemogućena, ali to se mora uzeti u obzir u kodu, jer prema zadanim postavkama neće biti vrijednosti za ovo polje na klijentu. Primjer se može naći u 1C:Archive.

Još je bolje koristiti privremeno skladištenje za prijenos datoteka između klijenta i poslužitelja.