1 matrice bidimensională. Colecția universală Arborele valorilor

01.11.2019 Programe

O matrice 1C este un set simplu de valori. Puteți adăuga valori de diferite tipuri la o matrice 1C. După adăugare, prezența valorilor în matricea 1C poate fi verificată folosind căutarea încorporată.

Matricea 1C este adesea folosită:
A) Pentru selecții
B) Pentru a salva o listă de valori pentru a o utiliza în continuare, de exemplu, transmiteți-o ca parametru unei funcții/procedură.

Lucrul cu matrice 1C

Să creăm o matrice 1C cu 2 valori:
Array = New Array(); //matrice fără un număr fix de valori

Array.Add(RNG.RandomNumber(0, 1000));
Array.Add(RNG.RandomNumber(0, 1000));

// parcurge fiecare valoare a tabloului 1C, indiferent câte sunt

Raport (Valoare);
EndCycle;

Să creăm o matrice 1C cu 10 valori:
Array = New Array(10); //matrice cu un număr fix de valori
RNG = NewRandomNumberGenerator(); //vom umple cu numere aleatorii

//indexul matricei începe de la zero, nu de la unul
//10 bucăți sunt de la 0 la 9
Pentru Sch = 0 până la 9 Ciclu
//acces la arrayArrayName[Index]
Matrice[RNG] = RNG.RandomNumber(0, 1000); //număr aleator de la 0 la 1000
EndCycle;

//recercă fiecare valoare de matrice, indiferent câte sunt
Pentru fiecare valoare din ciclul de matrice
Raport (Valoare);
EndCycle;

//notă - există 10 valori de matrice, asta înseamnă că există 10 dintre ele în mod implicit și fiecare valoare este NEDEFINITĂ până când setăm alta
//asta nu înseamnă că nu putem adăuga o altă valoare, 11e, folosind ArrayName.Add();

Matrice multidimensională

Să creăm o matrice multidimensională 1C 2x2. O matrice multidimensională este 1C, ceea ce înseamnă că fiecare celulă a matricei 1C conține nu o valoare, ci și o matrice 1C.

O matrice multidimensională 1C nu trebuie să fie fixată. Să facem o matrice multidimensională 1C 2x2 fără a specifica un număr fix de valori:

Crearea unui tablou 1C de la zero

Obținerea datelor este o procedură care necesită timp și resurse. Prin urmare, dacă trebuie să lucrați cu datele primite de mai multe ori, este logic să le primiți o dată și să le salvați într-o matrice 1C pentru a lucra în continuare cu datele deja primite și salvate.

De exemplu, linia versiunii programului arată astfel: „11.0.9.5” - patru numere separate prin puncte. Putem converti versiunea într-un format „computer” - o matrice de patru valori numerice. Apoi putem compara în continuare versiunile între ele:

Obținerea unui tablou 1C gata făcut cu date

O matrice 1C poate fi obținută dintr-o listă de valori folosind metoda spList.UnloadValues() și dintr-un tabel de valori folosind metoda tableTable.UnloadColumn().

În exemplul de mai jos, facem o interogare - selectăm toate legăturile documentelor din baza de date.

  • RequestResult = Request.Execute() //execută cererea
  • tzResult = Rezultatul interogării. Upload() //încarcă rezultatul în tabelul de valori
  • mArray of Links = tzResult.UnloadColumn("ColumnName") //descărcă o coloană de tabel într-o matrice

Obținerea unei matrice 1C de la alte obiecte și utilizarea acesteia ca selecție într-o solicitare

Când o listă de documente (sau un tabel de valori) se află pe formular, utilizatorul poate selecta o linie cu cursorul. De asemenea, puteți permite selectarea mai multor linii în același timp. Pentru a selecta mai multe linii (dacă formularul nu permite acest lucru), trebuie să țineți apăsată tasta CTRL sau SHIFT.

Adăugați un tabel de valori la formularul de client gros și selectați DocumentList.DocumentName ca tip. În proprietățile sale, selectați modul de selecție – multiplu.

Putem obține în mod programatic lista șirurilor selectate:

Dacă utilizați formă controlată, atunci trebuie mai întâi să adăugați un atribut de formular cu tipul DynamicList, iar în proprietățile sale selectați tabelul principal - documentul solicitat. Trageți recuzita pe formular. În proprietățile elementului de formular (!), selectați și – modul de selecție – multiplu (setat astfel implicit).

Accesarea matricei 1C a șirurilor selectate va arăta astfel:
Elements.FormAttributeName. Rânduri selectate

Despre ce este acest articol?

Acest articol continuă seria de articole „Primii pași în dezvoltarea 1C”. Acesta acoperă principiile de lucru cu colecții universale. După ce ați citit articolul, veți învăța:

  • Ce sunt colecțiile universale și când și în ce cazuri ar trebui utilizate?
  • Ce au în comun toate colecțiile universale? Ce tehnici poți folosi pentru a lucra cu toate acestea?
  • Ce este o matrice, cum și când să o folosești? Ce metode are?
  • De ce să folosiți o structură? Cum este diferit de o matrice?
  • Când ar trebui să utilizați o listă de valori? Cum se afișează în formular?
  • Conformitate – ce este și când să o folosești? Care sunt avantajele in ceea ce priveste structura?
  • Pentru ce este folosit tabelul de valori? Cum să-i descriu structura? Cum se adaugă/elimină linii? Cum se afișează în formular?
  • Arborele valorilor - pentru ce este folosit? Cum se completează și se afișează formularul? Cum să lucrezi cu el?

Aplicabilitate

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

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

O colecție de valori este un container care poate conține de obicei orice număr de elemente. Cu toate acestea, adesea nu există restricții stricte privind tipul de date.

Puteți adăuga valori la o colecție generică. Toate valorile din colecție pot fi parcurse. Aceste colecții sunt folosite în principal pentru un fel de procesare în algoritmi. Acestea. Acestea sunt câteva structuri dinamice care există în timp ce algoritmul rulează.

Este important de înțeles că colecțiile nu sunt stocate într-o bază de date (nu vorbim despre tipul de date Value Store, care poate stoca aproape orice tip de date).

Există diferite tipuri de colecții generice: Array, Structure, Match, Fixed Array, Value Table, Parte tabulară etc. Dar toate colecțiile au un comportament similar.

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

Puteți obține o nouă colecție manual apelând constructorul și creând o instanță a clasei.

De exemplu: OurArray = matrice nouă;

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

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

Descrierea corespunzătoare a constructorului este în asistentul de sintaxă.

Astfel, folosind parametrii constructorului, puteți seta imediat comportamentul dorit al unui obiect dat.

Dar parametrii sunt opționali; dezvoltatorul nu îi poate seta și defini în continuare comportamentul Array-ului așa cum crede de cuviință.

Aproape orice colecție universală poate fi creată folosind un constructor (excepție fac părțile de tabel, care acționează ca obiecte de configurare).

Pentru colecțiile universale, există concepte comune precum index și număr. Fiecare element al colecției are un index. În acest caz, indicele începe de la zero.

Pentru a accesa un element OurArray, puteți utiliza accesul la index; pentru aceasta, indexul este indicat între paranteze drepte.

De exemplu, OurArray. Vă rugăm să rețineți că în acest caz sistemul returnează elementul Array cu index 3, iar în ordine acesta este al patrulea element al Array.

Pentru unele colecții există și conceptul de număr de linie. Numărul liniei începe cu unu. De exemplu, pentru partea tabelară există o astfel de proprietate ca numărul rândului. Este important de reținut că, dacă cunoaștem numărul liniei și dorim să-l accesăm prin index, atunci ar trebui să folosim ca index o valoare mai mică decât numărul liniei.

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

Toate colecțiile folosesc traversarea elementului de colecție. Bypass-ul este posibil în două moduri: ciclu PentruȘi ciclu Pentru fiecare dintre.

Pentru majoritatea colecțiilor generice, metodele care se aplică sunt Count, Index, Add, Insert, Delete și Find.

Count este o funcție care returnează numărul de elemente dintr-o colecție. Poate fi folosit înaintea unui ciclu Pentru, după 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– aceasta este o colecție specifică de rânduri, rândurile pot conține diferite coloane cu tipuri diferite valorile.

Fiecare linie reprezintă o entitate independentă. Puteți obține un link către acesta; prin această linie puteți accesa valorile coloanelor din această linie.

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

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

Pentru a adăuga un element la Array putem folosi metoda Adăuga, indicați valoarea de 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 unei colecții este Introduce. Este diferit de metoda Adăuga prin faptul că puteți specifica unde să inserați elementul adăugat.

Sintaxă: Inserați (,)

Primul parametru specifică indexul în care va fi inserată noua valoare. Acestea. de exemplu, putem specifica că fiecare valoare trebuie inserată la începutul listei (a doua metodă din figura de mai sus).

Pentru a elimina elemente dintr-o colecție, utilizați metoda Șterge. Metoda Delete specifică prin index ce element vom șterge.

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

Trebuie remarcat faptul că pentru acele colecții în care șirurile reprezintă o entitate independentă (de exemplu, pentru Tabele de valori), putem folosi și metoda de obținere a indexului pentru a șterge ulterior acest rând.

Aproape toate colecțiile au o metodă de căutare a unei valori - Găsi. Valoarea pe care vrem să o găsim este transmisă metodei. Unele colecții vă permit să stabiliți anumite restricții.

De exemplu, în Tabel de valori puteți specifica rândurile și coloanele în care doriți să căutați.

Dacă valoarea este găsită, această metodă returnează indexul sau șirul specificat. Dacă valoarea nu este găsită, este returnată o valoare de tip Nedefinit. În legătură cu un Array, returnează Index, sau valoare Nedefinit.

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

Colecțiile universale pot fi șterse foarte rapid, de ex. elimina absolut toate elementele. În acest scop se utilizează metoda Clar(), care elimină elementele Array, rândurile Tabele de valori, sau date din alte colecții.

Metode suplimentare pentru Array

Metodă BBorder() returnează numărul de elemente minus unu. Acestea. dacă folosim o buclă Pentru, apoi în locul metodei Cantitate putem folosi imediat metoda Frontieră().

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

QuantityInArray = OurArray.InBorder();
Apoi, atunci când descriem ciclul în sine, nu ar trebui să fie scăzut din această variabilă.

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

Sintaxă: Instalare(,)

Exemplu: OurArray.Set(2,8);

Opțiune alternativă: OurArray = 8;

Puteți utiliza metoda pentru un Array obține, pentru citirea unei valori la un index fără a recurge la utilizarea parantezelor drepte.

Sintaxă: Obține()

Exemplu: OurVariable = OurArray.Get(2);

Opțiune alternativă: OurVariable = OurArray;

Structura de colectare universală

O Structură, ca și un Array, poate avea un număr nelimitat de elemente, dar conținutul elementului diferă de Array.

Structura este o colecție, fiecare 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, La cheie„Cod” poate corespunde valorii 113; La cheie„Nume” înseamnă „Vasya”. Valoarea în sine nu este supusă unei restricții de tip de date.

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 sale după cum urmează: OurStructure.Code și OurStructure.Name.

Acest tip de acces este mult mai convenabil decât dacă am defini toți parametrii dintr-un Array și i-am accesa prin index.

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

Este folosit pentru a descrie anumiți parametri, dintre care adesea există un număr destul de mare î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ă îi transmiteți mai departe. Acestea. parametrii procedurilor și funcțiilor sunt „ambalate”.

Separat, trebuie remarcat faptul că ca Cheie Nu poate apărea absolut orice linie în Structură. Se aplică anumite restricții.

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

Început acceptabil Cheie cu o literă sau subliniere. Prin urmare, Cheie trebuie să îndeplinească cerințele pentru crearea identificatorilor.

Să observăm cum altfel o structură diferă de o matrice. Există o metodă în Structură Introduce, există două metode de inserare în Array: Introduce(la o anumita pozitie) si Adăuga(până la sfârșitul listei). Într-un Array, toate elementele sunt ordonate.

Structura este un fel de ansamblu dezordonat. Acesta este motivul pentru care există doar o metodă de inserare pentru o Structură.

Valoarea este inserată nu într-o anumită poziție, ci în setul specificat. O Structură nu poate fi accesată prin index, ca și alte colecții generice.

Elementele de structură sunt accesate numai după numele cheii. Cu toate acestea, bucla For Each funcționează și pentru Structură, dar nu ar trebui să vă bazați pe ordinea elementelor Structurii.

O structură este creată în același mod ca și alte colecții generice folosind constructorul New, specificând tipul de date Structure.

La fel ca un Array, constructorul unei structuri poate avea parametri. Acestea. este posibil să descriem însuși conținutul unei Structuri folosind un constructor.

Spre deosebire de un Array, unde puteți specifica pur și simplu numărul de elemente pentru toate dimensiunile, într-o Structură puteți specifica conținutul în sine.

De exemplu: OurStructure = New Structure („Cod, Nume”, 133, „Vasya”);

Separate prin virgule, numele cheilor sunt mai întâi listate, iar apoi, în consecință, în aceeași ordine, valorile parametrilor.

Există o metodă de a adăuga o nouă valoare structurii Introduce, care inserează o nouă pereche (Cheie și valoare).

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

Structura este caracterizată de o altă metodă care este folosită 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 nume sau altul.

Dacă un astfel de element există, sistemul va returna valoarea True, în caz contrar – False.

De exemplu, expresia OurStructure.Property („Membrii familiei”) va fi egală cu valoarea True. Această metodă este folosită destul de des atunci când se analizează Structura.

Ca și în cazul oricărei colecții universale, este posibil să accesați proprietățile unei Structuri prin index. Dar indexul pentru Structură este o valoare șir.

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

Totuși, nu trebuie să uităm că o Structură este un set neordonat de obiecte, motiv pentru care accesarea prin indexul 0, 1, 2 este inacceptabilă.

Colecție generică Listă de valori

ListValues este o listă liniară de elemente de orice tip de date.

Fiecare element este format din mai multe valori. Schematic, o listă de valori poate fi reprezentată ca o listă cu patru coloane.

Prima coloană - marcă. Are un tip de date boolean și permite utilizatorului fie să bifeze, fie să debifeze casetele.

Cealaltă coloană este o imagine care poate reprezenta cumva vizual acest element, adică potriviți acest șir cu o imagine.

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

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

ListValues– acesta este obiectul cu care utilizatorul poate lucra vizual. Acestea. ListValues poate fi afișat pe formular.

Utilizatorul poate efectua unele acțiuni cu acesta. In afara de asta, ListValues poate fi dedus independent folosind metode, de ex. 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ă bifeze unele casete.

Vom găsi ListValuesîn asistentul sitax. Constructor ListValues neparametrat (nu puteți seta nicio valoare implicită).

Există metode precum:

  • Insert(,) ;
  • Adăuga(,);
  • Cantitate();
  • Index().

Există și metode speciale, de exemplu, UnloadValues(). Acest lucru creează o matrice în care este copiată lista de valori. De exemplu:

Array of Elements = Lista de PriceTypes.OutloadValues();

Există și o metodă inversă:
ListPriceTypes.LoadValues(ArrayItems);

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

Există o metodă de copiere:
ListCopy = PriceTypeList.Copy();
Aceasta metoda are scopul de a face un fel de modificare a copiei.

Există metode:
SortByValue();
SortByView().

Metode Selectați elementul(,)Și MarkItems() apelează o casetă de dialog modală care oprește execuția algoritmului până când utilizatorul închide fereastra.

Pentru a utiliza aceste metode în proprietățile de configurare Modul de utilizare a modalității trebuie setat la Utilizare.

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

Afișați acest cod în modul utilizator (dialog modal).

De mai jos ListValues utilizat ca tip de date disponibil pentru atributele formularului. Creăm un nou atribut pentru formularul de procesare și definim tipul acestuia ListValuesși afișați-l pe formular.

Noi creăm echipa noua Completați Cadouri, transferați-l în formular și definiți un handler de acțiuni pentru acesta.

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

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

Conformitate versatilă de colectare

Această colecție este foarte asemănătoare cu Structura. La fel ca Structura, Mapările sunt seturi de valori care constau dintr-o cheie și valoarea în sine.

Principala diferență este că orice tip de date poate fi specificat ca Cheie, precum și pentru valoare. Având în vedere această caracteristică, este necesar să accesați valoarea potrivirii după index; valoarea cheii este indicată ca valoare a indexului.

Cheia poate fi un alt tip de date decât un șir. Proprietățile și metodele de lucru cu Compliance sunt aproape aceleași cu cele ale Structure.

Constructorul de conformitate, spre deosebire de Structură, nu conține capacitatea de a specifica parametri.

Exemplu de utilizare:

Corespondența este convenabilă de utilizat atunci când trebuie să conectați oricare două structuri. De exemplu, fiecare rând din secțiunea tabelară trebuie să fie asociat cu un rând din tabelul de valori.
În acest caz, rândul secțiunii tabelului este folosit ca cheie de potrivire și este indicată valoarea corespunzătoare.

Când se inserează elemente într-o colecție, se potrivește în plus față de metodă Introduce(,) O altă modalitate de a insera o valoare este utilizarea operatorului obișnuit de atribuire.

De exemplu: OurMatch = NewMatch;
Potrivire = 999;

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

Acest lucru este în contrast cu Structura.

Tabelul de Valori al Colectării Universale

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, pot fi tastate coloane, adică puteți determina în ce coloană ce tip de date sunt stocate.

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

Diferențele Tabele de valori dintr-o matrice bidimensională:

  • acesta este un obiect cu care utilizatorul poate lucra (tabelul cu valori poate fi afișat pe ecran, utilizatorul îl poate completa, iar datele introduse pot fi apoi citite);
  • construirea de indici pentru căutare rapidă;
  • clonarea, umplerea unei întregi coloane cu o anumită valoare, încărcarea tuturor coloanelor într-o matrice.

Tabelul Valorilor folosit ca un fel de buffer de stocare a informațiilor. Tabelul Valorilor este returnat și acceptat ca parametru de multe metode de sistem. Este posibil să construiți o interogare pe Tabelul de Valori.

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. in interiorul colectiei Tabelul Valorilor mai sunt două colecții. Să apelăm la asistentul de sintaxă și să găsim Tabelul Valorilor.

Tipuri de date acceptate: în sine Tabelul Valorilor, care constă din șiruri. Fiecare rând este reprezentat de un tip de date RowTableValues, care are propriile sale proprietăți și propriile sale metode. Disponibil Colecție de valori de coloane de tabel are, de asemenea, anumite proprietăți.

Punct important! Procedura care creează Tabelul Valorilor, trebuie să compileze &OnServer.

Înainte de a începe să lucrați cu Tabelul Valorilor, trebuie să determinați ce coloane va conține (adică să le creați). Sintaxă:

Adăuga(,)
(optional)
Tip: șir.
(optional)
Tip: DescriptionTypes
(optional)
Tip: șir.
(optional)
Tip: Număr.

De exemplu:

Pentru a apela această procedură vom folosi comanda.

În descriere Tabele de valori elementele colecţiei sunt tocmai RowsTableValues.

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

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

Pentru a atribui o valoare unei coloane, folosim un punct pentru a accesa numele coloanei sau indexul (folosind paranteze drepte).

Pentru umplere Tabele de valori Se pot folosi următoarele metode:

Clar()– pentru a elimina toate rândurile din Tabele de valori.

FillValues(,)– vă permite să completați toate coloanele sau coloanele selectate cu o singură valoare.
LoadColumn(,)– încarcă o coloană din matrice.
DescărcațiColumn()– descarcă coloana î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 baza tabelul existent creați unul nou Tabelul Valorilor, și nu toate rândurile și toate coloanele, ci doar unele dintre ele. Valoare returnată - Tabelul Valorilor.

Puteți copia structura Tabele de valori. Există o metodă corespunzătoare pentru aceasta CopyColumns(). Vom primi unul gol Tabelul Valorilor cu structura cerută.

ÎN Tabel de valori exista o metoda Total(). Puteți specifica coloana în care doriți să însumați valorile numerice. În raport cu codul afișat anterior în tablou, puteți calcula valoarea: TK.Total („Suma”).

ÎN Tabel de valori este posibilă gruparea (restrângerea) valorilor numerice după valori identice ale anumitor coloane folosind metoda Colaps(,).

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

Tabelul Valorilor poate fi afișat pe ecranul utilizatorului, astfel încât să puteți efectua orice acțiuni cu acesta. Dar spre deosebire de ListValues Nu puteți doar să apelați un tabel pe ecran din codul programului.

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

După aceea, tabelul rezultat ar trebui să fie afișat pe formular.

În modulul formular de la sfârșitul algoritmului compilat anterior (în Procedura pentru crearea unui tabel de valori), ar trebui să adăugați:
ValueInFormData(TK, Table);

Colecția universală Arborele valorilor

o colecție universală care seamănă foarte mult cu Tabelul Valorilor. Diferența față de un tabel este că rândurile arborelui pot fi subordonate unul altuia, adică. se poate forma un fel de ierarhie.

Acest lucru se poate reflecta și pe ecran. Un arbore de valori constă în mod explicit dintr-o colecție de rânduri și o colecție de coloane. Există două proprietăți în arbore: Rânduri și Coloane.

Deoarece rândurile pot fi subordonate unul altuia, fiecare rând poate avea un părinte, precum și rândurile sale subordonate.

Să creăm comanda Tree corespunzătoare și procedura de procesare a acesteia.

Să creăm în care există un rând părinte și două rânduri subordonate.

Să creăm atributele formularului DerZn(tip de date – Arborele valorii).

Pentru acest atribut, vom crea coloanele An și Luna.

Mutați elementul corespunzător DerZn pe formular.

La sfârșitul Proceduri TreeOnServer() hai sa adaugam:

ValueInFormData(TreeZn, DerZn);

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

Folosind un buton Adăuga puteți adăuga linii noi. De asemenea, pot forma o ierarhie.

Pentru a parcurge toate elementele arborelui de valori, va trebui să folosim recursiunea, i.e. apelând o procedură de la sine. De exemplu, procesarea unui arbore de valori poate arăta astfel:

Aceasta încheie prima noastră cunoștință cu colecțiile universale.

În articolul următor ne vom uita la ce mecanism important poate folosi un dezvoltator pentru a simplifica accesul la un element de director din codul programului.

Utilizarea tablourilor în 1C ajută la organizarea elementelor utilizate în lucru.

Acesta este un set de elemente software. Acesta servește pentru:

  • Selectarea valorilor.
  • Triere. Fiecărei poziții din matrice i se atribuie un index. Acest lucru facilitează căutarea. Și vă puteți referi la un obiect scriindu-i numărul.
  • Combinarea și salvarea înregistrărilor.
  • Separarea grupurilor, crearea subșirurilor.
  • O matrice este un obiect în sine. I se va atașa o variabilă. Puteți face referire la părți individuale ale acestuia sau îl puteți utiliza în întregime în proceduri. De exemplu, puteți combina grupul de valori „Angajații Departamentului N” și puteți introduce acolo numele și prenumele angajaților.

Să facem o analogie. Imaginați-vă o bibliotecă. Cărțile din el sunt aranjate în diferite „celule”. Dacă țineți înregistrări, veți ști unde se află fiecare obiect. Și îl puteți obține fără dificultate. Dar dacă cărțile, revistele și ziarele sunt împrăștiate haotic pe masă, căutarea celui potrivit va dura mult timp. Deși acest lucru nu reflectă toate posibilitățile colecțiilor unice.

Creare

Lucrul cu matrice 1C începe cu crearea acestora. Aveți nevoie de o „locație” - un câmp în care veți introduce codul.

  1. Deschideți „Configurator” („Configurare”).
  2. Faceți clic dreapta pe „Procesare”.
  3. Selectați „Adăugați”.
  4. Apare submeniul Procesare1. Selectați-l. Informațiile despre aceasta vor fi afișate în zona de lucru.
  5. În fila De bază, introduceți Nume. Să spunem „TestArray”.
  6. Deschideți secțiunea „Formulare”.
  7. Faceți clic pe pictograma lupă.
  8. Bifați opțiunea „Formular de procesare”.
  9. Faceți clic pe „Terminat”.
  10. Se va deschide o fereastră cu trei rame. În dreapta sus, accesați fila „Echipe”.
  11. Pictograma plus pentru a adăuga o poziție.
  12. Va apărea elementul „Team1”. Selectați-l.
  13. În câmpul „Nume”, introduceți un nume. De exemplu, „TestValues”. Copiați-l în „Header”.
  14. În linia „Acțiune”, faceți clic pe lupă.
  15. Elementul „Creare pe client” și „OK”.
  16. Iată modulul în care poți introduce codul.

Pentru a afișa un rezultat intermediar, creați un „buton”. De ce este necesar în matrice - veți înțelege puțin mai târziu.

  1. Accesați fila „Formulare”. Ea e jos.
  2. Faceți clic dreapta pe „Bara de comandă”.
  3. "Adăugați - Buton".
  4. Da-i orice nume. Sau o puteți lăsa pe cea implicită.
  5. În câmpul „Nume echipă”, faceți clic pe pictograma cu puncte de suspensie.
  6. Selectați „TestValues”. Dacă echipa a fost numită diferit, va exista un alt titlu.

Acum puteți începe să lucrați cu colecții. Dar să nu credeți că în 1C puteți descompune imediat un șir într-o matrice. Este mai bine să începi cu ceva mai ușor. Deși toate funcțiile sunt un set de operatori pe care trebuie doar să-ți amintești.

  1. Deschideți fila „Modul”.
  2. Textul care vine după două bare oblice (două bare oblice - „//”) poate fi șters. Arată cam așa „//Inserează conținutul handlerului”. Acestea sunt explicații. Sunt scrise de programatori pentru a nu se confunda în cod.
  3. Scrieți textul între operatorii „Procedură” și „Sfârșitul procedurii”.
  4. Acum creați un set de valori. Vino cu o variabilă care o va denota în mod condiționat. Să spunem „FirstArray”.
  5. Trebuie să fie asociat cu un obiect. Pentru a face acest lucru, introduceți comanda „FirstArray = New Array()”. Aceasta este o colecție care poate conține un număr nelimitat de elemente. Dacă aveți o dimensiune fixă, specificați-o după comanda din paranteze „New Array (5)”. În consecință, colecția bidimensională va arăta ca „New Array (7, 5)”. Puteți crea seturi multidimensionale.
  6. Pe măsură ce tastați, pot apărea sugestii care sugerează operatori potriviți.
  7. Cuvintele variază în culoare. Variabilele au o culoare, funcțiile au alta.
  8. După fiecare comandă, plasați un punct și virgulă „;”. Și pentru comoditate, începeți cu un nou paragraf.
  9. Nu poți face nimic cu un set gol. Nu organizați, nici scoateți, nici descompuneți șirul într-o matrice în 1C. Prin urmare, trebuie să inserăm elemente în el.
  10. Introduceți „FirstArray.Add(Value1);”. Apoi „FirstArray.Add(Value2);” și așa mai departe.
  11. Obiectele sunt numerotate de la zero. Adică variabilei „Valoare1” i se va atribui indicele „0”. Puteți completa singur colecția cu „Valoare0” pentru a nu vă încurca.

Pentru ce sunt toate acestea? Și de ce acel „buton” misterios? Să încercăm să rulăm o funcție simplă.

  1. Sub colecție, scrieți comanda „Raport (FirstArray);” Indicele elementului este indicat între paranteze drepte. Adică adresa „Valoarea0” noastră.
  2. Formatați modulul. Aceasta este o verificare a erorilor. În blocuri mari, puteți lăsa ceva neterminat din cauza neatenției: a nu pune punct și virgulă, a nu închide o paranteză sau a scrie incorect o variabilă. Compilatorul va indica acest lucru.
  3. Faceți clic pe butonul sub forma unui semn „Play” (un triunghi într-un cerc) pentru a rula programul pe care l-ați scris.
  4. Faceți clic pe „Service” și selectați butonul dvs.
  5. Apasă-l.
  6. Apare mesajul „Value0”. Acesta este rezultatul execuției funcției.

Arata cel mai mult operare simplă, astfel încât să înțelegeți cum funcționează în general matricele. Cu ele poți crea complexe și programe pe mai multe niveluri. Afișați obiecte, sortați, eliminați repetițiile, împărțiți într-un set de subșiruri, combinați, împărțiți, căutați informații. Trebuie doar să cunoști operatorii.

Funcții

Toate funcții disponibile se află în cartea de referință a programului. Să enumerăm câteva pentru a arăta principiul.

Cum se transformă o matrice 1C într-un șir:

TestArray = New Array(4);
TestArray = Aceasta;
TestArray = Terminat;
TestArray = Deci;
RowTest = ValueInRowInt(TestArray);
Raport (Test șir);

Trimiteți-l la „Buton” și obțineți fraza. Acesta poate face parte dintr-un modul mai mare - caz în care declarația Raport nu este necesară.

Pentru a descompune un șir într-o matrice de subșiruri în 1C, aveți nevoie de un separator. Marcaj condiționat după care textul va fi împărțit. Să presupunem că există cuvântul „Protocol”. Și vom pune separatorul „O”. Introduceți comanda „TestArray = ExpandStringInArray(Protocol, „O”);” Veți obține „Pr”, „T”, „K” și „L” separat. Separatorul este șters. Și cuvântul este împărțit în mai multe subșiruri.

Iată cum să o puneți în practică. Aveți o matrice cu numele complete ale angajaților. Și aveți nevoie de câmpurile „Nume”, „Prenume” și „Patronimic” pentru a fi completate automat atunci când selectați o poziție. Pentru a face acest lucru, numele complet trebuie împărțit în trei componente. Utilizați „spațiu” ca separator.

În mod obișnuit, pentru aceasta este utilizat un modul complex: o buclă cu o cantitate mare operatori. Blocurile ciclice cu o condiție sunt construite după principiul „Dacă (condiție), atunci (acțiunea1), altfel (acțiunea2)”. În primul rând, programul verifică dacă condiția este adevărată. Dacă da, atunci rulează prima funcție. Daca nu, al doilea.

Bucla va verifica fiecare caracter din șir. Dacă nu există niciun separator acolo, acesta continuă mai departe. Dacă există un delimitator acolo, acesta adaugă valoarea la setul de subșiruri. Alți operatori pot fi utilizați acolo: de exemplu, „AbcrLP” este o abreviere a anumitor caractere la dreapta și la stânga liniei.

Fiecare modul trebuie să fie „terminat”, astfel încât utilitarul să oprească executarea procedurii. Într-o buclă cu „If”, această declarație este „EndIf”. Pe un ciclu fără condiții - „Sfârșitul ciclului”. Fiecare funcție trebuie finalizată separat.

Căutați și sortați

Colecțiile pot conține o cantitate imensă de date. Trebuie să învățăm să le căutăm și să le sortăm.

Pentru a efectua o căutare într-o matrice în 1C, utilizați operatorul „Find”. Puteți găsi și vizual valoarea dorită. Dar dacă există sute de elemente, este mai bine să creați un modul suplimentar și să rulați o subrutină. Să o arătăm folosind o funcție simplă ca exemplu. Dar acesta este potrivit pentru orice blocuri.

ArrayTest = New Array(3);
ArrayTest = „Telefon”;
ArrayTest = "Laptop";
ArrayTest = „Computer”;
Index = ArrayTest.Find("Telefon");
Dacă Index ‹› Nedefinit Atunci
Raport(„Căutare finalizată” + ArrayTest[Index]);

Și nu uitați să puneți „declarația de încheiere”.

Colecția este oferită ca exemplu. Am creat un set de trei valori. Și am făcut un ciclu scurt. Dacă utilitarul nu găsește un element potrivit, va afișa mesajul „Nedefinit”. Dacă o găsește, va arăta rezultatul.

Sortarea unei matrice 1C este pur și simplu de neînlocuit atunci când lucrați cu cantități mari de date. Trebuie să le navighezi cumva. Este mai bine să le aranjați într-o anumită ordine. Să presupunem că aveți o colecție numită „YourArray”. Să-l pună în ordine

TestList = New ValueList;
TestList.LoadValues(YourArray);
TestList.SortByValue(SortDirection.Age);
YourArray = TestList.UnloadValues();

În loc de „Ascending” puteți pune „Descendent”. Rezultatul poate fi, de asemenea, încărcat într-un tabel de valori:

TestTable = NewValueTable;
TestTable.Columns.Add("Coloană");
TestTable.LoadColumn(YourArray, „Column”);
TestTable.Sort("Coloană descendentă");
YourArray = TestTable.UnloadColumn(„Coloană”)

Există și metode complexe de sortare: „Bubble”, „Quick”, „Shaker”, „Recursion”. Au algoritmi multi-nivel și lungi.

Tabele și liste

Informațiile pot fi trimise între tipuri diferite colecții. Pentru a transfera o matrice într-un tabel de valori în 1C:

ArrayTelephone = Matrice nouă;
ArrayPhone.Add(„Smartphone”);
ArrayPhone.Add(„Tabletă”);
ArrayPhone.Add(„Telefon”);
TableTest = New ValueTable;
TableTest.Columns.Add(„Telefoane mobile”);
TableTest.Add();
TableTest.Add();
TableTest.Add();
TableTest.LoadColumn(ArrayTelephone, „Telefoane mobile”);
Pentru fiecare rând din ciclul TableTest
Raport (String.Mobile);

Nu uitați să adăugați o instrucțiune de terminare a buclei la sfârșit.

Convertirea unei matrice într-o listă de valori în 1C este destul de simplă. Trebuie doar să încărcați date dintr-o colecție în alta.

NewList = NewValueList();
NewList.LoadValues(YourArray);

În programare, o problemă poate fi rezolvată căi diferite. Și 1C nu face excepție. Algoritmi liniari, bucle, bucle cu o condiție, bucle cu un contor. Există multe opțiuni. Pentru a naviga în matrice, aveți nevoie de niște abilități 1C.

Conceptul de „matrice” a fost folosit de mult timp în programare și, cel mai adesea, este înțeles ca o anumită structură în memorie constând dintr-o secvență de elemente. O matrice în 1C este cea mai simplă dintre colecțiile universale de valori. În plus față de matrice, colecțiile universale includ:

  1. Lista de valori (spre deosebire de o matrice, valorile din listă au o reprezentare, este implementată capacitatea de a sorta și afișa colecția într-o interfață);
  2. Un tabel de valori este o colecție care are coloane pentru o descriere extinsă a valorii; o structură similară poate fi obținută prin executarea unei interogări;
  3. Un arbore este foarte asemănător cu un tabel, complet cu o structură de subordonare;
  4. Structura - set dinamic nume și valori ale variabilelor;
  5. Potrivire - similar cu o structură, numai variabilele sunt potrivite nu cu reprezentări în șir, ci între ele.

Metode de matrice

Crearea programatică a unei instanțe de matrice are loc utilizând operatorul New() (Fig. 1).

După cum se poate observa din exemplul de mai sus, tablourile pot fi create fie cu un număr fix de elemente, fie fără această limitare.

Înainte de a începe să discutăm despre metodele de lucru cu o matrice, să definim două concepte:

  • Indicele elementului – poate fi reprezentat ca un număr de serie al unei singure valori;
  • Număr de elemente – numărul de elemente din colecție; determinarea acestuia este disponibilă folosind metoda Quantity().

Este important de știut: în 1C, numărarea numărului de valori ale oricărei colecții începe de la 1 și distribuirea indicilor de la 0, adică primul element din matrice are indicele 0. Astfel, parcurgerea unei colecții folosind o buclă cu un iteratorul ar trebui să înceapă de la 0 și să se termine cu numărul de elemente minus 1, în caz contrar sistemul vă va anunța despre apariția unei excepții folosind fereastra (Fig. 2).

Fig.2

Orice obiect de configurare are propriile sale metode de lucru, o matrice nu face excepție, să le enumerăm cu câteva explicații:

  • BBorder() – folosind metoda pe care o puteți obține indicele maxim element, pentru un tablou gol se va returna valoarea (-1);
  • Insert() – această metodă are doi parametri: index și valoare, index indică unde se inserează în matrice element nou, valoarea adăugată poate fi goală;
  • Add() – această metodă de inserare a unei valori poate fi folosită atunci când plasarea unui element este lipsită de importanță, cu ajutorul acestuia, se vor scrie date noi la sfârșitul matricei existente;
  • Find() – dacă are succes, returnează indexul valorii specificate între paranteze, în caz contrar returnează „Nedefinit”;
  • Clear() – șterge colecția;
  • Get() – citește datele aflate în matrice la indexul specificat, pot fi înlocuite paranteza patrata ;
  • Delete() – șterge elementul cu indexul specificat;
  • Set() – înlocuiește datele din celula matricei specificată.

Matrice unidimensionale și multidimensionale

În cel mai simplu caz, o matrice unidimensională poate conține valorile tipuri variate(Fig.3)

Fig.3.

Rezultatul executării codului de mai sus este prezentat în Fig. 4

Fig.4

Astfel, am primit o matrice unidimensională constând dintr-o valoare șir, un link către un element de director și o dată. Mai mult, atunci când adăugam elemente, am folosit două metode diferite Add() și Insert(); dacă am fi folosit metoda Add() când adăugam o dată, rezultatul nostru ar fi avut un aspect ușor diferit.

În liceu, este introdus conceptul de matrice bidimensională. Acesta este un set de date, fiecare element având doi indici (în cel mai simplu caz, un număr de serie vertical și orizontal); acesta ilustrează cel mai bine conceptul de matrice bidimensională.

Când creați o astfel de matrice, puteți specifica numărul de rânduri și coloane care vor fi utilizate.

Să presupunem că ne confruntăm cu sarcina de a crea o matrice cu numele de familie, prenumele și patronimul a doi angajați. Folosind codul (Fig. 5), creăm o matrice corespunzătoare cu un număr fix de coloane și rânduri.

Fig.5

Pentru a o parcurge avem nevoie de două bucle, în prima buclă parcurgem tabloul linie cu linie, în a doua parăm linia în elemente. Acest lucru se poate face fie folosind ciclul „Pentru fiecare .... De la" (Fig. 6)

Fig.6

Sau folosind o buclă cu iteratorul „Pentru... de” (Fig. 7)

Fig.7

În principiu, numărul de dimensiuni ale unei anumite matrice poate fi oricare; un alt lucru este că, în cazul unui număr mare de niveluri de detaliu, este destul de dificil să se creeze un constructor pentru citirea datelor.

Utilizarea unui Array

Matricele în 1C sunt cele mai des folosite pentru:

  1. Crearea diferitelor selecții utilizate atunci când lucrați cu interogări și alte colecții de valori;
  2. Trecerea listelor ca parametri între proceduri și funcții;
  3. Schimbați date cu componente externe conectate folosind tehnologia COM.

Desigur, aceasta este departe de a fi o listă completă a scopurilor pentru care poate fi utilizat obiectul „Matrice”.