Kako kopirati binarne podatke 1s. Proširivanje funkcionalnosti rada sa binarnim podacima

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 je opcioni, ako nije naveden, onda se kompresija 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
//Varijabla Putanja sadrži punu adresu 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) ;

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 s protokom za više visoki nivo, posebno za čitanje/pisanje podataka kao što je broj (različite dubine bita) ili string, tada su objekti DataRead/DataWrite namijenjeni za to. Uz pomoć ovih objekata moguće je zauzeti 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 sa 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 da se neki dio toka dobije kao poseban fragment s nasumičnim (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 sinkronim 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 pročitati bafer veličine zaglavlja datoteke iz izvorne 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 preuzimanja 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 nekoliko brojeva koji se nalaze u različitim mjestima bafer, 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 objekt 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 koja je trenutno instalirana u toku. 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 prilikom čitanja 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 stringa 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 dobija kao rezultat funkcije.
Ne preporučuje se istovremena upotreba objekata Čitanje podataka/pisanje podataka i stream objekte. 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 = New StreamInMemory();

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();

Opisano u ovaj odeljak ponašanje je uzrokovano 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.

Implementirano u verziji 8.3.10.2168.

Postepeno povećavamo funkcionalnost za rad sa binarnim podacima. Postoji nekoliko razloga za to. Prvo, nismo realizovali sve što smo planirali. I drugo, u procesu razgovora o novim mogućnostima, od vas smo dobili niz želja koje smo također odlučili da realizujemo.

Nove funkcije za pretvaranje binarnih podataka u različite formate

U globalnom kontekstu, dodali smo veliki broj novih funkcija za pretvaranje binarnih podataka. Tako, na primjer, možete izvršiti naprijed i nazad konverziju binarnih podataka u običan string, format string Base64 i format string BinHex. Osim toga, možete i same binarne podatke pretvoriti u formate Base64, BinHex i nazad.

Slične konverzije su podržane za tip BufferBinaryData. Osim toga, možete pretvoriti bafer binarnih podataka u binarne podatke i obrnuto.

Osim toga, dvije nove funkcije vam omogućavaju da podijelite binarne podatke na nekoliko dijelova, i obrnuto, da kombinirate nekoliko objekata tipa BinarniData u jedan. U ovom slučaju, novi objekt će sadržavati podatke svih dijelova redoslijedom koji odredite.

Ove funkcije su po konceptu slične dijeljenju i spajanju datoteka, ali u mnogim slučajevima su efikasnije. Zato što nema potrebe za prvo pohranjivanje binarnih podataka u datoteku i zato što nema nepotrebnog kopiranja podataka prilikom razdvajanja.

Dodavanje mogućnosti rada sa streamovima objektima koji rade s datotekama

Budući da je korištenje binarnih podataka u velikoj mjeri povezano s operacijama datoteka, smatrali smo da je potpuno logično i prirodno dodati rad sa streamovima onim objektima koji trenutno čitaju i pišu datoteke na ovaj ili onaj način.

Kao rezultat, sada možete otvarati tokove za čitanje i pisanje kada koristite objekte kao što su:

  • ReadingText I WriteText;
  • ReadingFastInfoSet I EntryFastInfoSet;
  • ReadingHtml I PostHtml;
  • Čitanje JSON-a I JSON unos;
  • Čitanje XML-a I XML unos;
  • Čitanje Zip datoteke I Snimi zip datoteku.

Možete primiti tijelo kao stream kada radite sa HTTP-om:

  • HTTPRequest I HTTPResponse;
  • HTTPServiceRequest I HTTPServiceResponse.
  • Tekstualni dokument;
  • TabularDocument;
  • FormattedDocument;
  • GeographicalScheme;
  • GraphicScheme;
  • FTPConnection.

Pisanje u stream je sada dostupno kada radite sa tipovima Slika I ConvertToCanonicalXML. Osim toga, rad sa streamovima je sada podržan raznim metodama koje tipovi imaju XSL konverzija, Menadžer kriptografije, CertificateCryptography I HashingData.

Efikasno kopiranje čitanjem i pisanjem podataka

Binarni alati koje smo implementirali omogućili su kopiranje tokova. Ali na velikim količinama podataka ova operacija nije izvedena vrlo efikasno.

Dakle, tip ReadData implementirali smo novu metodu CopyB(). Ne samo da eliminiše ovaj problem, već i pojednostavljuje tekst, čineći ga razumljivijim.

Na primjer, ranije je bilo moguće primati binarne podatke iz jednog toka i pisati ih u drugi tok.

Sada nema potrebe za primanjem binarnih podataka, kopiranje se vrši u fazi čitanja podataka.

Dobra stvar je što možete kopirati ne samo u stream, već i na objekat WriteData. Ova opcija je zgodna kada, osim podataka iz izvornog toka, trebate upisati neke svoje podatke u izlazni tok.

Bitove logičke operacije na baferu binarnih podataka

Sada možete koristiti bitne logičke operacije kada radite sa binarnim baferima podataka. Kao rezultat ovih operacija, rezultat bitne kombinacije originalnih bajtova i bajtova u datom međuspremniku biće upisan u izvorni bafer prema pravilima odabrane logičke operacije. Realizovali smo sledeće operacije:

  • WriteBitBit();
  • WriteBitOr();
  • WriteBitExclusiveOr();
  • WriteBitIne();
  • Invert().

Dobar primjer upotrebe bitnih logičkih operacija je problem dekodiranja formata za razmjenu trgovinska oprema. Na primjer, format razmjene sa maloprodajnom opremom opisan je poljem od 1 bajta. Ovo polje sadrži skup karakteristika koje opisuju asortiman proizvoda:

  • Bitovi 0-2: poreska stopa;
  • Bit 3: 0 - komadna roba, 1 - težina robe;
  • Bit 4: 0 - dozvoli prodaju, 1 - zabrani prodaju;
  • Bit 5: 0 - omogućiti brojanje količine, 1 - onemogućiti brojanje količine;
  • Bit 6: 0 - pojedinačna prodaja je zabranjena, 1 - pojedinačna prodaja je dozvoljena;
  • Bit 7: Rezervisano.

Tada kod koji izdvaja ove informacije i predstavlja ih u obliku pogodnom za dalju obradu može izgledati ovako.

Dobijanje broja iz heksadecimalnih i binarnih literala

  • NumberFromHexString();
  • NumberFromBinaryString().

Binarni literali su korisni za definiranje maski kada se koriste u kombinaciji s bitwise operacijama. Na primjer, u prethodnom primjeru s analizom formata razmjene sa komercijalnom opremom, maske su specificirane pomoću decimalnih brojeva. Ovo nije baš zgodno, jer prilikom pisanja i čitanja koda morate stalno mentalno prevoditi decimalni broj u binarni sistem.

Mnogo je zgodnije koristiti binarne literale umjesto toga. Istovremeno, kod postaje jasniji i vjerovatnoća grešaka je značajno smanjena.

Heksadecimalni literali su zgodni za korištenje prilikom raščlanjivanja tehničkih formata: slika, zvuka, video formata.

Promjene u tehnologiji vanjskih NativeAPI komponenti

Ranije je postojao niz ograničenja prilikom prijenosa binarnih podataka između 1C:Enterprise i eksterne komponente. Na primjer, bilo je nemoguće prenijeti binarne podatke na vanjsku komponentu, a pri radu u web klijentu razmjena binarnih podataka bila je potpuno nemoguća.

Sada uklanjamo sva ova ograničenja. Možete razmjenjivati ​​binarne podatke u oba smjera, pa čak i u web klijentu.

To ni na koji način neće utjecati na rad postojećih vanjskih komponenti. Oni će raditi kao i do sada. Ali u novokreiranim komponentama sada možete proslijediti objekte kao parametre BinarniData.

Binarni podaci u 1C namijenjeni su za pohranjivanje datoteka proizvoljnog formata. Uz njihovu pomoć možete:

  • Organizirajte interakciju koristeći binarni protokol sa razni uređaji;
  • Čuvajte datoteke bilo kojeg formata kao atribute metapodataka;
  • Pretvorite tekstualne podatke u binarne (najčešće se koriste za slanje izvještaja);
  • Rad sa binarnim podacima u memoriji.

Šta sistem može da uradi

Prilikom rada sa binarnim podacima, Platforma 8.3 može izvršiti sljedeće radnje:

  1. Čitanje i pisanje binarnih podataka;
  2. Premještanje podataka sa klijenta na server i nazad koristeći privremenu memoriju;
  3. Inicijalizirati objekt tipa “Slika” koristeći binarne datoteke;
  4. Pročitajte ih sa World Wide Weba koristeći objekte “Privitak pošte”, “HTTP veza” itd.
  5. Koristi kriptografskim sredstvima za šifriranje i potpisivanje važnih priloga;
  6. Koristeći objekat “Data Hashing”, izračunajte hash funkciju.

Spremanje podataka u detalje

Na primjer, napravimo direktorij u probnoj konfiguraciji.

U stvari, korištenje istog direktorija za pohranjivanje informacija o nomenklaturi i binarnim slikama je malo pogrešno. Uz dovoljno velike količine podataka i teške, velike datoteke, mogu se pojaviti problemi. neželjeni zastoji i “kočnice” u radu sistema. Sa stanovišta sistema, bilo bi mnogo ispravnije organizovati poseban direktorijum „Slike“, link do kojeg bismo mogli postaviti kao tip rekvizita.


Važno je napomenuti da zbog činjenice da atributi tipa “ValueStorage” koji sadrže binarne podatke nisu dostupni u režimu upravljane aplikacije, njima se može pristupiti samo pomoću metode FormAttributesValue.


Polje poruke predstavlja binarni zapis podataka spremišta vrijednosti.

Čitanje podataka iz rekvizita

Kreirajmo obradu koja će datoteku pohranjenu u binarnoj formi u našoj konfiguraciji izvesti u tabelarni dokument (ovo je potrebno, na primjer, za štampanje logotipa kompanije).


U suštini, ovo je sav kod koji nam treba. Koristeći Get() operator, čitamo binarne podatke pohranjene u odgovarajućem atributu direktorija i prenosimo ih u objekt "Slika", koji će biti prikazan u gornjoj lijevoj ćeliji tabelarni dokument oblici (slika 9).

Fig.9

Konverzija podataka

Nije uobičajeno, ali se dešava da je pri radu sa nestandardnim razmjenama sa eksternim sistemima potrebno konvertirati podatke iz binarnog formata u Base64 format ili obrnuto.

U većini slučajeva, platforma automatski konvertuje podatke ako se to ne dogodi, morate koristiti globalne funkcije prevođenja:

  1. Base64String – konvertuje navedenu vrednost u niz odgovarajućeg kodiranja;
  2. Base64Value – vrši obrnutu konverziju.

Optimizacija gornjeg koda

Kod predstavljen na slici 4 svakako radi, ali uz jedno značajno upozorenje: ako je polje za potvrdu “Modality use mode” označeno u svojstvima konfiguracije (Slika 10). U suprotnom, njegovo korištenje će uzrokovati grešku.
Fig.10

Kako biste spriječili da se to dogodi, dok ste u modulu obrasca elementa direktorija, idite na izbornik Tekst->Refaktoriranje->Zastarjeli sinhroni pozivi->Konvertiraj pozive modula.

Nakon nekog vremena, sinhroni pozivi će se automatski pretvoriti u asinhrone, a kod će poprimiti oblik (slika 11)

Fig.11

mob_info