Kā saglabāt bināros datus 1c failā. Darbs ar binārajiem datiem. Datu nolasīšana no rekvizītiem

Drukāt (Ctrl+P)

16.3. Darbs ar binārajiem datiem

16.3.1. Galvenā informācija

Ieviešot lietojumprogrammu risinājumus, var rasties situācijas, kad nepieciešams analizēt dažādus bināros datus. Piemēram, jums ir jānosaka faila tips, izmantojot parakstu vai jāveic dažas manipulācijas ar attēlu. Lai strādātu ar binārajiem datiem, 1C:Enterprise nodrošina īpašas programmatūras saskarnes. Tālāk apskatīsim iespējas strādāt ar binārajiem datiem.
Viss darbs ar binārajiem datiem ir balstīts uz straumes koncepciju. Plūsma ir patvaļīga (vispārējā gadījumā) datu avota (straumes objekta) loģisks vispārinājums. Sistēma nenodrošina iespēju izveidot neatkarīgu Stream objektu, kas nav saistīts ar nevienu avotu. Bet ir atvasināti objekti, kurus var izveidot - straume, kas saistīta ar failu diskā (FileStream objekts) vai straume, kas izveidota atmiņā (MemoryStream objekts). Straume ļauj gan lasīt datus, gan rakstīt tos. Lai noteiktu iespēju veikt noteiktas darbības, straumei (un atvasinātajiem objektiem) ir īpašas metodes, kas ļauj noteikt, kuras
operācijas ir pieejamas ar šo pavedienu (metodes AvailableRecord(), PieejamsLasīt(), AvailableChangePosition()).
Ja jums ir nepieciešams strādāt ar straumi augstākā līmenī, jo īpaši lasīt/rakstīt datus, piemēram, numuru (ar dažādu bitu dziļumu) vai virkni, tad DataRead/DataWrite objekti ir paredzēti tam. Izmantojot šos objektus, varat izmantot strukturētāku pieeju straumē esošajiem binārajiem datiem. Tātad, piemēram, zinot faila formātu, jūs varat diezgan ērti lasīt šādu failu, iegūstot nepieciešamos datus no galvenēm (kurus parasti apzīmē ar tipu skaitu un virkni), izlaižot nevajadzīgos datu blokus un iekraujot nepieciešamos apstrādei.
Vispārējo shēmu darbam ar binārajiem datiem var attēlot šādi:

  1. Notiek straumes saņemšana
  2. Tiek izveidots Data Reader vai Data Writer objekts.
  3. Izmantojot 2. darbībā izveidoto objektu, tiek veiktas nepieciešamās darbības.
  4. 2. darbībā izveidotais objekts tiek aizvērts.
  5. Ja vairs nav nepieciešamas nekādas darbības, 1. darbībā iegūtā straume tiek aizvērta.
  6. Ja jums jāturpina darbs ar straumi, varat iestatīt jaunu pozīciju straumē (ja šī darbība tiek atbalstīta) un turpināt darbu, sākot no 2. darbības.

Ir vērts atzīmēt, ka ir iespējams apvienot 1. un 2. punktu. Citiem vārdiem sakot, sistēma nodrošina iespēju izveidot objektus Lasīt datus/rakstīt datus tieši no, piemēram, BinaryData objekta.
Lai veiktu dažādas darbības ar binārajiem datiem, sistēma nodrošina iespēju iegūt kādu straumes daļu kā atsevišķu fragmentu ar nejaušu (baitu pa baitam) piekļuvi (objektam BufferBinaryData). Bufera lielums tiek iestatīts izveides laikā, un to vēlāk nevar mainīt. Strādājot ar bināro datu buferi, iespējams strādāt ar dažāda bitu dziļuma skaitļiem kā
kā viens vesels. Šajā gadījumā ir iespējams norādīt baitu secību vārdos: "mazais endians" vai "big endian" (lielais endians). Ir iespējams arī sadalīt vienu buferi vairākos un apvienot vairākus bināros datu buferus vienā iegūtajā buferī.
Ir svarīgi atzīmēt, ka darbs ar bināro datu buferi var ievērojami vienkāršot ieviešanu, ja darbs ar binārajiem datiem tiek realizēts klienta lietojumprogrammas pusē asinhronajā režīmā. Šajā gadījumā datu nolasīšana buferī tiks veikta kā asinhrona darbība, un darbs ar bufera datiem būs sinhrons.
Darbs ar binārajiem datiem ir pieejams aplikācijas klienta pusē (ieskaitot tīmekļa klientu) un servera pusē, kā arī sinhronās un asinhronās darba shēmās. Turpmākajos piemēros tiks izmantota sinhronā darba shēma.

16.3.2. Bināro datu lasīšana

Kā bināro datu lasīšanas piemēru mēs apsvērsim uzdevumu noteikt pareizo faila formātu, kas sistēmā tika atlasīts turpmākai lietošanai. Kā pārbaudāmais fails tiks izmantots .wav fails ar audio datiem. Lai saglabātu .wav failus, tiek izmantots Resource Interchange File Format (RIFF), kura apraksts ir sniegts saitē:

https://msdn.microsoft.com/enus/library/windows/desktop/ee415713.aspx (at angļu valoda). Lasīšanas piemērā tiks izmantota šāda formāta informācija:
1. Pirmie 4 faila baiti satur formāta identifikatoru: RIFF.
2. nākamie 4 baiti satur faktisko audio datu lielumu mazā baitu secībā.
3. Nākamie 4 baiti satur izmantoto datu teksta veidu: WAVE.
Lai veiktu šīs darbības, jums būs nepieciešams šāds kods iebūvētajā valodā:

Lasīt = Jauns ReadData (Faila nosaukums, ByteEndian.LittleEndian);
FileFormat = Read.ReadCharacters(4);
DataSize = Read.ReadInteger32();
FileType = Read.Read Characters(4);
Ja faila formāts<>Tad “RIFF”.
Report("Šis nav RIFF fails");
Atgriezties ;
EndIf ;
Ja FileType = “WAVE”, tad
Pārskats (“Šis ir WAV fails ar datiem, izmērs ” + DataSize + ” baiti”);
Citādi
Ziņojums (“Šis nav WAV fails”);
Atgriezties;
endIf;

Apskatīsim piemēru sīkāk.
Vispirms tiek atvērts fails, kura nosaukums ir ietverts mainīgajā FileName, fails tiek atvērts lasīšanai ( FileOpenMode.Open), lasīs tikai no faila ( FileAccess.Read) un lasīšanai tiks izmantots 16 baitu buferis.
Pēc tam datu lasīšanai tiek ģenerēta straume, kurai būs vismazākā baitu secība skaitļa tipa datiem. Pēc tam no iegūtās straumes tiek nolasītas 4 rakstzīmes, 32 bitu vesels skaitlis un vēl 4 rakstzīmes. Iegūtie dati tiek analizēti un, pamatojoties uz analīzes rezultātiem, tiek pieņemts lēmums par to, vai atlasītais fails ir .wav fails vai nav.

16.3.3. Bināro datu rakstīšana

Bināro datu ierakstīšana failā vienkāršākajā gadījumā tiek veikta šādi:

Ieraksts = jauns WriteData (faila nosaukums);
Indeksam = 0 līdz 255 cikls
Rakstīt. Rakstīt baitu (indekss);
EndCycle;
Ierakstīt.Aizvērt() ;

Šajā piemērā failā tiek ierakstīta baitu secība no 0 līdz 255 (heksadecimālā 0xFF). Šī ir vienkāršākā ierakstīšanas iespēja.
Varat arī izmantot metodi, kas ir līdzīga iepriekšējā piemērā aplūkotajai lasīšanas metodei, kur tiek iegūta faila straume un dati tiek ierakstīti šajā faila straumē.

16.3.4. Darbs ar bināro datu buferi

Kā minēts iepriekš, bināro datu buferis nodrošina ērtu veidu, kā manipulēt ar bināro datu fragmentiem.
Tiek atbalstīta ne tikai datu lasīšana, bet arī rakstīšana.
Kā piemēru mēs apsvērsim RIFF faila galvenes parsēšanu no datu lasīšanas piemēra (skatiet šeit). Lai izveidotu piemēru, tiks izmantota tieši tāda pati informācija par faila formātu. Tādējādi no avota faila ir jānolasa faila galvenes lieluma buferis. Galvene sastāv no trim 4 baitu laukiem. Tādējādi ir jālasa 12 baiti.

Buferis = jauns BufferBinaryData(12);
Fails = FileStreams.Open (pagaidu failu direktorijs() + “Windows Logon.wav”, FileOpenMode.Open, FileAccess.Read);
Fails.Lasīt(Buferis, 0, 12);
Izmērs = Buferis. ReadInteger32(4);
StreamString = newStreamInMemory(buferis);
StreamRows.Go(0, PositionInStream.Start);

Faila formāts = ReadLines.ReadCharacters(4, “windows-1251”);
ReadLines.Close();
StreamRows.Go(8, PositionInStream.Start);
RowReader = jauns DataReader(RowStream);
Faila tips = ReadLines.ReadCharacters( 4, "Windows-1251");
ReadLines.Close();

Datu iegūšanas process binārajā datu buferī nav nekas īpašs. Turpmākās darbības prasa dažus komentārus. Jebkura atbalstītā bitu dziļuma skaitļu nolasīšana ir iespējama no jebkuras pozīcijas buferī. IN šajā piemērā Buffer.ReadInteger32(4); nozīmē 32 bitu vesela skaitļa nolasīšanu, sākot no bufera 4. baita. Tādējādi, ja jums ir jānolasa vairāki skaitļi, kas atrodas dažādās bufera vietās, to var izdarīt bez tiešas pozicionēšanas šajā buferī.
Tomēr bināro datu buferis neatbalsta virknes lasīšanu. Tāpēc jums vajadzētu izmantot objektu, kas ļauj to izdarīt: Lasīt datus. DataReader objektu nevar izveidot no binārā datu bufera. Bet, pamatojoties uz bināro datu buferi, jūs varat izveidot straumi, kas ir universāls starpnieks starp informācijas fizisko glabāšanas vietu (failu, bināro datu buferi) un augsta līmeņa objektu, kas ļauj strādāt ar šiem datiem.
Kad DataReader objekts tiek izveidots, pamatojoties uz straumi, tas sāk nolasīt datus no pozīcijas Šis brīdis uzstādīts straumē. Tāpēc piemērā vispirms tiek iestatīta pozīcija straumē, pēc tam tiek izveidots DataReader objekts un nolasīts nepieciešamais rakstzīmju skaits. Detalizēts apraksts par atšķirību starp baitu un rakstzīmju skaitu, lasot virknes, skatiet nākamo 16.3.5.

16.3.5. Lietošanas iezīmes

Izmantojot bināros datus, jāņem vērā iespējas strādāt ar String tipa datiem. Īpatnība ir tāda, ka virknes garums, ko atgriež globālā konteksta funkcija StrLength(), tiek mērīts rakstzīmēs. Simbolos jānorāda lasāmo/rakstāmo datu lielums virkņu rakstīšanas/lasīšanas metodēs objektos darbam ar binārajiem datiem ( Lasīt rakstzīmes (),
ReadString(), Write Characters (), WriteString()). Tomēr nav viennozīmīgas iespējas pārvērst virknes garumu rakstzīmēs uz līdzīgu parametru baitos. Atkarībā no virknes satura un kodējuma šī attiecība būs atšķirīga. Tāpēc, strādājot ar jebkādām datu struktūrām, kas ietver mainīga garuma virknes, jums skaidri jāsaprot, kādās vienībās tiek izteikti virkņu garumi.
Ja pieejamajos datos virknes garums ir norādīts baitos, bet virkne ir norādīta daudzbaitu mainīga garuma kodējumā (piemēram, UTF-8), tad, izmantojot bināros datu objektus, šādu struktūru no faila nolasot String tipa dati parasti nav pieejami.
Bet šajā gadījumā jūs varat viegli mainīt lasīšanas/rakstīšanas pozīciju faila straumē. Ja virknes garums ir norādīts rakstzīmēs, tad šādu virkni kļūst iespējams nolasīt String tipa datos, bet kļūst neiespējami mainīt lasīšanas/rakstīšanas pozīciju šādā straumē.
Lai iegūtu virknes garumu baitos, varat izmantot šo funkciju, lai pārvērstu virkni par BinaryData objektu:

Funkcija Iegūstiet bināros datus no virknes(Vērtība StrParameter, vērtību kodējums = “UTF-8”)
MemoryThread = NewMemoryThread;
Rakstnieks = jauns WriteData (StreamMemory);
Writer.Write String(StrParameter, Kodēšana);
Rakstnieks.Aizvērt();
Atgriezties StreamMemory.CloseAndGetBinaryData();
EndFunction

Faktisko izmēru baitos var iegūt, BinaryData objektā izsaucot funkciju Size(), kas tiek iegūta funkcijas rezultātā.
Nav ieteicama vienlaicīga priekšmetu lietošana Lasīt datus/rakstīt datus un straumēt objektus. Ja starp divām secīgām lasīšanas operācijām no ReadData vai divām secīgām rakstīšanas operācijām uz WriteData tiek mainīta pozīcija straumē, ar kuru darbojas Ch objekti ShadowData/WriteData– tiek ģenerēts izņēmums. Tādējādi šis piemērs parāda pareizu pozīcijas maiņu straumē, rakstot datus straumē:

Stream = newStreamInMemory();

WriteData.WriteString("Sveika pasaule!");
WriteData.Close();
Stream.Go (0, PositionInStream.Start);
DataWrite = newDataWrite(Stream);
WriteData.WriteString("Uz redzēšanos!");
WriteData.Close();
Šis piemērs, sveiki, izņēmuma gadījumā:

Straume = NewStreamInMemory();

WriteData.WriteString("Sveika, pasaule!");
Stream.Go(0, PositionInStream.Start);
// Nākamajā rindā tiks parādīts izņēmums
WriteData.WriteString(“Uz redzēšanos!”);
Tajā pašā laikā ir iespējamas situācijas, kad sistēmas darbība būs nepareiza, bet kļūdas netiks ģenerētas:

Straume = GetStream();
ReadData = jauni ReadData(Stream);
TestString = ReadData.Read();
Sākotnējā pozīcija = Stream.CurrentPosition();
DataWrite = newDataWrite(Stream);
WriteData.WriteString("Negaidīta virkne");
WriteData.Close();
Stream.Go(Sākotnējā pozīcija, PozīcijaStream.Start);
// Kopumā nav iespējams noteikt, kāda vērtība tiks ievietota mainīgajā TestString2
TestLine2 = ReadData.ReadLine();

Šajā sadaļā aprakstīto uzvedību izraisa o Data Reader/Data Writer objekti, strādājot ar straumi, izmanto savus buferus. Rezultātā pavediena faktiskā pozīcija atšķiras no loģiskās pozīcijas, kas veidojas pabeigto darbību rezultātā.
Tāpat netiek atbalstīta vienlaicīga Data Reader un Data Writer objektu izmantošana, kas savam darbam izmanto vienu pavedienu.

1C:Enterprise 8 tehnoloģiju platforma ļauj saglabāt patvaļīgus failus informācijas bāzē, izgūt tos no turienes un izmantot Dažādi ceļi. Apskatīsim šīs darbības, izmantojot piemērus.

Pirms faila augšupielādes 1C informācijas bāzē, jums ir jāiegūst pilna faila adrese diskā. Darbs ar failu atlases dialoglodziņiem ir aprakstīts .

Lai saglabātu failus, izmantojiet atribūtu (vai reģistra resursu) ar tipu StorageValues.

Patvaļīga faila augšupielāde 1C informācijas bāzē

Jebkuru failu var attēlot kā binārus datus un ielādēt tajā Vērtību krātuve.

Pārvēršot bināros datus objektā StorageValues izmantots dizains jaunas krātuves vērtības (dati, saspiešana) ar diviem parametriem:

  1. Dati— binārie dati, kas jāuzglabā krātuvē
  2. Saspiešana— Deflācijas algoritma kompresijas pakāpe. Vesels skaitlis diapazonā -1...9. -1 ir noklusējuma saspiešanas līmenis. 0 - nav saspiešanas, 9 - maksimālā saspiešana. Noklusējuma vērtība: -1. Parametrs nav obligāts; ja tas nav norādīts, saspiešana netiek izmantota.

//Konvertējiet failu bināros datos
Fails = New BinaryData(Path) ;

//Izveidojiet jaunu vērtību krātuves objektu

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

Patvaļīga faila saglabāšana no 1C informācijas bāzes diskā

Lai saglabātu failu no 1C datu bāzes diskā, jums ir jānosaka ceļš un faila nosaukums. Lai to izdarītu, ir failu saglabāšanas dialoglodziņš, ar kuru darbs ir aprakstīts.

//Saņemiet bināros datus no krātuves
//Datu krātuve - objekta atribūts ar vērtību krātuves tipu

//Saņemtos datus ierakstiet diskā
//IN mainīgais ceļš ir diskā esošā faila pilna adrese
Dati. Rakstīt(Ceļš) ;

Skatiet failu, kas atrodas 1C informācijas bāzē

Lai skatītu datu bāzē saglabāto failu, datorā jābūt instalētai lietojumprogrammai, kas atver failu.

//Iegūstiet pagaidu faila nosaukumu ar nepieciešamo paplašinājumu
//Paplašinājuma mainīgajā jāievieto faila paplašinājums, piemēram, "pdf"
Ceļš = GetTemporaryFileName(Extension) ;

//Saņemt datus no krātuves
//Datu krātuve - objekta atribūts ar vērtību krātuves tipu
Dati = datu krātuve. Gūt() ;

//Ierakstiet datus pagaidu failā
Dati. Rakstīt(Ceļš) ;

//Mēģina atvērt failu paredzētajā lietojumprogrammā
//Ja lietojumprogramma netiek atrasta, parādīsies sistēmas dialoglodziņš "Atvērt ar...".
LaunchApplication(Path) ;

Vērtību krātuvē var glabāt gandrīz jebkuru informāciju, piem.

... bildes (foto):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Uzskaitījumi.Objektu papildu informācijas veidi.Attēls; Krātuve = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// šajā vietā tas parāda visu... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

...izklājlapas dokuments:

TabDoc=Jauns tabulas dokuments; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); Rakstīt ();

Procedūras beigas

Procedūra RestoreFromStoragePress (elements)

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

Procedūras beigas

...patvaļīgi faili (binārie dati):

XZ = NewValueStorage(NewBinaryData(fails));

Astoņi atbalsta krātuvē ievietoto datu saspiešanu:

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

... ārējā apstrāde un ziņošana:

Procedūra LoadProcessingIntoStorage (PropsStorageType)

CompressionRate = NewDataCompression(9); //9 maksimālā PropsStorageType = New StorageValues(New BinaryData("c:\reports\report.epf", Compression Rate));

Procedūras beigas

Procedūras sākšana ProcessingFromStorage(PropsStorageType)

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

Procedūras beigas

Darbs ar krātuvi

Ja tie bija binārie dati, tos var atjaunot no vērtību krātuves, izmantojot metodi Get un ierakstīt failā, izmantojot Write() metodi.

Ja TypeValue (krātuve)<>Type ("BinaryData") Pēc tam

BinaryData = Storage.Get();

BinaryData = krātuve;

endIf; BinaryData.Write(Faila nosaukums);

Ja tas bija, piemēram, Word dokuments (doc fails vai cits reģistrēts faila tips), tad to var atvērt šādi:

LaunchApplication (faila nosaukums);

Lai notīrītu lauku ar tipa Vērtību krātuve, jums tas jāpiešķir Nedefinēts:

PropsStorage = Nedefinēts;

Darbs ar failiem un attēliem iebūvētajā valodā 1C:Enterprise 8

Mērķis

Pārvaldītā lietojumprogramma ievieš jaunu mehānismu darbam ar failiem. Tas nodrošina failu apmaiņu starp informācijas bāzi un klienta lietojumprogrammu. Funkcija šis mehānisms ir tas, ka tas ir paredzēts lietošanai plāns klients un Web Client, un ir izstrādāts, lai ņemtu vērā tīmekļa pārlūkprogrammu noteiktos failu apstrādes ierobežojumus.

Mehānisms ir metožu kopums, ko var izmantot, lai pagaidu krātuvē ievietotu lietotāja lokāli glabātos datus informācijas bāze, pārsūtiet šo informāciju no pagaidu krātuves uz datu bāzi un nogādājiet to atpakaļ lietotāja datorā. Biežākās lietojumprogrammas problēmas, ko risina šis mehānisms, ir pavadošās informācijas, piemēram, preču attēlu, ar līgumiem saistītu dokumentu u.c., uzglabāšana.

Metodes darbības joma

Pagaidu uzglabāšana

Pagaidu glabāšana ir specializēta informācijas bāzes zona, kurā var ievietot bināros datus. Galvenais mērķis ir īslaicīga informācijas glabāšana klienta un servera mijiedarbības laikā, pirms tā tiek pārsūtīta uz datu bāzi.

Nepieciešamība pēc pagaidu glabāšanas rodas tāpēc, ka tīmekļa pārlūkprogrammas darbības modelis pieprasa, lai lietotāja izvēlētais fails tiktu pārsūtīts tieši uz serveri bez iespējas to saglabāt klientā. Kad fails tiek pārsūtīts, tas tiek ievietots pagaidu krātuvē un pēc tam to var izmantot, ierakstot objektu datu bāzē.

Tipiskākais lietojumprogrammas uzdevums, ko risina pagaidu uzglabāšana, ir piekļuves nodrošināšana failiem vai attēliem, pirms objekts tiek ierakstīts informācijas bāzē, piemēram, elementa veidā.

Uzglabāšanā ievietoto failu vai bināros datus identificē pēc unikālas adreses, ko vēlāk var izmantot rakstīšanas, lasīšanas vai dzēšanas darbībās. Šī adrese tiek piešķirta, izmantojot metodes faila ierakstīšanai pagaidu krātuvē. Atsevišķa metode iebūvētajā valodā ļauj noteikt, vai nodotā ​​adrese ir adrese, kas norāda uz pagaidu krātuvē esošajiem datiem.

Informācijas bāze

Mehānisms ļauj piekļūt binārajiem datiem, kas glabājas Value Storage tipa atribūtos.

Tāpat kā pagaidu uzglabāšanas gadījumā, piekļuve informācijai ir iespējama, izmantojot īpašu adresi. To var iegūt, izmantojot īpašu metodi, nosūtot saiti uz objektu vai informācijas reģistra ievades atslēgu un atribūta nosaukumu. Tabulas daļas gadījumā papildus nepieciešams pārsūtīt tabulas daļas rindas indeksu.

Metodēm darbam ar failiem ir ierobežojumi, strādājot ar informācijas bāzes informāciju. Viņiem atšķirībā no pagaidu uzglabāšanas ir pieejama tikai lasīšanas informācija, bet ne rakstīšana vai dzēšana.

Metožu apraksts darbam ar failiem

Datu saglabāšana pagaidu krātuvē

Tipiskākais šī mehānisma izmantošanas scenārijs ietver sākotnēji lietotāja datu ievietošanu pagaidu krātuvē. Tam ir divas metodes: PlaceFile() un PlaceFileInTemporaryStorage().

Pirmā metode PlaceFile () ievieto failu no vietējās failu sistēmas pagaidu krātuvē. Metode var pieņemt mērķa adresi krātuvē. Ja tas nav definēts vai ir tukša rinda, tad tiks izveidots jauns fails un metode atgriezīs savu adresi, izmantojot atbilstošo parametru.

Ja parametrs, kas nosaka interaktīvo darbības režīmu, ir True, tad metode parādīs standarta faila atlases dialoglodziņu, kurā varat atlasīt failu, ko ievietot krātuvē. Šajā gadījumā metode atgriezīs arī atlasītā faila adresi.

Rezultātā metode atgriež vērtību False, ja lietotājs interaktīvi atteicās veikt darbību failu atlases dialoglodziņā. Metode ir pieejama tikai klientam.

Otrā metode PlaceFileInTemporaryStorage() ir līdzīga iepriekšējai, izņemot to, ka tā ir pieejama serverī, un dati, kas jāieraksta pagaidu krātuvē, netiek attēloti kā ceļš failu sistēmā, bet gan kā mainīgais tips Bināri dati. Tāpat, ja mērķa adrese nav norādīta, krātuvē tiek izveidots jauns fails. Tā adrese tiek atgriezta funkcijas rezultātā.

Faila izgūšana no pagaidu krātuves

Rakstot objektu informācijas bāzē, iespējams, būs jāizņem dati no pagaidu krātuves un jāievieto, piemēram, atribūtā. Šim nolūkam ir atbilstoša servera metode - GetFileFromTemporaryStorage(). Šī metode izgūst datus no pagaidu krātuves un atgriež tos kā rezultātu. Lai to izdarītu, jums ir jānorāda adrese pagaidu krātuvē. Šī adrese tiek atgriezta, izmantojot iepriekš aprakstītās metodes PlaceFile() un PlaceFileInTemporaryStorage(), ja tās ir veiksmīgi izpildītas.

Faila dzēšana no pagaidu krātuves

Kad dati ir saglabāti detaļās, pagaidu krātuvē esošo failu var dzēst. Šim nolūkam ir metode DeleteFileFromTemporaryStorage(), kas izdzēš failu no pagaidu krātuves. Metode izmanto kā parametru pagaidu krātuvē esošā faila adresi. Pieejams serverī.

Tiek pārbaudīta pagaidu uzglabāšanas adrese

Faila adrese var norādīt gan pagaidu krātuvi, gan informāciju informācijas bāzē. Lai pārbaudītu tā veidu, ir metode This isTemporaryStorageAddress().

Tas pārbauda, ​​vai nodotā ​​adrese ir adrese, kas norāda uz veikalu. Atgriež True, ja adrese norāda uz pagaidu krātuvi. Metode ir pieejama serverī.

Rekvizītu adreses saņemšana

Pēc tam, kad dati ir ievietoti informācijas bāzes detaļās, jums var būt nepieciešams tiem piekļūt, izmantojot failu metodes.

Taču, pirms saņemat datus, piemēram, no īpašuma, jums ir jāiegūst šī īpašuma adrese. Šim nolūkam ir metode GetFileAddressInInformationBase().

Tās mērķis ir atgriezt faila adresi informācijas bāzē atbilstoši sākotnējiem parametriem. Lai to izdarītu, jānodod objekta atslēga (tā var būt saite uz objektu vai informācijas reģistra ievades atslēga) un atribūta nosaukums. Ja jums ir jāiegūst tabulas daļas atribūtā saglabātā faila adrese, pirms atribūta nosaukuma parametrā, kas norāda atribūta nosaukumu, jums jāpievieno tabulas daļas nosaukums un punkts “.”. Metode ir pieejama gan klientā, gan serverī.

Faila izgūšana no informācijas bāzes

Metode GetFile() saņem failu no informācijas bāzes un saglabā to lokālajā failu sistēma lietotājs. Pirmais parametrs norāda faila adresi rekvizītā vai pagaidu failu krātuvē. Otrais parametrs norāda iegūtā faila galamērķa atrašanās vietu. Neinteraktīvā režīmā jums jānorāda ceļš. Interaktīvajā režīmā parametrs nav obligāts.

Pēc noklusējuma metode tiek izpildīta interaktīvā režīmā, tas ir, pēdējais parametrs ir True. Tas nozīmē, ka tiek parādīts dialoglodziņš, kurā varat norādīt darbību ar saņemto failu: palaist to vai saglabāt lietotāja norādītā vietā. Ja ir aktīvs interaktīvais režīms un nav norādīts mērķa diska faila ceļa parametrs, faila atvēršanas darbība nav pieejama. Atgriež Būla vērtību. Aplams nozīmē, ka lietotājs izvēlējās atcelt darbību interaktīvā faila saglabāšanas dialoglodziņā.

Failu metožu izmantošanas piemērs

// Faila saņemšana no diska interaktīvā režīmā // un ievietošana pagaidu krātuvē &Klienta procedūrā SelectDiskFileAndWrite()

Mainīgais SelectedName; VariableTemporaryStorageAddress; Ja PutFile(TemporaryStorageAddress, SelectedName, True) Tad Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); endIf;

Procedūras beigas

// Faila kopēšana no pagaidu krātuves uz direktoriju // atribūtu, objekta ierakstīšana, faila dzēšana no pagaidu // krātuves &Servera procedūras vietā objekta fails (pagaidu krātuves adrese)

Direktorija elements = Form AttributesValue("Objekts"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); Katalogs Element.File Data = NewValueStorage(BinaryData); FilePathOnDisk = jauns fails(DirectoryItem.FileName); Direktorija Item.FileName = FilePathOnDisk.Name; Direktorija elements.Write(); Modificēts = False; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueВFormAttributes (kataloga elements, "Objekts");

Procedūras beigas

// Faila nolasīšana no rekvizītiem un saglabāšana // uz lokālais disks interaktīvajā režīmā &Klienta procedūrā ReadFileAndSaveToDisk()

Adrese = GetFileAddressInInformationBase(Object.Link, "FileData"); GetFile(Adrese, Objekts.Faila nosaukums, True);

Procedūras beigas

Atbalsts adresēm attēla laukā

Attēla lauka vadīkla atbalsta attēla rādīšanu, ko nosaka pagaidu krātuvē vai datubāzē esošā faila adrese.

Lai to izdarītu, veidlapas elementa rekvizītā Data ir jāiestata atribūts stīgas veids. Šī atribūta vērtība tiks interpretēta kā attēla adrese.

Piemērs // Attēla lauka saistīšana ar attēla adresi // pagaidu krātuvē. AddressPictures veido virknes veida informāciju

Vietas fails (attēla adrese, patiess)

Picture.Data = AddressPictures

Ierobežojumi, strādājot ar Web klientu

Aprakstītā mehānisma darbībai, izmantojot Web klientu, ir daži ierobežojumi. Šie ierobežojumi ir saistīti ar pārlūkprogrammas drošības modeli. Tā, piemēram, klients nevar patstāvīgi saglabāt failu lokālajā failu sistēmā, tas ir, ir pieejama tikai klienta metožu PlaceFile() un GetFile() interaktīvā versija. Izņēmums tiek izmests, mēģinot izmantot neinteraktīvo režīmu. Dialoglodziņi, kas tiek parādīti interaktīvi, ir raksturīgi noteiktam pārlūkprogrammas veidam.

Funkcijas, strādājot ar Vērtību krātuvi Klientā

Problēma:

Ja dokumenta tabulas sadaļā ir atribūts Vērtību krātuves veids, tas palēnina dokumenta veidlapas atvēršanu, ja šajā atribūtā ir ietverti lieli dati.

Paredzamais iemesls:

Iespējams, atverot veidlapu, klientam tiek nosūtīta nevis saite uz Vērtību veikalā esošajiem datiem, bet gan paši dati.

Risinājums

  • Veidlapas tabulas atribūta rekvizītos ir karodziņš "Vienmēr lietot". Ja tas ir iestatīts, lauka saturs vienmēr tiek pārsūtīts starp serveri un klientu - piemēram, atverot veidlapu. Šis karodziņš ir jāatspējo, taču tas ir jāņem vērā kodā, jo pēc noklusējuma klientam šim laukam nebūs vērtības. Piemēru var atrast 1C:Arhīvs.

Tas ir vēl labāk izmantot pagaidu uzglabāšana lai pārsūtītu failus starp klientu un serveri.