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 va crea și ce câmpuri vor fi în interiorul lor.

Cu toate acestea, în proiectele mari este nevoie să lucrați direct cu datele, de exemplu, pentru a analiza informații cu instrumente terțe sau, ca în cazul meu, pentru a integra o bază de date cu aplicații externe. Într-o astfel de situație, este necesar să avem o idee despre câmpurile tabelelor fizice pentru a căuta informațiile de care avem nevoie.

Funcția încorporată este concepută pentru un astfel de caz. GetDatabaseStorageStructure ()care returnează toate datele necesare ca un tabel de valori. Mai mult, unele detalii (câmpuri și indici) ale acestui tabel sunt în sine tabele de valori.

Pe de o parte, este convenabil să aveți toate datele într-o structură, dar, pe de altă parte, apar dificultăți suplimentare cu transferul acestei tabele către client (metoda Load (), din păcate, nu încarcă tabelele imbricate) . Având în vedere acest lucru, este necesar să parcurgeți toate rândurile tabelului într-o buclă, ceea ce, cu volume mari, duce la o încetinire a lucrului.

În acest sens, cea mai bună opțiune este să treceți numele obiectelor de metadate funcției pentru a reduce cantitatea de date returnate. Cu toate acestea, nu toate tabelele SGBD sunt asociate cu metadatele de configurare, așa că am lăsat ocazia să vizualizez lista completă.

Funcționalitate de procesare

Când elementul arborelui de metadate este activat, lista de tabele, câmpuri și indici este completată. Când faceți dublu clic pe rădăcina arborelui, sunt afișate toate tabelele, inclusiv tabelele de servicii (nerecomandat, deoarece cantitatea de date căutate crește).

În secțiunile tabulare, funcționează comenzile standard de căutare și listă.

Diferențe față de implementările existente

Există mai multe publicații similare, de exemplu, și. Cu toate acestea, dezavantajul lor este absența unui arbore de metadate, ceea ce face navigarea dificilă. Căutarea este efectuată și de numele tabelelor și câmpurilor din baza de date și nu invers.

Cea mai apropiată funcționalitate de publicația autorului (). În schimb, acest tratament conține cel mai complet copac metadate (planuri de schimb, constante, jurnale de documente etc.). în afară destructura datelor este prezentată mai clar: lista tabelelor obiectului de metadate, lista câmpurilor și lista indexurilor sunt afișate în secțiuni 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 mai mare (comportamentul platformei s-a schimbat).

UPD-2012-08-17 (v1.2). S-a făcut un patch pentru procesarea corectă a sarcinilor programate, elementul pentru afișarea planurilor tipurilor de calcul a fost remediat, comportamentul la schimbarea tipului de structură în rădăcina de configurare a fost remediat.

P.S. Unii angajatori întreabă despre numărul de tabele fizice și virtuale pentru registre atunci când angajează. Ar fi frumos să știm răspunsurile la aceste întrebări, mai ales că acesta este nivelul 1C: Professional. Dacă doriți nu numai să învățați acest răspuns, ci și să „simțiți” aceste tabele, atunci această procesare este pentru dvs.!

Datele care determină logica funcționării sistemului pe baza 1C: Enterprise sunt legate de baza de informații. Baza de date 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 (SGBD):
* Incorporatîn 1C: Enterprise 8.1 (versiunea de fișier a infobazei). În acest caz, toate datele infobase 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 infobazei). Toate datele infobase sunt stocate în baza de date Microsoft SQL Server.
* PostgreSQL (versiunea client-server a infobazei). Toate datele infobase sunt stocate în baza de date PostgreSQL.
* IBM DB2 (versiunea client-server a infobazei). Toate datele infobase sunt stocate în baza de date IBM DB2.

La nivelul obiectelor bazei de date (tabele, câmpuri, indici etc.), atât versiunea fișier, cât și versiunea client-server a infobazei au un format similar (diferind în detalii nesemnificative). Unele informații despre acest format sunt conținute mai jos.

Întreaga bază de date este prezentată în baza de date ca un set de tabele. Printre acestea există mai multe tabele care sunt neapărat prezente în prezentarea oricărei baze de date:

* Config - configurația principală a infobazei. 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 suprascrisă în Config atunci când "Actualizarea configurației bazei de date" este efectuată în Configurator și invers - când operația "Configurare - Configurare bază de date - Reveniți la configurația bazei de date" este realizată în Configurator.
* Fișiere conține informații despre servicii, de exemplu, despre lucrul cu magazinul de configurații.
* Params conține parametrii infobazei. Printre ei:
=> Lista utilizatorilor infobase.
=> Setări naționale de bază de informații.
=> Tabel de corespondență a obiectelor metadate și a obiectelor bazei de date (tabele, câmpuri, indici).
=> Alte informații.
* _YearOffset - compensarea datelor din baza de date. Acest tabel este creat numai atunci când se utilizează Microsoft SQL Server.
* DBSchema conține informații despre structura bazei de date 1C: Enterprise și definește alte obiecte de baze de date utilizate de această bază de date.

La pornirea 1C: Enterprise, verifică prezența tabelelor listate în baza de date și, dacă lipsește vreunul dintre ele, se afișează mesajul „baza de date distrusă”. Absența tuturor tabelelor listate înseamnă că baza de date este goală. În acest din urmă caz, aceste tabele vor fi create.

Lista și structura altor tabele de baze de date sunt determinate de o configurație specifică, și anume de obiectele de metadate definite în aceasta. Fiecare nume de tabel este format dintr-un prefix alfabetic urmat de un număr. Prefixul definește scopul tabelului, iar numărul vă permite să faceți distincția între tabelele cu același scop care se referă la diferite obiecte de metadate. Dacă IBM DB2 este utilizat ca SGBD, atunci structura descrisă nu are numele tabelelor, ci aliasurile acestora.

Dacă configurația conține cel puțin un plan de schimb cu semnalizatorul „Infobase distribuite” setat, vor fi create următoarele tabele:

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

Mai jos sunt enumerate diferitele obiecte de metadate cărora le pot corespunde tabelele.

* 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ă participă la cel puțin un plan de schimb.
* Schimb de planuri
=> _Nodul - tabelul planului de schimb.
=> _Nodul _VT - secțiunea tabelară a planului de schimb, creată pentru fiecare secțiune tabulară.
* Referințe
=> _Referinţă - tabel de referință.
=> _Referinţă _VT - secțiunea tabulară a cărții de referință - pentru fiecare secțiune tabulară.
=> _ReferenceChangeRec - tabel pentru înregistrarea modificărilor din director. Creat dacă directorul participă la cel puțin un plan de schimb.
* Documente
=> _Document - un tabel de documente pentru fiecare obiect de metadate „document”.
=> _Document _VT - secțiunea tabulară a documentului - pentru fiecare secțiune tabulară a fiecărui document.
=> _DocumentChangeRec - un tabel pentru înregistrarea modificărilor unui obiect de metadate de tipul „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 - un tabel cu limitele secvenței - pentru fiecare secvență.
=> _SequenceChangeRec - tabelul de înregistrare a modificărilor secvenței Creat pentru fiecare secvență care participă la cel puțin un plan de schimb.
* Jurnale de documente.
=> _DocumentJournal - un tabel de jurnal de documente, creat pentru fiecare jurnal de documente.
* Enumerări
=> _Enum - tabel de enumerare - unul pentru fiecare enumerare.
* Planuri de tipuri caracteristice
=> _Chrc - tabelul principal al graficului tipurilor caracteristice.
=> _Chrc _VT - secțiunea tabulară a diagramei tipurilor caracteristice - pentru fiecare secțiune tabulară.
=> _ChrcChangeRec - un tabel pentru înregistrarea modificărilor în planul tipurilor caracteristice. Creat dacă diagrama tipurilor caracteristice participă la cel puțin un plan de schimb.
* Planuri de conturi
=> _Acc - tabelul principal al planului de conturi.
=> _Acc _ExtDim - un tabel cu tipuri 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 - secțiunea tabelară a planului de conturi, creată pentru fiecare secțiune tabulară a planului de conturi.
=> _AccChangeRec - tabel pentru înregistrarea modificărilor planului de conturi. Creat dacă planul de conturi participă la cel puțin un plan de schimb.
* Planuri de tipuri de calcul
=> _CalcKind - tabelul principal al graficului tipurilor de calcul.
=> _CalcKind _BaseCK - un tabel cu tipuri de calcul de bază, creat pentru o diagramă a tipurilor 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 o diagramă a tipurilor de calcul dacă este bifată caseta de selectare „Utilizează perioada de valabilitate”.
=> _CalcKind _LeadingCK - tabel cu tipurile de calcul principale - pentru fiecare diagramă a tipurilor de calcul.
=> _CalcKindDN - un tabel auxiliar pentru ordinul de preempțiune, creat dacă caseta de selectare „Utilizează perioada de valabilitate” este bifată în graficul tipurilor de calcul.
=> _CalcKind _VT - secțiunea tabelară a diagramei tipurilor de calcul, creată pentru fiecare secțiune tabulară.
=> _CalcKindChangeRec - un tabel pentru înregistrarea modificărilor în planul tipurilor de calcul. Creat dacă diagrama tipurilor de calcul participă la cel puțin un plan de schimb.
* Registrele de informații
=> _InfoReg - tabelul mișcărilor registrului informațional.
=> _InfoRegChangeRec - tabelul de înregistrare a modificărilor din 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 - un tabel cu totalurile registrului de acumulare, dacă registrul acceptă solduri.
=> _AccumRegTurnovers - tabelul de rotații al registrului de acumulare, dacă registrul acceptă rotații.
=> _AccumRegChangeRec - un 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 cu setările de stocare pentru totalurile de registre de acumulare, unul pentru toate registrele de acumulare.
* Registrele contabile
=> _AccntReg - tabelul mișcărilor registrului contabil.
=> _AccntRegED - un tabel de valori al subcontului registrului contabil, creat dacă se referă la un plan de conturi, care are un număr maxim de subconturi mai mare decât zero.
=> _AccTtl0 - totalul contului.
=> _AccTtl - unde i este de la 1 la numărul maxim de subconto. Tabelul totalurilor contului cu numărul de tipuri de subconto egal cu i.
=> _AccTtlC - un tabel cu totalurile cifrelor de afaceri între conturi, numai pentru registrul contabil care susține corespondența.
=> _AccntRegChangeRec - un tabel pentru înregistrarea modificărilor în registrul contabil. Creat dacă registrul contabil participă la cel puțin un plan de schimb.
=> _AccntRegOptions - un tabel pentru stocarea totalelor pentru toate registrele contabile.
* Registre de calcul
=> _CalcReg - tabelul mișcărilor registrului de calcul.
=> _CalcRegActPer - tabelul perioadelor de valabilitate efective pentru registrul de decontare este creat dacă caseta de validare „Perioadă de valabilitate” este setată pentru registrul de decontare.
=> _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 - pentru fiecare compensare se creează un tabel pentru compensarea registrului de calcul.
=> _CalcRegRecalcChangeRec - tabelul de înregistrare a modificărilor recalculării. Creat dacă alocarea participă la cel puțin un plan de schimb.
* Procese de afaceri
=> _BPRoutePoint - un tabel cu punctele de rută ale procesului de afaceri pentru fiecare proces de afaceri.
=> _Proces de afaceri - tabelul principal al procesului de afaceri.
=> _Proces de afaceri _VT - partea tabelară a procesului de afaceri pentru fiecare parte tabelară.
=> _BusinessProcessChangeRec - un tabel pentru înregistrarea modificărilor în procesul de afaceri. Creat pentru fiecare proces de afaceri care participă la cel puțin un plan de schimb.
* Sarcini
=> _Sarcină - tabelul principal de sarcini.
=> _Sarcină _VT - secțiunea tabulară a sarcinii pentru fiecare secțiune tabulară.
=> _TaskChangeRec - un tabel pentru înregistrarea modificărilor în sarcini. Creat pentru fiecare obiect de metadate de tipul „sarcinii” care participă la cel puțin un plan de schimb.

Când utilizați IBM DB2, prefixele aliasului tabelelor nu încep cu un subliniere, ci încep imediat cu o parte alfabetică.

Numărul acestor tabele depinde de funcționalitatea configurației și poate fi destul de mare. În modul normal, 1C: Enterprise nu verifică prezența lor, precum și integritatea și consistența datelor pe care le conțin. Prin urmare, este important ca baza de date care conține baza de date 1C: Enterprise 8.1 să fie protejată împotriva accesului neautorizat și ca modificarea sa să fie efectuată numai prin intermediul 1C: Enterprise. Pentru a o verifica, utilizați funcția „Administrare - Testare și reparare” încorporată în configurator.

De asemenea, este important ca baza de date care stochează baza de date să fie copiată și restaurată numai în întregime. În acest scop, se recomandă utilizarea instrumentelor de backup pentru baze de date încorporate în SGBD-ul folosit. Versiunea fișierului bazei de date poate fi copiată prin copierea fișierului 1Cv8.1CD.

Configuratorul are o funcție specială: Administrare - Încărcare bază de informații. Cu ajutorul acestuia, puteți încărca în fișierul specificat (încărcați fișierul) toate datele legate de baza de date și nimic altceva. Funcția inversă „Load infobase” permite încărcarea tuturor datelor din fișierul de încărcare în baza de date curentă în locul celor existente. Aceste funcții pot fi, de asemenea, utilizate pentru a face copii de siguranță a datelor infobase atât în \u200b\u200bversiunea fișier, cât și în versiunea client-server.

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 de șir, „Valoare” poate lua orice tip de date. Este de obicei folosit pentru a stoca și transfera un set de parametri între proceduri.

Structura în limbajul de programare 1C poate fi creată în două moduri folosind construcția „Nouă”.

Prima cale:

Structură \u003d Structură nouă;
Structură. Inserare ("KeyParameter1", "Valori ale parametrului # 1");
Structură. Inserare ("KeyParameter2", "Valori ale parametrului # 2");

A doua cale:

Structură \u003d Structură nouă ("KeyParameter1, KeyParameter2", "Parameter values \u200b\u200b# 1", "Parameter values \u200b\u200b# 2");

Ambele metode vor crea structura pe care o puteți vedea în captura de ecran din depanare:

Obțineți gratuit 267 tutoriale video 1C:

Schimbarea

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

Structure.Insert ("KeyName", KeyValue);

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

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

Structure.Remove ("KeyName");

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

Structure.Clear ();

Traversarea structurii

Pentru a itera peste colecția de structuri, trebuie să utilizați construcția „Pentru fiecare cheie și valoare din bucla de structură”.

De exemplu:

Pentru fiecare cheie și semnificație a buclei structurii
…… // procesul, de exemplu, schimbă valorile
Sfârșitul ciclului;

În fiecare ciclu, se va vedea că următoarele câmpuri sunt disponibile pentru noi: