Procesarea și formatarea datelor din listă dinamică. Procesarea și formatarea datelor din lista dinamică 1c setează parametrul listei dinamice

💖 Îți place? Distribuie link-ul prietenilor tăi

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 facilitează foarte mult multe sarcini aplicate. De aceea, dezvoltatorii trebuie să cunoască și să fie capabili să se ocupe de acest instrument universal.

Caracteristicile listelor dinamice în 1C

Scop de acest tip constă în afișarea informațiilor 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 neapărat să scrieți o cerere în limba 1C, deși această oportunitate există și ar trebui folosită. Puteți specifica pur și simplu tabelul ale cărui informații vă interesează și 1C va genera independent o interogare simplă.

Pentru a vedea cum se formează o listă dinamică și ce date arată, trebuie să deschideți formularele gestionate unde se află în configurator: în lista de detalii prin meniul contextual deschideți proprietățile sale și acordați atenție elementului „Interogare personalizată”. Dacă nu există casetă de selectare, atunci parametrul „Main table” reflectă tabelul bazei de date din care sunt preluate datele. În caz contrar, lista dinamică reflectă datele unei interogări personalizate, care pot fi văzute prin deschiderea setărilor listei.

Schema de interogare personalizată este mult mai frecvent utilizată, deoarece aceasta oferă o oportunitate excelentă de a combina și afișa o mare varietate de date. Cel mai adesea, acest mecanism este folosit pentru a reflecta soldurile depozitului, prețurile articolelor, încasările, cheltuielile sau achizițiile. Trebuie să-l utilizați cu atenție, deoarece performanța poate scădea pentru interogări complexe.

O altă proprietate utilă a unei liste dinamice se deschide când faceți clic pe inscripția „Setări liste”. 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ă cererea este personalizată sau nu, veți vedea fila „Setări”, unde puteți specifica:

  • Selectare dinamică a listei;
  • Grupuri;
  • Triere;
  • Decorare.

Utilizarea parametrilor face listele dinamice universale și destul de flexibile. De asemenea, le puteți conecta la detalii dintr-un formular gestionat, iar datele se vor schimba în funcție de parametrii selectați de utilizator. Utilizarea acestor mecanisme poate fi înțeleasă și apreciată luând în considerare exemple de probleme din viața reală.

Ca exemplu, luați în considerare sarcina de a reflecta rămășițele nomenclaturii pe o formă controlată. În practica reală, astfel de comenzi apar destul de des în diverse configurații, iar o listă dinamică este ideală ca instrument. Pentru această sarcină va trebui să folosim o interogare personalizată, 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, tabelul cu nomenclatura nu va fi suficient, așa că trebuie să permitem o interogare arbitrară. În acesta vom descrie conexiunea din stânga a directorului cu lista de articole și registrul de solduri și vom seta directorul ca tabel principal. Această schemă va permite utilizatorilor, care lucrează cu o listă dinamică, să adauge sau să modifice articole.



SELECT NomenclatureList.Name AS Nume, GoodsInWarehousesRemainings.Warehouse AS Warehouse, GoodsInWarehousesRemainings.QuantityRemaining AS CantitateRemaining FROM Directory.Nomenclature AS NomenclatureList LEFT CONNECTION RegisterAccumulations.GoodsInWarehouses,.CurremenRemainsWarehouses.A.Remains clatureList.Link = ProductsInWarehousesRemainings.Nomenclature WHERE

Deoarece solicitarea noastră a folosit parametrul „CurrentDate”, trebuie să îi setăm valoarea înainte de a utiliza procesarea. Pentru a face acest lucru, în modulul de formular din procedura „When CreatedOnServer”, folosind o comandă standard, atribuiți-i funcția „CurrentSessionDate”. De asemenea, trebuie să afișăm lista dinamică pe formularul de control și să schimbăm ordinea câmpurilor pentru claritate. Trageți atributul „Nomenclatură rămasă” în elementele formularului (partea din stânga sus) și utilizați săgețile albastre pentru a schimba ordinea câmpurilor din tabelul din formular.

&Pe Procedura Server Când este creată pe Server (Eșec, Procesare standard) Nomenclature rămase.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 articole și grupuri și să căutăm. Adesea, clienții solicită să adauge posibilitatea de a alege data la care vor vedea soldurile. În cazul unui formular cu o listă dinamică, acest lucru se realizează printr-un câmp suplimentar și setarea parametrilor folosindu-l.

Adăugați atributul „DateRemaining” de tipul „Data” și transferați-l în elementele formularului. În evenimentele de câmp, creăm evenimentul „OnChange” și scriem codul pentru setarea parametrului „CurrentDate” utilizat în cererea dinamică. Pentru ca la deschiderea formularului utilizatorul să înțeleagă imediat la ce dată vede soldurile, vom face mici modificări în procedura „When CreatedOnServer”.



&OnServerProcedureWhenCreatingOnServer(Eşec, StandardProcessing)RemainingDate = CurrentSessionDate();

Item Remains.Parameters.SetParameterValue("CurrentDate", RemainingDate); Sfârșitul procedurii &Pe procedura client Data rămasăWhenChanged(Element)Nomenclatură Remaining.Parameters.SetParameterValue("CurrentDate",RemainingDate); Sfârșitul procedurii

Ca rezultat, formularul nostru de listă dinamică poate reflecta solduri la orice dată.

  1. Am luat în considerare doar o mică parte din capacităț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 se găsește cel mai adesea în configurații tipice în forme gestionate:
  2. Selecţie;

Liste.

Pentru a primi o listă dinamică și solicitarea acesteia în formulare standard gestionate, dezvoltatorul trebuie să deschidă formularul dorit în configurator. În secțiunea de detalii, găsiți detaliile cu tipul de date „DynamicList” (cel mai adesea este evidențiat cu caractere aldine). Proprietățile sale conțin textul solicitării, selecții și alte setări.

În cele din urmă, visul fiecărui copil de șapte ani s-a împlinit. Cât de des au solicitat utilizatorii programului 7.7 o selecție normală de articole. Astfel încât să puteți vedea soldurile, prețurile și să setați filtre. A trebuit să venim cu diverse trucuri, inclusiv să scriem componente 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.

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

Să intrăm în proprietățile sale și să vedem ce este acolo.

În primul rând, ne interesează caseta de selectare „Solicitare personalizată”. Acest lucru ne va dezvălui toate avantajele unei liste dinamice. Vom avea ocazia să scriem propria noastră cerere, cu parametri. Bifați caseta și faceți clic pe linkul „Deschidere”:

Se va deschide o fereastră cu codul terminat în . Pentru moment, toate câmpurile directorului „Nomenclatură” sunt pur și simplu enumerate acolo.

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

După cum puteți vedea, există un buton de apel „ ” și o casetă de selectare care face posibilă modificarea dinamică a conținutului 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 cererea de care avem nevoie cu solduri și prețuri. Ceva de genul asta:

fila „Setări”.

Și acum partea cea mai bună! 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 în 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:

&OnServerProcedureWhenCreatingOnServer (Eșec, Procesare standard) Listă. Opțiuni. SetParameterValue("Perioada", Parametri. Data) ;

Listă. Opțiuni. SetParameterValue("PriceType", Parameters.PriceType) ;

Sfârșitul procedurii

Implementat în versiunea 8.3.10.2168.

În plus, există o serie de probleme aplicate în care algoritmul de selectare și formatare a datelor din listă este destul de complex. În aceste cazuri, interogarea personalizată și capabilitățile de stil condiționat pur și simplu nu sunt suficiente. Aș dori să am un instrument mai „gratuit” și mai „precis” care să-mi permită să fac „orice” și „doar acolo unde este nevoie”.

Eveniment la primirea datelor pe server

Am implementat un nou handler special pentru aceste scopuri. Este adăugat la extensia tabelului care afișează lista dinamică.

Acest handler este apelat pe server după ce lista dinamică a primit și formatat următoarea bucată de date pentru afișare.

O caracteristică importantă este că contextul formularului nu este disponibil în acest handler. Puteți opera numai cu o colecție de acele linii de listă care sunt primite din baza de date, au fost deja selectate și proiectate în conformitate cu setările listei dinamice.

Puteți modifica datele găsite în aceste rânduri sau le puteți aplica celulelor design propriu. Sunt disponibile următoarele opțiuni de design: Culoare de fundal, Culoare text, Font, Poziție orizontală, Vizibilitate, Disponibilitate, Afişa, TextŞi Format.

De asemenea, dacă este necesar, puteți vizualiza și analiza copia setări complete lista dinamica. Dar nu veți putea modifica setările.

Cel mai simplu caz de utilizare

Cel mai simplu mod de a înțelege scopul acestui handler este cu un exemplu. Un exemplu este acela de a arăta soldurile lor din registrul de acumulare într-o listă de mărfuri. O cantitate mai mică decât o anumită valoare este evidențiată cu roșu.

Până acum, această problemă a fost rezolvată printr-o alăturare stângă într-o cerere de listă dinamică și un design de listă condiționat setat în configurator.

Acum ea decide așa. Interogarea standard de listă nu este complicată, ci doar adaugă un câmp inactiv Rest.

Și în handler WhenReceivingDataOnServer() Numai pentru rândurile primite sunt calculate resturile. Și apoi micile rămășițe sunt evidențiate cu roșu.

Aici, prin metoda GetKeys(), dintr-o colecție de rânduri de listă dinamică, obțineți cheile lor (linkurile) și treceți aceste chei la interogarea rămasă.

Apoi, când parcurgeți rezultatele interogării, obțineți rândurile necesare după cheie, în coloană Rest plasați valoarea și setați designul acestui câmp, dacă este necesar.

Ca rezultat, utilizatorul vede următoarea listă:

Care este avantajul acestei variante?

În primul rând, interogarea listei rămâne simplă. Sau nu rămâne simplu, dar numărul de conexiuni din el scade. Aceasta înseamnă că, cu un grad ridicat de probabilitate, i se va construi un plan bun.

În al doilea rând, preluarea resturilor din handler va fi executată o singură dată, în timp ce cererea de listă poate fi executată de mai multe ori (în funcție de setările listei și de scriptul de paginare).

Și în al treilea rând, noul handler este executat după ce datele principale au fost primite din baza de date și au trecut de verificarea drepturilor. Aceasta înseamnă că, în unele scenarii, preluarea datelor aferente într-un handler se poate face în modul privilegiat, fără a verifica permisiunile. Acest lucru accelerează lista.

Restricții privind câmpurile editabile și adăugate

Faptul că în handler puteți modifica valorile câmpurilor din listă are o caracteristică care trebuie întotdeauna luată în considerare.

Daca nu luati masuri suplimentare, utilizatorul poate fi foarte surprins de rezultatele gruparii, sortarii sau selectiei (inclusiv cautarii) dupa campurile pe care le-ati modificat. La urma urmei, aceste acțiuni vor fi efectuate pe baza datelor originale primite de cerere și nu pe datele pe care le vede utilizatorul.

Prin urmare, în cazurile în care modificați valorile câmpurilor, nu uitați să le excludeți de la grupare, ordonare și selecție. Am implementat trei metode noi special în acest scop.

În plus, în unele scenarii poate avea sens să evidențiezi vizual astfel de coloane în tabel, astfel încât utilizatorii să poată vedea că aceste coloane sunt „speciale”, nu ca toți ceilalți.

În procesul de finalizare a configurațiilor, fiecare programator 1C întâlnește liste dinamice.
O listă dinamică este un obiect de interfață utilizat 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 capabilitățile unei liste dinamice, să creăm procesare externă și să adăugăm formularul principal. Să adăugăm un nou atribut cu tipul „Lista dinamică” în formular. Să intrăm în proprietățile sale și să vedem ce este acolo.
Suntem interesați de proprietatea „Cerere personalizată”. Activarea acestuia ne va arăta toate capacitățile unei liste dinamice. Vom putea scrie o solicitare folosind aproape toate capabilitățile 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 soldul total pentru toate depozitele. Pentru a implementa o astfel de listă, adăugați următoarea interogare:


Ca tabel principal, vom selecta „Directory.Nomenclature”, acest lucru ne va permite să lucrăm cu o listă dinamică, ca și cu o listă de nomenclatură - adăugați, modificați, marcați elemente de director pentru ștergere. De asemenea, setarea mesei principale o face oportunitate accesibilă citirea dinamică a datelor - aceasta înseamnă că eșantionarea se va face în 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 o valoare pentru parametrul „Perioadă”. 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 doriți să o setați;
. „Valoare” - Tip: Arbitrar. Valoarea de setat.
Poate fi apelat în handlerul „OnCreateOnServer” de forma:

Ai o întrebare sau ai nevoie de ajutor de la un consultant?


Vom oferi utilizatorului posibilitatea de a modifica perioada de primire a soldurilor. Pentru a face acest lucru, adăugați atributul și elementul de formular „Data” asociat cu acesta:


În handlerul „OnChange” al elementului de formular „Date”, vom apela metoda „SetParameterValue”, trecând valoarea atributului asociat ca valoare. În mod similar, să schimbăm procedura „La crearea pe server” 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 planificate. Să luăm în considerare una dintre opțiunile de implementare. Să adăugăm un atribut de formă boolean și un comutator asociat:


La modificarea valorii comutatorului, vom schimba textul cererii. Pentru a face acest lucru, vom folosi handlerul de evenimente „On Change” pentru elementul de formular „Afișare cantitate la chitanță”. Trebuie să schimbăm proprietatea „QueryText” a listei dinamice în funcție de valoarea atributului. Deoarece această proprietate nu este disponibil pe client necesită un apel la procedura serverului:


Rezultatul modificărilor efectuate:



Spune-le prietenilor