Kaip nukopijuoti dvejetainius duomenis 1c. Darbo su dvejetainiais duomenimis funkcionalumo išplėtimas

Technologinė platforma 1C:Enterprise 8 leidžia informacijos bazėje išsaugoti savavališkus failus, juos iš ten gauti ir naudoti Skirtingi keliai. Pažvelkime į šias operacijas naudodami pavyzdžius.

Prieš įkeldami failą į 1C informacijos bazę, turite gauti visą failo adresą diske. Darbas su failų pasirinkimo dialogais aprašytas .

Norėdami saugoti failus, naudokite atributą (arba registro išteklius) su tipu StorageValues.

Savavališko failo įkėlimas į 1C informacijos bazę

Bet kuris failas gali būti pateikiamas kaip dvejetainiai duomenys ir įkeliamas į Vertės saugykla.

Konvertuojant dvejetainius duomenis į objektą StorageValues naudojamas dizainas naujos saugyklos vertės (duomenys, glaudinimas) su dviem parametrais:

  1. Duomenys— dvejetainiai duomenys, kuriuos reikia saugoti saugykloje
  2. Suspaudimas— Defliacijos algoritmo suspaudimo laipsnis. Sveikasis skaičius diapazone -1...9. -1 yra numatytasis suspaudimo lygis. 0 - nėra suspaudimo, 9 - maksimalus suspaudimas. Numatytoji reikšmė: -1. Parametras yra neprivalomas, jei nenurodytas, suspaudimas nenaudojamas.

//Konvertuokite failą į dvejetainius duomenis
Failas = New BinaryData(Path) ;

//Sukurkite naują vertės saugyklos objektą

DataStorage = NewValueStorage(Failas, NaujasDataCompression(9) ) ;

Savavališko failo išsaugojimas iš 1C informacijos bazės į diską

Norėdami išsaugoti failą iš 1C duomenų bazės į diską, turite nustatyti kelią ir failo pavadinimą. Norėdami tai padaryti, yra failų išsaugojimo dialogo langas, kurio darbas aprašytas.

//Gaukite dvejetainius duomenis iš saugyklos
//Duomenų saugykla – objekto atributas su Value Storage tipu

//Įrašykite gautus duomenis į diską
//Kelio kintamajame yra visas diske esančio failo adresas
Duomenys. Rašyti(Path) ;

Failo, esančio 1C informacijos bazėje, peržiūra

Norėdami peržiūrėti duomenų bazėje išsaugotą failą, kompiuteryje turi būti įdiegta programa, kuri atidaro failą.

//Gaukite laikinojo failo pavadinimą su reikiamu plėtiniu
//Plėtinio kintamajame turite įdėti failo plėtinį, pavyzdžiui, "pdf"
Kelias = GetTemporaryFileName(Plėtinys) ;

//Gauti duomenis iš saugyklos
//Duomenų saugykla – objekto atributas su Value Storage tipu
Duomenys = duomenų saugykla. Gauti ();

//Įrašykite duomenis į laikiną failą
Duomenys. Rašyti(Path) ;

//Bandoma atidaryti failą numatytoje programoje
//Jei programa nerasta, atsiras sistemos dialogo langas „Atidaryti naudojant...“.
LaunchApplication(Path) ;

Spausdinti (Ctrl+P)

16.3. Darbas su dvejetainiais duomenimis

16.3.1. Bendra informacija

Diegiant taikomųjų programų sprendimus gali pasitaikyti situacijų, kai reikia analizuoti įvairius dvejetainius duomenis. Pavyzdžiui, turite nustatyti failo tipą naudodami parašą arba atlikti kai kurias manipuliacijas su paveikslėliu. Norėdami dirbti su dvejetainiais duomenimis, 1C:Enterprise pateikia specialias programinės įrangos sąsajas. Toliau apžvelgsime galimybes dirbti su dvejetainiais duomenimis.
Visas darbas su dvejetainiais duomenimis grindžiamas srauto koncepcija. Srautas yra loginis savavališko (bendruoju atveju) duomenų šaltinio (Stream objekto) apibendrinimas. Sistema nesuteikia galimybės sukurti nepriklausomo srauto objekto, nesusieto su jokiu šaltiniu. Tačiau yra išvestinių objektų, kuriuos galima sukurti – srautą, susietą su diske esančiu failu (objektas „FileStream“) arba atmintyje sukurtą srautą (objektas „MemoryStream“). Srautas leidžia ir skaityti duomenis, ir juos rašyti. Norint nustatyti galimybę atlikti tam tikras operacijas, srautas (ir išvestiniai objektai) turi specialius metodus, leidžiančius nustatyti, kurie
su šia gija galimos operacijos (metodai AvailableRecord(), Galima skaityti (), AvailableChangePosition()).
Jei jums reikia dirbti su srautu daugiau aukštas lygis, ypač norint nuskaityti/rašyti duomenis, tokius kaip skaičius (skirtingo bitų gylio) arba eilutę, tam yra skirti DataRead/DataWrite objektai. Naudodami šiuos objektus galite sistemingiau žiūrėti į sraute esančius dvejetainius duomenis. Taigi, pavyzdžiui, žinodami failo formatą, galite gana patogiai perskaityti tokį failą, gaudami reikiamus duomenis iš antraščių (kurios, kaip taisyklė, vaizduojamos tipų numeriu ir eilute), praleisdami nereikalingus duomenų blokus ir kraunant reikalingus perdirbimui.
Bendrą darbo su dvejetainiais duomenimis schemą galima pavaizduoti taip:

  1. Priimamas srautas
  2. Sukuriamas Data Reader arba Data Writer objektas.
  3. Naudojant 2 veiksme sukurtą objektą, atliekami reikiami veiksmai.
  4. 2 veiksme sukurtas objektas uždaromas.
  5. Jei daugiau operacijų nereikia, srautas, gautas atliekant 1 veiksmą, uždaromas.
  6. Jei jums reikia toliau dirbti su srautu, galite nustatyti naują poziciją sraute (jei ši operacija palaikoma) ir tęsti darbą nuo 2 veiksmo.

Verta paminėti, kad galima derinti 1 ir 2 dalis. Kitaip tariant, sistema suteikia galimybę kurti objektus Skaityti duomenis / rašyti duomenis tiesiogiai iš, pavyzdžiui, BinaryData objekto.
Norint atlikti įvairias operacijas su dvejetainiais duomenimis, sistema suteikia galimybę gauti dalį srauto kaip atskirą fragmentą su atsitiktine (baitas po baito) prieiga (objekto). BufferBinaryData). Buferio dydis nustatomas sukūrimo metu ir vėliau jo keisti negalima. Dirbant su dvejetainiu duomenų buferiu, galima dirbti su įvairaus bitų gylio skaičiais kaip
kaip viena visuma. Šiuo atveju galima nurodyti baitų tvarką žodžiais: „little endian“ arba „big endian“ (didysis endianas). Taip pat galima padalyti vieną buferį į kelis ir sujungti kelis dvejetainius duomenų buferius į vieną gautą buferį.
Svarbu pažymėti, kad darbas su dvejetainiu duomenų buferiu gali žymiai supaprastinti diegimą, jei darbas su dvejetainiais duomenimis yra įdiegtas kliento programos pusėje asinchroniniu režimu. Tokiu atveju duomenų nuskaitymas į buferį bus atliekamas kaip asinchroninė operacija, o darbas su buferio duomenimis bus sinchroniškas.
Darbas su dvejetainiais duomenimis galimas programos kliento pusėje (įskaitant žiniatinklio klientą) ir serverio pusėje, taip pat sinchroninėse ir asinchroninėse darbo schemose. Kituose pavyzdžiuose bus naudojama sinchroninio darbo schema.

16.3.2. Dvejetainių duomenų skaitymas

Kaip dvejetainių duomenų skaitymo pavyzdį apsvarstysime užduotį nustatyti teisingą failo formatą, kuris buvo pasirinktas sistemoje tolesniam naudojimui. Kaip tikrinamas failas bus naudojamas .wav failas su garso duomenimis. .wav failams saugoti naudojamas Resource Interchange File Format (RIFF), kurio aprašymas pateikiamas nuorodoje:

https://msdn.microsoft.com/enus/library/windows/desktop/ee415713.aspx (at Anglų kalba). Skaitymo pavyzdyje bus naudojama tokia formato informacija:
1. Pirmuosiuose 4 failo baituose yra formato identifikatorius: RIFF.
2. kituose 4 baituose yra faktinių garso duomenų dydis mažo galo baitų tvarka.
3. Kituose 4 baituose yra naudojamas tekstinis duomenų tipas: WAVE.
Norėdami atlikti šiuos veiksmus, jums reikės šio kodo integruota kalba:

Skaityti = Nauja „ReadData“ (failo pavadinimas, „ByteEndian.LittleEndian“);
FileFormat = Read.ReadCharacters(4);
DataSize = Read.ReadInteger32();
FileType = Read.ReadCharacters(4);
Jei failo formatas<>Tada „RIFF“.
Report("Tai ne RIFF failas");
Grįžti ;
EndIf ;
Jei failo tipas = „WAVE“, tada
Ataskaita ("Tai WAV failas su duomenimis, dydis " + DataSize + " baitai");
Priešingu atveju
Ataskaita („Tai nėra WAV failas“);
Grąžinti;
endIf;

Pažvelkime į pavyzdį išsamiau.
Pirmiausia atidaromas failas, kurio pavadinimas yra kintamajame FileName, failas atidaromas skaitymui ( FileOpenMode.Open), skaitys tik iš failo ( FileAccess.Read) ir skaitymui bus naudojamas 16 baitų buferis.
Tada duomenims nuskaityti sugeneruojamas srautas, kurio numerio tipo duomenų baitų tvarka bus mažiausiai reikšminga. Tada iš gauto srauto nuskaitomi 4 simboliai, 32 bitų sveikasis skaičius ir dar 4 simboliai. Gauti duomenys yra analizuojami ir remiantis analizės rezultatais priimamas sprendimas, ar pasirinktas failas yra .wav failas, ar ne.

16.3.3. Dvejetainių duomenų rašymas

Dvejetainių duomenų įrašymas į failą, paprasčiausiu atveju, atliekamas taip:

Įrašas = Naujas WriteData (failo pavadinimas);
Jei indeksas = 0 iki 255 ciklas
Rašyti. Rašyti baitas (indeksas);
EndCycle;
Įrašyti.Uždaryti() ;

Šis pavyzdys į failą įrašo baitų seką nuo 0 iki 255 (0xFF šešioliktainiu). Tai paprasčiausias įrašymo variantas.
Taip pat galite naudoti metodą, panašų į skaitymo metodą, aptartą ankstesniame pavyzdyje, kai gaunamas failo srautas ir į šį failų srautą įrašomi duomenys.

16.3.4. Darbas su dvejetainiu duomenų buferiu

Kaip minėta pirmiau, dvejetainių duomenų buferis yra patogus būdas manipuliuoti dvejetainių duomenų fragmentais.
Palaikomas ne tik duomenų skaitymas, bet ir rašymas.
Kaip pavyzdį apsvarstysime RIFF failo antraštės analizę iš duomenų skaitymo pavyzdžio (žr. čia). Norėdami sukurti pavyzdį, bus naudojama lygiai ta pati informacija apie failo formatą. Taigi iš šaltinio failo reikia nuskaityti failo antraštės dydžio buferį. Antraštę sudaro trys 4 baitų laukai. Taigi, reikia nuskaityti 12 baitų.

Buferis = naujas BufferBinaryData(12);
Failas = FileStreams.Open (laikinas failų katalogas() + „Windows Logon.wav“, FileOpenMode.Open, FileAccess.Read);
Failas.Skaityti(buferis, 0, 12);
Dydis = Buferis.ReadInteger32(4);
StreamString = newStreamInMemory(buferis);
StreamRows.Go(0, PositionInStream.Start);

Failo formatas = Read Lines.ReadCharacters(4, „Windows-1251“);
Read Lines.Close();
StreamRows.Go(8, PositionInStream.Start);
RowReader = naujas duomenų skaitytuvas(RowStream);
Failo tipas = ReadLines.ReadCharacters( 4, „Windows-1251“);
Read Lines.Close();

Duomenų patekimo į dvejetainį duomenų buferį procesas nėra niekuo ypatingas. Tolesnės operacijos reikalauja kai kurių pastabų. Nuskaityti bet kokio palaikomo bitų gylio skaičius galima iš bet kurios buferio vietos. IN šiame pavyzdyje Buffer.ReadInteger32(4); reiškia 32 bitų sveikojo skaičiaus skaitymą, pradedant nuo 4 buferio baito. Taigi, jei jums reikia perskaityti kelis skaičius, esančius skirtingos vietos buferį, tai galima padaryti be tiesioginio pozicionavimo tame buferyje.
Tačiau dvejetainių duomenų buferis nepalaiko eilutės skaitymo. Todėl turėtumėte naudoti objektą, kuris leidžia tai padaryti: Skaityti duomenis. DataReader objekto negalima sukurti iš dvejetainių duomenų buferio. Tačiau remiantis dvejetainiu duomenų buferiu, galite sukurti srautą, kuris yra universalus tarpininkas tarp fizinės informacijos saugojimo vietos (failo, dvejetainių duomenų buferio) ir aukšto lygio objekto, leidžiančio dirbti su šiais duomenimis.
Kai DataReader objektas sukuriamas remiantis srautu, jis pradeda skaityti duomenis nuo tos vietos, kuri šiuo metu yra įdiegta sraute. Todėl pavyzdyje pirmiausia nustatoma padėtis sraute, o tada sukuriamas DataReader objektas ir nuskaitomas reikiamas simbolių skaičius. Išsamus aprašymas apie skirtumą tarp baitų ir simbolių skaičiaus skaitant eilutes, žr. kitą skyrių 16.3.5

16.3.5. Naudojimo ypatybės

Naudodami dvejetainius duomenis, turėtumėte atsižvelgti į darbo su eilutės tipo duomenimis ypatybes. Ypatumas yra tas, kad eilutės, kurią grąžina globalaus konteksto funkcija StrLength(), ilgis matuojamas simboliais. Simboliuose turėtumėte nurodyti skaitomų / rašomų duomenų dydį objektų eilučių rašymo / skaitymo metoduose, skirtuose darbui su dvejetainiais duomenimis ( Skaityti simbolius (),
ReadString(), WriteCharacters (), WriteString()). Tačiau nėra vienareikšmės parinkties konvertuoti eilutės ilgį simboliais į panašų parametrą baitais. Priklausomai nuo eilutės turinio ir kodavimo, šis santykis skirsis. Todėl dirbdami su bet kokiomis duomenų struktūromis, kurios apima kintamo ilgio eilutes, turėtumėte aiškiai suprasti, kokiais vienetais išreiškiami eilučių ilgiai.
Jei turimuose duomenyse eilutės ilgis nurodomas baitais, o eilutė nurodyta kelių baitų kintamo ilgio koduotėje (pavyzdžiui, UTF-8), tai naudojant dvejetainius duomenų objektus, tokia struktūra nuskaitoma iš failo į String tipo duomenys paprastai neįmanomi.
Tačiau šiuo atveju galite lengvai pakeisti skaitymo / rašymo padėtį failo sraute. Jei eilutės ilgis nurodomas simboliais, tada tokią eilutę tampa įmanoma perskaityti į String tipo duomenis, tačiau pakeisti skaitymo/rašymo padėties tokiame sraute tampa neįmanoma.
Norėdami gauti eilutės ilgį baitais, galite naudoti šią funkciją konvertuoti eilutę į BinaryData objektą:

Funkcija Gaukite dvejetainius duomenis iš eilutės(Vertė StrParameter, reikšmės kodavimas = "UTF-8")
MemoryThread = NewMemoryThread;
Rašytojas = Naujas WriteData (StreamMemory);
Rašytojas. Rašymo eilutė(StrParameter, Kodavimas);
Rašytojas.Uždaryti();
Grąžinkite StreamMemory.CloseAndGetBinaryData();
EndFunction

Tikrąjį dydį baitais galima gauti iškviečiant funkciją Dydis() objekte BinaryData, kuri gaunama naudojant funkciją.
Nerekomenduojama vienu metu naudoti daiktų Skaityti duomenis / rašyti duomenis ir srauto objektus. Jei tarp dviejų nuoseklių skaitymo operacijų iš ReadData arba dviejų nuoseklių rašymo operacijų į WriteData pasikeičia padėtis sraute, su kuriuo veikia Ch objektai ShadowData / WriteData– sukuriama išimtis. Taigi, toliau pateiktame pavyzdyje parodytas teisingas padėties pasikeitimas sraute rašant duomenis į srautą:

Srautas = newStreamInMemory();

WriteData.WriteString("Labas pasauli!");
WriteData.Close();
Stream.Go (0, PositionInStream.Start);
DataWrite = newDataWrite(Stream);
WriteData.WriteString("Ate!");
WriteData.Close();
Šis pavyzdys, sveiki, padaroma išimtis:

Srautas = NewStreamInMemory();

WriteData.WriteString("Sveikas, pasauli!");
Stream.Go(0, PositionInStream.Start);
// Kita eilutė išmes išimtį
WriteData.WriteString("Iki!");
Tuo pačiu metu galimos situacijos, kai sistemos elgsena bus neteisinga, tačiau klaidų nebus:

Srautas = GetStream();
ReadData = naujas ReadData(Stream);
TestString = ReadData.Read();
Pradinė padėtis = Stream.CurrentPosition();
DataWrite = newDataWrite(Stream);
WriteData.WriteString("Netikėta eilutė");
WriteData.Close();
Stream.Go(Pradinė padėtis, PositionInStream.Start);
// Apskritai neįmanoma nustatyti, kokia reikšmė bus įtraukta į TestString2 kintamąjį
TestLine2 = ReadData.ReadLine();

Aprašytas šį skyrių elgesį sukelia o Data Reader/Data Writer objektai, dirbdami su srautu, naudoja savo buferius. Dėl to tikroji sriegio padėtis skiriasi nuo loginės padėties, kuri susidaro atlikus operacijas.
Taip pat nepalaikomas vienu metu naudojamas Data Reader ir Data Writer objektų, kurie savo darbui naudoja vieną giją.

Įdiegta 8.3.10.2168 versijoje.

Palaipsniui plečiame darbo su dvejetainiais duomenimis funkcionalumą. Tam yra keletas priežasčių. Pirma, įgyvendinome ne viską, ką planavome. Ir antra, diskutuodami apie naujas galimybes sulaukėme nemažai jūsų pageidavimų, kuriuos taip pat nusprendėme įgyvendinti.

Naujos dvejetainių duomenų konvertavimo į skirtingus formatus funkcijos

Pasauliniame kontekste mes pridėjome daugybę naujų dvejetainių duomenų konvertavimo funkcijų. Taigi, pavyzdžiui, galite atlikti dvejetainių duomenų pirmyn ir atgal konvertavimą į įprastą eilutę, formato eilutę Bazė64 ir formato eilutę BinHex. Be to, galite konvertuoti pačius dvejetainius duomenis į formatus Bazė64, BinHex ir atgal.

Panašios konversijos palaikomos šiam tipui BufferBinaryData. Be to, dvejetainių duomenų buferį galite konvertuoti į dvejetainius duomenis ir atvirkščiai.

Be to, dvi naujos funkcijos leidžia padalyti dvejetainius duomenis į kelias dalis ir atvirkščiai, sujungti kelis tokio tipo objektus. Dvejetainiai duomenysį vieną. Tokiu atveju naujame objekte bus visų dalių duomenys jūsų nurodyta tvarka.

Šios funkcijos yra panašios į failų padalijimą ir sujungimą, tačiau daugeliu atvejų yra efektyvesnės. Nes nereikia iš pradžių įrašyti dvejetainių duomenų į failą, o dalijant nereikia nereikalingo duomenų kopijavimo.

Galimybės dirbti su srautais pridėjimas prie objektų, kurie dirba su failais

Kadangi dvejetainių duomenų naudojimas daugiausia susijęs su failų operacijomis, manėme, kad visiškai logiška ir natūralu pridėti darbą su srautais prie tų objektų, kurie šiuo metu vienaip ar kitaip skaito ir rašo failus.

Todėl dabar galite atidaryti srautus skaitymui ir rašymui naudodami tokius objektus kaip:

  • Skaitymas Tekstas Ir Rašyti Tekstą;
  • ReadingFastInfoSet Ir EntryFastInfoSet;
  • HTML skaitymas Ir PostHtml;
  • Skaito JSON Ir JSON įrašas;
  • XML skaitymas Ir XML įrašas;
  • Zip failo skaitymas Ir Įrašyti ZIP failą.

Dirbdami su HTTP galite gauti tekstą kaip srautą:

  • HTTP užklausa Ir HTTP atsakymas;
  • HTTPServiceRequest Ir HTTPServiceResponse.
  • Tekstinis dokumentas;
  • Lentelinis dokumentas;
  • SuformatuotasDokumentas;
  • Geografinė schema;
  • Grafinė schema;
  • FTP ryšys.

Dabar galima rašyti į srautą dirbant su tipais Paveikslėlis Ir ConvertToCanonicalXML. Be to, darbas su srautais dabar palaikomas įvairiais būdais, kuriuos turi tipai XSL konvertavimas, Kriptografijos vadovas, Sertifikatas Kriptografija Ir HashingData.

Efektyvus kopijavimas nuskaitant ir rašant duomenis

Dvejetainiai įrankiai, kuriuos įdiegėme, leido kopijuoti srautus. Tačiau su dideliais duomenų kiekiais ši operacija nebuvo atlikta labai efektyviai.

Todėl tipas Skaityti duomenisįdiegėme naują metodą KopijuotiB(). Tai ne tik pašalina šią problemą, bet ir supaprastina tekstą, todėl jis tampa suprantamesnis.

Pavyzdžiui, anksčiau buvo galima gauti dvejetainius duomenis iš vieno srauto ir įrašyti juos į kitą srautą.

Dabar nereikia gauti dvejetainių duomenų, kopijavimas atliekamas duomenų skaitymo etape.

Puiku tai, kad galite kopijuoti ne tik į srautą, bet ir į objektą WriteData. Ši parinktis patogi, kai, be duomenų iš šaltinio srauto, į išvesties srautą reikia įrašyti kai kuriuos savo duomenis.

Bitinės loginės operacijos dvejetainiame duomenų buferyje

Dabar galite naudoti bitines logines operacijas dirbdami su dvejetainiais duomenų buferiais. Dėl šių operacijų pradinių baitų ir baitų, esančių duotame buferyje, bitų derinio rezultatas bus įrašytas į šaltinio buferį pagal pasirinktos loginės operacijos taisykles. Įgyvendinome šias operacijas:

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

Geras bitų loginių operacijų naudojimo pavyzdys yra mainų formato dekodavimo problema prekybos įranga. Pavyzdžiui, mainų formatas su mažmenine įranga aprašomas 1 baito lauku. Šiame lauke yra charakteristikų rinkinys, apibūdinantis produktų asortimentą:

  • 0–2 bitai: mokesčio tarifas;
  • 3 bitas: 0 - vienetinės prekės, 1 - svorio prekės;
  • 4 bitas: 0 – leisti parduoti, 1 – uždrausti parduoti;
  • 5 bitas: 0 - įjungti kiekių skaičiavimą, 1 - išjungti kiekio skaičiavimą;
  • 6 bitas: 0 – vienkartinis pardavimas draudžiamas, 1 – leidžiamas vienkartinis pardavimas;
  • 7 bitas: rezervuotas.

Tada kodas, kuris išgauna šią informaciją ir pateikia ją tolimesniam apdorojimui patogia forma, gali atrodyti taip.

Skaičių gavimas iš šešioliktainių ir dvejetainių raidžių

  • NumberFromHexString();
  • NumberFromBinaryString().

Dvejetainiai literalai yra naudingi apibrėžiant kaukes, kai jie naudojami kartu su bitinėmis operacijomis. Pavyzdžiui, ankstesniame pavyzdyje, kuriame analizuojamas mainų formatas su komercine įranga, kaukės nurodomos naudojant dešimtainius skaičius. Tai nėra labai patogu, nes rašant ir skaitant kodą reikia nuolat mintyse versti dešimtainį skaičių į dvejetainę sistemą.

Daug patogiau vietoj to naudoti dvejetainius literatus. Tuo pačiu metu kodas tampa aiškesnis ir klaidų tikimybė žymiai sumažėja.

Šešioliktaines raides patogu naudoti analizuojant techninius formatus: vaizdo, garso, vaizdo formatus.

Išorinių NativeAPI komponentų technologijos pokyčiai

Anksčiau buvo keli apribojimai perduodant dvejetainius duomenis tarp 1C:Enterprise ir išorinio komponento. Pavyzdžiui, buvo neįmanoma perkelti dvejetainių duomenų į išorinį komponentą, o dirbant žiniatinklio kliente, keistis dvejetainiais duomenimis apskritai buvo neįmanoma.

Dabar panaikiname visus šiuos apribojimus. Galite keistis dvejetainiais duomenimis abiem kryptimis ir net žiniatinklio kliente.

Tai jokiu būdu neturės įtakos esamų išorinių komponentų veikimui. Jie veiks kaip anksčiau. Tačiau naujai sukurtuose komponentuose dabar galite perduoti objektus kaip parametrus Dvejetainiai duomenys.

Dvejetainiai duomenys 1C yra skirti savavališko formato failams saugoti. Su jų pagalba galite:

  • Organizuokite sąveiką naudodami dvejetainį protokolą su įvairių įrenginių;
  • Saugoti bet kokio formato failus kaip metaduomenų objektų atributus;
  • Konvertuoti tekstinius duomenis į dvejetainius (dažniausiai naudojamas ataskaitoms siųsti);
  • Darbas su dvejetainiais duomenimis atmintyje.

Ką gali padaryti sistema

Dirbdama su dvejetainiais duomenimis, platforma 8.3 gali atlikti šiuos veiksmus:

  1. Skaityti ir rašyti dvejetainius duomenis;
  2. Perkelkite duomenis iš kliento į serverį ir atgal naudodami laikiną saugyklą;
  3. Inicijuoti „Paveikslėlio“ tipo objektą naudojant dvejetainius failus;
  4. Skaitykite juos iš žiniatinklio naudodami objektus „Pašto priedas“, „HTTP ryšys“ ir kt.
  5. Naudokite kriptografinėmis priemonėmisšifruoti ir pasirašyti svarbius priedus;
  6. Naudodami objektą „Duomenų maišos“ apskaičiuokite maišos funkciją.

Duomenų įrašymas į detales

Pavyzdžiui, sukurkime katalogą bandomojoje konfigūracijoje.

Tiesą sakant, naudoti tą patį katalogą informacijai apie nomenklatūrą ir dvejetainius vaizdo duomenis saugoti yra šiek tiek neteisinga. Turint pakankamai daug duomenų ir didelių, didelių failų, gali kilti problemų. nepageidaujamos prastovos ir sistemos veikimo „stabdžiai“. Sistemos požiūriu daug teisingiau būtų sutvarkyti atskirą katalogą „Paveikslėliai“, kurio nuorodą galėtume nustatyti kaip butaforijos tipą.


Svarbu pažymėti, kad dėl to, kad „ValueStorage“ tipo atributai, kuriuose yra dvejetainių duomenų, nėra pasiekiami valdomos programos režimu, juos galima pasiekti tik naudojant FormAttributesValue metodą.


Pranešimo laukas reiškia dvejetainių duomenų saugojimo verčių įrašą.

Duomenų skaitymas iš rekvizitų

Sukurkime apdorojimą, kuris mūsų konfigūracijoje dvejetaine forma saugomą failą išves į skaičiuoklės dokumentą (to reikia, pavyzdžiui, norint atspausdinti įmonės logotipą).


Iš esmės tai yra visas kodas, kurio mums reikia. Naudodami operatorių Get() nuskaitome dvejetainius duomenis, saugomus atitinkamame katalogo atribute, ir perkeliame juos į objektą „Paveikslėlis“, kuris bus rodomas viršutiniame kairiajame langelyje. skaičiuoklės dokumentas formos (9 pav.).

9 pav

Duomenų konvertavimas

Tai nėra įprasta, tačiau pasitaiko, kad dirbant su nestandartiniais mainais su išorinėmis sistemomis, reikia konvertuoti duomenis iš dvejetainio formato į Base64 formatą arba atvirkščiai.

Daugeliu atvejų platforma automatiškai konvertuoja duomenis, jei tai neįvyksta, reikia naudoti visuotines vertimo funkcijas:

  1. Base64String – paverčia nurodytą reikšmę į atitinkamos koduotės eilutę;
  2. Base64Value – atlieka atvirkštinį konvertavimą.

Aukščiau pateikto kodo optimizavimas

4 pav. pateiktas kodas tikrai veikia, bet su vienu reikšmingu įspėjimu: jei konfigūracijos ypatybėse pažymėtas varnelės langelis „Modality use mode“ (10 pav.). Priešingu atveju jo naudojimas sukels klaidą.
10 pav

Kad taip neatsitiktų, būdami katalogo elemento formos modulyje eikite į meniu Tekstas->Pertvarkymas->Nebenaudojami sinchroniniai skambučiai->Konvertuoti modulio skambučius.

Po kurio laiko sinchroniniai skambučiai bus automatiškai konvertuojami į asinchroninius, o kodas įgaus formą (11 pav.)

11 pav

mob_info