Configurarea unei liste dinamice 1s 8.3

Pe lângă tipurile de date primitive care pot fi găsite în orice limbaj de programare, există tipuri unice în 1C. Fiecare dintre ele are propriile sale proprietăți, metode, funcții, scop și nuanțe de utilizare în sistem. Unul dintre aceste tipuri este o listă dinamică, care simplifică foarte mult multe sarcini aplicate. De aceea, dezvoltatorii ar trebui să cunoască și să fie capabili să se ocupe de acest instrument versatil.

Caracteristicile listelor dinamice în 1C

Scopul acestui tip este de a afișa informații din orice tabele de bază de date, indiferent de tipul acesteia. Mecanismul a fost creat pe baza SKD și are capacități similare. Dar asta nu înseamnă că va trebui cu siguranță să scrieți o interogare în limbajul 1C, deși această posibilitate există și trebuie să o utilizați. Puteți specifica pur și simplu tabelul, informațiile din care sunteți interesat, iar 1C va genera independent o interogare simplă.

Pentru a vedea cum se formează o listă dinamică și ce date arată, trebuie să deschideți formulare gestionate, unde se află, în configurator: în lista de detalii, deschideți proprietățile acesteia prin meniul contextual și acordați atenție opțiunii „Personalizat”. Solicitare" articol. Dacă nu există nicio casetă de selectare, atunci parametrul „Main table” reflectă tabelul bazei de date din care sunt preluate datele. În caz contrar, lista dinamică reflectă datele de interogare personalizate, care pot fi văzute prin deschiderea setării listei.

O schemă de interogare arbitrară este mult mai frecvent utilizată, deoarece oferă o oportunitate excelentă de a combina și afișa o mare varietate de date. Cel mai adesea, acest mecanism este utilizat pentru a reflecta soldurile stocurilor, prețurile articolelor, veniturile, cheltuielile sau achizițiile. Trebuie să îl utilizați cu atenție, deoarece performanța poate scădea în cazul interogărilor complexe.

O altă proprietate utilă a listei dinamice este deschisă făcând clic pe inscripția „Setări listă”. Acest meniu permite, chiar și atunci când se utilizează un set standard de câmpuri, să facă informațiile mai accesibile și mai ușor de înțeles pentru utilizatorii finali. Indiferent dacă este o solicitare arbitrară sau nu, veți vedea o filă „Setări” unde puteți specifica:

  • Selectarea unei liste dinamice;
  • grupari;
  • triere;
  • Decor.

Utilizarea parametrilor face listele dinamice destul de versatile și flexibile. De asemenea, le puteți lega de elemente de recuzită într-un formular gestionat, iar datele se vor schimba în funcție de opțiunile selectate de utilizator. Utilizarea acestor mecanisme poate fi înțeleasă și apreciată analizând exemple de probleme din lumea reală.

Ca exemplu, luați în considerare problema reflectării rămășițelor nomenclaturii pe o formă gestionată. În practica reală, astfel de comenzi sunt destul de comune în diverse configurații, iar lista dinamică este ideală ca instrument. Pentru această sarcină, va trebui să folosim o interogare arbitrară, parametrii listei dinamice și setările acesteia.

Pentru o mai mare claritate, să creăm o procesare externă separată și să plasăm o listă dinamică pe ea. Pentru a ne implementa planurile, vor exista puține tabele cu nomenclatură, așa că trebuie să permitem o solicitare arbitrară. În acesta, vom descrie conexiunea din stânga a cărții de referință cu lista de nomenclatură și registrul reziduurilor și vom stabili cartea de referință ca tabel principal. O astfel de schemă va permite utilizatorilor, în timp ce lucrează cu o listă dinamică, să adauge sau să modifice nomenclatura.



SELECT NomenclatureList.Description AS Nume, GoodsInWarehouseRemains.Warehouse AS Warehouse, GoodsInWarehousesRemains.QuantityRemaining AS CantitateRemainder FROM Directory.Nomenclature AS NomenclatureList LEFT JOIN Registrul de acumulare.GoodsInWarehouses.RemainsRemainsInWarehouses.RemainsSoftware-ul GoodsInWarehouses. .Reference = GoodsInWarehousesRemains.Nomenclature WHERE

Deoarece parametrul CurrentDate a fost folosit în cererea noastră, trebuie să îi setăm valoarea înainte de a utiliza procesarea. Pentru a face acest lucru, în modulul de formular din procedura „On CreationOnServer” printr-o comandă standard, atribuiți-i funcția „CurrentSessionDate” cu o comandă standard. De asemenea, trebuie să afișăm o listă dinamică pe formularul de control și să schimbăm ordinea câmpurilor pentru claritate. Trageți elementele de recuzită „Nomenclature Remains” în elementele formularului (stânga sus) și utilizați săgețile albastre pentru a schimba ordinea câmpurilor din tabelul din formular.

&La Procedura Server La CreareLa Server(Eșec, Procesare Standard) Nomenclatura rămâne.Parameters.SetParameterValue("CurrentDate",CurrentSessionDate()) EndProcedure


Deja în această etapă, putem deschide procesarea noastră externă în 1C și să vedem că lista dinamică funcționează. Putem să ne uităm la solduri, să creăm nomenclatură și grupuri și să căutăm. Adesea, clienții solicită să adauge posibilitatea de a alege data pentru care vor vedea soldul. În cazul unui formular cu o listă dinamică, aceasta este furnizată de un câmp suplimentar și de setarea parametrilor folosindu-l.

Adăugăm atributul „Data rămasă” de tipul „Data” și îl transferăm în elementele formularului. În evenimentele de câmp, creăm un eveniment „OnChange” și scriem codul pentru setarea parametrului „CurrentDate” utilizat în interogarea dinamică. Pentru ca la deschiderea formularului, utilizatorul să înțeleagă imediat la ce dată vede soldurile, vom face mici modificări în procedura OnCreateOnServer.



&OnServerProcedureOnCreateOnServer(Eșec, StandardProcessing)RemainsDate = CurrentSessionDate(); Nomenclatură Remains.Parameters.SetParameterValue("CurrentDate", RemainsDate); Sfârșitul procedurii &La procedura client RemainsDateOnChange(Element) Item Remains.Parameters.SetParameterValue("CurrentDate",RemainsDate); EndProcedure

Ca rezultat, formularul nostru Dynamic List poate afișa solduri pentru orice dată.

Am acoperit doar o mică parte din posibilitățile acestui set de instrumente, dar acest lucru este deja suficient pentru a înțelege comoditatea acestui tip de listă dinamică. Un mecanism similar este utilizat pentru multe sarcini, dar cel mai adesea se găsește în configurații tipice în forme gestionate:

  1. selecţie;
  2. Liste.

Pentru a obține o listă dinamică și cererea acesteia în forme tipice gestionate, dezvoltatorul trebuie să deschidă formularul necesar în configurator. În secțiunea Atribute, găsiți atributul cu tipul de date „DynamicList” (cel mai adesea este îngroșat). Proprietățile sale conțin textul solicitării, selecții și alte setări.

În cele din urmă, visul oricărui „șapte jucători” s-a împlinit. Cât de des utilizatorii programului 7.7 au cerut să facă o selecție normală de articole. Astfel încât să puteți vedea soldurile, prețurile și să setați filtre. A trebuit să vin cu diverse trucuri, până la scrierea componentelor externe. În 1C 8.2, au apărut liste dinamice. Propun să luăm în considerare ce este și ce ne pot oferi în 1C 8.3.

Să luăm ca bază o anumită configurație de test 1C: „Enterprise Accounting 3.0”. Nu vom face o selecție acum, doar adăugați un alt formular de selecție în cartea de referință „Nomenclatură” și faceți-l temporar principal:

Când este creat, sistemul va adăuga implicit un câmp de tabel cu tipul „Lista dinamică” la formular.

Să mergem la proprietățile sale și să vedem ce este acolo.

În primul rând, ne interesează caseta de selectare „Cerere arbitrară”. El este cel care ne va dezvălui toate avantajele unei liste dinamice. Vom avea posibilitatea de a scrie propria noastră interogare, și cu parametri. Bifați caseta și faceți clic pe linkul „Deschidere”:

Se va deschide o fereastră cu un cod gata făcut pentru . Până acum, toate câmpurile directorului „Nomenclatură” sunt pur și simplu enumerate acolo.

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

După cum puteți vedea, există un buton de apel „” și o casetă de selectare care vă permite să schimbați dinamic conținutul listei. Adică, atunci când un alt utilizator modifică ceva în director, se va schimba și în lista noastră. În plus, există o filă Setări, dar o vom atinge mai târziu.

Interogare personalizată în lista dinamică

Mai întâi, să creăm interogarea de care avem nevoie cu solduri și prețuri. Ca asta:

fila Setări

Și acum cel mai delicios! Accesați fila „Setări”. Și vedem imediat că în prima filă putem face orice selecție pentru orice câmp din cerere:

Setarea programatică a parametrilor de interogare într-o listă dinamică 1C 8.3

Nu uitați că avem doi parametri în cerere: „Perioada” și „Tipul prețului”. Trebuie să le transmitem la cerere, altfel va apărea o eroare.

Să scriem acești parametri în parametrii formularului și să adăugăm următoarele linii în modulul formular:

&OnServerProcedure Lista OnCreateOnServer(Eșec, Procesare standard). Opțiuni. SetParameterValue("Perioada", Parametri. Data) ; Listă. Opțiuni. SetParameterValue("PriceType" , Parameters.PriceType) ; EndProcedure

Imprimare (Ctrl+P)

lista dinamica

1. Informații generale

O listă dinamică este un tip de date special care vă permite să afișați informații arbitrare din tabelele bazei de date într-un formular. Pentru a face acest lucru, trebuie să specificați tabelul, datele din care doriți să afișați sau să descrieți selecția rezultată în limbajul de interogare.
Mecanismul se bazează pe un sistem de compunere a datelor și oferă opțiuni pentru sortarea, selectarea, căutarea, gruparea și procesarea condiționată a datelor primite. În acest caz, sursa de date este o solicitare care este fie generată automat de sistem (pe baza datelor specificate), fie scrisă manual de dezvoltator.

Orez. 1. Opțiuni pentru crearea unei liste dinamice

La crearea unui atribut de formular de tip DynamicList Dezvoltatorul poate alege două moduri de a interoga datele:
● Prin specificarea tabelului principal – în acest caz, este suficient doar să specificați tabelul (proprietatea tabelului principal) din care doriți să obțineți date, iar sistemul va genera automat o interogare la date (vezi partea dreaptă din Fig. .1).
● Generarea manuală a unei cereri – pentru a face acest lucru, trebuie să setați proprietatea Custom request (a se vedea partea stângă a Fig. 1). După aceea, va fi disponibilă generarea manuală a unei cereri pentru obținerea datelor din baza de informații.
Cu o interogare, puteți selecta date din mai multe tabele, astfel încât să puteți specifica un tabel principal. Acest lucru este necesar pentru ca lista dinamică să poată determina care date sunt primare și care sunt secundare și să poată selecta și afișa corect informații, precum și să ofere comenzi standard. Cu toate acestea, dacă este imposibil să determinați tabelul principal în interogare, atunci acesta poate fi omis, dar apoi
lista dinamică nu va furniza comenzi legate de tabelul de bază. În plus, în acest caz (fără a specifica tabelul principal), eficiența obținerii datelor printr-o listă dinamică va fi redusă semnificativ.
Pentru a îmbunătăți performanța, se recomandă ca toate îmbinările care sunt utilizate într-o interogare arbitrară doar pentru a prelua date suplimentare să fie opționale prin utilizarea unei extensii de limbaj de interogare a sistemului de compunere a datelor.
Pentru o listă dinamică, care este atributul principal al formularului, este posibil să setați valorile de selecție folosind parametrul formularului Selecţie. Pentru a face acest lucru, este necesar ca numele proprietății structurii, care se află în parametru Selecţie,
corespundea cu numele câmpului de selecție a listei dinamice. În acest caz, valoarea proprietății structurii va fi setată ca valoare corectă a elementului de selecție. Dacă o matrice, o matrice fixă ​​sau o listă de valori este transmisă ca valoare a unui element din parametrul de selecție din formularul de listă dinamică, atunci la selecție se adaugă o condiție cu opțiunea În listă, în a cărei valoare corectă este plasată lista de valori (în care sunt convertite matricea și matricea fixă).
O interogare arbitrară într-o listă dinamică poate fi o interogare în care un parametru este utilizat pentru a genera valoarea unui câmp, de exemplu:

ALEGE
ALEGERE
WHEN Delivery.Factor = 1 THEN &Submission
ELSE Livrare. Coeficient
END AS Coeficient
DIN

În acest caz, dacă tipul valorii parametrului diferă de tipul atributului obiectului (de exemplu, Recuzită1 are tip Număr, iar valoarea parametrului este tipul Linia), apoi pentru a afișa corect câmpul, trebuie să turnați în mod explicit valoarea parametrului la tipul dorit:

ALEGE
ALEGERE
WHEN Delivery.Factor = 1 THEN EXPRESS(&Reprezentare AS String(100)) ELSE Livrare. Coeficient
END AS Coeficient
DIN
Document.LivrareProduse AS Livrare

Dacă câmpul pe care este setat filtrul este dezactivat folosind opțiuni funcționale, atunci filtrul din acest câmp nu este setat, chiar dacă valoarea filtrului este transmisă ca parametri de formular sau legături ale parametrilor de selecție.
Folosind proprietatea Citire date dinamice, este indicată o listă dinamică pentru a necesita citirea datelor în porțiuni mici
(pentru mai multe detalii despre cum să obțineți date dintr-o listă dinamică și despre cum să memorați datele în cache, vedeți mai jos). Indiferent de această caracteristică, se aplică următoarele condiții:

● Dacă modul de vizualizare este setat pe listă ierarhică, vor fi citite numai datele grupului curent și datele tuturor elementelor părinte (fără elemente copil).
● Dacă modul de vizualizare a arborelui este setat, vor fi citite numai datele nodurilor arborelui deschis.
● Încărcarea unică a datelor din listă dinamică nu este acceptată atunci când este setată o vizualizare ierarhică (proprietatea Afișare este setată la Arboresc) și vizualizarea arborescentă inițială este setată la Expand All Levels. Pentru a obține date, vor fi făcute atâtea solicitări către server câte noduri există în lista afișată.
În cadrul unei singure achiziții de date, o listă dinamică reutiliza tabelele temporare create anterior, sub rezerva următoarelor condiții:
● Nu există interogări după interogarea lotului principal în interogarea lotului de listă.
● Compoziția tabelelor temporare și a câmpurilor acestora nu s-a modificat de la execuția anterioară a interogării lot.

În activitatea sa, lista dinamică utilizează valorile următoarelor proprietăți ale atributelor obiectelor metadate:
● format,
● format de editare,
● indiciu,
● semn de evidențiere a valorilor negative,
● mască,
● semnul modului multilinie,
● semn de editare avansată,
● modul parolă.
La afișarea și editarea selecției și a parametrilor sistemului de compunere a datelor se folosește formatul de editare al câmpului corespunzător.

2. Limitări și caracteristici

Când setați un filtru într-o listă dinamică, rețineți că filtrul nu afectează grupurile dacă modul de afișare pentru lista dinamică este Listă ierarhică sau Arboresc. Prin „grupuri” se înțelege un element al unei cărți de referință sau un plan de tipuri de caracteristici, în care proprietatea ThisGroup este setată la True.
Se aplică filtrele aplicate automat de lista dinamică atributelor standard Proprietar, Părinte, Data, Perioada și AcestGrup
mijloace standard ale sistemului de compunere a datelor. Filtrele aplicate automat printr-o listă dinamică câmpurilor cheie pot fi aplicate atât prin mijloace standard ale sistemului de compunere a datelor, cât și prin adăugarea directă a unei condiții la textul interogării ÎN pe câmpurile mesei principale. Ca urmare a utilizării filtrelor de către instrumentele de layout, acestea pot fi aplicate atât în ​​interogări imbricate, cât și în parametrii tabelului virtual.

Când dezvoltați liste dinamice, este o idee bună să testați toate listele dinamice cu interogări personalizate. În timpul procesului de verificare, trebuie să vă asigurați că, dacă interogarea listă conține interogări imbricate sau tabele virtuale și câmpurile cu alias-uri care se potrivesc cu aliasurile atributelor standard Proprietar, Părinte, Data, Perioada, AcestGrup sau câmpurile cheie sunt disponibile pentru selecție, atunci aceste câmpuri sunt valide se potrivesc cu atributele standard cu care au același alias. Dacă nu este cazul, ar trebui să modificați cererea astfel încât să se potrivească sau
alias este diferit.
Dacă este selectată generarea manuală a interogării, atunci se impun unele restricții asupra interogării:
● Utilizarea clauzei FIRST într-o interogare de listă dinamică nu este acceptată. Dacă este necesar să se utilizeze o selecție într-o listă dinamică care este limitată de numărul de înregistrări, interogarea pentru generarea unei liste dinamice trebuie reluată în așa fel încât conținutul real al interogării să fie plasat într-o subinterogare și să limiteze numărul de înregistrări primite în această subinterogare. De asemenea, puteți utiliza un tabel temporar în loc de o subinterogare.
● Filtrarea, sortarea și gruparea nu sunt acceptate:

  • Conform detaliilor secțiunilor tabelare.
  • Vizualizați câmpuri.
  • Câmpul DataVersion.
  • Câmpul PredefinedDataName.
  • Câmp Tip tabel Planul de conturi.
  • Câmpul MovementType din tabelul de registru de acumulare.
  • Câmp TipValori ale tabelului cu planul de tipuri de caracteristici.
  • Câmp de tip Tip;
  • Câmp de tip String (lungime nelimitată).
  • Câmp de tip BinaryData.

● Sortarea și gruparea după câmpurile Subconto nu este acceptată<НомерСубконто>și Tastați Subconto<НомерСубконто>Tabele MișcăriSubconto registru contabil.
● Nu este acceptată gruparea după câmpuri care sunt expresii limbaj de interogare care conțin funcții agregate.
● Cu tabelul principal selectat, interogarea listă dinamică are următoarele limitări:

  • Aderările nu sunt acceptate.
  • Utilizarea secțiunii ORDER BY nu este acceptată. Ar trebui să utilizați o interogare fără un tabel principal sau să setați ordinea necesară prin setările listei dinamice.

● Dacă o listă dinamică este afișată ca listă ierarhică sau arbore, atunci o intrare nu va fi afișată ca listă dinamică decât dacă este afișat cel puțin un părinte al acestei intrări. Cu alte cuvinte, pentru a afișa un element într-o listă ierarhică, lista dinamică trebuie să afișeze și toți părinții acelui element până în partea de sus a listei. În acest caz, partea de sus a listei înseamnă fie
elementul rădăcină al obiectului ierarhic redat de lista dinamică sau elementul setat ca proprietatea ParentTopLevel a extensiei tabelului din formularul de listă dinamică.

Utilizarea următoarelor tabele ca tabel principal al unei liste dinamice nu este acceptată:

● Un tabel care nu are o cheie care să identifice în mod unic fiecare intrare din tabel (referință pentru tabelele cu obiecte și cheia de intrare pentru tabelele cu registre). Cu toate acestea, următoarele tabele pot fi setate ca tabel principal al unei liste dinamice (în ciuda lipsei unei chei):

● Tabelul subconto al registrului contabil;
● toate tabelele virtuale ale registrului contabil, cu excepția tabelului MovementsSubconto;
● tabele cu valori constante (inclusiv tabelul Constante);
● tabele de surse de date externe fără câmpuri cheie;
● tabele cuburi ale surselor de date externe;
● tabele de registru de acumulare:

  • tabelul cifrei de afaceri;
  • masa de echilibru;
  • tabelul cifrei de afaceri și soldurilor.

● tabele registrului de calcul:

  • tabelul perioadei de valabilitate efectivă;
  • date grafice;
  • date de bază.

● Tabele cu părți tabelare ale obiectelor;
● Tabele de înregistrare a modificărilor (utilizate în mecanismele de schimb de date);
● Tabele de succesiuni;
● Tabele de conversie (utilizate în motoarele de decontare recurente).
● Un tabel care este utilizat numai într-o îmbinare exterioară într-o interogare.

Cu alte cuvinte, o listă dinamică cu un tabel principal specificat va funcționa corect dacă, ca rezultat al executării interogării,
specificat ca sursă de date, numărul de rânduri primite din tabelul principal nu crește (ținând cont de selecția impusă). Dacă, ca urmare a executării interogării, numărul de rânduri primite de interogare din tabelul principal crește, aceasta va duce la o încălcare a unicității cheii de înregistrare a tabelului afișat de listă. În acest caz, trebuie să dezactivați utilizarea tabelului principal cu liste dinamice.
Când lucrați cu o listă dinamică, este necesar să luați în considerare drepturile de acces la detaliile afișate de listă:
● Datele coloanelor din listă dinamică care sunt marcate cu proprietatea Utilizați întotdeauna, dar pentru care utilizatorul curent nu are dreptul de vizualizare, nu sunt transferate în partea clientului. Accesarea datelor unor astfel de coloane (folosind proprietatea CurrentData și metoda RowData())
din partea clientului nu este posibil.
● Dacă utilizatorul curent nu are dreptul de vizualizare pe un câmp cheie al unei liste dinamice, obținerea datelor de către această listă dinamică duce la o eroare de încălcare a accesului.
Pentru o listă dinamică care afișează o listă de enumerare, nu există nicio modalitate de a personaliza lista în mod interactiv.
Compoziția coloanelor și setările listei dinamice sunt asociate câmpurilor interogării prin aliasurile câmpurilor de selecție. Dacă aliasul pentru câmpul de selecție nu este specificat în mod explicit în interogare și câmpul este un câmp de sistem, atunci numele câmpului pentru versiunea în limba engleză a limbii încorporate este folosit ca alias.
Relația specificată înseamnă că atunci când se schimbă (sau se specifică în mod explicit un alias pentru un câmp care a folosit un alias automat)
alias-ul câmpului de interogare care generează date din lista dinamică, setările atributului listei dinamice se vor pierde, elementele formularului vor „pierde” atributele afișate, setările listei dinamice vor deveni incorecte etc.
În cazul în care sursa de date a unei liste dinamice este un tabel (regulat sau virtual), care vă permite să setați selecția după perioadă, atunci dacă utilizatorul setează perioada de afișare într-o astfel de listă dinamică (Setare interval de date .. .comandă),
limitele perioadei specificate vor fi setate ca valori de selecție sau parametri de tabel virtual. Dacă mijloacele de extindere a limbajului
interogările pentru sistemul de compunere a datelor au specificat în mod explicit numele parametrilor tabelului virtual - parametrii vor fi setați cu specificați
nume. Tabele pentru care este posibil să se controleze perioada de afișare sau prelucrare a datelor:
● tabele de registre (principale sau virtuale), pentru care există posibilitatea de selecție pe perioadă (pentru registrul de decontare - după perioada de înregistrare);
● tabelele principale de documente, procese de afaceri și sarcini;
● tabelele principale ale jurnalelor de documente;
● tabele de secvențe principale, tabele de limite de secvențe.
Parametrul de interogare al unei liste dinamice poate fi o matrice sau o listă de valori. Cu toate acestea, dacă parametrul este o listă de valori, atunci doar prima valoare a listei va fi folosită ca valoare de filtru. Dacă o listă dinamică folosește o interogare cu parametri, setarea inițială a valorilor parametrilor trebuie făcută în handlerul OnCreateAtServer.
Când afișați datele din lista dinamică, țineți cont de următoarele puncte:
● Modificarea programatică a proprietăților unei liste dinamice nu repopulează automat barele de comandă asociate cu
cu această listă dinamică.
● Dacă mai multe câmpuri sunt grupate într-un grup cu modul de grupare În celulă și în câmpurile grupate există un câmp care este afișat cu o casetă de selectare, atunci această casetă de selectare va fi întotdeauna afișată prima în celula rezultată (în stânga textului ).
Într-o listă dinamică, atunci când se definește tipul de date pentru câmpurile ale căror expresii includ parametri, câmpuri sau literale, tipul rezultat este determinat de tipurile câmpurilor și literalilor. Dacă tipul valorii parametrului nu este inclus în tipul de date rezultat, valoarea acestuia va fi trunchiată.
De exemplu, în exemplul următor, câmpul va fi de tip Număr.

ALEGERE
CAND E FALS
ATUNCI 5
IN CAZ CONTRAR
&Parametru
Sfârşit

Dacă atribuiți o valoare de alt tip parametrului Parametru, lista dinamică pentru acest câmp va primi valoarea 0 (valoarea implicită pentru tipul Number).
Dacă într-o astfel de situație este necesară selectarea unui parametru de alt tip, se recomandă utilizarea constructului limbajului de interogare EXPRES. De exemplu,
dacă în exemplul de mai sus doriți să treceți un șir de caractere nu mai mare de 100 de caractere parametrului, atunci ar trebui să înlocuiți indicația simplă a parametrului cu o expresie cu o conversie explicită de tip:

ALEGERE
CAND E FALS
ATUNCI 5
IN CAZ CONTRAR
EXPRESS(&Parametru AS String(100))
Sfârşit

Dacă parametrii sunt utilizați în expresiile câmpurilor de selecție din textul liber al interogării liste dinamice, trebuie să specificați în mod explicit tipul parametrilor folosind construcția EXPRES. De exemplu, în loc de &Nomenclatură AS Nomenclatură utilizare
EXPRESS(&Nomenclatură AS Directory.Nomenclatură) AS Nomenclatură. În caz contrar, căutarea prin bara de căutare ar putea funcționa.
incorecte sau erori de aruncare.

3. Metode de obținere și stocare în cache a datelor cu o listă dinamică

Când primiți date de afișat, o listă dinamică folosește una dintre cele trei metode:
1. Citirea din baza de date se realizeaza in loturi cu numarul de elemente de date depasind cu putin numarul de randuri afisat simultan de lista (dar nu mai putin de 20). Datele nu sunt stocate în cache pe server.
2. Citirea din baza de date se face în pagini de 1.000 de articole de date. Datele sunt stocate în cache pe server. Datele ierarhice sunt stocate în cache: nu sunt stocate în cache mai mult de 2 pagini de elemente pentru fiecare părinte. Nu mai mult de 20 de pagini de articole sunt stocate în cache pentru fiecare listă dinamică. Memorarea în cache va fi activată de o listă dinamică pentru următoarele tabele:
● Criterii de selecție;
● Toate tabelele contabile, cu excepția tabelului principal și a tabelului MovementsSubconto;
● Toate tabelele din registrul de acumulare, cu excepția tabelului principal;
● Toate tabelele din registrul de informații, cu excepția tabelului principal;
● Toate tabelele registrului de calcul, cu excepția tabelului principal;
● Tabel virtual TasksBy Performer;
● Tabele surselor externe fără chei;
● Cuburi sursă externă.

3. Citirea din baza de date se face în pagini de 1.000 de articole. Prima porțiune este egală cu 1 pagină. Fiecare porțiune următoare crește cu 1 pagină (când se ajunge la sfârșitul eșantionului precedent). Cu cât „punctul de vedere” se apropie de sfârșitul datelor afișate, cu atât selecția este citită din baza de date mai mare, în limita devenind egală cu toate datele afișate. Datele sunt stocate în cache pe server. Numărul maxim de intrări în memoria cache și în lista dinamică este de 1.000.000.
În funcție de ceea ce este selectat de tabelul principal al listei dinamice și de ce valoare ia proprietatea Citire dinamică, se utilizează una sau alta metodă de citire a datelor:

● Unul dintre următoarele tabele este specificat ca valoare a proprietății Tabel principal: plan de schimb, căutare, listă de documente, jurnal de documente, plan de tipuri de caracteristici, plan de conturi, plan de tipuri de calcul, proces de afaceri, sarcină, tabel de puncte de proces de afaceri:



● Unul dintre următoarele tabele este specificat ca valoare a proprietății Tabelul principal: tabelul principal al registrului de informații, registrul de acumulare, registrul contabil, registrul de decontare, tabelul virtual al registrului contabil MovementsSubconto:

● Proprietate de citire dinamică:
● Instalat: este utilizată metoda 1 (metodele sunt descrise mai sus).
● Resetare: este utilizată metoda 2 (metodele sunt descrise mai sus).

● Ca proprietate a tabelului principal, este specificat un tabel cu criterii de selecție sau un tabel cu sarcini după executant (TasksBy Executor):
● Cheie care identifică un rând de tabel: Link.

● Proprietatea tabelului principal este setată la tabelul virtual de registru de informații SliceFirst sau SliceLast:
● Cheie care identifică un rând de tabel: RecordKey.
● Proprietatea Citire dinamică nu este aplicabilă.
● Se utilizează metoda 2 (metodele sunt descrise mai sus).

● Una dintre tabelele de registru virtuale este specificată ca proprietate a tabelului principal, cu excepția celor enumerate mai sus:

● Proprietatea Citire dinamică nu este aplicabilă.

● Proprietatea tabelului principal nu este specificată, este utilizată o interogare arbitrară:
● Cheie care identifică un rând de tabel: Număr.
● Proprietatea Citire dinamică nu este aplicabilă.
● Se utilizează metoda 3 (metodele sunt descrise mai sus).

Pentru afișare, datele sunt transferate către client în bucăți, a căror dimensiune este similară cu dimensiunea bucăților din prima metodă de citire a datelor (descrisă la începutul acestei secțiuni).
La crearea unui formular care conține o listă dinamică, 45 de elemente de date pentru fiecare listă dinamică vizibilă sunt inițial transmise clientului (dacă lista are mai mult de 45 de elemente). Dacă lista dinamică afișează mai mult de 45 de rânduri, atunci când formularul este deschis, se va efectua un apel suplimentar de server pentru a recupera elementele de date lipsă.

4. Setări dinamice ale listei

Proprietatea setărilor listei – făcând clic pe hyperlinkul Deschidere se deschide formularul de setări de afișare a listei dinamice. Configurarea listei se face în același mod ca și operațiuni similare din sistemul de compunere a datelor.


Orez. 2. Stilul condiționat al unei liste dinamice

La configurarea unei liste dinamice în configurație, dezvoltatorul soluției aplicate are posibilitatea de a face următoarele:
● stabiliți câmpurile prin care trebuie efectuată comanda;
● descrieți selecția datelor din listă;
● specificarea setărilor de formatare condiționată;
● setați câmpurile după care doriți să grupați datele.
Este logic să setați sortarea la dezvoltator dacă sortarea implicită setată de sistem nu este potrivită.

SFAT. Trebuie amintit că o selecție slabă a câmpurilor de sortare (precum selecția și gruparea datelor) afectează negativ eficiența eșantionării dinamice.
Din punctul de vedere al unui dezvoltator de aplicații, setările listei dinamice constau din mai multe părți care sunt interconectate. Proprietatea principală prin care puteți controla setările unei liste dinamice este LinkerSettings. Acest obiect conține trei seturi de setări care, atunci când sistemul rulează, determină setările finale aplicate listei dinamice:
● Setări - setări create în modul Configurator. Proprietatea Ordine a listei dinamice oferă acces rapid la proprietatea Settings.Order a generatorului de setări dinamice a listei, astfel încât următoarele constructe sunt echivalente:
List.Order și List.SettingsComposer.Settings.Order;
● UserSettings sunt setările pe care utilizatorul le poate modifica în modul 1C:Enterprise;
● FixedSettings - Aceste setări sunt setate din limba încorporată. Această proprietate conține și valori de selecție care sunt transmise formularului folosind parametrii acestuia. Proprietățile listei dinamice Filtru, Parametri, Aspect condiționat oferă acces rapid la setările fixe ale generatorului de setări ale listei dinamice. Cu alte cuvinte, aceste apeluri sunt echivalente:
List.SettingsComposer.FixedSettings.Filter și List.Filter.
Când se formează setarea finală a listei dinamice, diferite setări sunt combinate după cum urmează:
● Dacă orice fel de setări este marcat în întregime ca definit de utilizator, atunci setările utilizatorului sunt incluse în setările rezultate
(List.SettingsComposer.UserSettings). În acest caz, dacă elementele de setări sunt marcate ca indisponibile, atunci aceste setări vor fi plasate în setările rezultate din proprietatea List.Settings Composer. Setări.
● Dacă orice tip de setări este marcat ca fiind specific utilizatorului nu în întregime, ci element cu element, atunci:
● Elementele marcate ca personalizate vor fi incluse în setările rezultate din proprietatea List.SettingsComposer.CustomSettings.
● Elementele marcate ca indisponibile vor fi incluse în setările rezultate din proprietatea List.SettingsComposer.Settings.
● Setările fixe (List.SettingsComposer.FixedSettings) sunt adăugate la setările rezultate „ca atare”. În același timp, situația este inacceptabilă când setările fixe și ale utilizatorului conțin setări cu același nume, de exemplu, selecție cu aceeași valoare stângă în condiție.

Dacă există setări în setările listei dinamice care sunt dezactivate folosind opțiunile funcționale, aceste setări vor fi eliminate din lista setărilor disponibile atunci când sunt primite datele din lista dinamică.
Controlați ce setări vor fi disponibile utilizatorului și care nu vor fi efectuate în fereastra de setări ale listei dinamice.


Orez. 3. Gestionarea includerii în setările utilizatorului

Caseta de selectare din partea de jos a ferestrei (vezi Fig. 3) este responsabilă pentru plasarea întregului tip de setări în setări (obișnuite sau rapide). Această caracteristică este disponibilă pentru selecție, ordine, grupare și stil condiționat. Dacă setările sunt specificate cu modul de editare Selecție rapidă, atunci în proprietatea grupului Setări personalizate a tabelului de formulare care afișează lista dinamică, trebuie să specificați un grup de formulare gol în care elementele asociate cu setările rapide de utilizator ale listei dinamice vor fi specificate. fi localizat. Dacă grupul nu este specificat, setările rapide ale utilizatorului nu vor fi afișate în formular. De asemenea, este posibil să apelați în mod explicit crearea setărilor utilizatorului folosind limbajul 1C:Enterprise folosind metoda CreateUserSettingsFormItems() a extensiei de listă dinamică.
De asemenea, este posibil să alegeți posibilitatea de a plasa anumite elemente de setări în setările utilizatorului. Această caracteristică este disponibilă pentru selecția și elementele de proiectare condiționate (vezi Fig. 3).

Dacă este necesar ca orice setări speciale să fie încărcate la deschiderea unei liste dinamice, atunci acest lucru se poate face în două moduri:
● Utilizarea parametrului de formular de listă dinamică CustomSettings. Datele conținute în acest parametru vor fi plasate în setările utilizatorului din lista dinamică.
● Utilizarea parametrului de formular de listă dinamică UserSettingsKey. Dacă specificați acest parametru la deschiderea formularului, atunci setările utilizatorului aflate în depozitul de setări cu cheia specificată vor fi încărcate în lista dinamică, care este atributul principal al formularului.

5. Căutați într-o listă dinamică

Lista dinamică aflată pe formular oferă posibilitatea de a efectua o căutare interactivă în datele afișate. Căutarea poate fi efectuată folosind următoarele instrumente: șir de căutare, dialog de căutare, căutarea valorii curente, folosind istoricul de căutare și setarea perioadei (pentru liste dinamice care afișează documente). Rezultatul căutării este un set limitat de înregistrări
o listă dinamică (dintre cele disponibile unui anumit utilizator) care corespund criteriilor de căutare.
Există trei proprietăți ale tabelului de formulare gestionate care afișează lista dinamică pentru a controla capabilitățile de căutare ale unei liste dinamice:
● Poziția șirului de căutare - definește poziția șirului de căutare. Poate lua următoarele valori: Auto, Panou de comandă, Nu, Sus, Jos.


Orez. 4. Bara de căutare în lista dinamică

Dacă valoarea acestei proprietăți este setată la Bara de comandă, atunci bara de căutare va fi afișată în bara de comandă a formularului (dacă lista dinamică este atributul principal al formularului) sau în bara de comandă asociată listei dinamice. Bara de căutare plasată în bara de comandă este întotdeauna apăsată la marginea dreaptă a barei de comandă (împreună cu butoanele situate în dreapta barei de căutare).
Dacă proprietatea este setată la Nu, atunci șirul de căutare va fi absent în formular și se va deschide un dialog când începeți să tastați șirul de căutare.
Dacă proprietatea este setată la Top, atunci bara de căutare va fi situată între bara de comandă a listei și tabelul care afișează lista dinamică. Dacă proprietatea este setată la Jos, atunci șirul de căutare va fi plasat imediat după tabelul care afișează lista dinamică.


● Dacă proprietatea Mod de compatibilitate este setată la Nu utilizați sau mai veche decât Versiunea 8.3.4, valoarea este Panoul de comandă.
Trecerea la bara de căutare se realizează după cum urmează:
● Prin apăsarea combinației de taste Ctrl+F;
● Mouse;
● Când începeți să introduceți o listă dinamică (pe baza valorii proprietății SearchOnType a listei dinamice).
● Poziția stării vizualizării - descrie unde va fi afișată starea vizualizării: ce câmpuri au fost căutate și ce valori
căutat în fiecare domeniu. Poate lua următoarele valori: Auto, None, Top, Bottom


Orez. 5. Starea căutării în lista dinamică

Dacă proprietatea este setată la Nu, atunci starea de vizualizare nu va fi prezentă în formular. Ca urmare, se va putea stabili dacă căutarea a fost efectuată sau nu numai prin disponibilitatea butonului Anulare căutare.
Dacă proprietatea este setată la Top, atunci starea de vizualizare va fi situată între bara de comandă a listei și tabelul care afișează lista dinamică. Dacă proprietatea este setată la Jos, atunci starea de vizualizare va fi plasată imediat după tabelul care afișează lista dinamică.
Dacă formularul a fost creat în 1C:Enterprise versiunea 8.3.4 și anterioară, proprietatea este setată la Nu. Dacă formularul a fost creat în 1C:Enterprise versiunea 8.3.5 și ulterioară, proprietatea este setată la Auto. Valoarea reală a proprietății în acest caz se va determina după cum urmează:
● Dacă proprietatea Mod de compatibilitate este setată la Versiunea 8.3.4 (și mai jos) – Nu;
● Dacă proprietatea Mod de compatibilitate este setată la Nu utilizați sau mai veche decât Versiunea 8.3.4, valoarea este Top;
● Poziția de control al căutării - determină unde va fi afișat butonul de control al căutării. Butonul deschide un meniu care conține următoarele informații: comenzi Căutare după valoarea curentă, Căutare avansată, Anulare căutare, Setare perioadă (pentru liste de documente și reviste) și istoricul interogărilor de căutare (ultimele 5 interogări). Proprietatea poate lua valori: Auto, Nu, Panou de comandă.


Orez. 6. Managementul căutării într-o listă dinamică

Dacă proprietatea este setată la Nu, atunci butonul de control al căutării nu va fi pe formular (dar comenzile vor fi disponibile folosind meniul Mai multe). Valoarea proprietății Bara de comandă plasează un buton pe bara de comandă asociat unui tabel care afișează o listă dinamică.
Dacă formularul a fost creat în 1C:Enterprise versiunea 8.3.4 și anterioară, proprietatea este setată la Nu. Dacă formularul a fost creat în 1C:Enterprise versiunea 8.3.5 și ulterioară, proprietatea este setată la Auto. Valoarea reală a proprietății în acest caz se va determina după cum urmează:
● Dacă proprietatea Mod de compatibilitate este setată la Versiunea 8.3.4 (și mai jos) – Nu;
● Dacă proprietatea Mod de compatibilitate este setată la Nu utilizați sau mai veche decât Versiunea 8.3.4, valoarea este Panoul de comandă;
Dacă în formular există mai multe panouri de comandă, sursa de comandă pentru care este un tabel al formularului gestionat (afișează datele listei dinamice), atunci șirul de căutare și butonul de control al căutării vor fi localizate într-un singur panou de comandă:
● Sau în bara de comandă a listei dinamice în sine (dacă completarea automată este activată pentru aceasta)
● Sau în oricare dintre panourile de comandă rămase.

Luați în considerare caracteristicile utilizării căutării într-o listă dinamică:
● Pentru a face căutarea convenabilă de utilizat (inclusiv în ceea ce privește performanța), trebuie să activați căutarea full-text pentru toate obiectele de configurare care pot fi utilizate ca tabel principal al unei liste dinamice. De asemenea, căutarea full-text ar trebui să includă toate detaliile obiectelor de configurare care pot fi afișate într-o listă dinamică și pentru care poate fi necesară o căutare.
Dacă obiectul este exclus din căutarea full-text, atunci mecanismul de căutare în cauză va funcționa, dar performanța unei astfel de căutări va fi extrem de scăzută. Nu este recomandat să folosiți căutarea pe obiecte care nu sunt indexate prin căutarea full-text.
● Soluția aplicației trebuie să aibă o lucrare programată care actualizează în mod regulat indexul de căutare full-text.

● Căutarea nu se efectuează pe toate coloanele din lista dinamică (și pe obiectul de configurare), ci doar pe acele coloane care sunt afișate în tabel.
● Căutarea într-o listă dinamică după câmpuri de tipuri de referință cu reprezentare arbitrară este efectuată de câmpuri care sunt utilizate pentru
formarea reprezentării (vezi aici). Câmpurile incluse în vizualizare sunt obținute ținând cont de handlerul ViewFieldsGetProcess() al obiectului corespunzător.
● Pentru listele dinamice cu un tabel principal specificat, este utilizată o căutare full-text împotriva tabelului principal. Toate linkurile neindexate din tabelul principal vor fi adăugate la rezultatele căutării text integral. Rezultatul căutării text integral pentru tabelul principal este folosit ca filtru după câmpurile cheie. O căutare full-text se efectuează și pe câmpurile afișate în listă din alte tabele (dacă se folosește căutarea full-text pentru câmp și obiect de configurare). Fără căutarea full-text activată, datele pot fi
găsit, dar căutarea în sine va fi foarte lentă.
Dacă apare o eroare în timpul încercării de a efectua o căutare full-text, căutarea va fi efectuată fără a utiliza căutarea full-text.
De exemplu, acest lucru se poate întâmpla atunci când căutați după o literă și un număr mare de rânduri în baza de informații care încep cu această literă.
● Dacă se folosește un filtru cu tipul de comparație Equals pentru un câmp din tabelul principal al unei liste dinamice, atunci când se efectuează o căutare full-text, o valoare de filtru va fi adăugată la interogarea de căutare pentru acest tabel.
● Șirul de căutare este împărțit în cuvinte. Această împărțire se face conform următoarelor reguli:
● Linia este împărțită folosind spațiu și caractere tabulatoare ca delimitatori.
● Apoi fiecare fragment rezultat este procesat:
● Dacă fragmentul este o reprezentare a unei date (cu sau fără oră) bazată pe locația curentă a sesiunii, atunci fragmentul este cuvântul.
● În caz contrar, fragmentul este împărțit în continuare, folosind caracterele „,.-/\” ca separatori. În acest caz, fiecare fragment rezultat al șirului este luat ca un cuvânt.

● Pentru fiecare cuvânt se formează propriul set de condiții, care sunt combinate „prin SAU”. Acest set de condiții este generat dacă o căutare full-text pentru un anumit cuvânt din tabelul din care a fost obținut acest câmp a returnat cel puțin un obiect, sau o căutare full-text nu a fost folosită pentru acest câmp. Condițiile se formează după cum urmează:
● Pentru un câmp de tip String, condiția este FieldName LIKE %Word%.
● Pentru un câmp de tip Number, condiția este FieldName=Value, unde Value este un cuvânt care a fost turnat în Number. Dacă distribuția nu poate fi efectuată, căutarea pe teren nu va fi efectuată.
● Cuvântul este căutat ca subșir în reprezentarea implicită a tipului boolean definit pentru sesiunea curentă. Dacă cuvântul căutat este găsit într-o vizualizare, atunci se efectuează o căutare pentru valoarea corespunzătoare vizualizării în care a fost găsit cuvântul. În același timp, vizualizările care sunt specificate folosind proprietatea Format element de formular nu sunt utilizate pentru căutare.
● Pentru un câmp de tip Data, condiția este FieldName>=DayStart(Word) AND FieldName<=КонецДня(Слово). Если Слово подобно дате, в которой год
specificat cu una sau două cifre, anul va fi convertit în secolul curent și această valoare va fi înlocuită în condiția de căutare.
● Pentru câmpurile de referință, căutarea se efectuează pe câmpurile folosite pentru a forma reprezentarea legăturii. În fiecare dintre aceste câmpuri căutați
efectuate conform regulilor descrise mai sus. Căutarea nu folosește câmpurile folosite pentru a forma o prezentare arbitrară a datelor.
Setul de condiții pentru fiecare cuvânt sunt combinate „prin ȘI”.
● Pentru valorile cu zerouri inițiale, puteți căuta fie pe un șir cu zerouri inițiale, fie pe un șir specificat fără zerouri inițiale.
● Dacă lista dinamică afișează o listă de documente sau un istoric al documentelor, intervalul specificat de vizualizare a listei este afișat și în zona de formular dedicată afișării stării de vizualizare pentru lista dinamică dorită.
● Comanda de căutare după valoarea curentă nu este disponibilă dacă tabelul principal al listei dinamice este un criteriu de selecție.
● Fragmentele de linii găsite sunt evidențiate când sunt afișate în tabel.
● Este acceptat un singur șir de căutare pe coloană. Adăugarea unui nou termen de căutare pentru o coloană care este deja căutată va înlocui expresia de căutare, mai degrabă decât adăugarea celor doi termeni de căutare.
● Dacă formularul nu are un add-on de element de formular al formularului Afișează un șir de căutare asociat unui tabel (proprietatea Sursă a suplimentului de element de formular) care afișează o listă dinamică, apoi apăsând combinația de taste Ctrl+F deschide dialogul de căutare.


Orez. 7. Dialog de căutare

Dacă formularul are un add-on de element de formular al formularului Afișarea unui șir de căutare asociat cu un tabel (proprietatea Sursă a suplimentului de element de formular) care afișează o listă dinamică, atunci comanda de căutare avansată ar trebui utilizată pentru a deschide dialogul de căutare.
● Când utilizați dialogul de căutare, rețineți următoarele puncte:
● Deschiderea dialogului de căutare prin comanda rapidă de la tastatură face ca valoarea celulei curente să apară în rândul Ce să căutați, iar valoarea butonului radio Cum să căutați este setată la Potrivire exactă.

● Deschiderea unui dialog de căutare prin începerea directă a introducerii unui șir de căutare într-o listă dinamică face ca valoarea butonului radio Cum se caută este setată la Parte dintr-un șir, iar textul tastat intră în câmpul Ce se caută.

6. Obținerea datelor afișate de lista dinamică

Când utilizați liste dinamice, poate fi necesar să efectuați diverse acțiuni asupra datelor care sunt afișate în prezent de lista dinamică, ținând cont de filtrele impuse și de căutarea aplicată. Astfel de acțiuni includ: procesarea informațiilor afișate, de exemplu, repostarea documentelor selectate sau setarea unor detalii pentru obiectele selectate, generarea unei liste de obiecte disponibile (cu design etc.), de exemplu, pentru imprimare sau salvare într-un document de foaie de calcul.
Pentru a obține date care sunt afișate într-o listă dinamică, utilizați GetDataCompositionSchemeExecutable() și
GetDataCompositionSettingsExecutable().
Exemplu de recuperare a datelor:

Schema = Items.List.GetExecutableDataCompositionSchema();
Setări = Items.List.GetDataCompositionSettingsExecutable();
Layout Layout Builder = Noua versiune de date Layout Builder();
LayoutLayout = LayoutComposer.Run(Scheme, Settings);
CompositionProcessor = NewDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout);
OutputProcessor = Nou OutputProcessorofDataCompositionResultIntoSpreadsheetDocument;
Return OutputProcessor.Output(CompositionProcessor);

Introducerea datelor într-o colecție de valori (tabel sau listă de valori) se face într-un mod similar.
Obținerea datelor dintr-o listă dinamică în acest fel are o serie de caracteristici care trebuie luate în considerare la dezvoltarea soluțiilor de aplicație:
● Următorul design de tabel nu este acceptat:
● Alternarea culorii liniilor;
● Imagine antet;
● tablou subsol;
● Culoarea fundalului subsolului;
● Culoarea textului subsolului;
● Font subsol;
● Pozitie orizontala in subsol;
● Modul parolă.
● Aspectul condiționat specificat pentru formularul gestionat nu este acceptat;
● La sortarea unui tabel ierarhic în ordine crescătoare, după un câmp de tip Link, înregistrările care conțin o legătură nulă sunt întotdeauna plasate pe primul loc.

Acasă Note din oglindă

21.04.2014 Obținerea datelor din lista dinamică

Implementat în versiunea 8.3.6.1977.

Am implementat capacitatea de a obține ușor și convenabil date afișate folosind o listă dinamică.

Este posibil să aveți nevoie de datele listei dinamice pentru a le imprima într-o formă „specifică” non-standard. Sau pentru a efectua anumite acțiuni cu ei. De exemplu, trimiteți o scrisoare tuturor contrapărților pe care le-ați selectat în listă conform unor criterii.

În plus, există o serie de sarcini în care utilizatorul, pe lângă lista de elemente, dorește să vadă și datele rezumative asociate acestei liste. De exemplu, după ce a selectat mărfurile unui anumit grup de produse și a unui anumit furnizor, el dorește imediat să vadă numărul total de astfel de bunuri în baza de date.

Lista dinamică în sine nu vă poate oferi aceste informații. Scopul unei liste dinamice este de a oferi o vizualizare rapidă a cantităților mari de date. Prin urmare, citește datele în bucăți necesare pentru a fi afișate pe unul sau două ecrane. Și „nu știe nimic”, de exemplu, despre cantitatea totală de date pe care trebuie să o citească.

În general, pentru a obține informațiile suplimentare pe care utilizatorul le dorește, trebuie să interogați baza de date. Exact la fel ca cel folosit în lista dinamică.

Ai putea să o faci înainte. Dar nu a fost întotdeauna ușor. La urma urmei, pe lângă textul interogării inițiale, conform căruia funcționează lista dinamică, trebuia să cunoașteți toate selecțiile, sortările și alți parametri pe care utilizatorul îi setează interactiv în tabelul care afișează datele.

Acum această sarcină este ușor de rezolvat. Tabelul cu liste dinamice are două metode noi:

  • GetExecutableDataCompositionSchema();
  • GetExecutableDataCompositionSettings().

Astfel, obțineți schema de compoziție a datelor în sine și, cel mai important, toate setările acesteia, datorită cărora utilizatorul vede lista exact așa cum este. Tot ce trebuie să faceți este să compuneți în mod programatic aspectul și să îl trimiteți într-o colecție de valori (pentru procesare programatică) sau într-un document de foaie de calcul (pentru afișare):

Ca rezultat, veți obține o structură (sau un raport) care conține coloane și rânduri care sunt afișate într-un tabel de listă dinamic.

Punctul important este că aspectul și setările pe care le obțineți din tabelul cu liste dinamice iau în considerare, printre altele, vizibilitatea coloanelor și căutarea aplicată. Deoarece setările sunt obținute separat, puteți modifica compoziția câmpurilor în scopuri proprii și puteți obține, de exemplu, toate coloanele din listă, și nu doar cele care sunt vizibile pentru utilizator.

Când ieșiți într-un document de foaie de calcul, există un alt moment frumos. În general, aspectul raportului se va potrivi cu aspectul tabelului cu liste dinamice în momentul primirii schemei și setărilor. Inclusiv designul condiționat al tabelului. Veți avea nevoie de câteva acțiuni suplimentare doar dacă doriți să transferați și designul condiționat al formularului în raport.

În procesul de finalizare a configurațiilor, fiecare programator 1C întâlnește liste dinamice.
O listă dinamică este un obiect de interfață folosit pentru a afișa diverse liste de obiecte de bază de date sau date non-obiect - intrări de înregistrare.
De exemplu, o listă dinamică este utilizată pentru a afișa o listă de articole:

Pentru a demonstra posibilitățile unei liste dinamice, să creăm o prelucrare externă, să adăugăm formularul principal. Să adăugăm în formular un nou atribut cu tipul „Lista dinamică”. Să mergem la proprietățile sale și să vedem ce este acolo.
Suntem interesați de proprietatea „Cerere personalizată”. Activarea acestuia ne va arăta toate posibilitățile unei liste dinamice. Vom putea scrie o interogare folosind aproape toate caracteristicile limbajului de interogare a sistemului 1C: Enterprise. Bifați caseta și faceți clic pe linkul „Deschidere”:

În mod implicit, lista noastră va afișa o listă de articole cu un sold total pentru toate depozitele. Pentru a implementa o astfel de listă, adăugați următoarea interogare:


Ca tabel principal, vom selecta "Director. Nomenclatură", acest lucru ne va permite să lucrăm cu lista dinamică, ca și cu lista de nomenclatură - adăugați, modificați, marcați pentru ștergere elemente ale directorului. De asemenea, setarea tabelului principal pune la dispoziție posibilitatea citirii dinamice a datelor - asta înseamnă că selecția se va face pe porțiuni, după cum este necesar.
În continuare, trebuie să creăm elemente de formular pentru lista noastră:

Dacă încercăm să rulăm procesarea în acest formular, vom primi o eroare:


Pentru a o elimina, trebuie să setați valoarea parametrului „Perioada”. Pentru a face acest lucru, puteți utiliza metoda „SetParameterValue” a colecției „Parameters” a listei dinamice. Metoda ia doi parametri:
. „Parametru” - Tip: șir; DataCompositionParameter. Numele parametrului sau al parametrului de compoziție a datelor a cărui valoare urmează să fie setată;
. „Valoare” - Tip: Arbitrar. Valoarea de setat.
Poate fi apelat în handlerul „OnCreateOnServer” de forma:

Ai o întrebare, ai nevoie de ajutorul unui consultant?


Să oferim utilizatorului posibilitatea de a schimba perioada de primire a soldurilor. Pentru a face acest lucru, să adăugăm atributul și elementul de formular „Data” asociat cu acesta:


În handlerul „OnChange” al elementului de formular „Date”, apelați metoda „SetParameterValue”, transmițând valoarea atributului asociat ca valoare. În mod similar, vom schimba procedura „On CreationAtServer” a formularului. Deoarece metoda este disponibilă pe client, nu este nevoie să apelați serverul:


Acum, când data se schimbă, soldurile vor fi actualizate automat:




Să presupunem că utilizatorii doresc să vadă fie soldurile curente, fie încasările proiectate. Să luăm în considerare una dintre opțiunile de implementare. Să adăugăm un atribut de formă boolean și un buton radio asociat:


La modificarea valorii comutatorului, vom schimba textul cererii. Pentru a face acest lucru, vom folosi handlerul de evenimente „OnChange” al elementului de formular „DisplayQuantityToReceipt”. Trebuie să schimbăm proprietatea „QueryText” a listei dinamice în funcție de valoarea atributului. Deoarece această proprietate nu este disponibilă pe client, este necesară o procedură de apel la server:


Rezultatul modificărilor efectuate: