1s adaugă tabelul de valori la . Iată exemplul de cod complet

Probabil, niciun obiect al colecțiilor universale de valori nu este la fel de popular printre dezvoltatorii 1s precum este tabelul de valori (TK). Listele de valori nu pot fi extinse cu detalii, arborele de valori este convenabil din punct de vedere vizual, dar construcția citirii programatice a valorii rândurilor sale este dificil de implementat.

Și doar un tabel de valori:

  • Capabil să completeze direct părțile tabelare ale documentelor, directoarelor și procesării;
  • Este rezultatul executării unei cereri;
  • Ușor de citit și format vizual;
  • si multi multi altii.

În acest articol, am încercat să dăm o idee generală despre un obiect atât de complex și versatil ca un tabel de valori.

Ce sunt tabelele de valori

Toți dezvoltatorii începători știu clar că tabelul de valori are:

  1. Coloane care descriu structura tabelului;
  2. Rânduri care umplu tabelul cu informații.

Cu toate acestea, uităm de foarte multe ori de o proprietate importantă a unui tabel - indicii săi, și anume, utilizarea lor ne permite să grăbim foarte mult procesul de căutare în tabel, formarea selecțiilor în acesta și să îmbunătățim serios performanța.

Dar mai întâi lucrurile.

Figura 1 arată cum arată un tabel de valori, tipărit prin cea mai simplă procedură, care arată structura și conținutul acestora.

După cum se poate vedea din exemplu, există 5 coloane în tabel, fără a număra numărul rândului în ordine.

În cele mai multe cazuri, nu este nevoie să specificați tipul de date al coloanei și lățimea acesteia, este suficient să definiți numele coloanei, dar în unele cazuri este pur și simplu imposibil să faceți fără el (de exemplu, atunci când încărcați un tabel într-un fișier format dbf).

Dacă în viitor se plănuiește utilizarea tabelului de valori ca sursă de date pentru interogare, este necesar să se specifice tipul de date (Fig. 2).

O linie este adăugată folosind metoda Add(), cu atribuirea unui nou nume de linie.

Indici din tabelul de valori

Căutarea în tabelul de valori se efectuează prin două metode:

  • Find (returnează primul element găsit în funcție de anumiți parametri, în caz contrar valoarea este Nedefinită);
  • FindRows (returnează o matrice de rânduri de tabel care îndeplinesc anumite condiții).

Cautat de mese mari„suspend” puternic sistemul și poate fi lung în timp. În aceste cazuri ar trebui folosiți indici.

În primul caz, căutarea are loc pe o valoare și pe o coloană, iar această coloană este cea care trebuie trecută la indecși (Fig. 3)

Indecii separați prin virgule indică faptul că tabelul poate fi căutat prin metoda FindString, căruia i se va trece o structură specifică ca parametru.

În cazul prezentat în exemplu, a doua linie indică o căutare simultană a liniilor care conțin o anumită valoare a Nomenclatorului și caracteristicile acesteia, iar a treia linie indică faptul că documentul „Comandă de producție” poate fi adăugat la parametrii de căutare.

Când lucrați cu diferite obiecte de metadate de configurare, precum și cu rapoarte și procesări, apare adesea o situație când este necesar să se efectueze anumite acțiuni cu părțile lor tabulare. Lucrul direct cu elemente de formular sau părți tabelare ale documentelor nu este întotdeauna convenabil.

Aici tabelul de valori vine din nou în ajutor. În TK, folosind metoda părți tabulare Unload() poate fi:

  1. Repetați complet structura tabelului documentelor, păstrând toate informațiile posibile;
  2. Definiți numai acele coloane și rânduri care sunt necesare pentru munca in continuare, și scoate-le afară.

Acțiunea inversă (completarea secțiunii tabelare) este efectuată prin metoda Load(), singurul parametru al căruia este numele tabelului de ieșire.

Trebuie remarcat faptul că compararea coloanelor părții tabelare și a TK are loc după nume.

Puteți copia complet un TK în altul, precum și să determinați ce rânduri și coloane vor fi transferate folosind metoda Copiere ().

Fig.4

În acest caz, coloanele tabelului vor fi salvate, iar informațiile și rândurile din duplicat vor fi șterse.

Tabel de valori și interogare

După cum am menționat mai sus, rezultatul unei interogări este descărcat în specificația tehnică, dar destul de des dezvoltatorii au o întrebare: cum să proceseze un tabel de valori cu o interogare, este posibil și ce cod ajută la acest lucru.

Tehnologia de interogare în 1C nu implică utilizarea TK ca surse de date, dar această limitare poate fi ocolită cu ușurință folosind . Codul din Figura 5 arată cum se face acest lucru.

Fig.5

Prin înlocuirea „*” cu numele coloanelor (un șir de tip TK.Nomenclature), puteți reduce cantitatea de informații încărcate.

Eroare la executarea cererii (Fig. 5) „Tipul nu poate fi procesat în cerere”, indică faptul că dezvoltatorul a uitat să execute o parte din codul din Fig. 2 și nu a tastat coloanele.

Tabel de valori și cicluri

Când iterați peste rândurile unui tabel de valori folosind metoda care conține un contor (Fig. 6), este important să ne amintim că valoarea inițială a indexului rândului este 0, iar valoarea finală a iteratorului trebuie să fie 1 mai mic decât numărul de rânduri din tabel. În caz contrar, există o șansă de 100% pentru o eroare „Valoarea indexului în afara intervalului”.

Fig.6

În general, este mai bine să enumerați liniile TK prin construcția „Pentru fiecare ... de la”, definind numele iteratorului.

Salutări tuturor cititorilor Infostart. Acest articol va fi dedicat problemei creării unui tabel arbitrar de valori sub forma unei aplicații gestionate în mod programatic.

Caracteristicile sarcinii.

Toți cei care au programat într-o aplicație obișnuită s-au confruntat adesea cu sarcina de a obține un tabel arbitrar de valori pe un formular. Un tabel arbitrar de valori este înțeles ca un tabel, al cărui număr și tip de coloane nu sunt cunoscute în prealabil. Adică pot fi 3 coloane, sau poate 6, sau poate 8. Într-o aplicație normală, totul este simplu: puteți plasa elementul „Tabel de valori” pe formularul de procesare și apoi transferați programatic tabelul de valori creat. ​\u200b\u200bla acest element. Apoi cu o comandă simplă:

FormElements.TableField.CreateColumns();

pentru a primi tabelul de valori gata pe formular. S-ar părea că ar putea fi mai ușor.

Totul a fost într-o aplicație normală. Lucrurile s-au schimbat într-o aplicație gestionată. Deci nu poate fi creat doar un tabel arbitrar. Acum trebuie fie să parametrizați rigid tabelul de valori pe formular, fie să îl creați programatic (pentru a descrie, ei bine, aceasta este, de fapt, esența aplicației gestionate în sine). Iată ce vom încerca să facem: instrumente software creați un tabel arbitrar de valori pe un formular gestionat.

Rezolvarea problemei.

Primul lucru pe care trebuie să-l facem este să stabilim cum va apărea tabelul pe formular. Principalul lucru este că nu trebuie să creați niciun element de formular în procesare. Îl vom crea programatic, ca întregul tabel. Adică, tabelul va fi descris și creat în momentul deschiderii formularului sau cu ajutorul unui buton - așa aveți nevoie.

Crearea unui tabel pe formular are loc prin descrierea tabelului de valori ca atribut:
ArrayChoiceType = Matrice nouă; ArrayChoiceType.Add(Type("ValueTable")); ChoiceTypeDescription = New ChoiceTypeDescription(ChoiceTypeArray); ArrayAttributes = Matrice nouă; ArrayAttributes.Add(New FormAttribute("ScheduleTable", ChoiceTypeDescription, "", "TRN")); Acum trebuie să creăm un tabel cu valori programatice care conține datele. Dacă tabelul de valori este obținut dintr-o interogare, atunci totul este mai mult sau mai puțin în ordine. Dacă tabelul este creat manual, atunci valoarea coloanelor care vor conține numere sau date poate fi creată prin „Descrierea tipurilor”. Linia de jos este că coloanele din tabelul de valori trebuie să aibă un anumit tip. Dacă, de exemplu, se presupune că utilizatorul va completa datele din aceste coloane în mod interactiv, atunci nu puteți adăuga o coloană de tabel de valori cu un nume simplu, aceasta trebuie să aibă un tip. Rețineți - acest lucru este foarte important. vom transfera aceste tipuri în tabelul din formular.
Creați un tabel care conține mai multe coloane:
CD = New DateQualifiers(DateParts.Time); ArrayCD = matrice nouă; ArrayKD.Add(Tip(„Data”)); TypeDescriptionTime = New TypeDescription(ArrayKD,KD); TK = New ValueTable;
TK.Columns.Add(„De la”, TypeDescriptionTime);
TK.Columns.Add(„Înainte”, TypeDescriptionTime);
TK.Columns.Add(„Nume”);
TK.Columns.Add("Notă");//Nume și Notă - șiruri În continuare, vom completa tabelul nostru de programe TK cu datele necesare. Obținem un tabel TK care conține valorile necesare și este gata pentru a fi transferat la atributul formular creat. Pentru fiecare coloană din TK.Column Loop

ArrayAttributes.Add(New FormAttribute(Column.Name, Column.ValueType,"ScheduleTable"));
EndCycle;
ChangeAttributes(ArrayAttributes);
SelectionFieldTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = DisplayTable.List;

Iată o combinație atât de simplă și masa noastră este gata.

Pentru fiecare coloană din TK.Column Loop

NewElement = Elements.Add(Column.Name, Type("FormField"), ChoiceFieldTable);
NewItem.View = FormFieldView.InputField;
NewItem.DataPath = "ScheduleTable." + Coloană.Nume;
NewElement.Width = 10;
EndCycle;

Proiectare condiționată, dacă avem nevoie, scriem și manual, meniul de comandă - manual. De asemenea, manevrele de masă sunt scrise de mână. De exemplu, pentru a adăuga un handler de evenimente pentru tabelul „Alegere”:

ChoiceFieldTable.SetAction("Choice","TCChoice");

Pentru a gestiona acest eveniment sub forma unei proceduri, este scrisă o procedură separată:

&AtClient
Procedura TSNSelect(TK, SelectedRow, Field, StandardProcessing)
//comenzile handlerului EndProcedure

Rețineți că handler-urile de tabelă se declanșează pe client și, prin urmare, trebuie să aibă o comandă de indicator al compilatorului

&AtClient

Ei bine, ultimul lucru pe care am vrut să-l adaug este că, după toate aceste acțiuni, nu trebuie să uităm să transferăm tabelul finit în atributul formular:

ValueVFormAttribute(TK, „Tabel de planificare”);

Iată ce avem ca rezultat:


Și aici este gestionarea evenimentului „Select”:



Postfaţă.

Sper că articolul îi va ajuta pe acei programatori 1C care încep să creeze tabelele pe formular în mod programatic.

Puteți descărca o procesare care creează în mod programatic un tabel de valori și rezultate într-un formular gestionat cu comentarii pentru a vă ajuta să vă creați tabelele.

Iată un mic fapt pentru a începe - exemple simple lucrați cu un tabel de valori:

1. Creați un tabel de valori

ValueTable = Nou ValueTable;


2. Creați coloane ale tabelului de valori:

ValueTable.Columns.Add(„Nume”);
ValueTable.Columns.Add(„Nume”);


3. Adăugați rânduri noi folosind numele coloanelor:


NewString.Name = "Vasily";
NewRow.LastName = „Cătecel”;


4. Cum să căutați o valoare în tabelul de valori:
Este necesar să găsiți un rând de tabel care să conțină valoarea dorită.

FoundString = ValueTable.Find(LookupValue);


5. Găsiți prima apariție în anumite coloane ale unui tabel de valori

FoundString = ValueTable.Find(LookupValue, „Furnizor, Cumpărător”);


6. Dacă trebuie să găsiți toate aparițiile în tabelul de valori:
Folosim structura de căutare.

SearchStructure = Structure(„Angajat”, LookupValue);
ArrayFoundStrings = ValueTable.FindStrings(SearchStructure);


Să creăm o structură de căutare, fiecare element al căruia va conține numele coloanei ca cheie și valoarea căutată în această coloană ca valoare. Trecem Structura de căutare ca parametru la metoda FindStrings(). Ca rezultat, obținem rândurile tabelului.
Dacă adăugăm căutarea pentru valoarea dorită în structura de căutare, de exemplu, tot în coloana Responsabil, atunci ca urmare a aplicării metodei FindRows(), vom obține toate rândurile în care atât Employee, cât și Responsible sunt egale cu valoarea dorită. valoare.

7. Cum să parcurgeți un tabel de valori în ordine aleatorie

Pentru fiecare CurrentRow din bucla ValueTable
Raport (CurrentLine.Name);
EndCycle;

Faceți același lucru folosind indecși:

SeniorIndex = ValueTable.Count() - 1;
Pentru MF = 0 prin ciclul SeniorIndex
Raport(ValueTable[Count].Name);
EndCycle;


8. Ștergerea unui rând de tabel cu valori existente

ValueTable.Delete(RemoveRow);

prin index

ValueTable.Delete(0);


9. Ștergerea unei coloane existente din tabelul de valori

ValueTable.Columns.Delete(RemoveColumn);


prin index

ValueTable.Columns.Delete(0);

Trebuie avut în vedere că ștergerea unui rând (sau a unei coloane) „din mijlocul” tabelului de valori va duce la o scădere cu unul dintre indicii rândurilor care au fost „după” șters.

10. Cum se completează tabelul de valori dacă numele coloanelor sunt conținute în variabile?

NewRow = ValueTable.Add();
NewRow[ColumnName] = Valoare;


11. Cum să umpleți întreaga coloană a tabelului de valori cu valoarea dorită?
Coloana FiscalAccounting Flag din tabelul de valori din Tabelul de valori trebuie completată cu valoarea False

ValueTable.FillValue(False, „Stavilul de contabilitate fiscală”);


Folosim metoda FillValues() pentru tabelul de valori. Primul parametru este valoarea de completat. Al doilea parametru este numele coloanei completate.

12. Cum se completează tabelul de valori „TableRecipient” cu datele din tabelul de valori „SourceTable”?

Dacă tabelul receptor nu există încă în momentul operației sau nu trebuie să fie salvate coloanele sale anterioare, îl puteți crea ca o copie completă a originalului

TableReceiver = TableOriginal.Copy();


Opțiunea a doua: tabelul TableReceiver există și este păcat să-și piardă coloanele și restricțiile privind tipurile de date de coloane. Dar trebuie să completați datele pentru coloanele ale căror nume se potrivesc cu numele tabelului sursă.

Transfer parțial de date pentru coloanele cu nume care se potrivesc:

Pentru fiecare rând de SourceTable din SourceTable Loop
FillPropertyValues(NewString, SourceTableString);
EndCycle


Pentru fiecare rând al tabelului sursă, se adaugă un nou rând în tabelul de destinație, iar valorile sunt completate în acele coloane din noul tabel ale căror nume se potrivesc cu numele coloanelor din tabelul sursă.

Dacă tabelele nu au coloane cu același nume, tabelul de destinație se va termina cu atâtea rânduri cu valori nule câte rânduri au existat în tabelul sursă.
Dacă pentru unele coloane cu același nume tipul de valoare a datelor din tabelul sursă nu se încadrează în matricea de tipuri permise ale coloanei din tabelul de destinație, vom obține valori goale în astfel de câmpuri.
Să luăm în considerare al treilea caz. În cazul coloanelor cu același nume, coloana tabelului de destinație trebuie adusă în deplină conformitate cu coloana tabelului sursă.

Copie completă a datelor pentru coloanele cu nume care se potrivesc

SimilarColumns = New Array();

Pentru fiecare coloană din SourceTable.Columns Loop
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

Dacă MatchedColumn<>Nedefinit Atunci

// Obține proprietățile coloanei.
Nume = Coloană.Nume;
ValueType = Column.ValueType;
Titlu = Column.Title;
Latime = Column.Width;

// Înlocuiește coloanele din tabelul de destinație.
Index = TableReceiver.Columns.Index(CoincidentColumn);

TableReceiver.Columns.Delete(Index);
TableReceiver.Columns.Insert(Index, Name, ValueType, Title, Width);

// Adăugați următorul nume al coloanelor care se potrivesc în matrice.
Same-nameColumns.Add(Column.Name);

EndIf;

EndCycle;

// Buclă prin rândurile tabelului sursă.
Pentru fiecare rând de SourceTable din SourceTable Loop

// Adăuga linie nouă la tabelul de destinație.
NewString = TableReceiver.Add();

// Completați valorile în celulele care se potrivesc.
Pentru fiecare buclă NameColumns Of Same NameColumns
NewString[ColumnName] = SourceTableString[ColumnName];

EndCycle;

EndCycle;


Va trebui să înlocuim coloana din tabelul de destinație cu una nouă, ale cărei proprietăți se vor potrivi pe deplin cu coloana tabelului sursă.
Prin urmare, dacă în tabelul destinatar se găsește o coloană cu același nume, colectăm în variabile toate proprietățile pentru noua coloană. Apoi, ștergeți-l pe cel vechi și creați o coloană nouă. Apoi parcurgem rândurile tabelului sursă.
În buclă, adăugăm un nou rând la tabelul destinatar și deschidem o buclă prin numele coloanelor din matricea de coloane potrivite.
În interiorul acestei bucle imbricate, umplem celulele tabelului destinatar cu datele celulei tabelului sursă.

13. Cum să adăugați coloane la tabelul de valori „Tabelul de valori” cu restricții de tip?

Când adăugați o coloană, puteți specifica pur și simplu numele acesteia și nu atingeți al doilea parametru al metodei Add(). În acest caz, tipul de date al coloanei este arbitrar.

Adăugarea unei coloane fără a specifica un tip de date

// Adăugați o coloană fără restricții de tip.
ValueTable.Columns.Add(„Obiect”);


Puteți completa valoarea celui de-al doilea parametru. Este necesar să treceți o descriere de tipul permis pentru coloana acolo. Descrierea în sine poate fi obținută folosind constructorul, pasând numele șirului tipului ca parametru (dacă sunt multe tipuri, apoi separate prin virgule) sau o matrice de tipuri valide.

Adăugarea unei coloane care specifică tipul de date

// Restricții privind tipurile de date coloane:
// Numai elemente din directorul „Contractanti”.
ValueTable.Columns.Add(„Cont”, New TypeDescription(„ReferenceReference.Accounts”));


Dacă există un șir printre tipurile permise pentru completarea datelor coloanei, puteți limita adâncimea de biți (lungimea) acestuia, puteți specifica utilizarea unei lungimi variabile sau fixe. Toate acestea sunt furnizate prin crearea unui obiect folosind constructorul StringQualifiers. În plus, acest obiect va fi folosit ca unul dintre parametrii constructorului TypeDescription.

Utilizarea calificatorilor pentru a specifica tipul de date al unei coloane de tabel de valori

// Pregătiți și setați limite pentru datele de tip String.
String Qualifiers = New String Qualifiers (20, ValidLength.Variable);
AllowedTypes = NewTypeDescription("String",StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Puteți face același lucru pentru calificativele de număr și dată.
Vă rugăm să rețineți: descrierea tipului poate fi construită de constructor atât „de la zero”, și puteți utiliza o descriere a tipului existentă ca bază

Utilizarea declarațiilor de tip existente pentru a specifica tipul de date al unei coloane de tabel de valori

// Extinderea descrierii de tipuri utilizate anterior.
Număr de calificare = New Number Qualifiers (10, 2, ValidSign.Non-negative);
DateQualifiers = New DateQualifiers(DateParts.Date);
ExtendedValidTypes = NewTypeDescription(ValidTypes, „Număr, dată”,NumberQualifiers,DateQualifiers);

ValueTable.Columns.Add(„Notă”, ExtendedAllowedTypes);

tabelul de valori 1C

Tabelul valorilor 1C utilizate pentru stocarea și prelucrarea datelor. Cu un număr mare de rânduri, viteza de recuperare a datelor scade brusc. Mulți programatori subestimează importanța utilizării indicilor atunci când caută informații într-un tabel de valori. Intenționez să vă arăt că utilizarea indexurilor accelerează lucrul cu TK ( tabelul de valori 1C) inainte de 100 de ori.

Deci, pentru testare, am creat un mic cod care funcționează așa.

  • 20 de mii de rânduri sunt extrase din partea tabelară a documentului „Implementare” în tabelul de valori. Se numește T1.
  • Am făcut o copie a aceluiași tabel de valori, al doilea tabel, numit T2. Deci, avem 2 tabele de valori, T1 și T2, fiecare cu 20 de mii de rânduri.
  • Apoi, într-o buclă de la 1 la 5, facem cinci treceri. Pasajul este următorul:
  • Bucla (care este imbricată în bucla de la 1 la 5) trece prin toate rândurile tabelului de valori T1, toate cele 20 de mii de rânduri.
  • Pentru fiecare rând curent al lui T1, extragem valoarea din coloana „Sumă” din tabelul cu valorile T1 - acesta este un număr.
  • Căutăm un rând în tabelul de valori T2 care conține același număr în coloana „Sumă” care a fost extras în pasul anterior.
  • Măsurăm timpul fiecărei treceri în milisecunde și îl afișăm pe ecran.

Cu alte cuvinte, parcurgând toate rândurile unui tabel de valori 1C și amintindu-ne valoarea coloanei „Sumă”, căutăm un rând cu aceeași cantitate într-un alt tabel de valori. Se folosește metoda tabelului de valori „Găsiți”. Într-o singură trecere, operațiunea de căutare este efectuată de 20 de mii de ori. Sunt doar cinci treceri. Ele sunt necesare pentru media rezultatelor experimentului.

Mai jos puteți vedea un tabel cu rezultatele testelor. A doua coloană arată timpul de execuție al fiecăreia dintre cele cinci treceri într-o rulare normală, neoptimizată, iar sub coloană este timpul total de execuție a testului, egal cu 279641 milisecunde sau aproximativ 279 de secunde. A treia coloană arată timpul de execuție al aceluiași test, dar cu o opțiune de căutare optimizată, folosind indicele din tabelul de valori. Pentru claritate, am adăugat la tabel timpul petrecut cu crearea indexului (prima linie de sub titlu), este foarte mic, doar 0,047 secunde. Timpul total de execuție a testului în a doua variantă este de 2781 milisecunde sau 2,78 secunde.

Deci, în prima variantă avem - 279 secunde, în varianta a doua - 2,78 secunde. Diferența de 100 de ori! Mai mult, o astfel de accelerare se realizează prin adăugarea unei singure linii de cod!

Timp de execuție, milisecunde
numărul testului 1 varianta, normala Opțiunea 2 este cea mai bună
timpul pentru a crea index - 47
1 46531 563
2 55516 547
3 60969 531
4 58688 562
5 57937 531
Timpul final 279641 2781
Accelerație pe timp: 100,5541172

Iată exemplul de cod complet:

Procedura KnIndexValueTablePress(Articol) // creează o interogare pentru a prelua date Solicitare = Solicitare nouă; Cerere. Text = „SELECT FIRST 20000 | RealizationItems.Reference, | RealizationItems.LineNumber, | RealizationItems.Quantity, | RealizationItems.Amount, | RealizationItems.Item |FROM | Document.Realization.Goods AS RealizationGoods"; // pune datele selectate în tabelul de valori T1 T1 = Solicitare. A executa(). Descărcați() ; // creează un tabel de valori T2 prin copierea conținutului tabelului de valori T1 T2 = T1. Copie() ; AddIndexStart = GetTimeInMilliseconds() ; T2. Indici. Adaugă(„Suma”); // ACEASTA ESTE CEA MAI IMPORTANTĂ LINIE, ADĂUGÂND UN INDEX PE COLONA „SUMĂ” AddIndexCon = GetTimeInMilliseconds() ; A raporta ( „Este timpul să adăugați index”+ (EndIndexAddition - StartIndexAddition) + "ms" ); A raporta ( „Total rânduri în tabelul nostru de valori: „+ T2. Cantitate() ) ; // organizăm un ciclu de cinci treceri, de fapt - rulăm testul de cinci ori Pentru Count = 1 To 5 Loop Start = GetTimeInMilliseconds() ; // amintește-ți ora de începere FoundTimes = 0; Pentru fiecare pagină din ciclul T1 // parcurge toate rândurile tabelului T1 HandlingUserInterrupt() ; // caută un rând în tabelul T2, în care se află coloana „Suma”. // se potrivește cu valoarea curentă „Suma” a tabelului T1 FoundString = T2. Găsiți (P. Sum, "Sum" ); // Dacă potrivirea este fixă ​​(șir găsit), incrementați contorul șirurilor găsite Dacă FoundString<>Nedefinit Apoi FoundTimes = FoundTimes + 1 ; EndIf ; EndCycle ; // obține ora de încheiere a ciclului de iterare peste rândurile tabelului T1 Sfârșit = GetTimeInMilliseconds() ; // raportează numărul de trecere a testului, numărul de potriviri găsite și timpul de execuție în milisecunde Raport („Număr permis” + SCH); Raport ("Ore găsite:" + Orele găsite); A raporta ( "Perioada de graţie "+ String (End-Start) + "milisecunde"); EndCycle ; // plec pentru a face următoarea trecere EndProcedure


Exemplul este comentat și ar trebui să fie clar. Principalul lucru este în linie T2.Indici.Add(„Suma”); Informam 1C că vom efectua o operațiune de căutare în coloana „Sumă” din tabelul de valori T1 și solicităm crearea unui index pe această coloană. Sistemul creează un index, iar apoi pentru toate operațiunile de căutare pe coloana „Suma” îl folosește automat. De remarcat că indexul creat este valabil doar pentru căutarea în coloana „Sumă”, întrucât a fost creat pentru această coloană. Dacă avem nevoie de alte coloane pentru căutare, ar trebui să creăm indecșii corespunzători, specificând numele coloanelor dorite.

Putem crea mai mulți indici pentru un tabel dacă vom căuta valori pentru diferite coloane. Indicii sunt stocați în colecția de indici din tabelul de valori 1C, care decurge din cod: TK.Indexes.Add(ColumnName)

Dacă trebuie să căutăm după o combinație de valori ale coloanei, de exemplu, simultan după coloanele „Suma” și „Suma”, ar trebui să creăm un index compus: T2.Indici.Add(„Cantitate, Sumă”) Un astfel de index va fi folosit atunci când căutăm o valoare în tabel folosind metoda „FindRows()”. De exemplu:

Array of Found Rows = T2 Găsiți rânduri (nouă structură ("Cantitate, Sumă", Cantitate căutată, Sumă căutată));

folosit în textul exemplu.
Cu stimă, Degtyarev Roman.

Cum să înveți să programezi în 1C de la zero?

Cum să lucrezi ca programator 1C și să obții până la 150.000 de ruble pe lună?

ÎNREGISTREAZĂ-TE GRATUIT

CURS DE 2 SĂPTĂMINI

„PROGRAMARE în 1C PENTRU ÎNCEPĂTORI”

Cursul va veni la e-mail. Deveniți un programator completând sarcini pas cu pas.

Tot ce aveți nevoie pentru a participa este un computer și internet.

Acces gratuit la curs:

sp-force-hide ( display: none;).sp-form ( display: block; background: #eff2f4; padding: 5px; width: 270px; max-width: 100%; border-radius: 0px; -moz-border -radius: 0px; -webkit-border-radius: 0px; font-family: Arial, "Helvetica Neue", sans-serif; background-repeat: nu-repeat; fundal-poziție: centru; fundal-dimensiune: automat;) .sp-form input (afișare: inline-block; opacitate: 1; vizibilitate: vizibil;).sp-form .sp-form-fields-wrapper (marja: 0 auto; lățime: 260px;).sp-form .sp -form-control ( fundal: #ffffff; chenar-culoare: #cccccc; chenar-stil: solid; chenar-lățime: 1px; font-size: 15px; padding-left: 8.75px; padding-right: 8.75px; chenar -radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; înălțime: 35px; lățime: 100%;).sp-form .sp-field etichetă (culoare: #444444; font- dimensiune: 13px; stil font: normal; greutate font: bold;).sp-form .sp-button ( chenar-rază: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; culoare de fundal: #f4394c; culoare: #ffffff; lățime: 100%; font-weig ht: 700; stil font: normal familie de fonturi: Arial, "Helvetica Neue", sans-serif; cutie-umbră: niciuna -moz-box-shadow: niciuna; -webkit-box-shadow: niciuna; fundal: gradient liniar (în sus, #e30d22 , #f77380);).sp-form .sp-button-container ( text-align: center; lățime: automat;)

Tabelul de valori din platforma 1C 8.3 (8.2) este o colecție universală de valori pe care un dezvoltator o poate folosi atunci când dezvoltare de software pentru a-și implementa algoritmii. De fapt, tabelul de valori 1C este un set dinamic de valori care au coloane și coloane.

Articole despre alte colecții universale de valori în 1C

Învățați programarea în 1C într-un loc din cartea mea „Programați în 1C în 11 pași”

  1. Cartea este scrisă într-un mod de înțeles și limbaj simplu- pentru un incepator.
  2. Învață să înțelegi arhitectura 1C;
  3. Veți începe să scrieți cod în limbajul 1C;
  4. Stăpânește tehnicile de bază de programare;
  5. Consolidează cunoștințele dobândite cu ajutorul unui caiet de sarcini;

Un ghid excelent pentru dezvoltarea într-o aplicație gestionată 1C, atât pentru dezvoltatori începători, cât și pentru programatori experimentați.

  1. Un limbaj foarte accesibil și ușor de înțeles
  2. Cartea se trimite pe email la format PDF. Poate fi deschis pe orice dispozitiv!
  3. Înțelegeți ideologia unei aplicații gestionate 1C
  4. Aflați cum să dezvoltați o aplicație gestionată;
  5. Învață să proiectezi formulare gestionate 1C;
  6. Veți putea lucra cu elementele de bază și necesare ale formularelor gestionate
  7. Programarea în cadrul unei aplicații gestionate va deveni clară

Cod promoțional pentru o reducere de 15% - 48PVXHeYu


Dacă această lecție v-a ajutat să rezolvați orice problemă, v-a plăcut sau a fost utilă, atunci puteți susține proiectul meu transferând orice sumă:

se poate plati manual:

Yandex.Bani — 410012882996301
Web Money - R955262494655

Alăturați-vă grupurilor mele.



Se încarcă...
Top