Internet Windows Android

Obțineți din stocarea temporară 1c 8.3. Salvarea datelor dintr-un fișier în stocarea temporară

Puteți stoca aproape orice informație într-un magazin de valori, de exemplu,

... poze (poze):

CurrentImage.Object = TextFabric.Reference; CurrentImage.DataType = Enumerări.Tipuri de AdditionalObjectsInformation.Image; Stocare = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

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

...document foaie de calcul:

TabDoc=New SpreadsheetDocument; TabDoc.Output(FormElements.FieldofSpreadsheetDocument1); Stocare=NewValueStorage(TabDoc); Scrie();

EndProcedure

Procedura RestoreFromStorageClick(Articol)

TabDoc=Storage.Get(); Dacă TabDoc<>Nedefinit ThenFormElements.SpreadsheetDocumentField1.Output(TabDoc); EndIf;

EndProcedure

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

XS = NewValueStorage(New BinaryData(fișier));

Opt acceptă comprimarea datelor plasate în stocare:

XS = NewValueStorage(New BinaryData(fișier),NewCompression(9));

... prelucrare și raportare externă:

Procedura LoadProcessingToStorage(AttributeTypeStorage)

CompressionDegree = New DataCompression(9); //9 PropsStorageType maxim = NewStorageValues(NewBinaryData("c:\reports\report.epf", Grad de compresie));

EndProcedure

Procedure StartProcessingFromStorage(AttributeTypeStorage)

TempFileName = TempFileDirectory()+"report.epf"; BinaryData = PropsTypeStorage.Get(); BinaryData.Write(TempFileName); ExternalProcessing = ExternalProcessing.Create(TempFileName); ExternalProcessing.GetForm().Open();

EndProcedure

Lucrul cu stocarea

Dacă a fost BinaryData, atunci acestea pot fi restaurate din stocarea valorii folosind metoda Get și scrieți într-un fișier folosind metoda Write().

IfTypeVnch(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 fișier de tip înregistrat), atunci poate fi deschis astfel:

StartApplication(FileName);

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

PropsStorage = Nedefinit;

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

Scop

Implementat într-o aplicație gestionată mecanism nou lucrează cu fișiere. Oferă partajarea fișierelor între baza de informatiiși aplicația client. O caracteristică a acestui mecanism este că se concentrează pe utilizarea într-un client subțire și client Web și este conceput ținând cont de restricțiile de lucru cu fișierele impuse de browserele web.

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

Domeniul de aplicare al metodelor

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 din faptul că modelul de browser web necesită transferul fișierului selectat de utilizator 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 abia apoi poate fi folosit atunci când scrieți un obiect în baza de date.

Cea mai tipică sarcină aplicată rezolvată de stocarea temporară este furnizarea de acces la fișiere sau imagini înainte ca obiectul să fie scris î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 1C:Enterprise vă permite să determinați dacă adresa transmisă este o adresă care indică date în stocare temporară.

Baza de informatii

Mecanismul permite accesul la datele binare stocate în atribute de tip ValueStorage.

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ă, pasând un link către un obiect sau o cheie de înregistrare a registrului de informații și numele atributului. În cazul unei secțiuni tabelare, este necesar să treceți în plus indexul de rând al secțiunii tabulare.

Metodele de lucru cu fișiere sunt limitate atunci când lucrați cu detaliile bazei de informații. Pentru ei, spre deosebire de stocarea temporară, sunt disponibile doar informații 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 stocarea temporară. Există două metode pentru aceasta: PlaceFile() și PlaceFileToTempStorage().

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

Dacă parametrul care definește 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 pentru a fi stocat. În acest caz, metoda va returna și adresa fișierului selectat.

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

A doua metodă, PutFileToTempStorage(), este similară cu metoda anterioară, cu excepția faptului că este disponibilă pe server, iar datele care urmează să fie scrise în stocarea temporară nu sunt reprezentate ca o cale în Sistemul de fișiere, dar în formă variabila de tip BinaryData. În mod similar, dacă nu este specificată nicio adresă țintă, un fișier nou este creat în depozit. 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ă prin metodele de mai sus PutFile() și PutFileToTempStorage() dacă are succes.

Ștergerea unui fișier din stocarea temporară

După ce datele sunt salvate în atribut, fișierul din stocarea temporară poate fi șters. Pentru a face acest lucru, există metoda 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 dacă o adresă aparține unui depozit temporar

Adresa fișierului poate indica atât stocarea temporară, cât și detaliile din baza de informații. Pentru a-i verifica tipul, există metoda ThisTemporalStorageAddress().

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

Obținerea adresei recuzitei

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

Dar înainte de a obține date, de exemplu, de la un atribut, trebuie să obțineți adresa acestui atribut. Există o metodă GetFileAddressInInfobase() pentru aceasta.

Scopul său este de a returna adresa fișierului în baza de informații conform parametrilor inițiali. Pentru a face acest lucru, trebuie să transmiteți cheia obiectului (poate fi fie o legătură către obiect, fie o cheie de înregistrare a registrului de informații) și numele atributului. Dacă trebuie să obțineți adresa unui fișier stocat într-un atribut de secțiune tabelară, înainte de numele atributului din parametrul care specifică numele atributului, trebuie să adăugați numele secțiunii tabelare și un punct "." Metoda este disponibilă atât pe client, cât și pe server.

Obținerea 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 în atribut sau în stocarea temporară a fișierului. Al doilea parametru specifică destinația 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 acțiunea cu fișierul primit: rulați-l sau salvați-l într-o locație specificată de utilizator. Dacă modul interactiv este activ și calea de destinație la fișierul de pe disc nu este specificată, atunci operația de deschidere a fișierului nu este disponibilă. Returnează o valoare booleană. False înseamnă că utilizatorul a ales să anuleze operația în dialogul de salvare a fișierului online.

Un exemplu de utilizare a metodelor de fișiere

// Primiți fișierul de pe disc în mod interactiv // și plasați-l în stocare temporară &AtClient Procedura SelectFileCDDiskAndWrite()

Variabila SelectedName; Adresă variabilă de stocare temporară; Dacă PutFile(TempStorageAddress, SelectedName, True) Atunci Object.FileName = SelectedName; PlaceObjectFile(AddressTemporaryStorage); EndIf;

EndProcedure

// Copierea unui fișier din stocarea temporară într-un atribut de referință //, scrierea unui obiect, ștergerea unui fișier din stocarea temporară // Procedura &AtServer PlaceObjectFile(TemporaryStorageAddress)

Element director = FormAttributeToValue("Obiect"); BinaryData = GetFileFromTempStorage(TempStorageAddress); DirectoryItem.FileData = NewValueStorage(BinaryData); FilePathOnDisk = Fișier nou (DirectoryItem.FileName); Catalog Element.FileName = FilePathOnDisk.Name; ElementDirectory.Write(); modificat = fals; DeleteFileFromTemporaryStorage(AddressTemporaryStorage); ValueVFormAttribute(DirectoryItem, „Obiect”);

EndProcedure

// Citiți fișierul din atribut și salvați-l // în disc local interactiv &La procedura client ReadFileAndSaveToDisk()

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

EndProcedure

Suport pentru adrese din câmpul de imagine

Controlul Câmp imagine acceptă afișarea unei imagini specificate de adresa unui fișier în stocarea temporară sau în baza de date.

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

Exemplu // Legarea câmpului de imagine la adresa imaginii în // stocare temporară. AddressImage tip șir de elemente de recuzită

PlaceFile(ImageAddr,True)

Image.Data = ImageAddress

Restricții atunci când lucrați cu clientul Web

Funcționarea mecanismului descris atunci când se utilizează Web Client are unele limitări. Aceste restricții sunt legate de particularitățile modelului de securitate al browserului. Deci, de exemplu, clientul nu poate salva singur fișierul în sistemul de fișiere local, adică doar versiunea interactivă a metodelor client PlaceFile() și GetFile() este disponibilă. Încercarea de a utiliza modul non-interactiv generează o excepție. Casete de dialog, afișate interactiv sunt specifice unui anumit tip de browser.

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

Problemă:

Atunci când un document din secțiunea tabelară are un atribut de tip ValueStorage, încetinește deschiderea formularului de document dacă acest atribut conține date mari.

Motivul sugerat:

Poate că, la deschiderea formularului, clientului nu i se trimite un link către datele din Value Store, ci datele în sine.

Soluţie

  • Există un steag „Folosiți întotdeauna” în proprietățile atributului tabelului din formular. Dacă este setat, atunci conținutul câmpului este întotdeauna transferat între server și client - de exemplu, atunci când este deschis un formular. Acest flag trebuie să fie dezactivat, dar trebuie să țineți cont de acest lucru în cod, deoarece implicit nu va exista nicio valoare pentru acest câmp pe client. Un exemplu poate fi vizualizat în 1C: Arhivă.

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

Imprimare (Ctrl+P)

Această secțiune descrie cele mai comune modalități de utilizare a 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 aceasta va fi creată adresa noua iar metoda o va returna printr-un parametru special.
Notă. Cantitatea de date mutată între client și server într-un singur apel la metoda PlaceFile().
Dacă parametrul care definește 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 pentru a fi stocat. În acest caz, metoda va returna și adresa fișierului selectat.
Ca rezultat, metoda returnează False dacă utilizatorul a refuzat interactiv să efectueze operația din dialogul de selecție a fișierului.

Pune un set de fișiere

Metodă PlaceFiles() pune mai multe fișiere în stocare temporară într-un singur apel. Sunt câteva diferite căi folosind aceasta metoda:
● alcătuiți în prealabil o listă de fișiere de adăugat, de exemplu, la preselectarea fișierelor care urmează să fie plasate în infobază;
● treceți o mască de căutare a fișierelor metodei, de exemplu, atunci când este necesar să plasați toate fișierele de un anumit tip în baza de informații, de exemplu, toate imaginile;
● trece un obiect pregătit anterior metodei Dialog Selectare fișierîn modul de deschidere a fișierului.
Când este terminată, metoda poate returna o listă de fișiere adăugate efectiv.

// FileList este un atribut de formular de tip ValueList,
// care conține o listă de fișiere de adăugat
FileArray = New Array;
Pentru fiecare ItemList din bucla FileList
Array of Files.Add(Noua descriere a fișierului transferat(ListItem,));
EndCycle;
PlacedFiles= New Array;
Rezultat = PutFiles(FileArray, PutFiles, False, UniqueIdentifier);

Notă 1. Pentru a utiliza metoda PlaceFiles()în clientul web, trebuie să conectați extensia pentru a lucra cu fișiere.
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ă).

Punerea datelor în stocare temporară

Metoda este similară cu metoda PutFile(), cu excepția faptului că datele trebuie scrise în stocarea temporară
nu sunt reprezentate ca o cale în sistemul de fișiere, ci ca o valoare. În mod similar, 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 formular și sunt șterse automat atunci când sunt șterse.
Notă. Cantitatea de date mutată între client și server per apel de metodă PlaceInTempStorage(), 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ă. Un link către valoare este plasat și stocat în cache timp de 20 de minute. După această perioadă, valoarea este serializată, scrisă pe disc (stocare 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, în atributul unui obiect de bază de informații. Există o metodă specială pentru aceasta - GetFromTemporalStorage(). Această metodă preia datele din stocarea temporară și le returnează ca rezultat al execuției. Pentru a primi date, trebuie să specificați adresa în temporar
depozitare. Această adresă este returnată prin metode de punere a datelor în stocare temporară dacă reușesc (vezi secțiunile anterioare).
Atenţie! Când preluați o valoare din stocarea temporară pe server, rețineți că aceasta este obținută prin referință. De fapt, această legătură indică o valoare care este stocată în cache. În 20 de minute, din momentul în care a fost introdusă î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 scoasă din cache. Data viitoare când este accesată, valoarea este încărcată de pe disc și plasată înapoi în cache.
După deserializarea și restaurarea valorii din stocarea temporară, referințele nu sunt restaurate. Valoarea din cache este restaurată de pe disc. Dar după serializare / deserializare, 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
DeleteFromTempStorage(), care face ștergerea. Metoda ia ca parametru o adresă în stocare temporară.

Verificarea dacă o adresă aparține unui depozit temporar

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

Obținerea adresei recuzitei

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 obține date, de exemplu, de la un atribut, trebuie să obțineți adresa acestui atribut. Există o metodă pentru asta getnavlink().

Poate returna adresa unei valori din baza de informații pe baza parametrilor originali. Pentru a face acest lucru, trebuie să treceți cheia obiectului (aceasta poate fi
atât o referire la un obiect cât și o cheie de înregistrare a registrului de informații) și numele atributului. Dacă trebuie să obțineți adresa valorii stocate în atribut
secțiunea tabelară, apoi la numele atributului din parametrul care specifică numele atributului, trebuie să adăugați numele secțiunii tabelare și un punct "." De exemplu: Produse.Imagine

Obținerea 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 definește 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 pe atributul obiectului infobase. Al doilea parametru determină unde va fi 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ă în modul 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 nu este specificat parametrul Nume fișier, atunci operația de deschidere a fișierului nu este disponibilă. Metoda returnează o valoare booleană. False înseamnă că utilizatorul a ales să anuleze operația în dialogul de salvare a fișierului online.

Obținerea unui set de fișiere

Metoda GetFiles() vă permite să obțineț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 referințe la elemente
// directorul în care se află fișierele încărcate
// Reprezentarea listei de valori este numele fișierului încărcat
FileArray = New Array;
Pentru fiecare ItemList din bucla FileList
Fișier = Nou File(String(ListItem.Value));
GetFile = Nou Descrierea fișierului transferat;
GetFile.Name = ListItem.View;
GetFile.Storage= P getNavigationLink(ListItem.Value, „Date”);
FileArray.Add(GetFile);
EndCycle;
Fișiere primite= New Array;
Rezultat = GetFiles(FileArray, GetFiles, UploadFilesPath, False);
Dacă NU rezultă, atunci
Mesaj = Nou MessageToUser;
Mesaj.Text = „Eroare la obținerea fișierelor!”;
Message.Notify();
EndIf ;

Când este terminată, metoda poate returna o listă de fișiere încă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 transferului de fișiere conține o cale absolută către fișier, fișierul va fi salvat pe această cale, ignorând parametrul LocationFiles.
Parametrul FileLocation poate fi fie o cale în sistemul de fișiere local, fie un obiect de dialog FileSelect în modul de selectare a unui director sau de salvare a fișierelor. Dacă ca valoare a parametrului LocationFiles obiect specificat Selectați dialogul Fișiereîn mod
salvați fișierele, apoi:

● dialogul va fi apelat pentru fiecare fișier transferat, cu excepția acelor fișiere pentru care proprietatea Nume a obiectului TransferableFileDescription conține o cale absolută;
● ca nume de fișier inițial în dialog, se va folosi valoarea proprietății Nume obiectul Fișier transferat Descriere;
● dacă nu este selectată nicio salvare pentru niciun fișier, atunci proprietatea Name a obiectului SubmittedFileDescription va conține un șir gol;
● metoda GetFiles() va returna True dacă cel puțin un fișier a fost primit cu succes;
● rețineți că primirea efectivă a fișierelor se realizează după ce utilizatorul răspunde la întrebările despre specificarea numelui și a căii
toate fișierele primite;
● dacă utilizatorul în numele căruia se execută metoda GetFiles() nu are dreptul de navigare pentru cel puțin un atribut al obiectului infobase de la care sunt primite fișiere, întreaga operațiune va eșua.
Exemplu:

TransferredFiles = New Array;
Descriere = Nou Descrierea transferului de fișiere(„Descriere”, FileAddress);
TransferredFiles.Add(Descriere );
FileSelection = Nou FileSelectDialog(FileSelectDialogMode.Save);
SelectFile.Header= „Salvarea arhivei”;
Selectați Fișier.Extensie= „zip”;
Selectați Fișier.Filtru= „Arhivă(*.zip)|*.zip|Toate fișierele|*.*”;
FileSelection.FilterIndex = 0;
GetFiles(TransmittedFiles, FileSelect, False);

Dacă este selectat modul interactiv pentru selectarea unui director pentru salvarea fișierelor, atunci 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.

Un exemplu de utilizare a metodelor de fișiere

// Obțineți fișierul în mod interactiv de pe disc
// și plasarea lui în depozit temporar.
&AtClient
Procedură SelectFileCDDiskAndWrite()
Variabila SelectedName;
Rem Adresă de stocare temporară;
NewObject = Object.Reference.Empty();
Dacă PutFile(TempStorageAddress, „”, SelectedName, True) Atunci
Object.FileName = SelectedName;
PlaceObjectFile(AddressTemporaryStorage);
EndIf;
EndProcedure
// Copiați fișierul din stocarea temporară în elemente de recuzită
// director, scrierea unui obiect, ștergerea unui fișier dintr-un temporar
// depozitare.
&Pe server
Procedură PlaceObjectFile(TempStorageAddress)
Element director = FormAttributeToValue("Obiect");
BinaryData = GetFromTemporaryStorage(AddressTemporaryStorage);
Catalog Element.FileData= Nou StoreValues ​​(Date binare, New DataCompression()) ;
Fișier = Nou Fișier(DirectoryItem.FileName);
Catalog Element.FileName = File.Name;
ElementDirectory.Write();
modificat = fals;
DeleteFromTemporaryStorage(AddressTemporaryStorage);
ValueVFormAttribute(DirectoryItem, „Obiect”);
EndProcedure
// Citiți fișierul din elemente de recuzită și salvați-l
// pe discul local în modul interactiv.
&AtClient
Procedură ReadFileAndSaveToDisk()
Adresa = GetNavigationLink(Object.Link,”FileData”);
GetFile(Adresă, Object.FileName, True);
EndProcedure

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 mai multe operațiuni cu 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țiune, va trebui să răspundeți la întrebarea despre salvarea documentului și la întrebarea despre necesitatea de a începe. Dacă există mai multe operațiuni, vor fi și mai multe întrebări pentru utilizator.
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ă executarea unui grup de operațiuni. Dacă utilizatorul a permis execuția, atunci operațiunile solicitate vor fi efectuate fără solicitări suplimentare către utilizator. Dacă permisiunea nu este acordată, operațiunile vor fi efectuate în Mod normal: o cerere per operatie.
NOTĂ. Pentru a folosi metoda RequestUserPermission()în clientul web, trebuie să conectați extensia pentru a lucra cu fișiere.
Luați în considerare un exemplu de utilizare a metodei:

Dacă ConnectFileWorkingExtension() Atunci
Link = GetNavigationLink(Object.Link, „FileData”);
// Formarea descrierii fișierelor transferate (în acest caz, există un singur fișier)
Fișiere transferate= New Array;
Description = Noua descriere a TransferredFile(Object.FileName, Link);
TransferredFiles.Add(Descriere);
// Pregătește un obiect pentru a primi informații despre fișierele primite
TransferredFiles= New Array;

// Definiți alți parametri ai metodei
Catalog Conservare= "c:\temp";
interactiv = fals ;
TransferredFileName = SaveDir + „\” + Object.FileName;
// Pregătește o descriere a metodelor de obținere a permisiunilor
Metode = New Array;

Methods.Add(„GetFiles”);
Methods.Add(UploadedFiles);
Methods.Add(SubmittedFiles);
Methods.Add(SaveDirectory);
Metode.Add(Interactiv);
Methods.Add(New Array);
Methods.Add("StartApplication");
Methods.Add(UploadedFileName);
Dacă nu RequestUserPermission(Metode) Atunci
alert(„Utilizatorul a refuzat permisiunea.”);
Întoarcere;
EndIf;
GetFiles(UploadedFiles, UploadedFiles, SaveDir, Interactive);
StartApplication(Numele Fișierului Passed);
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 solicitată numai pentru următoarele metode:

GetFiles()/StartGetFiles(),
● PlaceFiles()/StartPuttingFiles(),
● FindFiles()/StartSearchFiles(),
● CopyFile()/StartCopyFile(),
● MoveFile()/StartMoveFile(),
● DeleteFiles()/StartDeleteFiles(),
● CreateCatalog()/StartCreatingCatalog(),
● StartApplication()/StartStartApplication().

2. Se solicită permisiunea pentru un set specific de parametri ai metodei. Dacă, în timpul executării efective a metodei de lucru cu fișiere, valorile parametrilor diferă de cele pentru care a fost acordată permisiunea, această permisiune nu va fi valabilă și 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 de parametri ai 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ției GetFiles() i se transmite un obiect Dialog Selectare fișier), atunci o astfel de operațiune este exclusă din cerere.

Permisiunile acordate sunt păstrate fie până la efectuarea apelului permis, fie până la sfârșitul execuției primei limbi.
NOTĂ. in gros si clienti slabi RequestUserPermission() metoda returnează întotdeauna True , fără interacțiunea utilizatorului.

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

În mecanismul de lucru cu stocare temporară, este posibil să se transfere date dintr-un job de fundal la sesiunea care a inițiat jobul de fundal.
Pentru un astfel de transfer, în sesiunea părinte, o valoare goală trebuie plasată în stocare temporară (folosind metoda PutIntoTempStorage()), specificând un identificator al stocării temporare create (parametrul Adresă). Apoi treceți adresa primită jobului de fundal prin parametrii jobului de fundal. Mai mult, dacă în job de fundal utilizați această adresă ca valoare a parametrului Adresa metodei PutIntoTempStorage(), rezultatul va fi copiat în sesiunea de la care a fost pornit jobul de fundal.
Datele plasate în stocare temporară într-o lucrare de fundal nu vor fi disponibile din sesiunea părinte până la finalizarea lucrării de fundal.

Suport pentru adrese din câmpul de imagine

Element de formular Câmp de vizualizare Un câmp de imagine 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, în proprietatea Data a elementului formular, trebuie să specificați un atribut de tip șir. Valoarea acestui atribut va fi interpretată ca adresa imaginii.

// Exemplul 1
// Legarea câmpului de imagine la adresa imaginii într-un mod temporar
// depozitare. ImageAddress – atribut de formă de tip șir
PutFile(ImageAddress, OriginalName, SelectedName, True, UniqueIdentifier);
// Exemplul 2
// Obținerea adresei imaginii din atributul obiectului
// baza de informații
ImageFile = Object.ImageFile;
Dacă nu ImageFile.Empty() atunci
ImageAddress = GetNavigationLink(ImageFile, „FileData”);
In caz contrar
ImageAddress = „”;
termina dacă;

Acces la directoare standard

Când utilizați sistemul, este necesar un spațiu în sistemul de fișiere, unde puteți stoca diferite date de fișiere, care, pe de o parte, sunt temporare și, pe de altă parte, trebuie să fie stocate pentru o perioadă suficient de lungă. Astfel de fișiere includ schițe pentru sistemele de gestionare a documentelor, componente externe care rulează pe partea computerului client etc.
Aceste fișiere sunt stocate într-un director special 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 de stocare a datelor utilizatorului. Locația acestui director este determinată folosind metoda WorkingUserDataDirectory(). Dacă directorul nu există, acesta este creat prima dată când este accesat. Dacă directorul nu poate fi creat, sistemul ridică o excepție.
NOTĂ. Metoda UserDataWorkerDir() nu este disponibilă pe partea serverului.
V sistem de operare există un director special alocat pentru stocarea permanentă a datelor utilizatorului. Ar putea fi unele
rapoarte, tipărire a formularelor documente, etc. Datele sunt plasate în acest director, care pot fi ulterior trimise către extern
consumatori. Metoda DocumentDirectory() este folosită pentru a accesa acest director. Locația fizică a directorului depinde de sistemul de operare.
sistem în care rulează aplicația și este dat în asistentul de sintaxă.

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

Să luăm în considerare setările și să lucrăm cu depozitul de configurare mai detaliat.

Un depozit este în esență o bază de date în care sunt stocate modificările de configurare. Fiecare dintre dezvoltatori lucrează cu propria bază de informații conectată la depozit. Baza de lucru poate fi conectată și la depozit. Cea mai bună schemă generală este prezentată în această imagine:

Această bază de date stochează, de asemenea, informații despre cine a capturat acest sau acel obiect. O captare de obiect este o etichetă stabilită de dezvoltator. Prinderea stabilită evită coliziunile în dezvoltarea grupului. În timp ce obiectul este capturat, nimeni nu îl poate edita.

Puteți captura atât întregul obiect (recursiv), cât și un obiect sau formă separată.

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

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

Crearea unui spațiu de stocare este destul de simplă, pentru aceasta trebuie să selectați elementul „Creare stocare” din meniul „Configurare - Configurare stocare”. În meniul care apare, trebuie doar să specificați calea către viitoarea locație de stocare și autentificarea/parola utilizatorului administrator:

Asigurați-vă că faceți o copie de rezervă atunci când creați. cont cu drepturi administrative - de foarte multe ori ajută.

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

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

Obțineți 267 de lecții video 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, selectați următorul element din meniul de configurare - „Configurare - Stocare Configurare - Administrare”:

  • În fila „Utilizatori”, puteți adăuga sau elimina utilizatori noi, precum și defini sfera drepturilor pentru fiecare dintre aceștia.
  • În fila Conexiuni, puteți vizualiza toți utilizatorii conectați la stocare, îi puteți deconecta dacă este necesar.
  • În fila „Uncapture”, puteți elimina capturarea oricărui utilizator pe un anumit obiect, cu excepția cazului în care, desigur, aveți dreptul de a face acest lucru.

Cum să vizualizați istoricul de stocare 1C

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

În istoria 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 depozitul poate fi împărțit condiționat în acțiunile principale:

  • configurații din stocarea configurației 1C;
  • actualizați stările de stocare 1C;
  • captura de stocare;
  • depozit.

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

Actualizați stările de stocare 1C

Obține cele mai recente stări ale obiectelor (capturate sau nu).

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

Actualizarea configurației din stocarea configurației 1C

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

Denumit: „Configurare - Stocare configurație - Actualizare configurație din stocare”.

Captură în stocare de configurare 1C

Cu această comandă, puteți bloca modificarea acest 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.

Capturarea se poate face făcând clic dreapta meniul contextual pentru un obiect 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 obiectului

Depozit 1C

După schimbarea obiectului, acesta trebuie repus în stocare, acest lucru se face în același mod ca și capturarea, fiind selectat doar elementul „Loc în stocare”:

Asigurați-vă că completați câmpul „comentar” atunci când postați, acest lucru este foarte important pentru dezvoltarea 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 obiectului, în timp ce lăsați captura de către utilizator

Cum se adaugă un obiect nou la stocarea 1C