Kako sačuvati binarne podatke u 1c datoteku. Rad sa binarnim podacima. Čitanje podataka iz rekvizita

Ispis (Ctrl+P)

16.3. Rad sa binarnim podacima

16.3.1. opće informacije

Prilikom implementacije aplikativnih rješenja može doći do situacija u kojima je potrebno analizirati različite binarne podatke. Na primjer, trebate odrediti vrstu datoteke pomoću potpisa ili izvršiti neke manipulacije sa slikom. Za rad s binarnim podacima, 1C:Enterprise pruža posebna softverska sučelja. Zatim ćemo pogledati mogućnosti za rad sa binarnim podacima.
Sav rad sa binarnim podacima zasniva se na konceptu toka. Protok je logička generalizacija proizvoljnog (u opštem slučaju) izvora podataka (Stream objekat). Sistem ne pruža mogućnost kreiranja nezavisnog Stream objekta koji nije povezan ni sa jednim izvorom. Ali postoje izvedeni objekti koji se mogu kreirati - tok povezan sa datotekom na disku (FileStream objekat) ili tok kreiran u memoriji (MemoryStream objekat). Strim vam omogućava i čitanje podataka i pisanje. Za određivanje mogućnosti izvođenja određenih operacija, tok (i izvedeni objekti) ima posebne metode koje vam omogućavaju da odredite koji
operacije su dostupne sa ovom niti (metod AvailableRecord(), Dostupan za čitanje(), AvailableChangePosition()).
Ako trebate raditi sa streamom na višem nivou, posebno čitati/pisati podatke kao što su broj (različite dubine bita) ili string, tada su objekti DataRead/DataWrite namijenjeni za to. Koristeći ove objekte, možete uzeti strukturiraniji pristup binarnim podacima koji se nalaze u toku. Tako, na primjer, znajući format datoteke, možete prilično udobno čitati takvu datoteku, dobivajući potrebne podatke iz zaglavlja (koja su, po pravilu, predstavljena brojem tipova i nizom), preskačući nepotrebne blokove podataka i učitavanje potrebnih za obradu.
Opća šema za rad s binarnim podacima može se predstaviti na sljedeći način:

  1. Prijem prijenosa je u toku
  2. Kreiran je objekt Data Reader ili Data Writer.
  3. Koristeći objekt kreiran u koraku 2, izvode se potrebne radnje.
  4. Objekt kreiran u koraku 2 je zatvoren.
  5. Ako više nisu potrebne operacije, tok dobiven u koraku 1 se zatvara.
  6. Ako trebate nastaviti raditi sa streamom, možete postaviti novu poziciju u streamu (ako je ova operacija podržana) i nastaviti s radom počevši od koraka 2.

Vrijedi napomenuti da je moguće kombinirati paragrafe 1 i 2. Drugim riječima, sistem pruža mogućnost kreiranja objekata Čitanje podataka/pisanje podataka direktno iz, na primjer, objekta BinaryData.
Za obavljanje različitih operacija sa binarnim podacima, sistem pruža mogućnost dobijanja nekog dela toka kao zasebnog fragmenta sa slučajnim (bajt-po-bajt) pristupom (objekt BufferBinaryData). Veličina bafera je postavljena prilikom kreiranja i ne može se kasnije mijenjati. Kada radite sa baferom binarnih podataka, moguće je raditi sa brojevima različitih bitnih dubina kao
kao jedna celina. 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 bafer na nekoliko i kombinirati nekoliko bafera binarnih podataka u jedan rezultirajući bafer.
Važno je napomenuti da rad sa baferom binarnih podataka može značajno pojednostaviti implementaciju ako se rad sa binarnim podacima implementira na strani klijentske aplikacije u asinkronom režimu. U ovom slučaju, čitanje podataka u bafer će biti izvedeno kao asinhrona operacija, a rad sa podacima bafera će biti sinhroni.
Rad sa binarnim podacima dostupan je na strani klijenta (uključujući web klijenta) aplikacije i na strani servera, kao i u sinhronim i asinhronim radnim šemama. Dalji primjeri će koristiti sinkronu radnu shemu.

16.3.2. Čitanje binarnih podataka

Kao primjer čitanja binarnih podataka, razmotrit ćemo zadatak određivanja ispravnog formata datoteke koji je odabran u sistemu za dalju upotrebu. Kao datoteka koja se provjerava koristit će se .wav datoteka sa audio podacima. Za pohranjivanje .wav datoteka koristi se format datoteke za razmjenu resursa (RIFF), čiji je opis dat na linku:

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 poretku bajtova.
3. Sljedeća 4 bajta sadrže tekstualni tip korištenih podataka: WAVE.
Za izvođenje ovih radnji trebat će vam sljedeći kod na ugrađenom jeziku:

Pročitaj = Novo ReadData(FileName, ByteEndian.LittleEndian);
FileFormat = Read.ReadCharacters(4);
Veličina podataka = Read.ReadInteger32();
FileType = Read.ReadCharacters(4);
Ako Format datoteke<>“RIFF” Onda
Report("Ovo nije RIFF datoteka");
Povratak ;
EndIf ;
Ako je FileType = “WAVE” Onda
Izvještaj („Ovo je WAV datoteka sa podacima, veličina ” + DataSize + ” bajtova”);
Inače
Izvještaj („Ovo nije WAV datoteka“);
Povratak;
endIf;

Pogledajmo primjer detaljnije.
Prvo se otvara datoteka čije je ime sadržano u varijabli FileName, datoteka se otvara za čitanje ( FileOpenMode.Open), samo će čitati iz datoteke ( FileAccess.Read) i 16-bajtni bafer će se koristiti za čitanje.
Zatim se generira tok za čitanje podataka, koji će imati najmanji značajni redoslijed bajtova za podatke tipa Broj. Zatim se 4 znaka, 32-bitni cijeli broj i još 4 znaka čitaju iz rezultirajućeg toka. Dobijeni podaci se analiziraju i na osnovu rezultata analize se donosi odluka da li je odabrana datoteka .wav datoteka ili ne.

16.3.3. Pisanje binarnih podataka

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

Unos = Novo WriteData(FileName);
Za indeks = 0 do 255 ciklusa
Write.WriteByte(Indeks);
EndCycle;
Record.Close() ;

Ovaj primjer upisuje 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 o kojoj se raspravljalo u prethodnom primjeru, gdje se dobiva tok datoteke i podaci se upisuju u ovaj tok datoteke.

16.3.4. Rad sa baferom binarnih podataka

Kao što je gore spomenuto, bafer binarnih podataka pruža zgodan način za manipulaciju 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 potpuno iste informacije o formatu datoteke. Stoga je potrebno iz izvorne datoteke pročitati bafer veličine zaglavlja datoteke. Zaglavlje se sastoji od tri 4-bajtna polja. Dakle, potrebno je pročitati 12 bajtova.

Buffer = Novo BufferBinaryData(12);
Fajl = FileStreams.Open(direktorij privremenih datoteka() + “Windows Logon.wav”, FileOpenMode.Open, FileAccess.Read);
File.Read(Međuspremnik, 0, 12);
Veličina = 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 = novi DataReader(RowStream);
FileType = ReadLines.ReadCharacters( 4, “windows-1251”);
ReadLines.Close();

Proces unosa podataka u bafer binarnih podataka nije ništa posebno. Dalje operacije zahtijevaju neke komentare. Čitanje brojeva bilo koje podržane dubine bita je moguće sa bilo koje pozicije u međuspremniku. IN u ovom primjeru Buffer.ReadInteger32(4); znači čitanje 32-bitnog cijelog broja počevši od bajta 4 bafera. 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 direktnog pozicioniranja u tom baferu.
Čitanje stringa, međutim, nije podržano od strane bafera binarnih podataka. Stoga biste trebali koristiti objekat koji vam to omogućava: Čitanje podataka. DataReader objekat se ne može kreirati iz bafera binarnih podataka. Ali na osnovu bafera binarnih podataka, možete kreirati tok koji je univerzalni posrednik između lokacije fizičke memorije informacija (datoteka, bafer binarnih podataka) i objekta visoke razine koji vam omogućava rad s ovim podacima.
Kada se DataReader objekat kreira na osnovu toka, on počinje čitati podatke sa pozicije u ovog trenutka instaliran u stream. Stoga se u primjeru prvo postavlja pozicija u toku, a zatim se kreira DataReader objekt i čita se potreban broj znakova. Detaljan opis za razliku između broja bajtova i znakova pri čitanju nizova, pogledajte sljedeći odjeljak 16.3.5

16.3.5. Karakteristike upotrebe

Kada koristite binarne podatke, treba da uzmete u obzir karakteristike rada sa podacima tipa String. Posebnost je u tome što se dužina stringa koji vraća funkcija globalnog konteksta StrLength() mjeri u znakovima. U simbolima treba da naznačite veličinu podataka koji će se čitati/pisati u metodama za pisanje/čitanje nizova u objektima za rad sa binarnim podacima ( Pročitaj znakove(),
ReadString(), WriteCharacters(), WriteString()). Međutim, ne postoji jednoznačna opcija za pretvaranje dužine niza u znakovima u sličan parametar u bajtovima. Ovisno o sadržaju niza i kodiranju, ovaj omjer će biti različit. Stoga, kada radite sa bilo kojom strukturom podataka koja uključuje nizove promjenjive dužine, trebali biste jasno razumjeti u kojim jedinicama su dužine stringova izražene.
Ako je u dostupnim podacima dužina niza naznačena u bajtovima, a niz je specificiran u višebajtnom kodiranju promjenjive dužine (na primjer, UTF-8), tada koristeći objekte binarnih podataka, čitajući takvu strukturu iz datoteke u podaci tipa String općenito su nemogući.
Ali u ovom slučaju, možete lako promijeniti poziciju čitanja/pisanja u toku datoteke. Ako je dužina stringa 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 dužinu niza u bajtovima, možete koristiti sljedeću funkciju za pretvaranje stringa u objekt BinaryData:

Funkcija Dobijte binarne podatke iz niza(StrParameter vrijednosti, kodiranje vrijednosti = “UTF-8”)
MemoryThread = NovaMemoryThread;
Writer = Novo WriteData(StreamMemory);
Writer.Write String(StrParameter, Encoding);
Writer.Close();
Vrati StreamMemory.CloseAndGetBinaryData();
EndFunction

Stvarna veličina u bajtovima može se dobiti pozivanjem funkcije Size() na objektu BinaryData, koji se dobiva kao rezultat funkcije.
Ne preporučuje se istovremena upotreba objekata Čitanje podataka/pisanje podataka i stream objekata. Ako između dvije uzastopne operacije čitanja iz ReadData ili dvije uzastopne operacije pisanja u WriteData dođe do promjene pozicije u toku s kojim CH objekti rade ShadowData/WriteData– generira se izuzetak. Dakle, sljedeći primjer demonstrira ispravnu promjenu pozicije u toku prilikom pisanja podataka u stream:

Stream = newStreamInMemory();

WriteData.WriteString("Zdravo svijete!");
WriteData.Close();
Stream.Go (0, PositionInStream.Start);
DataWrite = newDataWrite(Stream);
WriteData.WriteString("Zbogom!");
WriteData.Close();
Sljedeći primjer zdravo za izbacivanje izuzetka:

Stream = NewStreamInMemory();

WriteData.WriteString(“Zdravo, svijete!”);
Stream.Go(0, PositionInStream.Start);
// Sljedeći red će izbaciti izuzetak
WriteData.WriteString(“Zbogom!”);
Istovremeno, moguće su situacije kada će ponašanje sistema biti pogrešno, ali neće biti generirane greške:

Stream = GetStream();
ReadData = novi ReadData(Stream);
TestString = ReadData.Read();
InitialPosition = Stream.CurrentPosition();
DataWrite = newDataWrite(Stream);
WriteData.WriteString(“Neočekivani niz”);
WriteData.Close();
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 čitač podataka/pisač podataka koriste svoje vlastite bafere kada rade sa streamom. Kao rezultat toga, stvarna pozicija niti se razlikuje od logičke pozicije koja se formira kao rezultat dovršenih operacija.
Takođe, nije podržana istovremena upotreba objekata Data Reader i Data Writer, koji za svoj rad koriste jednu nit.

Tehnološka platforma 1C:Enterprise 8 omogućava vam da spremate proizvoljne datoteke u bazu podataka, preuzimate ih odatle i koristite Različiti putevi. Pogledajmo ove operacije koristeći primjere.

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

Za pohranjivanje datoteka koristite atribut (ili registarski resurs) s tipom StorageValues.

Prijenos proizvoljne datoteke u bazu podataka 1C

Bilo koja datoteka može biti predstavljena kao binarni podatak i učitana u Value Storage.

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

  1. Podaci— binarni podaci koji se moraju pohraniti u memoriju
  2. Kompresija— omjer kompresije algoritma deflacije. Cijeli broj u rasponu -1...9. -1 je zadani nivo kompresije. 0 - nema kompresije, 9 - maksimalna kompresija. Zadana vrijednost: -1. Parametar nije obavezan; ako nije specificiran, kompresija se ne koristi.

//Pretvorite datoteku u binarne podatke
Fajl = Novi binarni podaci (putanja) ;

//Kreirajte novi objekt za pohranu vrijednosti

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

Spremanje proizvoljne datoteke iz 1C infobaze na disk

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

//Nabavite binarne podatke iz skladišta
//Skladištenje podataka - atribut objekta s tipom Value Storage

//Upis primljenih podataka na disk
//IN varijabla Put je puna adresa datoteke na disku
Podaci. Pisanje (putanja) ;

Pregledanje datoteke koja se nalazi u bazi podataka 1C

Da biste vidjeli datoteku sačuvanu u bazi podataka, morate imati instaliranu aplikaciju na vašem računaru koja otvara datoteku.

//Nabavite ime privremene datoteke sa potrebnom ekstenzijom
//U varijablu Extension morate staviti ekstenziju datoteke, na primjer "pdf"
Putanja = GetTemporaryFileName(Extension) ;

//Primanje podataka iz skladišta
//Skladištenje podataka - atribut objekta s tipom Value Storage
Podaci = Skladište podataka. Get() ;

//Upisivanje podataka u privremenu datoteku
Podaci. Pisanje (putanja) ;

//Pokušavam otvoriti datoteku u predviđenoj aplikaciji
//Ako aplikacija nije pronađena, pojavit će se sistemski dijalog "Otvori sa...".
LaunchApplication (putanja) ;

Gotovo sve informacije mogu se pohraniti u skladište vrijednosti, npr.

... slike (fotografije):

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

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

...proračunski dokument:

TabDoc=Novi tablični dokument; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); Pisati();

Kraj procedure

Procedura RestoreFromStoragePress(Element)

TabDoc=Storage.Get(); Ako TabDoc<>Undefined ThenFormElements.TabularDocumentField1.Output(TabDoc); endIf;

Kraj procedure

... proizvoljni fajlovi (binarni podaci):

XZ = NewValueStorage(NewBinaryData(file));

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

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

... eksterna obrada i izvještavanje:

Procedura LoadProcessingIntoStorage(PropsStorageType)

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

Kraj procedure

Procedura StartProcessingFromStorage(PropsStorageType)

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

Kraj procedure

Rad sa skladištem

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

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

Binarni podaci = Storage.Get();

Binarni podaci = Skladištenje;

endIf; BinaryData.Write(FileName);

Ako je to bio, na primjer, Word dokument (doc datoteka ili druga registrovana vrsta datoteke), onda se može otvoriti na sljedeći način:

LaunchApplication(FileName);

Da obrišete polje tipa Pohrana vrijednosti, morate mu dodijeliti Nedefinirano:

PropsStorage = Nedefinisano;

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

Svrha

Upravljana aplikacija implementira novi mehanizam za rad sa datotekama. Omogućava razmjenu datoteka između baze podataka i klijentske aplikacije. Feature ovaj mehanizam je da je namenjen za upotrebu u tanki klijent i Web Client i dizajniran je da uzme u obzir ograničenja rukovanja datotekama koja nameću web pretraživači.

Mehanizam je skup metoda koje se mogu koristiti za postavljanje podataka koje je korisnik lokalno pohranio u privremenu memoriju baza informacija, prenijeti ove informacije iz privremene memorije u bazu podataka i vratiti ih na računar korisnika. Najčešći aplikativni problemi koji se rješavaju ovim mehanizmom su skladištenje pratećih informacija, na primjer, slike robe, dokumenti vezani za ugovore itd.

Obim metode

Privremeno skladište

Privremena pohrana je specijalizirana oblast informacijske baze u koju se mogu smjestiti binarni podaci. Glavna svrha je privremeno pohranjivanje informacija tokom interakcije klijent-server prije nego što se prenesu u bazu podataka.

Potreba za privremenim skladištenjem nastaje jer operativni model web pretraživača zahtijeva da se datoteka koju odabere korisnik prenese direktno na server bez mogućnosti pohranjivanja na klijentu. Kada se datoteka prenese, ona se stavlja u privremenu memoriju i može se koristiti prilikom pisanja objekta u bazu podataka.

Najtipičniji zadatak aplikacije koji se rješava privremenim skladištenjem 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 memoriju identificiraju se jedinstvenom adresom, koja se kasnije može koristiti u operacijama pisanja, čitanja ili brisanja. Ova adresa je data metodama za pisanje datoteke u privremenu memoriju. Zasebna metoda u ugrađenom jeziku omogućava vam da odredite da li je proslijeđena adresa adresa koja upućuje na podatke u privremenoj memoriji.

Baza informacija

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

Kao iu slučaju privremenog skladištenja, pristup informacijama je moguć preko posebne adrese. Možete ga dobiti putem posebne metode prosljeđivanjem veze do objekta ili ključa za unos informacija u registar i imena atributa. U slučaju tabelarnog dijela, dodatno je potrebno prenijeti indeks reda tabelarnog dijela.

Metode za rad sa datotekama imaju ograničenja u radu sa detaljima baze podataka. Za njih, za razliku od privremenog skladištenja, dostupno je samo čitanje informacija, ali ne i njihovo pisanje ili brisanje.

Opis metoda za rad sa datotekama

Pohranjivanje podataka u privremenu memoriju

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

Prva metoda, PlaceFile(), postavlja datoteku iz lokalnog sistema datoteka u privremenu memoriju. Metoda može prihvatiti ciljnu adresu u memoriji. Ako nije definisano ili jeste prazan red, tada će biti kreirana 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 koju želite smjestiti u 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 dijalogu za odabir datoteke. Metoda je dostupna samo na klijentu.

Druga metoda, PlaceFileInTemporaryStorage(), je slična prethodnoj, samo što je dostupna na serveru, a podaci koji se upisuju u privremenu memoriju nisu predstavljeni kao putanja u sistemu datoteka, već kao varijabilni tip BinarniData. Isto tako, ako nije navedena ciljna adresa, kreira se nova datoteka u memoriji. Njegova adresa se vraća kao rezultat funkcije.

Preuzimanje datoteke iz privremene memorije

Prilikom pisanja objekta u infobazu, možda ćete morati izdvojiti podatke iz privremene memorije i smjestiti ih, na primjer, u atribut. Za ovo postoji odgovarajuća serverska metoda - GetFileFromTemporaryStorage(). Ova metoda preuzima podatke iz privremene memorije i vraća ih kao rezultat. Da biste to učinili, morate navesti adresu u privremenoj memoriji. Ovu adresu vraćaju gore opisane metode PlaceFile() i PlaceFileInTemporaryStorage() ako se uspješno izvrše.

Brisanje fajla iz privremene memorije

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

Provjera adrese za privremeno skladištenje

Adresa datoteke može ukazivati ​​i na privremenu memoriju i detalje u bazi podataka. Za provjeru njegovog tipa postoji metoda This isTemporaryStorageAddress().

Provjerava da li je proslijeđena adresa adresa koja upućuje na trgovinu. Vraća True ako adresa ukazuje na privremenu memoriju. Metoda je dostupna na serveru.

Primanje adrese rekvizita

Nakon što su podaci stavljeni u detalje u bazi podataka, možda ćete morati da im pristupite pomoću metoda datoteka.

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

Njegova svrha je da vrati adresu datoteke u infobazu prema originalnim parametrima. Da biste to učinili, trebate proslijediti ključ objekta (ovo može biti ili veza do objekta ili ključ za unos informacija u registar) i naziv atributa. Ako trebate dobiti adresu datoteke pohranjene u atributu tabelarnog dijela, prije naziva atributa u parametru koji specificira naziv atributa, potrebno je dodati naziv tabelarnog dijela i tačku “.”. Metoda je dostupna i na klijentu i na serveru.

Preuzimanje fajla iz infobaze

Metoda GetFile() prima datoteku iz baze podataka i sprema je na lokal sistem podataka korisnik. Prvi parametar specificira adresu datoteke u rekvizitima ili privremenoj memoriji datoteka. Drugi parametar specificira odredišnu lokaciju rezultirajuće datoteke. U neinteraktivnom načinu rada, morate navesti putanju. U interaktivnom načinu rada, parametar je opcionalan.

Po defaultu, metoda se izvršava u interaktivnom načinu, odnosno 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 lokaciju koju odredi korisnik. Ako je interaktivni način aktivan i parametar putanje datoteke ciljnog diska nije specificiran, operacija otvaranja datoteke nije dostupna. Vraća logičku vrijednost. Netačno znači da je korisnik izabrao da otkaže operaciju u interaktivnom dijaloškom okviru za spremanje datoteke.

Primjer korištenja metoda datoteka

// Primanje datoteke s diska u interaktivnom načinu // i postavljanje u privremenu memoriju &Na klijentskoj proceduri SelectDiskFileAndWrite()

Varijabla SelectedName; VariableTemporaryStorageAddress; Ako PutFile(TemporaryStorageAddress, SelectedName, True) onda Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); endIf;

Kraj procedure

// Kopiranje datoteke iz privremene memorije u // atribut direktorija, snimanje objekta, brisanje datoteke iz privremene // memorije &Na serveru Procedura Stavite objektnu datoteku (adresa privremene pohrane)

Element direktorija = Form AttributesValue("Object"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); Element direktorija. Podaci datoteke = NewValueStorage(BinaryData); FilePathOnDisk = Nova datoteka(DirectoryItem.FileName); Ime stavke direktorija = FilePathOnDisk.Name; Element direktorija.Write(); Modificirano = Netačno; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueVFormAttributes(Element direktorija, "Objekat");

Kraj procedure

// Čitanje datoteke iz rekvizita i spremanje // u lokalni disk u interaktivnom načinu &Na klijentskoj proceduri ReadFileAndSaveToDisk()

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

Kraj procedure

Podrška za adrese u polju slike

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

Da biste to učinili, morate postaviti atribut u svojstvu Data elementa obrasca string type. Vrijednost ovog atributa će se tumačiti kao adresa slike.

Primjer // Vezivanje polja slike za adresu slike u privremenoj // memoriji. AddressPictures formiraju detalje tipa string

Datoteka mjesta (Adresa slike, Tačno)

Picture.Data = AddressPictures

Ograničenja u radu sa Web klijentom

Rad opisanog mehanizma pri korištenju Web klijenta ima neka ograničenja. Ova ograničenja se odnose na sigurnosni model pretraživača. Tako, na primjer, klijent ne može samostalno pohraniti datoteku u lokalni sistem datoteka, odnosno dostupna je samo interaktivna verzija klijentskih metoda PlaceFile() i GetFile(). Izuzetak se stvara kada se pokuša koristiti neinteraktivni način rada. Dijaloški okviri, prikazane interaktivno, specifične su za određeni tip pretraživača.

Funkcije pri radu sa Value Storage na klijentu

problem:

Kada dokument ima atribut tipa Skladište vrijednosti u tabličnom dijelu, to usporava otvaranje obrasca dokumenta ako ovaj atribut sadrži velike podatke.

Pretpostavljeni razlog:

Možda se prilikom otvaranja obrasca klijentu ne šalje veza do podataka koji se nalaze u Value Storeu, već sami podaci.

Rješenje

  • U svojstvima atributa tabele obrasca nalazi se zastavica "Uvek koristi". Ako je postavljeno, sadržaj polja se uvijek prenosi između servera i klijenta - na primjer, prilikom otvaranja obrasca. Ova zastavica mora biti onemogućena, ali to se mora uzeti u obzir u kodu, jer po defaultu neće biti vrijednosti za ovo polje na klijentu. Primjer se može naći u 1C: Arhiva.

Još je bolje koristiti privremeno skladište za prijenos datoteka između klijenta i servera.