Deschideți un fișier din stocarea temporară 1c. Primirea adresei de recuzită

Aproape orice informație poate fi stocată într-un depozit de valori, de ex.

... poze (fotografii):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Enumerări.Tipuri de informații suplimentare despre Objects.Image; Stocare = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// în acest loc afișează totul... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

...document foaie de calcul:

TabDoc=New TabularDocument; TabDoc.Output(FormElements.TabularDocumentField1); Stocare=NewValueStorage(TabDoc); Scrie();

Sfârșitul procedurii

Procedura RestoreFromStoragePress(Element)

TabDoc=Storage.Get(); Dacă TabDoc<>Nedefinit ThenFormElements.TabularDocumentField1.Output(TabDoc); endIf;

Sfârșitul procedurii

...fișiere arbitrare (date binare):

XZ = NewValueStorage(NewBinaryData(fișier));

Opt acceptă comprimarea datelor plasate în stocare:

XZ = NewValueStorage(NewBinaryData(fișier),NewDataCompression(9));

... prelucrare și raportare externă:

Procedura LoadProcessingIntoStorage(PropsStorageType)

CompressionRate = NewDataCompression(9); //9 PropsStorageType maxim = New StorageValues(New BinaryData("c:\reports\report.epf", Compression Ratio));

Sfârșitul procedurii

Procedure StartProcessingFromStorage(PropsStorageType)

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

Sfârșitul procedurii

Lucrul cu stocarea

Dacă au fost date binare, atunci pot fi restaurate din depozitul de valori folosind metoda Get și scrise într-un fișier folosind metoda Write().

If TypeValue(Stocare)<>Tastați ("BinaryData") Apoi

BinaryData = Storage.Get();

BinaryData = Stocare;

endIf; BinaryData.Write(FileName);

Dacă a fost, de exemplu, un document Word (fișier doc sau alt tip de fișier înregistrat), atunci poate fi deschis astfel:

LaunchApplication(FileName);

Pentru a șterge un câmp de tip Value Storage, trebuie să-l atribuiți Nedefinit:

PropsStorage = Nedefinit;

Lucrul cu fișiere și imagini în limbajul încorporat 1C:Enterprise 8

Scop

Aplicația gestionată implementează un nou mecanism de lucru cu fișierele. Oferă schimb de fișiere între baza de informații și aplicația client. Particularitatea acestui mecanism este că este proiectat pentru utilizare într-un client subțire și un client Web și este conceput ținând cont de restricțiile de lucru cu fișiere impuse de browserele web.

Mecanismul este un set de metode care pot fi folosite pentru a plasa datele stocate local pe computerul utilizatorului într-o stocare temporară a bazei de informații, a transfera aceste informații din stocarea temporară în baza de date și a le primi înapoi pe computerul utilizatorului. Cele mai frecvente probleme de aplicare rezolvate de acest mecanism sunt stocarea informațiilor însoțitoare, de exemplu, imagini ale mărfurilor, documente legate de contracte etc.

Domeniul de aplicare al metodei

Depozitare temporara

Stocarea temporară este o zonă specializată a bazei de informații în care pot fi plasate date binare. Scopul principal este stocarea temporară a informațiilor în timpul interacțiunii client-server înainte de a fi transferate în baza de date.

Necesitatea stocării temporare apare deoarece modelul de operare al browserului web necesită ca fișierul selectat de utilizator să fie transferat direct pe server fără posibilitatea stocării acestuia pe client. Când un fișier este transferat, acesta este plasat în stocare temporară și poate fi apoi utilizat atunci când scrieți un obiect în baza de date.

Cea mai tipică sarcină a aplicației rezolvată prin stocarea temporară este furnizarea de acces la fișiere sau imagini înainte ca obiectul să fie înregistrat în baza de informații, de exemplu, sub forma unui element.

Un fișier sau date binare plasate în stocare sunt identificate printr-o adresă unică, care poate fi folosită ulterior în operațiuni de scriere, citire sau ștergere. Această adresă este dată de metode de scriere a unui fișier în stocarea temporară. O metodă separată în limbajul încorporat vă permite să determinați dacă adresa transmisă este o adresă care indică date în stocare temporară.

Baza de informatii

Mecanismul vă permite să accesați date binare stocate în atribute de tipul Value Storage.

Ca și în cazul stocării temporare, accesul la informații este posibil printr-o adresă specială. Îl puteți obține printr-o metodă specială prin transmiterea unui link către un obiect sau o cheie de intrare în registrul de informații și numele atributului. În cazul unei piese tabulare, este necesar să se transfere în plus indexul de rând al părții tabulare.

Metodele de lucru cu fișiere au limitări atunci când se lucrează cu detaliile bazei de informații. Pentru ei, spre deosebire de stocarea temporară, sunt disponibile doar informațiile de citire, dar nu scrierea sau ștergerea acestora.

Descrierea metodelor de lucru cu fișiere

Salvarea datelor în stocarea temporară

Scenariul cel mai tipic pentru utilizarea acestui mecanism implică plasarea inițială a datelor utilizatorului în stocare temporară. Există două metode pentru aceasta: PlaceFile() și PlaceFileInTemporaryStorage().

Prima metodă, PlaceFile(), plasează un fișier din sistemul de fișiere local în stocarea temporară. Metoda poate accepta o adresă țintă în stocare. Dacă nu este definit sau este un șir gol, atunci va fi creat un fișier nou și metoda își va returna adresa prin parametrul corespunzător.

Dacă parametrul care determină modul interactiv de operare este True, atunci metoda va afișa o casetă de dialog standard de selecție a fișierelor în care puteți selecta un fișier pe care să îl plasați în stocare. În acest caz, metoda va returna și adresa fișierului selectat.

Ca rezultat, metoda returnează False dacă utilizatorul a refuzat în mod interactiv să efectueze o operație în dialogul de selecție a fișierului. Metoda este disponibilă doar pentru client.

A doua metodă, PlaceFileInTemporaryStorage(), este similară cu cea anterioară, cu excepția faptului că este disponibilă pe server, iar datele care urmează să fie scrise în stocarea temporară sunt reprezentate nu ca o cale în sistemul de fișiere, ci ca o variabilă de tip BinaryData. De asemenea, dacă nu este specificată nicio adresă țintă, este creat un fișier nou în stocare. Adresa sa este returnată ca rezultat al funcției.

Preluarea unui fișier din stocarea temporară

Când scrieți un obiect în baza de informații, poate fi necesar să extrageți date din stocarea temporară și să le plasați, de exemplu, într-un atribut. Există o metodă de server corespunzătoare pentru aceasta - GetFileFromTemporaryStorage(). Această metodă preia datele din stocarea temporară și, ca rezultat, le returnează. Pentru a face acest lucru, trebuie să specificați adresa în stocarea temporară. Această adresă este returnată de metodele descrise mai sus PlaceFile() și PlaceFileInTemporaryStorage() dacă sunt executate cu succes.

Ștergerea unui fișier din stocarea temporară

După ce datele sunt salvate în detalii, fișierul din stocare temporară poate fi șters. În acest scop, există o metodă DeleteFileFromTemporaryStorage(), care șterge un fișier din stocarea temporară. Metoda ia ca parametru adresa unui fișier aflat în stocare temporară. Disponibil pe server.

Verificarea adresei pentru stocare temporară

Adresa fișierului poate indica atât stocarea temporară, cât și detalii în baza de informații. Pentru a-i verifica tipul, există o metodă This isTemporaryStorageAddress().

Verifică dacă adresa transmisă este o adresă care indică către magazin. Returnează True dacă adresa indică o stocare temporară. Metoda este disponibilă pe server.

Primirea adresei de recuzită

După ce datele sunt plasate în detaliile din baza de informații, poate fi necesar să le accesați folosind metode de fișier.

Dar înainte de a primi date, de exemplu de la o proprietate, trebuie să obțineți adresa acestei proprietăți. În acest scop, există o metodă GetFileAddressInInformationBase().

Scopul său este de a returna adresa fișierului în baza de informații conform parametrilor originali. Pentru a face acest lucru, trebuie să transmiteți cheia obiectului (aceasta poate fi fie un link către obiect, fie o cheie de intrare în registrul de informații) și numele atributului. Dacă trebuie să obțineți adresa unui fișier stocat într-un atribut al părții tabelare, înainte de numele atributului din parametrul care specifică numele atributului, trebuie să adăugați numele părții tabelare și un punct „.”. Metoda este disponibilă atât pe client, cât și pe server.

Preluarea unui fișier din baza de informații

Metoda GetFile() primește un fișier din baza de informații și îl salvează în sistemul de fișiere local al utilizatorului. Primul parametru specifică adresa fișierului din elementele de recuzită sau stocarea temporară a fișierului. Al doilea parametru specifică locația de destinație a fișierului rezultat. În modul non-interactiv, trebuie să specificați calea. În modul interactiv, parametrul este opțional.

Implicit, metoda este executată în modul interactiv, adică ultimul parametru este True. Aceasta înseamnă că este afișată o casetă de dialog în care puteți specifica o acțiune cu fișierul primit: rulați-l sau salvați-l într-o locație specificată de utilizator. Dacă modul interactiv este activ și parametrul Cale fișier disc țintă nu este specificat, operația de deschidere a fișierului nu este disponibilă. Returnează o valoare booleană. Fals înseamnă că utilizatorul a ales să anuleze operația în caseta de dialog interactivă de salvare a fișierului.

Exemplu de utilizare a metodelor de fișiere

// Primirea unui fișier de pe disc în modul interactiv // și plasarea acestuia în stocare temporară &Pe Procedura Client SelectDiskFileAndWrite()

Variabila SelectedName; VariableTemporaryStorageAddress; Dacă PutFile(TemporaryStorageAddress, SelectedName, True) Atunci Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); endIf;

Sfârșitul procedurii

// Copierea unui fișier din stocarea temporară într-un atribut de director //, înregistrarea unui obiect, ștergerea unui fișier din stocarea temporară // &Pe server Procedure Place Object File (Adresa de stocare temporară)

Director Element = Form AttributesValue("Obiect"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); Director Element.File Data = NewValueStorage(BinaryData); FilePathOnDisk = Fișier nou (DirectoryItem.FileName); Director Item.FileName = FilePathOnDisk.Name; Director element.Write(); Modificat = Fals; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueВFormAttributes(Element director, „Obiect”);

Sfârșitul procedurii

// Citirea unui fișier din elemente de recuzită și salvarea lui // pe discul local în modul interactiv &Pe Procedura Client ReadFileAndSaveToDisk()

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

Sfârșitul procedurii

Suport pentru adrese din câmpul de imagine

Controlul Picture Field acceptă afișarea unei imagini specificate de adresa unui fișier în stocarea temporară sau într-o bază de date.

Pentru a face acest lucru, trebuie să setați un atribut de tip șir în proprietatea Data a elementului de formular. Valoarea acestui atribut va fi interpretată ca adresa imaginii.

Exemplu // Legarea câmpului de imagine la adresa imaginii în // stocare temporară. AddressPictures formează detalii de tip șir

PlaceFile(Adresă imagine, adevărat)

Picture.Data = AddressPictures

Limitări atunci când lucrați cu clientul Web

Funcționarea mecanismului descris atunci când se utilizează clientul Web are unele limitări. Aceste restricții sunt legate de modelul de securitate al browserului. Deci, de exemplu, clientul nu poate salva independent un fișier în sistemul de fișiere local, adică doar versiunea interactivă a metodelor client PlaceFile() și GetFile() este disponibilă. O excepție este aruncată atunci când încercați să utilizați modul non-interactiv. Casetele de dialog care apar interactiv sunt specifice tipului dvs. de browser.

Caracteristici atunci când lucrați cu Value Storage pe Client

Problemă:

Când un Document are un atribut de tipul de stocare a valorii în secțiunea tabelară, acesta încetinește deschiderea formularului de document dacă acest atribut conține date mari.

Motiv presupus:

Poate că, la deschiderea unui formular, nu linkul către datele aflate în Value Store este trimis către client, ci datele în sine.

Soluţie

  • În proprietățile atributului tabel al formularului există un steag „Folosește întotdeauna”. Dacă este setat, conținutul câmpului este întotdeauna transferat între server și client - de exemplu, la deschiderea unui formular. Acest flag trebuie să fie dezactivat, dar acest lucru trebuie luat în considerare în cod, deoarece implicit nu va exista nicio valoare pentru acest câmp pe client. Un exemplu poate fi găsit în 1C:Arhive.

Este chiar mai bine de folosit depozitare temporara pentru a transfera fișiere între client și server.

Stocarea configurației în 1C 8.2 și 8.3 este un instrument pentru dezvoltarea de grup de soluții, încorporat în platforma 1C: Enterprise 8. Repositoryul permite dezvoltarea de soluții multi-utilizator de către un număr nelimitat de utilizatori. Cu ajutorul acestuia, puteți vedea istoricul complet al dezvoltării configurației și fiecare pas al dezvoltatorilor în detaliu.

Să aruncăm o privire mai atentă la setări și la lucrul cu spațiul de stocare al configurației.

Un depozit este în esență o bază de date în care sunt stocate modificările de configurare. Fiecare dezvoltator lucrează cu propria sa bază de informații conectată la stocare. Baza de lucru poate fi conectată și la depozit. Diagrama generală este cel mai bine descrisă în această imagine:

Această bază de date stochează, de asemenea, informații despre cine a capturat acest sau acel obiect. Capturarea unui obiect este o etichetă stabilită de dezvoltator. Captura instalată vă permite să evitați coliziunile în timpul dezvoltării grupului. În timp ce un obiect este capturat, nimeni nu îl poate edita.

Puteți captura fie un obiect întreg (recursiv), fie un obiect sau o formă separată.

După ce dezvoltatorul a efectuat unele acțiuni asupra obiectului, el este obligat să plaseze modificările în depozit. Și astfel eliminați semnul că obiectul este capturat.

Cum se creează un spațiu de stocare 1C

Crearea unui depozit este destul de simplă; pentru a face acest lucru, trebuie să selectați elementul „Creare depozit” din meniul „Configurare - Arhivă de configurare”. În meniul care apare, trebuie doar să specificați calea către viitoarea locație de stocare și autentificarea/parola utilizatorului administrator:

Când creați, asigurați-vă că faceți un cont de rezervă cu drepturi administrative - de foarte multe ori acest lucru vă ajută.

Cum să vă conectați la stocarea 1C

Pentru a vă conecta la memoria de configurare, trebuie să selectați elementul „Conectați-vă la stocare” din meniul „Configurare - Stocare de configurare”. În fereastra care apare, trebuie să specificați calea către stocare și autentificarea/parola utilizatorului, faceți clic pe „Conectați”:

Obțineți 267 de lecții video pe 1C gratuit:

În momentul conexiunii, configurația dvs. va fi înlocuită cu configurația din depozit, aveți grijă.

Administrarea stocării configurației 1C

Pentru a administra stocarea 1C, trebuie să selectați următorul element din meniul de configurare - „Configurare - Stocare configurație - Administrare”:

  • În fila „Utilizatori”, puteți să adăugați sau să eliminați utilizatori noi, precum și să definiți drepturile pentru fiecare dintre ei.
  • În fila „Conexiuni”, puteți vedea toți utilizatorii conectați la stocare și, dacă este necesar, îi puteți deconecta.
  • În fila „Anulați captura”, puteți elimina capturarea oricărui utilizator pe un anumit obiect, dacă, desigur, aveți dreptul de a face acest lucru.

Cum să vizualizați istoricul stocării 1C

Pentru a vizualiza istoricul, accesați meniul „Configurare - Configurare Stocare”, selectați „Istoric stocare”:

În istoricul stocării 1C puteți vedea când, de către cine și ce a fost schimbat.

Dezvoltare cu stocare 1C 8.3

Lucrul cu stocarea poate fi împărțit aproximativ în acțiuni principale:

  • configurații din depozitul de configurare 1C;
  • actualizați stările de stocare 1C;
  • captare în depozit;
  • spatiu de depozitare.

Să aruncăm o privire mai atentă la fiecare acțiune:

Actualizați stările de stocare 1C

Preia cele mai recente stări ale obiectelor (capturate sau nu).

Denumit: „Configurare - Stocare configurație - Stare de actualizare”.

Actualizarea configurației din depozitul de configurare 1C

Acțiunea va prelua toate obiectele de configurare modificate care au fost plasate în depozit. Executarea acestei comenzi actualizează și stările obiectelor.

Denumit: „Configurare - Stocare configurație - Actualizați configurația din stocare.”

Capturați stocarea configurației 1C

Folosind această comandă, puteți bloca modificările aduse acestui obiect pentru alți dezvoltatori: în timp ce obiectul este capturat de dvs., niciun utilizator nu îl poate schimba până când nu puneți obiectul înapoi.

Puteți captura făcând clic dreapta pe meniul contextual al obiectului de metadate:

În fereastra care se deschide, puteți seta câteva setări:

  • Executați recursiv- vă permite să capturați toate obiectele subordonate - forme etc.
  • Permiteți să primiți capturat— permite altor utilizatori să primească versiuni intermediare ale unui obiect

Cameră în depozit 1C

După schimbarea unui obiect, acesta trebuie repus în stocare; acest lucru se face în același mod ca și capturarea, fiind selectată doar opțiunea „Place în stocare”:

Când postați, asigurați-vă că completați câmpul „comentare”; acest lucru este foarte important în timpul dezvoltării grupului. Șase luni mai târziu, nici nu vă veți aminti de ce ați efectuat anumite acțiuni. La fel ca și captura, camera are propriile setări specifice:

  • Executați recursiv— vă permite să plasați toate obiectele subordonate - forme etc.
  • Lasă capturat— vă permite să plasați o versiune „intermediară” a unui obiect, în timp ce părăsiți captura de utilizator

Cum să adăugați un nou obiect la stocarea 1C

Imprimare (Ctrl+P)

Această secțiune descrie cele mai frecvente utilizări ale mecanismului de lucru cu stocarea temporară și fișiere.

Salvarea datelor dintr-un fișier în stocarea temporară

Plasarea unui singur fișier

Metoda PlaceFile() plasează un fișier din sistemul de fișiere local în stocarea temporară. Metoda poate accepta o adresă în stocarea temporară unde fișierul ar trebui să fie salvat. Dacă adresa nu este definită sau este un șir gol, atunci va fi creată o nouă adresă și metoda o va returna printr-un parametru special.
Notă. Cantitatea de date mutată între client și server într-un apel la metoda PutFile().
Dacă parametrul care determină modul interactiv de operare este True, atunci metoda va afișa o casetă de dialog standard de selecție a fișierelor în care puteți selecta un fișier pe care să îl plasați în stocare. În acest caz, metoda va returna și adresa fișierului selectat.
Metoda returnează False ca rezultat, dacă utilizatorul a refuzat în mod interactiv să efectueze o operație în dialogul de selecție a fișierului.

Plasarea unui set de fișiere

Metodă PlaceFiles() plasează mai multe fișiere în stocare temporară într-un singur apel. Există mai multe moduri diferite de a utiliza această metodă:
● pre-generați o listă de fișiere de adăugat, de exemplu, când ați selectat anterior fișierele care trebuie plasate în baza de informații;
● treceți o mască de căutare a fișierelor metodei, de exemplu, când doriți să plasați toate fișierele de un anumit tip, de exemplu, toate imaginile, în baza de date de informații;
● treceți metodei un obiect pregătit anterior Dialog de selectare a fișieruluiîn modul de deschidere a fișierului.
După terminarea lucrării, metoda poate returna o listă de fișiere adăugate efectiv.

// FileList – atribut al formei de tip ValueList,
// care conține o listă de fișiere adăugate
FileArray = Matrice nouă;
Pentru fiecare element al listei din ciclul List of Files
FileArray.Add(NewDescriptionofTransferFile(ListElement,));
EndCycle;
PlacedFiles= New Array;
Rezultat = PlaceFiles(ArrayFiles, PlacedFiles, False, UniqueIdentifier);

Nota 1: Pentru a utiliza metoda PlaceFiles() Clientul web necesită conectarea unei extensii de procesare a fișierelor.
Nota 2: Cantitatea de date mutată între client și server per apel de metodă PlaceFiles(), nu trebuie să depășească 4 Gb (în formă serializată).

Plasarea datelor în stocare temporară

Metoda este similară cu metoda PlaceFile(), cu excepția faptului că datele vor fi scrise în stocarea temporară
nu sunt reprezentate ca o cale în sistemul de fișiere, ci ca o valoare. De asemenea, dacă nu este specificată nicio adresă existentă în stocarea temporară, este creată o nouă adresă. Adresa este returnată ca rezultat al funcției. Ca și în cazul fișierelor, datele postate trebuie să aparțină unui anumit formular și sunt șterse automat după ce sunt șterse.
Notă. Cantitatea de date mutată între client și server per apel de metodă PlaceInTemporaryStorage(), nu trebuie să depășească 4 Gb (în formă serializată).
Atenţie! Când este plasată în stocare temporară, valoarea nu este de fapt serializată. O referință la valoare este plasată și stocată în cache timp de 20 de minute. După această perioadă, valoarea este serializată, scrisă pe disc (stocarea datelor de sesiune) și eliminată din cache.

Preluarea datelor din stocarea temporară

Când scrieți un obiect într-o bază de informații, poate fi necesar să extrageți date din stocarea temporară și să le plasați, de exemplu, într-un atribut al obiectului bazei de informații. Există o metodă specială pentru aceasta - GetFromTemporaryStorage(). Această metodă preia datele din stocarea temporară și le returnează ca rezultat al execuției. Pentru a primi date, trebuie să indicați temporar adresa
depozitare. Această adresă este returnată prin metode de plasare a datelor în stocare temporară dacă au succes (vezi secțiunile anterioare).
Atenţie! Când recuperați o valoare din stocarea temporară pe server, ar trebui să țineți cont de faptul că aceasta este obținută prin referință. În realitate, această legătură indică o valoare care este stocată în cache. În 20 de minute, din momentul în care a fost plasată în stocare sau din momentul în care a fost accesată ultima dată, valoarea va fi stocată în cache, apoi va fi scrisă pe disc și ștearsă din cache. Data viitoare când valoarea este accesată, aceasta este încărcată de pe disc și plasată înapoi în cache.
După deserializarea și restaurarea valorilor din stocarea temporară, referințele nu sunt restaurate. Valoarea cache-ului este restaurată de pe disc. Dar după serializare/dezerializare, este imposibil să se restabilească referințe la alte obiecte din interiorul valorii.

Ștergerea datelor din stocarea temporară

După ce datele sunt salvate în atributul obiectului infobase, datele din stocarea temporară pot fi șterse. Există o metodă pentru asta
RemoveFromTemporaryStorage(), care efectuează îndepărtarea. Metoda ia ca parametru o adresă în stocare temporară.

Verificarea adresei pentru stocare temporară

Adresa poate indica atât stocarea temporară, cât și detalii în baza de informații. Există o metodă de a verifica tipul acestuia
Aceasta esteTemporaryStorageAddress(). Verifică dacă adresa transmisă este o adresă care indică către magazin. Returnează True dacă adresa indică o stocare temporară.

Primirea adresei de recuzită

După ce datele sunt plasate în atributul obiectului infobase, poate fi necesar să le accesați folosind metode de fișier.
Dar înainte de a primi date, de exemplu de la o proprietate, trebuie să obțineți adresa acestei proprietăți. Există o metodă pentru asta GetNavigationLink().

Poate returna adresa valorii din baza de informații pe baza parametrilor originali. Pentru a face acest lucru, trebuie să transmiteți cheia obiectului (aceasta ar putea fi
atât un link către obiect cât și cheia de introducere a registrului de informații) cât și numele atributului. Dacă trebuie să obțineți adresa valorii stocate în atribut
partea tabulară, apoi la numele atributului din parametrul care specifică numele atributului, trebuie să adăugați numele părții tabelare și un punct „.”. De exemplu: Produse.Imagine

Preluarea unui fișier din baza de informații

Primirea unui singur fișier

Metoda GetFile() primește un fișier din baza de informații și îl salvează în sistemul de fișiere local al utilizatorului. Primul parametru specifică adresa fișierului în atributul obiectului infobase sau în stocarea temporară a fișierului. Salvarea nu va avea loc dacă utilizatorul în numele căruia se efectuează operația nu are dreptul de vizualizare la detaliile obiectului infobase. Al doilea parametru determină locația în care este salvat fișierul rezultat. În modul non-interactiv, trebuie să specificați calea. În modul interactiv parametrul este
opțional.
În mod implicit, metoda este executată interactiv. Aceasta înseamnă că va fi generată o casetă de dialog în care puteți specifica o acțiune cu fișierul primit: rulați-l sau salvați-l într-o locație specificată de utilizator în sistemul de fișiere. Dacă este selectat modul interactiv și opțiunea Nume fișier nu este specificată, operațiunea de deschidere a fișierului nu este disponibilă. Metoda returnează o valoare booleană. Fals înseamnă că utilizatorul a ales să anuleze operația în caseta de dialog interactivă de salvare a fișierului.

Primirea unui set de fișiere

Metoda GetFiles() vă permite să primiți și să salvați mai multe fișiere stocate în baza de informații în sistemul de fișiere local al utilizatorului. Lista fișierelor încărcate este transmisă ca parametru.

// FileList – o listă de valori care conține link-uri către elemente
// directorul în care se află fișierele încărcate
// Lista de reprezentare a valorilor este numele fișierului care se încarcă
FileArray = Matrice nouă;
Pentru fiecare element al listei din ciclul List of Files
Fișier = Nou File(String(ListElement.Value));
ReceiveFile = Nou Descrierea fișierului transmis;
ReceiveFile.Name = ListElement.View;
ReceiveFile.Storage= P getNavigationLink(ListItem.Value, „Date”);
FileArray.Add(ReceivingFile);
EndCycle;
Fișiere primite= New Array;
Rezultat = ReceiveFiles(FilesArray, ReceivedFiles, UploadedFilesPath, False);
Dacă NU rezultă, atunci
Mesaj = Nou Mesaj pentru utilizator;
Mesaj.Text = „Eroare la primirea fișierelor!”;
Message.Message();
EndIf ;

După terminare, metoda poate returna o listă de fișiere descărcate efectiv, indicând numele complet al fiecărui fișier salvat.
NOTĂ. Pentru a utiliza metoda GetFiles() în clientul web, trebuie să conectați extensia de fișier. Dacă proprietatea Nume obiect Descrierea fișierului transmis conține calea absolută către fișier, fișierul va fi salvat pe această cale, indiferent de parametru Locația fișierului.
Parametrul Locație fișier poate fi fie o cale în sistemul de fișiere local, fie un obiect Dialog de selecție a fișierelor în modul de selectare a unui director sau de salvare a fișierelor. Dacă valoarea parametrului Locația fișierului obiect specificat Dialog de selectare a fișieruluiîn mod
salvarea fișierelor, apoi:

● dialogul va fi apelat pentru fiecare fișier transferat, cu excepția acelor fișiere pentru care proprietatea nume obiect Descriere fișier transmis conține o cale absolută;
● valoarea obiectului Name of the Description of the Transmitted File va fi folosită ca nume inițial de fișier în dialog;
● dacă pentru orice fișier este selectat refuzul de salvare, atunci numele obiectului Descrierea proprietății Fișier transferat va conține un șir gol;
● metoda GetFiles() va returna valoarea True daca cel putin un fisier a fost primit cu succes;
● trebuie luat în considerare faptul că fișierele sunt primite efectiv după ce utilizatorul răspunde la întrebări despre specificarea numelui și a căii
toate fișierele primite;
● dacă utilizatorul în numele căruia se execută metoda GetFile() nu are dreptul de vizualizare la cel puțin un atribut al obiectului infobase din care sunt preluate fișierele, întreaga operațiune va eșua.
Exemplu:

TransferredFiles = New Array;
Descriere = Nou Descrierea fișierului transmis(„Descriere”, FileAddress);
Fișiere transferate.Adăugați(Descriere );
FileSelect = Nou FileSelectionDialog(FileSelectionDialogMode.Save);
FileSelect.Header= „Salvează arhiva”;
File Selection.Extension= „fermoar”;
FileSelect.Filter= „Arhivă(*.zip)|*.zip|Toate fișierele|*.*”;
FileSelect.FilterIndex = 0;
ReceiveFiles(TransferFiles, SelectFile, False);

Dacă este selectat modul interactiv de selectare a directorului pentru salvarea fișierelor, clientul web va solicita suplimentar permisiunea de a salva fișierele specificate cu căi absolute. În cazul salvării neinteractive (calea către director este specificată în parametrul corespunzător), cererea va fi executată pentru întreaga listă de fișiere salvate.

Exemplu de utilizare a metodelor de fișiere

// Preluarea unui fișier de pe disc în mod interactiv
// și plasându-l în depozit temporar.
&OnClient
Procedură SelectDiskFileIWrite()
Variabila SelectedName;
Perem TemporaryStorageAddress;
NewObject = Object.Link.Empty();
Dacă PlaceFile(TemporaryStorageAddress, „”, SelectedName, True) Apoi
Object.FileName = SelectedName;
PlaceObjectFile(TemporaryStorageAddress);
endIf;
Sfârșitul procedurii
// Copierea unui fișier din stocarea temporară în elemente de recuzită
// director, scrierea unui obiect, ștergerea unui fișier din temporar
// depozitare.
&Pe server
Procedură PlaceObjectFile (Adresă de stocare temporară)
Director Element = Form AttributesValue(„Obiect”);
BinaryData = GetFromTemporaryStorage(TemporaryStorageAddress);
Director Element.File Data= Nou Valori de stocare (Date binare, NewDataCompression()) ;
Fișier = Nou Fișier (Articol Director.NumeFișier);
Director Item.FileName = File.Name;
Director element.Write();
Modificat = Fals;
DeleteFromTemporaryStorage(TemporaryStorageAddress);
ValueВFormAttributes(Element director, „Obiect”);
Sfârșitul procedurii
// Citiți fișierul din recuzită și salvați-l
// pe discul local în modul interactiv.
&OnClient
Procedură ReadFileAndSaveToDisk()
Adresa = GetNavigationLink(Object.Link,"FileData");
GetFile(Adresă, Object.FileName, True);
Sfârșitul procedurii

Permisiunea de a efectua un grup de operații cu fișiere

Când efectuați unele operații în clientul web, poate fi necesar să obțineți permisiunea pentru operațiuni cu mai multe fișiere.
De exemplu, trebuie să preluați un document dintr-o bază de informații și apoi să deschideți documentul salvat folosind aplicația asociată.
Pentru a efectua această operație, va trebui să răspundeți la întrebarea despre salvarea documentului și la întrebarea despre necesitatea rulării acestuia. Dacă există mai multe operațiuni, utilizatorul va avea și mai multe întrebări.
Pentru a reduce numărul de întrebări, puteți utiliza metoda. Când utilizați această metodă
Utilizatorului i se arată o listă cu toate operațiunile care sunt planificate a fi efectuate și i se cere să permită efectuarea grupului de operațiuni. Dacă utilizatorul a permis executarea, atunci operațiunile solicitate vor fi efectuate fără solicitări suplimentare către utilizator. Dacă permisiunea nu este acordată, operațiunile vor decurge normal: o solicitare per operație.
NOTĂ. Pentru a folosi metoda RequestUserPermission()În clientul web trebuie să activați extensia de gestionare a fișierelor.
Să ne uităm la un exemplu de utilizare a metodei:

Dacă ConnectExtensionLucrul cu fișiere() Apoi
Link = GetNavigationLink(Object.Link, „FileData”);
// Formarea unei descrieri a fișierelor transferate (în acest caz există un singur fișier)
Fișiere transferate= New Array;
Descriere = Descriere nouă a fișierului transferat (Object. FileName, Link);
TransferredFiles.Add(Descriere);
// Pregătește un obiect pentru a primi informații despre fișierele primite
Fișiere transferate= New Array;

// Definiți alți parametri ai metodei
DirectorSalvare= „c:\temp”;
Interactiv = Fals ;
Nume fișier transmis = Salvare director + „\” + Object.FileName;
// Pregătește o descriere a metodelor de obținere a permisiunilor
Metode = New Array;

Methods.Add(„GetFiles”);
Methods.Add(TransferFiles);
Methods.Add(TransferredFiles);
Methods.Add(SaveDirectory);
Metode.Add(Interactiv);
Metode.Add(New Array);
Methods.Add(„RunApplication”);
Methods.Add(TransferredFileName);
Dacă nu RequestUserPermission(Metode) Apoi
Warning(„Utilizatorul a refuzat permisiunea.”);
Întoarcere;
endIf;
GetFiles(TransferFiles, TransmittedFiles, SavingDirectory, Interactive);
RunApplication(TransferredFileName);
In caz contrar
Avertisment ("Execuția nu este acceptată. Extensia fișierului nu este instalată.");
endIf;

Trebuie remarcate mai multe caracteristici ale metodei RequestUserPermission().

1. Permisiunea este cerută numai pentru următoarele metode:

GetFiles()/StartGettingFiles(),
● PlaceFiles()/StartPlaceFiles(),
● FindFiles()/StartSearchFiles(),
● CopyFile()/StartCopyFile(),
● MoveFile()/StartMovingFile(),
●DeleteFiles()/StartDeleteFiles(),
● CreateDirectory()/StartCreatingDirectory(),
● LaunchApplication()/StartRunApplication().

2. Se solicită permisiunea pentru un set specific de parametri ai metodei. Dacă, în timpul executării efective a unei metode de manipulare a fișierelor, valorile parametrilor diferă de cele pentru care a fost obținută permisiunea, această permisiune nu va fi valabilă, iar utilizatorul va primi o solicitare separată pentru confirmarea operațiunii.

3. Dacă trebuie să efectuați două (sau mai multe) operații identice cu fișiere (chiar și cu același set de parametri), trebuie să specificați numărul adecvat de elemente în matricea parametrilor metodei RequestUserPermission(). De exemplu, dacă trebuie să obțineți același fișier din baza de informații de două ori și să-l plasați într-o locație fixă ​​în sistemul de fișiere, ar trebui să solicitați permisiunea
pentru două operații.

4. Dacă se solicită permisiunea pentru o operație care efectuează o operație interactivă (de exemplu, funcția GetFiles(), un obiect este transmis ca parametru Dialog de selectare a fișierului), atunci o astfel de operațiune este exclusă din cerere.

Permisiunile acordate sunt păstrate fie până când apelul autorizat este executat, fie până când limbajul încorporat se termină de execuție.
NOTĂ. În clienți groși și subțiri RequestUserPermission() Metoda returnează întotdeauna True, fără interacțiunea utilizatorului.

Lucrul cu stocare temporară într-o lucrare de fundal

Mecanismul de lucru cu stocarea temporară are capacitatea de a transfera date de la un job de fundal la sesiunea care a inițiat jobul de fundal.
Pentru un astfel de transfer, ar trebui să plasați o valoare goală în stocarea temporară în sesiunea părinte (folosind metoda PlaceInTemporaryStorage()), specificând orice identificator al stocării temporare care se creează (parametrul Adresă). Apoi treceți adresa primită jobului de fundal prin parametrii jobului de fundal. În plus, dacă într-un job de fundal, această adresă este utilizată ca valoare a parametrului Adresă metodei PlaceInTemporaryStorage(), apoi rezultatul va fi copiat în sesiunea din care a fost lansată lucrarea de fundal.
Datele plasate în stocare temporară într-o lucrare de fundal nu vor fi accesibile din sesiunea părinte până la finalizarea lucrării de fundal.

Suport pentru adrese din câmpul de imagine

Elementul de formular View Field Câmpul Picture acceptă afișarea unei imagini specificate de adresa unei valori (care poate fi o imagine sau date binare) în stocare temporară sau într-o bază de date.
Pentru a face acest lucru, trebuie să setați un atribut de tip șir în proprietatea Data a elementului de formular. Valoarea acestui atribut va fi interpretată ca adresa imaginii.

// Exemplul 1
// Legarea câmpului de imagine la adresa imaginii în mod temporar
// depozitare. AddressPictures – detalii formular de tip șir
PlaceFile(ImageAddress, InitialName, SelectedName, True, UniqueIdentifier);
// Exemplul 2
// Obținerea adresei imaginii din atributul obiectului
// baza de informatii
FilePictures = Object.FilePictures;
Dacă nu PictureFile.Empty() Atunci
ImageAddress = GetNavigationLink(ImageFile, „FileData”);
In caz contrar
Adresă imagine = „”;
Fără sfârşit;

Acces la directoare standard

Când utilizați sistemul, este necesar un anumit spațiu în sistemul de fișiere în care pot fi stocate diverse date de fișiere, care, pe de o parte, sunt temporare și, pe de altă parte, trebuie să fie stocate pentru o perioadă destul de lungă. Astfel de fișiere includ schițe pentru sistemele de gestionare a documentelor, componente externe care rulează pe partea computerului client etc.
Un director special este destinat pentru stocarea unor astfel de fișiere, care este legat de un anumit utilizator al unei anumite baze de informații.
Același utilizator care lucrează cu două baze de informații va avea acces la două directoare diferite pentru stocarea datelor utilizatorului. Locația acestui director este determinată folosind metoda WorkUserDataDirectory(). Dacă directorul nu există, acesta este creat prima dată când este accesat. Dacă directorul nu poate fi creat, sistemul aruncă o excepție.
NOTĂ. Metoda UserDataWorkDirectory() nu este disponibilă pe partea serverului.
Sistemul de operare are un director special alocat pentru stocarea permanentă a datelor utilizatorului. Ar putea fi unele
rapoarte, formulare tipărite ale documentelor etc. Datele sunt plasate în acest director, care pot fi ulterior trimise către
către consumatori. Metoda DocumentDirectory() este folosită pentru a accesa acest director. Locația fizică a directorului variază în funcție de sistemul de operare.
sistem în care se execută aplicația și este listată în asistentul de sintaxă.