Contacte

Obțineți date de structură 1c. Colecție generică Arborele valorilor

Structura și corespondența este un fel de tabel cu două coloane: cheie și valoare. Coloana „Cheie” conține elementul indexat prin care se efectuează căutarea. Elementul de căutare în sine se află în câmpul „Valoare”. Care este cel mai bun mecanism de utilizat în ceea ce privește performanța căutării? Să facem o serie de experimente.

Să creăm un catalog Produse și să-l completăm cu 20.000 de articole. Apoi, folosind o procedură simplă, vom scrie datele tuturor acestor elemente în structură și corespondență. În primul experiment, vom scrie linkul pentru potrivire și numele structurii în cheie. În a doua măsurare, vom folosi numele pentru ambele clase ca cheie. În al treilea, numele este selectat pentru cheia de structură și un câmp numeric este selectat pentru corespondență.

Mai jos este o listă a procedurii pentru găsirea unei valori după cheie pentru potrivire și structură.

Procedură FindValueByKey (ForMatch, Key) Dacă ForMatch, apoi returnează SearchMatch [Key]; ElseSearchValue = Nedefinit; SearchedStructure. Proprietate (Key, SearchValue); Return SearchValue; Sfârșitul procedurii

Pentru primul experiment, s-au obținut următoarele rezultate:

După cum putem vedea, conformitatea câștigă cu o marjă destul de mare. Timpul de căutare a structurii este de aproximativ 1/4 ori mai lent.

După al doilea experiment, situația s-a schimbat dramatic:

Timpul de căutare pentru potrivirea cu parametrul de tip „String” din cheie este aproape de două ori mai rapid decât structura.

În al treilea experiment, conducerea a preluat din nou conformitatea.

Conformitatea a finalizat această sarcină de peste șase ori mai repede.

Astfel, putem concluziona că o structură este cea mai potrivită pentru căutarea valorilor prin reprezentarea șirului, deoarece acest tip de date este specializat doar pentru cheile șirului. Cu toate acestea, atunci când alte tipuri pot fi utilizate pentru cheie, cum ar fi „Număr” sau „Referință”, potrivirea arată rezultate mai bune. Nu este posibil să răspundem cu certitudine de ce este așa, deoarece sistemul pentru experimente mai profunde rămâne închis.

Poate că mulți dintre voi au avut sarcina de a verifica prezența unui anumit element în formular sau dacă parametrul necesar este disponibil în zona de aspect. Din pacate, metode standard pentru a îndeplini această sarcină, platforma nu oferă.

Pentru valorile de tip „Structură”, este disponibilă metoda „Proprietate ()”:

TestStructure = Structură nouă; Structura testului. Insert ("TestKey", "TestValue"); IsValueTestKey = TestStructure ("TestKey"); // Ca rezultat, variabila „IsValueTestKey” va conține valoarea TRUE

Dacă încercăm în același mod să aflăm despre existența oricărui element de formular sau parametru în zona de aspect (ca exemplu), atunci aceasta va provoca următoarea eroare:

De informatii detaliate eroarea arată că colecția de elemente forma gestionată(variabila „Elemente”) nu are o metodă „Proprietate ()”. Același lucru se aplică pentru marea majoritate a colecțiilor acceptate de platformă.

Pentru unele colecții, cum ar fi „TabularField Columns”, „MetadataElements Collection”, metoda „Find ()” este disponibilă pentru utilizare, al cărei prim parametru este numele articolului de căutat. Metodele returnează elementul găsit sau „Nedefinit” dacă valoarea nu a fost găsită. Astfel, folosind metoda find, puteți recunoaște prezența unei anumite proprietăți pentru acele colecții care acceptă lucrul cu aceasta.

Dar dacă colecția nu acceptă metodele descrise mai sus. În astfel de cazuri, este necesar un mod complet diferit de lucru cu aceste tipuri de date.

Astăzi, articolul va vorbi despre o abordare universală care vă permite să determinați prezența unei proprietăți într-o valoare de orice tip de date 1C: Enterprise 8.x.

Cum să-l implementăm

Propun să scriu o funcție generică pentru a determina dacă orice tip de valoare are o proprietate și apoi trece la utilizarea acesteia cu un mic exemplu.

Abordarea propusă se bazează pe utilizarea metodei „FillPropertyValues ​​()” și a unei variabile de tip „Structură”. Următoarea listă arată codul programului acestei funcții:

// Variabile: // // 2. Numele proprietății - variabila de tip„Șirul” care conține proprietatea dorită// Funcția VariableContainsProperty (Variable, PropertyName) Dacă StructureCheck [PropertyName] = NULL, atunci Returnează False; În caz contrar Returnează True; EndIf; EndFunction

În principiu, totul este clar din comentariile de pe listă. Singurul punct la care trebuie să fim atenți este că, dacă proprietatea este găsită și valoarea acesteia este NULĂ, funcția va spune în continuare că nu există o astfel de proprietate. În astfel de cazuri, trebuie să creați o verificare suplimentară.

Exemplu practic

Ca exemplu în configurația testului adăugați documentul „TestDocument” cu mai multe detalii. Elementele de formă corespunzătoare au fost adăugate la forma sa.

În câmpul „Nume element”, introduceți numele elementului formular. Făcând clic pe butonul Găsire, funcția pe care am creat-o anterior este procesată. După executarea comenzii, programul notifică utilizatorul despre succesul căutării. Următoarea listă arată codul de program al handlerului de comandă și procedura apelată pentru găsirea proprietăților.

Procedură & OnClient FindCommand (Comandă) Dacă VariableContains Property (Elements, ElementName) atunci Warning ("Element" "" + ElementName + "" "găsit!"); În caz contrar, avertisment („Item” „„ + ItemName + „„ „ Nu a fost găsit!"); EndIf; EndProcedure // O funcție generică pentru verificarea dacă o valoare a oricărui tip de date are proprietăți// Variabile: // 1. Variabilă - o variabilă de orice tip pentru care este necesar să se verifice existența unei proprietăți // 2.PropertyName - o variabilă de tip „String” care conține proprietatea dorită// și funcția OnClient VariableContainsProperty (Variable, PropertyName) // Inițializați structura pentru test cu o cheie (valoarea variabilei "PropertyName") și NULL StructureCheck = Structură nouă; Verificarea structurii. Insert (PropertyName, NULL); // Completați structura creată din valoarea variabilei trecute FillPropertyValues ​​(StructureVerification, Variable); // Dacă valoarea proprietății de structură rămâne NULL, atunci proprietatea necesară nu a fost găsită și invers. IfStructureCheck [PropertyName] = NULL Atunci Returnează False; În caz contrar Returnează True; EndIf; EndFunction

Puteți testa configurația descărcați de pe link.

Rezuma

Abordarea descrisă în articol vă permite să verificați prezența proprietăților în colecții de orice tip. Elemente de formular, colecție de metadate, opțiuni de aspect și multe altele. Nu are impact negativ asupra performanței. Funcționează pe orice versiune a platformei.

P.S. După cum a remarcat alcom, citez codul programului folosind GUID „a.

// O funcție universală pentru verificarea prezenței proprietăților unei valori de orice tip de date // Variabile: // 1. Variabilă - o variabilă de orice tip pentru care este necesar să verificați prezența unei proprietăți // 2. Nume proprietate - o variabilă de tip „String” care conține proprietățile necesare // & Funcția OnClient VariableContainsProperty (Variable, PropertyName) // Inițializați structura pentru test cu cheia (valoarea variabilei „PropertyName”) și valoarea unui arbitrar GUID "și GUIDCheck = New UniqueIdentifier; StructureCheck = New Structure; StructureCheck.Insert (PropertyName, GUIDCheck.) Completați structura creată din valoarea variabilă trecută FillPropertyValues ​​(StructureCheck, Variable); // Dacă rămâne valoarea proprietății structurii NULL, atunci proprietatea necesară nu este găsită și invers. Dacă StructureCheck [PropertyName] = GUIDCheck, apoi Returnează False; În caz contrar, Returnează True; EndIf; EndFunction

Despre ce este acest articol

Acest articol continuă seria de articole „Primii pași în dezvoltarea pe 1C”. Se discută despre modul de lucru cu colecțiile generice. După ce ați citit articolul, veți afla:

  • Ce sunt colecțiile generice, când și când ar trebui să le folosiți?
  • Ce au în comun toate colecțiile universale? Ce tehnici puteți folosi pentru a lucra cu toate acestea?
  • Ce este un tablou și cum și când să îl utilizați? Ce metode are?
  • De ce să folosești o structură? În ce se deosebește de o matrice?
  • Când se folosește o listă de valori? Cum îl afișez pe formular?
  • Conformitate - ce este și când să-l folosiți? Care sunt avantajele asupra structurii?
  • La ce se folosește un tabel de valori? Cum să-i descriem structura? Cum pot adăuga / elimina linii? Cum să-l aduc în formă?
  • Arborele valorii - la ce se folosește? Cum se completează și se afișează pe formular? Cum să lucrezi cu el?

Aplicabilitate

Articolul discută platforma 1C: Enterprise 8.3 a ediției curente.

Cum să lucrați cu colecții universale în 1C

O colecție de valori este un fel de container, care poate conține de obicei orice număr de elemente. În același timp, nu există adesea restricții stricte asupra tipului de date.

Puteți adăuga valori la o colecție generică. Toate valorile din colecție pot fi parcurse. Aceste colecții sunt utilizate în principal pentru un fel de procesare în algoritmi. Acestea. acestea sunt câteva structuri dinamice care există pe durata algoritmului.

Este important să înțelegem că colecțiile nu sunt stocate în baza de date (nu vorbim despre tipul de date pentru stocarea valorii, care poate stoca aproape orice tip de date).

Exista tipuri diferite colecții generice: matrice, structură, potrivire, matrice fixă, tabel de valori, Partea tabulară etc. Dar toate colecțiile au un comportament similar.

O colecție poate fi creată ca rezultat al unei funcții (funcția returnează o colecție generică ca valoare).

Puteți obține manual o nouă colecție accesând constructorul și instanțând clasa.

De exemplu: OurArray = New Array;

Constructorii pentru multe colecții generice sunt parametrizați.

Deci, în constructorul pentru puteți specifica numărul de articole în dimensiunile corespunzătoare. Acestea. puteți declara imediat multidimensional .

Descrierea corespunzătoare a constructorului se află în ajutorul de sintaxă.

Astfel, utilizând parametrii constructorului, puteți seta imediat comportamentul dorit al acestui obiect.

Dar parametrii sunt opționali, dezvoltatorul nu îi poate seta și poate defini în continuare comportamentul matricei după cum consideră potrivit.

Aproape orice colecție generică poate fi creată folosind constructorul (cu excepția secțiunilor tabulare, care acționează ca obiecte de configurare).

Pentru colecțiile generice, există astfel concepte generale precum indexul și numărul. Fiecare articol din colecție are un index. În acest caz, indicele începe de la zero.

Pentru a face referire la un element Matricea noastră, puteți utiliza referința indexului; pentru aceasta, indexul este indicat între paranteze drepte.

De exemplu, Matricea noastră... Rețineți că, în acest caz, sistemul returnează elementul Array cu indexul 3 și, în ordine, acesta este al patrulea element Array.

Pentru unele colecții, există și conceptul unui număr de linie. Numărul liniei începe cu unul. De exemplu, pentru o secțiune tabelară, există o proprietate, cum ar fi un număr de rând. Este important să rețineți că, dacă știm numărul liniei și dorim să ne referim la index, atunci valoarea cu mai puțin decât numărul liniei ar trebui să fie folosită ca index.

Conceptul unui număr de linie nu există pentru toate colecțiile, dar în principal pentru cele care pot fi afișate în interfața cu utilizatorul.

Pentru toate colecțiile, se folosește traversarea colecției. Ocolirea este posibilă în două moduri: ciclu Pentruși ciclu Pentru fiecare dintre.

Pentru majoritatea colecțiilor generice, sunt aplicabile următoarele metode: Număr, Index, Adăugare, Inserare, Ștergere și Găsire.

Numărul este o funcție care returnează numărul de articole dintr-o colecție. Poate fi folosit înainte de o buclă Pentru așa cum se arată în figură.

Metoda Index nu există pentru toate colecțiile, ci doar pentru cele ale căror elemente pot fi referite. Un exemplu este Tabelul valorilor.

Tabelul valorilor Este o colecție specifică de șiruri, șirurile pot conține diferite coloane cu tipuri diferite valori.

Fiecare linie este o entitate independentă. Puteți obține un link către acesta, prin această linie puteți face referire la valorile coloanelor din această linie.

Metoda Index vă permite să determinați care index corespunde unui rând dat (adică poziția curentă a rândului din tabel). Valorile indexului încep de la zero.

Aproape orice colecție generică are metode pentru adăugarea de noi valori la o colecție dată. Figura arată cum să completați o matrice cu valori de la 0 la 10 în două moduri.

Pentru a adăuga un element la matrice, putem folosi metoda Adăuga, indicați valoarea adăugată între paranteze. În acest caz, valoarea va fi adăugată la sfârșitul listei, adică Matricea va crește constant datorită ultimei poziții.

O altă metodă care vă permite să adăugați valori la o colecție este metoda Introduce... Diferă de metodă Adăuga astfel încât să puteți specifica unde să inserați elementul adăugat.

Sintaxă: Inserați (,)

Primul parametru este indicele în care va fi introdusă noua valoare. Acestea. noi, de exemplu, putem specifica că fiecare valoare trebuie inserată la începutul listei (a doua cale din imaginea de mai sus).

Pentru a elimina articole din colecție, utilizați metoda Șterge... În metoda Ștergere, este indicat de index ce element vom șterge.

Sintaxă: Șterge()
Exemplu de utilizare: OurArray.Remove (5);

Trebuie remarcat faptul că pentru acele colecții în care șirurile reprezintă o entitate independentă (de exemplu, pentru Tabelele valorice), putem folosi și metoda de obținere a indexului pentru a șterge apoi rândul dat.

Aproape toate colecțiile au o metodă de căutare a valorilor - A găsi... Valoarea pe care dorim să o găsim este transmisă metodei. În unele colecții, puteți pune unele restricții.

De exemplu, în Tabelul valorilor puteți specifica acele linii, acele coloane în care doriți să căutați.

Dacă valoarea este găsită, atunci această metodă returnează indexul sau un șir specific. Dacă nu se găsește nicio valoare, se returnează o valoare de tip Nedefinit... Aplicat la Array, revine Index, sau valoarea Nedefinit.

Exemplu de utilizare: OurVariable = OurArray.Find (8);

Colecțiile generice pot fi curățate foarte repede, adică elimina absolut toate elementele. Pentru aceasta se folosește metoda Clar () care elimină elementele matricei, liniilor Tabelele valorice, sau date din alte colecții.

Metode suplimentare pentru Array

Metodă InBoundary () returnează numărul de articole minus unul. Acestea. dacă folosim o buclă Pentru, atunci în loc de metoda Cantitate, putem folosi imediat metoda Granita().

În special, variabila NumberInArray ar putea fi definită diferit:

CountInArray = OurArray.Boundary ();
Apoi, atunci când descriem ciclul în sine, nu trebuie scăzut din această variabilă.

Metoda Set vă permite să atribuiți o valoare unui element Array după index.

Sintaxă: Instalare(,)

Exemplu: OurArray.Set (2.8);

Opțiune alternativă: OurArray = 8;

Puteți utiliza metoda pentru Array obține, pentru a citi valoarea după index fără a recurge la utilizarea parantezelor pătrate.

Sintaxă: Obține()

Exemplu: OurVariable = OurArray.Get (2);

Opțiune alternativă: OurVariable = OurArray;

Structura colecției universale

O structură, ca un Array, poate avea un număr nelimitat de elemente, dar conținutul unui element diferă de un Array.

O structură este o colecție, a cărei valoare constă dintr-o pereche. Primul element al perechii se numește Cheie... Al doilea element al perechii este Sens.

Cheie Este un tip de date strict șir care descrie o valoare. De exemplu, Cheie„Cod” poate corespunde valorii 113; Cheie„Nume” înseamnă „Vasya”. Nu există restricții privind tipul de date asupra Valorii în sine.

Structura este foarte convenabilă de utilizat dacă dorim să creăm o anumită listă de parametri. Dacă aceasta Structura numit Structura noastră, atunci ne vom referi la cele două valori ale acestuia după cum urmează: OurStructure.Code și OurStructure.Name.

Un astfel de apel este mult mai convenabil decât dacă am defini toți parametrii dintr-o matrice și i-am accesa prin index.

Structura face codul programului lizibil (de înțeles). Structura este utilizată destul de des, mult mai des decât Array.

Este folosit pentru a descrie unii parametri, care sunt adesea suficienți. un numar mare deîn toți algoritmii.

În plus, Structura este utilizată dacă procedura și funcția conțin un număr mare de parametri trecuți.

Atunci este mult mai convenabil să scrieți toți parametrii în structură și să-l transferați exact. Acestea. există un „pachet” de parametri ai procedurilor și funcțiilor.

Separat, trebuie remarcat faptul că ca Cheie nu poate apărea absolut nicio linie în Structură. Sunt impuse anumite restricții.

Cheie ar trebui să acționeze ca un identificator. Aceasta înseamnă că în Cheie nu trebuie să existe spații și nu poate începe cu o cifră.

Permis început Cheie cu o scrisoare sau subliniat. Prin urmare, Cheie trebuie să îndeplinească cerințele pentru crearea identificatorilor.

Rețineți în ce mod diferă structura de matrice. Structura are o metodă Introduce, există două metode pentru inserare în matrice: Introduce(la o anumită poziție) și Adăuga(la sfârșitul listei). Într-o matrice, toate elementele sunt ordonate.

O structură este un fel de set neordonat. De aceea există doar o metodă de inserare pentru o structură.

Valoarea este inserată nu într-o poziție specifică, ci în setul specificat. Indexul nu poate fi accesat pentru structuri, ca și pentru alte colecții generice.

Elementele structurii sunt accesate numai de numele cheii. Cu toate acestea, pentru fiecare buclă funcționează și pentru structură, dar nu ar trebui să vă bazați pe ordinea elementelor structurii.

Structura este creată în același mod ca și alte colecții generice utilizând noul constructor, specificând tipul de date Structură.

La fel ca Array, constructorul struct poate avea parametri. Acestea. este posibil să se descrie conținutul structurii în sine folosind constructorul.

Spre deosebire de Array, unde puteți specifica pur și simplu numărul de elemente pentru toate dimensiunile, în Structură este posibil să specificați conținutul în sine.

De exemplu: Structura noastră = Structură nouă („Cod, nume”, 133, „Vasya”);

În primul rând, numele tastelor sunt listate, separate prin virgule și apoi, respectiv, în aceeași succesiune, valorile parametrilor.

Pentru a adăuga o nouă valoare structurii, există o metodă Introduce care inserează pereche nouă(Cheie și semnificație).

De exemplu: OurStructure.Insert („Membrii familiei”, 3);

O altă metodă este caracteristică structurii, care este utilizată destul de des. Aceasta este metoda Proprietate.

Folosind această metodă, puteți înțelege dacă există un element în această structură a cărui cheie are un astfel de nume.

Dacă există un astfel de element, atunci sistemul va returna valoarea True, altfel - False.

De exemplu, expresia OurStructure.Property („Membrii familiei”) va fi egal cu True. Această metodă este utilizată destul de des în analiza structurii.

Ca și în cazul oricărei colecții generice, puteți accesa proprietățile structurii după index. Dar indexul pentru o structură este o valoare șir.

De exemplu: Raport (Structura noastră [„Membrii familiei”]);

Cu toate acestea, nu trebuie să uităm că o structură este un set neobișnuit de obiecte, motiv pentru care nu este permisă trimiterea prin indexul 0, 1, 2.

Colecție generică Listă de valori

Lista valorilor este o listă liniară de articole de orice tip de date.

Fiecare element este format din mai multe valori. Lista valorilor poate fi reprezentată schematic ca o listă cu patru coloane.

Prima coloană este marcă... Are un tip de date boolean și permite utilizatorului să bifeze sau să debifeze casetele.

O altă coloană este o imagine care poate reprezenta vizual acest element într-un fel, adică potriviți această linie cu orice imagine.

A treia coloană este însăși valoarea stocată, adică este orice tip de date și poate fi diferit pe diferite linii.

A patra coloană este vizualizarea, adică acesta este un fel de descriere a șirului valorii date. Vizualizarea va fi afișată utilizatorului atunci când vizualizează elementul dat. În acest caz, dacă reprezentarea nu este specificată, sistemul va încerca să obțină reprezentări pentru elementul conținut în această poziție.

Lista valorilor- acesta este obiectul cu care utilizatorul poate lucra vizual. Acestea. Lista valorilor poate fi afișat pe formular.

Utilizatorul poate efectua unele acțiuni cu el. În afară de, Lista valorilor pot fi deduse independent folosind metode, adică afișați pe ecran într-o ramură a algoritmului (cu excepția codului serverului), astfel încât utilizatorul să selecteze o linie sau să pună câteva bife.

Găsi Lista valorilorîn asistent sitax. Constructor Lista valorilor nu este parametrizat (nu puteți seta valori implicite).

Există metode precum:

  • Inserați (,);
  • Adăuga(,);
  • Cantitate();
  • Index().

Există, de asemenea, metode speciale, de exemplu, Descărcați valorile ()... Aceasta creează o matrice în care este copiată lista de valori. De exemplu:

ArrayElements = ListPriceTypes.LoadValues ​​();

Există, de asemenea, o metodă inversă:
PriceTypeList.LoadValues ​​(ElementArray);

Există metode de căutare:
FindByValue (); FindById ().

Există o metodă de copiere:
ListCopy = PriceTypeList.Copy ();
Aceasta metoda este menit să facă un fel de modificare cu o copie.

Există metode:
SortByValue ();
Sortează după prezentare ().

Metode SelectElement (,)și Verificați articolele () apelați o casetă de dialog modal care oprește executarea algoritmului până când utilizatorul închide fereastra dată.

Pentru a utiliza aceste metode în proprietățile de configurare Mod de utilizare a modalității ar trebui să fie setat la valoare Utilizare.

Exemplu de cod apelat dintr-un modul de aplicație gestionată:

Afișarea acestui cod în modul utilizator(dialog modal).

De mai jos Lista valorilor folosit ca tip de date accesibil pentru recuzita formularului. Creați un nou element de recuzită pentru formularul de procesare, definiți tipul acestuia Lista valorilorși afișați-l pe formular.

Creați o echipă nouă Cadouri, transferați la formular și definiți un handler de acțiune pentru acesta.

În modul personalizat, când faceți clic pe butonul Completați cadouri din formularul de procesare, va apărea o listă completată.

Dacă se dorește, lista poate fi editată: unele elemente pot fi adăugate, unele pot fi șterse.

Colecție versatilă Conformitate

Această colecție este foarte asemănătoare cu Structura... La fel ca structura, corespondența este un set de valori care constă dintr-o cheie și valoarea în sine.

Principala diferență este că orice tip de date poate fi specificat ca cheie, precum și pentru o valoare. Având în vedere această particularitate, este necesar să se facă referire la valoarea de potrivire de către index; valoarea cheie este specificată ca valoare a indexului.

Cheia poate fi un alt tip de date decât un șir. Proprietățile și metodele de lucru cu corespondența sunt practic aceleași cu cele ale unei structuri.

Constructorul de conformitate, spre deosebire de structură, nu conține capacitatea de a specifica parametrii.

Exemplu de utilizare:

Corespondența este utilă atunci când trebuie să legați oricare dintre două structuri. De exemplu, fiecare rând al secțiunii tabulare trebuie să fie asociat cu un rând din tabelul valorilor.
În acest caz, rândul secțiunii tabulare este folosit ca tasta de potrivire și se indică valoarea corespunzătoare.

Când introduceți articole în colecția Match pe lângă metodă Introduce(,) există o altă modalitate de a insera o valoare - aceasta utilizând operatorul obișnuit de atribuire.

De exemplu: Meciul nostru = Meci nou;
Meci = 999

Acestea. dacă un element nu a fost prezent în colecție, atunci folosind operatorul de atribuire, acesta va fi adăugat, iar dacă a fost prezent, acesta va fi actualizat.

Acest lucru este diferit de Structură.

Colecție generică Tabel de valori

Tabelul valorilor este un tabel cu un număr arbitrar de rânduri și un număr arbitrar de coloane. Intersecția poate stoca valori de orice tip de date. Dacă este necesar, coloanele pot fi tastate, adică puteți defini în ce coloană ce tip de date sunt stocate.

Puteți lăsa coloanele netipate, apoi valorile de diferite tipuri pot fi stocate într-o singură coloană în rânduri diferite.

Diferențe Tabelele valorice din matrice 2D:

  • acesta este un obiect cu care utilizatorul poate lucra (tabelul valorilor poate fi afișat, utilizatorul îl poate completa, ulterior datele introduse pot fi citite);
  • construirea indexurilor pentru căutare rapidă;
  • clonare, umplere o anumită valoareîntreaga coloană, descărcând toate coloanele într-o matrice.

Tabelul valorilor este folosit ca un fel de tampon pentru stocarea informațiilor. Tabelul valorilor returnat și acceptat ca parametru de multe dintre metodele de sistem. Este posibil să creați o interogare în Tabelul valorilor.

Asa de, Tabelul valorilor constă dintr-un set de rânduri și un set de coloane. Atât rândurile, cât și coloanele sunt colecții.

Acestea. în interiorul colecției Tabelul valorilor mai sunt două colecții. Să ne întoarcem la ajutorul pentru sintaxă și să găsim Tabelul valorilor.

Tipuri de date acceptate: în sine Tabelul valorilor care constă din linii. Fiecare rând este reprezentat de un tip de date StringTableValues, care are propriile sale proprietăți și propriile sale metode. Există CollectionColumnsTablesValues are, de asemenea, anumite proprietăți.

Un punct important! O procedură care se formează Tabelul valorilor, ar trebui să compileze & AtServer.

Înainte de a începe să lucrați cu Tabelul valorilor, este necesar să se determine ce coloane vor fi conținute în ea (adică să le creați). Sintaxă:

Adăuga(,)
(opțional)
Tip: Șir.
(opțional)
Tip: Descriere Tipuri
(opțional)
Tip: Șir.
(opțional)
Tipul: Numărul.

De exemplu:

Pentru a apela această procedură, vom folosi comanda.

În descriere Tabelele valorice elementele de colectare sunt exact RowsTablesValues.

Spre deosebire de coloane, care constau doar din proprietăți (Nume, Tip, Antet, Lățime), în RowTableValues există atât proprietăți (referință după numele coloanei), cât și metode (puteți obține și seta o valoare, puteți lucra cu proprietarii).

A adauga linie nouă trebuie să utilizați metoda Adăuga() sau Introduce()... În cel de-al doilea caz, ar trebui să indicați în ce poziție trebuie plasată linia necesară.

Pentru a atribui o valoare unei coloane, ne referim la numele sau indexul coloanei (folosind paranteze pătrate) printr-o perioadă.

Pentru umplere Tabelele valorice pot fi utilizate următoarele metode:

Clar ()- pentru a elimina toate liniile din Tabelele valorice.

FillValues ​​(,)- vă permite să completați toate coloanele sau coloanele selectate cu o singură valoare.
Încărcați coloana (,)- încarcă o coloană dintr-o matrice.
Descărcați coloana ()- descarcă o coloană într-o matrice.

Ultimele două metode sunt convenabile de utilizat atunci când trebuie să transferați o coloană dintr-un tabel de valori în altul.

Copie (,)- permite pe bază tabelul existent creaza un nou Tabelul valorilor, deși nu indică toate liniile și toate coloanele, ci doar unele dintre ele. Valoarea returnată este - Tabelul valorilor.

Puteți copia structura Tabelele valorice... Există o metodă corespunzătoare pentru aceasta. Copiați coloanele ()... Vom deveni goi Tabelul valorilor cu structura necesară.

ÎN Tabelul valorilor există o metodă Total ()... Puteți specifica coloana în care doriți să însumați valorile numerice. În raport cu codul afișat anterior în Tabloul de bord, puteți calcula valoarea: TK.Total („Suma”).

ÎN Tabelul valorilor este posibil să grupați (restrângeți) valorile numerice după aceleași valori ale anumitor coloane folosind metoda Restrânge (,).

În raport cu codul afișat anterior în Tabloul de bord, puteți calcula valoarea: TK.Collapse („Ziua săptămânii”, „Suma”).

Tabelul valorilor poate fi afișat pe un ecran personalizat, astfel încât să puteți efectua orice acțiuni cu acesta. Dar spre deosebire de Lista valorilor din codul programului nu puteți apela doar masa la ecran.

A afișa Tabelul valorilor pe ecran, creați un atribut formular și atribuiți-i un tip de date Tabelul valorilor.

După aceea, tabelul rezultat trebuie afișat pe formular.

În modulul formular, la sfârșitul algoritmului compus anterior (în Procedura pentru crearea unui tabel de valori), adăugați:
ValueVDataForm (TK, tabel);

Colecție generică Arborele valorilor

o colecție versatilă care se aseamănă foarte mult cu Tabelul valorilor... Diferența față de tabel este că rândurile arborelui pot fi subordonate unele cu altele, adică se poate forma un fel de ierarhie.

Poate fi afișat și pe ecran. Un arbore valoric explicit constă dintr-o colecție de șiruri și o colecție de coloane. Există două proprietăți în arbore, Rânduri și Coloane.

Deoarece liniile pot fi subordonate unele cu altele, atunci pentru fiecare linie poate fi specificat un părinte, precum și linii subordonate.

Să creăm arborele de comandă corespunzător și procedura de procesare a acestuia.

Să creăm în care un rând părinte și doi subordonați.

Să creăm recuzita DerZn(tip de date - ValueTree).

Pentru acest atribut, să creăm coloanele An și Lună.

Mutați elementul corespunzător DerZn pe formular.

La sfarsit Proceduri TreeOnServer () adăuga:

ValueVDataForm (TreeZn, DerZn);

Să verificăm ce s-a întâmplat în modul utilizator.

Folosind butonul Adăuga se pot adăuga noi linii. De asemenea, pot forma o ierarhie.

Pentru a traversa toate elementele arborelui valoric, trebuie să folosim recursivitatea, adică apelând o procedură de la sine. De exemplu, procesarea unui arbore de valori ar putea arăta astfel:

Aceasta încheie prima noastră cunoaștere a colecțiilor universale.

În articolul următor, vom analiza ce mecanism important poate folosi un dezvoltator pentru a simplifica accesul la un element de referință din codul programului.

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ă = Structură nouă;
Structură. Inserare ("KeyParameter1", "Valori ale parametrului # 1");
Structură. Inserare ("KeyParameter2", "Valori ale parametrului # 2");

A doua cale:

Structură = Structură nouă ("KeyParameter1, KeyParameter2", "Parameter values ​​# 1", "Parameter values ​​# 2");

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

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

Schimbare

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 cheie nouă, 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 repeta colecția unei structuri, trebuie să utilizați constructul „Pentru fiecare cheie și valoare din bucla de structură”.

De exemplu:

Pentru fiecare cheie și semnificația buclei de structură
…… // procesul, de exemplu, modifică valorile
Sfârșitul ciclului;

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



Ți-a plăcut articolul? Împărtășește-l