Cum se configurează smartphone-uri și PC-uri. Portal de informare
  • Acasă
  • VKontakte
  • 1c selecție în formularul de selecție. Cum se deschide un formular de listă cu o anumită selecție? TypeArray = Matrice nouă

1c selecție în formularul de selecție. Cum se deschide un formular de listă cu o anumită selecție? TypeArray = Matrice nouă

Deschiderea programatică a formularelor într-o aplicație gestionată 1C diferă semnificativ de deschiderea lor într-o aplicație obișnuită. Să ne uităm mai întâi la vechea metodă. Constă în primirea unui formular și apoi deschiderea lui în mod normal sau modal (când este deschis în mod modal, formularul blochează programul).

GetForm() . Deschide()

Aceasta este cea mai lentă metodă de deschidere a formularelor. Cu toate acestea, vă permite să procesați în mod programatic formularul înainte de a-l deschide. Pentru a procesa codul, trebuie să schimbați puțin:

Formular = GetForm( "Document. Primirea bunurilor și serviciilor. Formular document") ;
//Aici efectuăm acțiuni cu formularul
Formă. Deschide();

Trebuie avut în vedere că la primirea formularului se va executa o altă procedură eveniment WhenCreatedOnServer.

Să ne uităm la alte metode care vă permit să deschideți formulare într-o aplicație gestionată 1C mai rapid și mai convenabil. În funcție de situația specifică, pot fi utilizate diferite metode.

1. Cum se deschide un formular de obiect într-o aplicație gestionată dacă există un link către acesta.

În acest caz, totul este extrem de simplu.

RefLink = Directoare. Nomenclatură. FindByCode("000000001");
OpenValue(RefLink) ;

2. Cum se deschide formularul de selecție și apoi se obține valoarea selectată.

Există o funcție pentru asta EnterValue(). Funcția are 3 parametri:

  • Variabila în care va fi scrisă valoarea selectată;
  • Un indiciu care va fi afișat în fereastra de selecție;
  • Descrierea tipurilor de valori selectate. Pot exista mai multe tipuri, caz în care vi se va solicita să selectați un tip înainte de a selecta o anumită valoare.

Ca rezultat al executării funcției, se va deschide formularul de selecție implicit pentru un obiect de tipul specificat.

Valoare variabilă;
Array= nou Array;
Matrice. Adăugați(Tip( „DirectoryLink.Nomenclatură”) ) ;
Matrice. Adăugați(Tip( „DirectoryLink. Contrapărți”) ) ;

TypeDescription= new TypeDescription(Array) ;

Res = EnterValue(Valoare, „Hint” , TypeDescription) ;

Metodele anterioare vă permiteau doar să deschideți formularele implicite pentru obiecte (formular obiect sau formular de selecție). Dacă trebuie să deschideți un formular personalizat, puteți utiliza funcția OpenForm().

Această funcție are destul de mulți parametri. Să ne uităm la unele dintre ele:

  • Numele formularului— aici puteți selecta oricare dintre formele standard de obiect, de exemplu, Formular de selecție sau Formular de listă. Sau un formular specific creat de dezvoltatori.
  • Opțiuni— vă permite să îl transferați în formularul din formular structurilor anumiți parametri înainte de a-l deschide, determinând astfel datele de ieșire. Parametrii pot fi orice date care pot fi transmise de la client la server. Parametrii trecuți la deschiderea formularului pot fi procesați în procedură WhenCreatingOnServer() la formularul care se deschide.
  • Modul de deschidere a formularului— are 3 opțiuni: independent, blocați întreaga interfață, blocați formularul de proprietar.

Să vedem cum este utilizată funcția OpenForm() in diverse situatii.

3. Cum se deschide forma unui obiect existent

Fiecare formular are un atribut cheie. Este evidențiată cu caractere aldine în lista detaliilor formularului și este de obicei numită Obiect sub forme de elemente de cărţi de referinţă şi documente. Alte obiecte pot avea un nume diferit. Pentru a deschide o formă a unui obiect existent, trebuie să treceți un parametru formularului care se deschide Cheie cu valoarea ca referință la un obiect.

&OnClient
Procedură Comanda 1 (Comandă)
Parametru= structură nouă;
Parametru. Insert("Cheie", FindC());
OpenForm(, Parametru);
EndProcedure

&OnServer
Funcția FindC();
Retur Directoare. Contrapartide. FindByRequisites ("TIN", "745107734623")
EndFunction

4. Cum se deschide un nou formular de obiect

O funcție simplă va face aici OpenForm() fara nici un parametru.

&OnClient
Procedură Comanda 1 (Comandă)
OpenForm( „Director. Contrapărți. Formă obiect”) ;
EndProcedure

5. Cum să deschideți un formular de obiect nou și să îl completați în funcție de ceva

Trebuie să treceți un parametru Baza, a cărui valoare va fi o referință la obiectul de bază de umplere. Aceasta va începe procedura ProcessFill().

&OnClient
Procedură Comanda 1 (Comandă)
Parametru= structură nouă;
Parametru. Insert("Baza", LinkToBuyerAccount) ;
OpenForm( "Document. Vânzări de bunuri și servicii. Formular obiect", Parametru) ;
EndProcedure

Acest exemplu va crea un document Vânzări de bunuri și serviciiși completat pe baza unei facturi de plată către cumpărător, link-ul către care a fost transmis.

6. Cum să deschideți un formular și să setați o selecție pe el

Selecția pe formularele 1C poate fi simplă sau complexă. Selecția simplă implică expresii precum Organizație = Horns and Hooves LLC. Selecția complexă implică alte tipuri de comparație, de ex. Pe listă. În acest articol vom lua în considerare organizarea selecției simple, iar un articol separat va fi dedicat selecției complexe.

Pentru a organiza o selecție simplă, trebuie să treceți un parametru cu o cheie la formularul care se deschide Selecţie, valoarea va fi o structură în care cheia este numele câmpului de listă dinamică, iar valoarea este datele căutate.

De exemplu, să deschidem formularul de listă de directoare numere GTDși faceți o selecție acolo de proprietar - element de director Nomenclatură.

&OnClient
Procedură Comanda 1 (Comandă)
Parametru= structură nouă;

selectie= Structura noua;
Selecţie. Insert(„Proprietar”, LinkToNomenclature);

Parametru. Insert("Selectie", Selection) ;

OpenForm( „Director.Numere GTD.Formular listă”, Parametru) ;
EndProcedure

7. Cum se deschide formularul de intrare în registrul de informații

Pentru a face acest lucru, veți avea nevoie de cheia de introducere a registrului de informații.

Cheie de înregistrare— acestea sunt valorile tuturor măsurătorilor și ale perioadei (dacă registrul este periodic). Adică, o cheie de înregistrare reprezintă parametrii prin care o înregistrare poate fi identificată în mod unic.

Algoritmul de deschidere este următorul:

  1. Introducem în structură datele cheii de înregistrare cu valorile necesare.
  2. Am plasat structura rezultată într-o matrice.
  3. Creăm o cheie de înregistrare din matrice.
  4. Trecem un parametru formularului care se deschide Cheie cu cheia de înregistrare de la pasul 3 ca valoare.

&OnClient
Procedură Comanda 1 (Comandă)
Parametru= structură nouă;

KeyParameters= Structură nouă;
Parametri cheie. Insert("Nomenclatură", LinkToNomenclature);
Parametri cheie. Insert(„PriceType”, LinkToPriceType) ;
Parametri cheie. Insert(„Perioada”, Data) ;

KeyArray = matrice nouă;
KeyArray. Add(KeyParameters) ;

EntryKey = Nou( „Registrul de informații Cheie de înregistrare.Nomenclatură prețuri”, KeyArray) ;

Parametru. Insert(„Cheie”, RecordKey);

OpenForm( „Registrul informațiilor. Prețurile nomenclaturii. Formular de înregistrare”, Parametru) ;
EndProcedure

Cum se deschide un formular de listă cu o anumită selecție?

Există mai multe moduri de a deschide un formular de listă cu o selecție prestabilită. Să le privim în ordine:

1. Prima metodă este că la deschiderea formularului, puteți seta parametrul Formular de selecție și deschideți formularul de listă cu acest parametru. Parametrul de selecție reprezintă structura. Numele elementelor corespund denumirilor câmpurilor prin care se face selecția, iar valorile conțin valorile selecției. Aceasta este o opțiune de extensie a formularelor gestionate de listă dinamică. Adică există pentru formularele al căror atribut principal este atributul tip Lista dinamică, cum ar fi formularele de listă și formularele de selecție.

La deschiderea formularului, selecția se va face pe baza câmpului specificat. De exemplu, în exemplul următor, o listă de facturi este deschisă cu selecție după câmpul Număr, egal cu 333.

Valoare de selecție = Structură nouă ("Număr", "333");

SelectionParameters = New Structure ("Selectie", SelectionValue);

OpenForm("Document. Factură de chitanță. Formular de listă", Opțiuni de selecție);

2. Puteți deschide un formular de listă fără parametri:

OpenForm ("Document.Factură.ListForm");

Și apoi, în gestionarea de evenimente a formularului de listă de facturi Când CreatedOnServer scrie codul care creează o selecție într-o listă dinamică, care este atributul principal al formularului:

&OnServer

Procedură când este creat pe server (Eșec, procesare standard)

Element de selecție = List.Selection.Elements.Add(Type("DataComposition Selection Element");

SelectionElement.LeftValue = NewDataCompositionField(„Număr”);

SelectionElement.ComparisonView = DataCompositionComparisonView.More;

SelectionElement.Use = Adevărat;

SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.Inaccessible;

SelectionElement.RightValue = "000000001";

EndProcedure

Avantajele acestei metode sunt că Tipul de comparație pentru selecție poate fi setat nu numai Egal, ca în primul caz, ci și Mai mult, Mai puțin etc.

Dar această metodă are și un dezavantaj foarte semnificativ: cu această selecție, formularul se va deschide întotdeauna. Oriunde a fost chemată. Prin urmare, acest formular nu ar trebui să fie desemnat ca principal. Și dacă, totuși, este principalul, atunci înainte de a instala selecția, este necesar să se furnizeze un fel de analiză a de unde se deschide acest formular. De exemplu, analiza parametrilor formularului.

3. În cele din urmă, condiția de selecție poate fi plasată într-o interogare personalizată care selectează date pentru o listă dinamică. De exemplu, trebuie să deschidem o listă de facturi care conțin articolul evidențiat în lista de articole.

Pentru a face acest lucru, sub forma unei liste de articole, creați o comandă și un buton corespunzător Facturi de chitanță.

Să completăm handlerul de execuție pentru această comandă după cum urmează:

&OnClient

Procedura ChitanțeFacturi (comandă)

ListForm = GetForm ("Document.Factură.ListForm");

ListForm.FilterByProduct = Elements.List.CurrentRow;

ListForm.Open();

EndProcedure

În acest handler, primim formularul pentru lista de facturi și trecem linkul către articolul curent din lista de articole la parametrul de formular FilterByProduct și deschidem formularul cu acest parametru.

Apoi vom crea un formular de listă de documente Facturași creați atributul de formular FilterByProduct, pe care îl vom folosi ca parametru de formular când îl deschidem. Acum să deschidem paleta de proprietăți a atributului principal al formularului Listă. Să punem steagul CustomRequest iar în linie Configurarea listei faceți clic pe Deschidere.

În câmpul Solicitare, introduceți următorul text de solicitare:

ALEGE

Numărul facturii documentului.

Document Primire Factură.Data

DIN

Document.ReceiptInvoice AS DocumentReceiptInvoice

UNDE

Chitanța documentului Invoice.Products.Product = &Produs

În cerere, folosim parametrul Item, care va primi un link către linia curentă din lista de articole, conținută în parametrul de formular FilterBy Item invoice list. Pentru a face acest lucru, în gestionarea de evenimente a formularului de listă OnOpen, vom scrie cod pentru a seta valoarea parametrului de solicitare a produsului:

&OnClient

Procedura de deschidere (Eșec)

List.Parameters.SetParameterValue(„Produs”, FilterByProduct);

EndProcedure

Aici Listă.Opțiuni este o listă de parametri dinamici de solicitare a listei pentru atributul Listă. Valoarea parametrului Product este setată egală cu valoarea parametrului formular FilterByProduct.

Ca rezultat, la un clic pe un buton Facturi de chitanță sub forma unei liste de articole, vom primi o listă doar a acelor facturi care conțin articolul selectat în prezent în lista de articole.

Un exemplu demonstrativ pentru a treia opțiune se află în directorul 1CITS/EXE/FAQ/OpenFormWithSelection.dt. Exemplul a fost realizat pe platforma versiunea 8.2.9.356.

Acest cod vă permite să deschideți o listă de documente cu o selecție specificată, puteți deschide și o listă de elemente de director cu selecția dorită;

Cod 1C v 8.2 UP Form = OpenForm(„Document. Invoice.Form.ListForm”); //Deschideți formularul
SelectionOwner =Form.List.Selection.Elements.Add(Type("DataCompositionSelectionElement")); //Adăugați selecția
SelectionOwner.ComparisonView = DataCompositionComparisonView.Equals; //Cum ne vom compara
SelectOwner.Use = True; // Setați caseta de selectare pentru utilizarea NewDataCompositionField ("Nomenclatură")
SelectionOwner.LeftValue = NewDataCompositionField(„Cont”); //Ce detalii vom folosi pentru a face selecția?
SelectionOwner.RightValue = Object.Account; // Și însuși sensul selecției

Pentru a deschideți un formular de listă cu o selecție prestabilită utilizați următoarele metode:

Prima cale este că atunci când deschideți un formular, puteți seta parametrul Formular de selecție și puteți deschide formularul de listă cu acest parametru.

Parametrul de selecție reprezintă structura. Numele elementelor corespund denumirilor câmpurilor prin care se face selecția, iar valorile conțin valorile selecției. Aceasta este o opțiune de extensie a formularelor gestionate de listă dinamică. Adică, există pentru formularele al căror atribut principal este un atribut de tip DynamicList, de exemplu, formulare de listă și formulare de selecție.

De exemplu, în exemplul următor, o listă de facturi este deschisă cu selecție după câmpul Număr, egal cu 333.

Cod 1C v 8.2 Valoare de selecție UE = Structură nouă ("Număr", "333");
SelectionParameters = New Structure("Selectie", SelectionValue);
OpenForm("Document. Factură de chitanță. Formular de listă", Opțiuni de selecție);

A doua cale

Puteți deschide un formular de listă fără parametri:

Cod 1C v 8.2 UP OpenForm(„Document. Factură de primire. Formular de listă”);

Și apoi, în handlerul de evenimente al formularului pentru lista de facturi When CreatedOnServer, scrieți codul care creează o selecție în lista dinamică, care este atributul principal al formularului:

Cod 1C v 8.2 UP &OnServer
Procedură când este creat pe server (Eșec, Procesare standard)
Element de selecție = List.Selection.Elements.Add(Type("DataComposition Selection Element");
SelectionElement.LeftValue = NewDataCompositionField(„Număr”);
SelectionElement.ComparisonView = DataCompositionComparisonView.More;
SelectionElement.Use = Adevărat;
SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.Inaccessible;
SelectionElement.RightValue = "000000001";
EndProcedure

Avantajele acestei metode sunt că Tipul de comparație pentru selecție poate fi setat nu numai la Egal, ca în primul caz, ci și la Mai mult, Mai puțin etc.

Dar această metodă are și un dezavantaj foarte semnificativ: cu această selecție, formularul se va deschide întotdeauna. Oriunde a fost chemată. Prin urmare, acest formular nu ar trebui să fie desemnat ca principal. Și dacă, totuși, este principalul, atunci înainte de a instala selecția este necesar să oferiți un fel de analiză a de unde se deschide acest formular. De exemplu, analiza parametrilor formularului.

A treia cale

În cele din urmă, condiția de selecție poate fi plasată într-o interogare personalizată care selectează date pentru o listă dinamică.

De exemplu, trebuie să deschidem o listă de facturi care conțin articolul evidențiat în lista de articole.

Pentru a face acest lucru, sub forma unei liste de articole, creați o comandă și butonul corespunzător Chitanță facturi.

Să completăm handlerul de execuție pentru această comandă după cum urmează:

Cod 1C v 8.2 UP &OnClient
Procedura ChitanțeFacturi (comandă)
SelectionParameters = New Structure("FilterByProduct", Elements.List.CurrentRow);
OpenForm("Document. Factură de chitanță. Formular de listă", Opțiuni de selecție);
EndProcedure

În acest handler, deschidem formularul pentru lista de facturi, pasând un link către articolul curent din lista de articole la parametrul de formular FilterByProduct.

Apoi vom crea un formular pentru lista de documente: Chitanță Factură și vom crea un parametru de formular FilterBy Product, pe care îl vom folosi pentru a deschide un formular cu selecția necesară.

Acum să deschidem paleta de proprietăți a atributului principal al formularului Listă. Setați indicatorul de interogare personalizată și, în linia Setări listă, faceți clic pe Deschidere.

În câmpul Solicitare, introduceți următorul text de solicitare:

Cod 1C v 8.2 UP SELECT
Numărul facturii documentului.
Document Primire Factură.Data
DIN
Document.ReceiptInvoice AS DocumentReceiptInvoice
UNDE
Chitanța documentului Invoice.Products.Product = &Produs

În cerere, folosim parametrul Item, care va primi un link către linia curentă din lista de articole, conținută în parametrul de formular FilterBy Item invoice list.

Pentru a face acest lucru, în gestionarea de evenimente din formularul de listă, când CreatedOnServer, vom scrie cod pentru a seta valoarea parametrului de solicitare a produsului:

Cod 1C v 8.2 UP &OnClient
Procedura de deschidere (Eșec)
List.Parameters.SetParameterValue("Produs", Parameters.FilterByProduct);
EndProcedure

Aici List.Parameters este o listă de parametri dinamici de solicitare a listei pentru atributul List. Valoarea parametrului Product este setată egală cu valoarea parametrului formular FilterByProduct.

Ca urmare, făcând clic pe butonul Chitanță facturi din formularul de listă de articole, vom primi o listă doar a acelor facturi care conțin articolul selectat în prezent în lista de articole.

Pentru a deschideți formularul de selecție cu selecție în 1s 8.2(forme obișnuite), trebuie să realizăm unele acțiuni. O vom primi mai întâi. După aceea, vom seta selecția și o vom deschide programatic, iată un exemplu de cod:

Selectare pe formular în câmpul de intrare 1C 8.2 cu mai multe valori

În exemplul de mai sus ne-am uitat cum să setați selecția pe formularul de selecție după valoare specifică. Acum să ne uităm la o situație în care trebuie să înlocuiți mai multe valori, aceasta ar putea fi, de exemplu, o matrice sau descărcată dintr-un rezultat de interogare. Aceasta este o selecție în câmpul de intrare 1c cu sensuri multiple.

În primul rând, obținem formularul de selecție, trecem „Element” (proprietar) în parametri, setăm indicatorul modului de selecție. Apoi creăm o listă de valori și o matrice, observăm că, ca selecție, la setarea tipului de comparație în listă, un obiect poate fi prezent doar cu tipul ListValues. Adăugăm elemente la matrice, apoi încărcăm această matrice în Lista de valori, pe care o setăm ulterior în selecție. De asemenea, nu uitați să activați marcajul pentru utilizarea acestei selecții și să setați tipul de comparație.

Setarea selecției în câmpul de introducere al formularului din 1C 8.3, Evenimentul Începutul selecției

Acum să luăm în considerare selecție în câmpul de introducere pe un formular gestionat în 1C 8.3. Să găsim pe formular elementul care ne interesează, în care vom seta selecția, în cazul nostru acesta este câmpul „Organizare”. Găsim evenimentul „Start of Selection”, facem clic pe lupă și ne regăsim în procedură. Vedem parametrul Selection Data acest parametru este de tip ValueList. Pentru a limita selecția la elementele necesare, trebuie să completăm Lista de valori. Putem selecta elemente doar pe server, așa că creăm o procedură cu directiva de compilare &OnServer. În această procedură, completați Datele de selecție.

Cele mai bune articole pe această temă