Structura de stocare a bazei de date (formulare gestionate). Structura de stocare a bazei de date (formulare gestionate) Structură de tabel 1c

Platforma 1C este un instrument de nivel înalt pentru lucrul cu baze de date. În general, dezvoltatorul nu trebuie să se gândească la ce și cum se întâmplă pe partea DBMS, deoarece platforma însăși decide câte tabele ar trebui să creeze și ce câmpuri vor fi în interiorul lor.

Cu toate acestea, în proiectele mari este nevoie de a lucra direct cu datele, de exemplu, pentru a analiza informații folosind instrumente terțe sau, ca în cazul meu, pentru a integra baza de date cu aplicații externe. Într-o astfel de situație, este necesar să avem o idee în ce câmpuri de tabele fizice să căutăm informațiile de care avem nevoie.

Funcția încorporată este destinată doar unui astfel de caz GetDatabaseStorageStructure(), care returnează toate datele necesare sub forma unui tabel de valori. Mai mult, unele detalii (câmpuri și indici) ale acestui tabel sunt ele însele tabele de valori.

Pe de o parte, este convenabil să aveți toate datele într-o singură structură, dar, pe de altă parte, apar dificultăți suplimentare la transferul acestui tabel către client (metoda Load(), din păcate, nu încarcă tabele imbricate). Din acest motiv, trebuie să parcurgeți toate intrările din tabel într-o buclă, ceea ce duce la o muncă mai lentă pentru volume mari.

Din acest motiv, o opțiune mai bună ar fi să treceți numele obiectelor metadate în funcție pentru a reduce cantitatea de date returnate. Cu toate acestea, nu toate tabelele DBMS sunt asociate cu metadatele de configurare, așa că am lăsat opțiunea de a vizualiza lista completă.

Funcționalitatea de procesare

Când un element arbore de metadate este activat, lista de tabele, câmpuri și indici va fi populată. Când faceți dublu clic pe rădăcina arborelui, sunt afișate toate tabelele, inclusiv tabelele de servicii (nu este recomandat, deoarece volumul de date căutate crește).

În părțile tabelare funcționează comenzile standard de căutare și listă.

Diferențele față de implementările existente

Există mai multe publicații similare, de exemplu, și. Cu toate acestea, inconvenientul lor este lipsa unui arbore de metadate, ceea ce îngreunează navigarea. Căutarea este efectuată și după numele tabelelor și câmpurilor din baza de date și nu invers.

Funcționalitatea este cea mai apropiată de publicația autorului (). În schimb, această prelucrare conține cel mai complet arbore metadate (planuri de schimb, constante, jurnalele documentelor etc.). in afara de asta structura datelor este prezentată mai clar: lista de tabele a obiectului de metadate, lista de câmpuri și lista de indici sunt afișate în părți tabulare separate.

UPD-2018-01-06 (v1.3). S-a remediat o eroare care a apărut în modul de compatibilitate 8.3.7 și o versiune ulterioară (comportamentul platformei s-a schimbat).

UPD-2012-08-17 (v1.2). A fost realizat un patch pentru procesarea corectă a sarcinilor de rutină, elementul pentru afișarea planurilor de tipuri de calcul a fost reparat și comportamentul la schimbarea tipului de structură în rădăcina de configurare a fost reparat.

P.S. Unii angajatori, la angajare, întreabă de numărul de mese fizice și virtuale pentru registre. Ar fi bine să cunoaștem răspunsurile la aceste întrebări, mai ales că acesta este 1C: Nivel profesional. Dacă vrei nu doar să înveți acest răspuns, ci și să „simți” aceste tabele, atunci acest tratament este pentru tine!

Structura în limbajul de programare 1C 8.3 și 8.2 este un set de perechi „Cheie” și „Valoare”. Câmpul „Cheie” are un tip șir, în timp ce câmpul „Valoare” poate accepta orice tip de date. Utilizat de obicei pentru a stoca și transfera un set de parametri între proceduri.

O structură în limbajul de programare 1C poate fi creată în două moduri folosind constructul „Nou”.

Prima cale:

Structură = Structură nouă;
Structure.Insert ("ParameterKey1", "ParameterValues ​​​​No.1");
Structure.Insert ("ParameterKey2", "ParameterValues ​​​​No.2");

A doua cale:

Structură = Structură nouă ("ParameterKey1, ParameterKey2", "ParameterValues ​​​​No.1", "ParameterValues ​​​​No.2");

Ambele metode vor crea structura care poate fi văzută în captura de ecran de la depanare:

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

Schimbare

Puteți adăuga sau modifica o structură folosind metoda „Insert()”.

Structure.Insert("KeyName", KeyValue);

Dacă trebuie să modificați valoarea vechii chei, introduceți numele acesteia. Dacă adăugați o cheie nouă, adăugați un nume unic în raport cu toate cheile din structură.

Pentru a șterge un element de colecție, trebuie să utilizați metoda „Ștergere”, unde treceți numele cheii:

Structure.Delete("KeyName");

De asemenea, este posibil să ștergeți toate obiectele dintr-o colecție:

Structure.Clear();

Traversarea structurii

Pentru a itera printr-o colecție a unei structuri, trebuie să utilizați construcția „For Each KeyValue From Structure Loop”.

De exemplu:

Pentru fiecare semnificație cheie din bucla de structură
…… //procesează, de exemplu, schimbă valori
EndCycle;

În fiecare ciclu veți vedea că următoarele câmpuri sunt disponibile pentru noi:

Datele care determină logica de funcționare a sistemului bazat pe 1C:Enterprise aparțin bazei de informații. Baza de informații este stocată într-o bază de date sub forma unui set de tabele, pentru care 1C:Enterprise 8.1 poate utiliza unul dintre cele patru sisteme de gestionare a bazelor de date (DBMS):
* Incorporatîn 1C:Enterprise 8.1 (versiunea de fișier a bazei de informații). În acest caz, toate datele din baza de informații sunt stocate într-un fișier numit 1Cv8.1CD. Acest fișier are un format binar și este în esență o bază de date pentru SGBD încorporat în 1C:Enterprise 8.1.
*Microsoft SQL Server(versiunea client-server a bazei de informații). Toate datele din baza de date sunt stocate într-o bază de date Microsoft SQL Server.
* PostgreSQL(versiunea client-server a bazei de informații). Toate datele din baza de date sunt stocate într-o bază de date PostgreSQL.
* IBM DB2(versiunea client-server a bazei de informații). Toate datele din baza de date sunt stocate în baza de date IBM DB2.

La nivelul obiectelor bazei de date (tabele, câmpuri, indecși etc.), atât versiunile fișier, cât și versiunile client-server ale bazei de informații au un format similar (diferind prin detalii minore). Câteva informații despre acest format sunt incluse mai jos.

Întreaga bază de informații este prezentată în baza de date ca un set de tabele. Printre acestea există mai multe tabele care sunt în mod necesar prezente în vederea oricărei baze de informații:

*Config- configurația de bază a bazei de informații. Această configurație corespunde structurii reale de date și este utilizată de 1C:Enterprise 8.0 în modul Enterprise.
*ConfigSave- configurație editată de Configurator. Configurația din ConfigSave este rescrisă în Config când se efectuează „Actualizarea configurației bazei de date” în Configurator și invers - când se efectuează operația „Configurare - Configurare baze de date - Revenire la Configurare DB” din Configurator.
* Fișiere conține informații de serviciu, de exemplu, despre lucrul cu depozitul de configurare.
* Parametrii conține parametrii bazei de informații. Printre ei:
=> Lista utilizatorilor bazei de informații.
=> Setările bazei de informații naționale.
=> Tabel de corespondență între obiectele metadate și obiectele bazei de date (tabele, câmpuri, indecși).
=> Alte informatii.
*_YearOffset- compensarea datei în baza de date. Acest tabel este creat numai când se utilizează Microsoft SQL Server.
* Schema DBS conține informații despre structura bazei de date 1C:Enterprise și definește alte obiecte de bază de date utilizate de această bază de informații.

Când pornește 1C:Enterprise, verifică prezența tabelelor listate în baza de informații și dacă lipsește vreuna dintre ele, este afișat mesajul „baza de informații a fost distrusă”. Absența tuturor tabelelor enumerate înseamnă că baza de informații este goală. În acest din urmă caz, aceste tabele vor fi create.

Lista și structura altor tabele de baze de date este determinată de configurația specifică, și anume, obiectele de metadate definite în aceasta. Fiecare nume de tabel constă dintr-un prefix de literă urmat de un număr. Prefixul determină scopul tabelului, iar numărul vă permite să distingeți între tabelele cu același scop care aparțin unor obiecte de metadate diferite. Dacă IBM DB2 este utilizat ca SGBD, atunci structura descrisă nu este numele tabelelor, ci aliasurile acestora.

Dacă cel puțin un plan de schimb este definit în configurația cu setul de flag „Bază de informații distribuite”, atunci vor fi create următoarele tabele:

*_ConfigChangeRec- tabel pentru înregistrarea modificărilor la obiectele de configurare.
* _ConfigChangeRec_ExtProps- tabel cu nume de fișiere ale proprietăților externe modificate ale obiectelor de configurare.

Mai jos sunt enumerate diferitele obiecte de metadate cărora le poate corespunde fiecare tabel.

*Constante
=> _Consts conține valorile curente ale tuturor constantelor definite în configurație.
=> _ConstsChangeRec - tabel pentru înregistrarea modificărilor constante. Creat dacă cel puțin o constantă este implicată în cel puțin un plan de schimb.
*Partajați planuri
=> _Nodul - tabel de plan de schimb.
=> _Nodul _VT - partea tabulară a planului de schimb, creată pentru fiecare parte tabelară.
* Directoare
=> _Referinţă - tabel de referință.
=> _Referinţă _VT - partea tabelară a directorului - pentru fiecare parte tabelară.
=> _ReferenceChangeRec - tabel pentru înregistrarea modificărilor directorului. Creat dacă directorul participă la cel puțin un plan de schimb.
* Documentație
=> _Document - un tabel de documente pentru fiecare obiect de metadate „document”.
=> _Document _VT - partea tabelară a documentului - pentru fiecare parte tabelară a fiecărui document.
=> _DocumentChangeRec - un tabel pentru înregistrarea modificărilor la un obiect de metadate de tip „document”. Creat pentru fiecare obiect de metadate de tip „document” dacă participă la cel puțin un plan de schimb.
* Secvențe de documente
=> _Secvenţă - tabel de înregistrare a documentelor - pentru fiecare secvență.
=> _SequenceBoundary - tabelul limitelor secvenței - pentru fiecare secvență.
=> _SequenceChangeRec - tabel pentru înregistrarea modificărilor secvenței. Creat pentru fiecare secvență care participă la cel puțin un plan de schimb.
* Jurnalele documentelor.
=> _DocumentJournal - tabel jurnal de documente, creat pentru fiecare jurnal de documente.
* Transferuri
=> _Enum - tabel de enumerare - câte unul pentru fiecare enumerare.
* Planuri pentru tipuri de caracteristici
=> _Chrc - tabelul principal al planului de tipuri de caracteristici.
=> _Chrc _VT - partea tabelară a planului de tipuri de caracteristici - pentru fiecare parte tabelară.
=> _ChrcChangeRec - tabel pentru înregistrarea modificărilor în planul tipurilor de caracteristici. Creat dacă planul de tip caracteristică participă la cel puțin un plan de schimb.
* Planuri de conturi
=> _Acc - tabelul principal al planului de conturi.
=> _Acc _ExtDim - un tabel cu tipurile de subconturi ale planului de conturi, creat pentru planul de conturi dacă numărul maxim de subconturi este mai mare decât zero.
=> _Acc _VT - partea tabelară a planului de conturi, creată pentru fiecare parte tabelară a planului de conturi.
=> _AccChangeRec - tabel pentru înregistrarea modificărilor în planul de conturi. Creat dacă planul de conturi participă la cel puțin un plan de schimb.
* Planuri pentru tipuri de calcul
=> _CalcKind - tabelul principal al planului de tipuri de calcul.
=> _CalcKind _BaseCK este un tabel de tipuri de calcul de bază, creat pentru un plan de tipuri de calcul dacă proprietatea sa „Dependență de bază” are o altă valoare decât „Nu depinde”.
=> _CalcKind _DisplacedCK - un tabel cu tipuri de calcul deplasate, creat pentru un plan de tip de calcul dacă este setat indicatorul „Folosește perioada de valabilitate”.
=> _CalcKind _LeadingCK - tabelul principalelor tipuri de calcul - pentru fiecare plan de tip de calcul.
=> _CalcKindDN - un tabel auxiliar pentru ordinea deplasării, creat în cazul în care planul de tipuri de calcul are setat indicatorul „Perioada de valabilitate a utilizărilor”.
=> _CalcKind _VT - parte tabelară a planului de tipuri de calcul, creată pentru fiecare parte tabelară.
=> _CalcKindChangeRec - tabel pentru înregistrarea modificărilor în planul tipurilor de calcul. Creat dacă planul de tip de calcul participă la cel puțin un plan de schimb.
* Registre de informații
=> _InfoReg - tabelul mișcărilor registrului de informații.
=> _InfoRegChangeRec - tabel pentru înregistrarea modificărilor în registrul de informații. Creat dacă registrul de informații participă la cel puțin un plan de schimb.
* Registre de acumulare
=> _AccumReg - tabelul mișcărilor registrului de acumulare.
=> _AccumRegTotals - tabelul totalurilor registrului de acumulare, dacă registrul suportă solduri.
=> _AccumRegTurnovers - tabelul de rotații al registrului de acumulare, dacă registrul suportă rotații.
=> _AccumRegChangeRec - tabel pentru înregistrarea modificărilor în registrul de acumulare. Creat dacă registrul de acumulare participă la cel puțin un plan de schimb.
=> _AccumRegOptions - tabel de setări pentru stocarea totalurilor registrelor de acumulare, unul pentru toate registrele de acumulare.
* Registre contabile
=> _AccntReg - tabelul mișcărilor din registrul contabil.
=> _AccntRegED - un tabel cu valorile sub-conturi ale registrului contabil, creat dacă se referă la un plan de conturi în care numărul maxim de subconturi este mai mare decât zero.
=> _AccTtl0 - tabelul totalurilor conturilor.
=> _AccTtl - unde i este de la 1 la numărul maxim de subconturi. Tabelul totalurilor conturilor cu numărul de tipuri de subconto egal cu i.
=> _AccTtlC - un tabel al totalurilor cifrei de afaceri între conturi, numai pentru registrul contabil care susține corespondența.
=> _AccntRegChangeRec - tabel pentru înregistrarea modificărilor în registrul contabil. Creat dacă registrul contabil participă la cel puțin un plan de schimb.
=> _AccntRegOptions - tabel de setări pentru stocarea totalurilor, unul pentru toate registrele contabile.
* Registre de calcul
=> _CalcReg - tabelul mișcărilor registrului de calcul.
=> _CalcRegActPer - un tabel cu perioadele de valabilitate efective pentru registrul de calcul, creat dacă pentru registrul de calcul este setat indicatorul „Perioada de valabilitate”.
=> _CalcRegChangeRec - tabel pentru înregistrarea modificărilor în registrul de calcul. Creat pentru fiecare registru de decontare care participă la cel puțin un plan de schimb.
=> _CalcRegRecalc - tabel de recalculare a registrului de calcul, creat pentru fiecare recalculare.
=> _CalcRegRecalcChangeRec - tabel pentru înregistrarea modificărilor la recalculare. Creat dacă recalcularea este implicată în cel puțin un plan de schimb.
* Procese de afaceri
=> _BPRoutePoint - tabelul punctelor de traseu al procesului de afaceri pentru fiecare proces de afaceri.
=> _BusinessProcess - tabelul principal al procesului de afaceri.
=> _BusinessProcess _VT - parte tabelară a procesului de afaceri pentru fiecare parte tabelară.
=> _BusinessProcessChangeRec - tabel pentru înregistrarea modificărilor proceselor de afaceri. Creat pentru fiecare proces de afaceri care participă la cel puțin un plan de schimb.
* Sarcini
=> _Sarcină - tabelul sarcinilor principale.
=> _Sarcină _VT - partea tabelară a problemei pentru fiecare parte tabelară.
=> _TaskChangeRec - tabel pentru înregistrarea modificărilor în sarcini. Creat pentru fiecare obiect de metadate de tip „sarcină” care participă la cel puțin un plan de schimb.

Când se utilizează IBM DB2, prefixele de alias de tabel nu încep cu un caracter de subliniere, ci încep cu o literă.

Numărul acestor tabele depinde de funcționalitatea configurației și poate fi destul de mare. În modul normal, 1C:Enterprise nu verifică disponibilitatea acestora, precum și integritatea și consistența datelor conținute în acestea. Prin urmare, este important ca baza de date în care se află baza de informații 1C:Enterprise 8.1 să fie protejată împotriva accesului neautorizat și modificarea acesteia să fie efectuată numai folosind instrumentele 1C:Enterprise. Pentru a verifica, trebuie să utilizați funcția „Administrare - Testare și corectare” încorporată în configurator.

De asemenea, este important ca backup-ul și recuperarea bazei de date care stochează baza de informații să fie efectuate numai ca întreg. În acest scop, se recomandă utilizarea instrumentelor de backup a bazei de date încorporate în SGBD utilizat. Copierea versiunii de fișier a bazei de informații poate fi efectuată prin copierea fișierului 1Cv8.1CD.

Configuratorul are o functie speciala: Administrare - Incarcare infobaza. Cu ajutorul acestuia, puteți încărca în fișierul specificat (fișier de încărcare) toate datele legate de baza de informații și nu mai mult. Funcția inversă „Încărcare baza de informații” vă permite să încărcați toate datele din fișierul de încărcare în baza de informații curentă în locul celor existente. Aceste funcții pot fi, de asemenea, utilizate pentru a crea copii de siguranță ale bazei de informații atât în ​​versiunea de fișiere, cât și în versiunea client-server.