Deschiderea unui formular gestionat. Cum se deschide o formă a unui obiect existent? Cum se deschide un nou formular de obiect

12.07.2020 Efecte foto

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.

Deschiderea programatică a formularelor într-o aplicație 1C gestionată 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 deschidere formular— 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 = noua structura;
Parametru. Insert("Cheie", FindC());
OpenForm(, Parametru);
Sfârșitul procedurii

&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”) ;
Sfârșitul procedurii

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 = noua structura;
Parametru. Insert("Baza", LinkToBuyerAccount) ;
OpenForm( "Document. Vânzări de bunuri și servicii. Formular obiect", Parametru) ;
Sfârșitul procedurii

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 listei dinamice, 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 = noua structura;

Selecție= Structură nouă;
Selecţie. Insert(„Proprietar”, LinkToNomenclature);

Parametru. Insert("Selectie", Selectie);

OpenForm( „Director.Numere GTD.Formular listă”, Parametru) ;
Sfârșitul procedurii

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 = noua structura;

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) ;
Sfârșitul procedurii

S-P ne spune următoarele:

Context global.GetForm
Contextul global
GetForm
Sintaxă:

GetForm(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>)
Parametri:

<ИмяФормы>(necesar)

Tip: .
Numele formularului. Formată ca o cale completă către obiectul de metadate Form (de exemplu, „Directory. Counterparties.Form.ObjectForm”, „GeneralForm.FileSavingForm”) sau ca cale completă către un obiect aplicație, completată de numele implicit al formularului (de exemplu, „Director.Produs.SelectionForm” ).
Nume implicite de formulare:

  • ObjectForm - formă implicită a obiectului;
  • GroupForm (FolderForm) - formular implicit de grup;
  • RecordForm - formular implicit de intrare în registru;
  • ListForm - formular de listă implicit;
  • ChoiceForm - formular de alegere implicit;
  • GroupChoiceForm - formular implicit de selecție a grupului;
  • ConstantsForm - forma implicită a constantelor pentru modul normal, setată ca formă a constantelor pentru configurare;
  • Form - forma implicită a constantei, raportului și procesării;
  • CommonForm - formă generală;
  • SettingsForm - formular implicit de setări de raport;
  • LoadForm - formular pentru încărcarea setărilor;
  • SaveForm - formular pentru salvarea setărilor;
  • VariantForm - formular pentru editarea unei variante de raport;
  • SearchForm - un formular pentru căutarea textului integral în date.
De exemplu, pentru a obține formularul general „Setări generale” ar trebui să scrieți următorul cod în modul:
Form = GetForm("GeneralForm.GeneralSettings");

Pentru rapoarte și procesări externe, numele formularului este specificat după cum urmează:

  • Raport extern.<имя отчета>.Formă.<имя формы>;
  • Raport extern.<имя отчета>.<имя стандартной формы>;
  • Procesare externă.<имя обработки>.Formă.<имя формы>;
  • Procesare externă.<имя обработки>.<имя стандартной формы>.
În acest caz, raportul sau prelucrarea externă trebuie înregistrate în prealabil în sistem.
<Параметры>(optional)

Tip: .
Parametrii formularului. Cheia de structură este numele parametrului, iar valoarea este valoarea parametrului formular. Numele elementului trebuie să se potrivească cu numele parametrului structurii.
P = Structură nouă(„Cheie”, Furnizor);
Form = GetForm("Director. Counterparties.ObjectForm", P);
Form.Open();
<Владелец>(optional)

Proprietarul unui formular este o formă sau un control al altei forme.
<Уникальность>(optional)

Tip: Gratuit.
Acest parametru poate specifica o cheie, a cărei valoare va fi folosită pentru a căuta formulare deja deschise. Dacă se găsește un formular cu aceeași cheie de unicitate, în loc să se deschidă un formular nou, formularul găsit va fi activat.
- căutați un formular cu o cheie de unicitate implicită, - nu căutați deloc un formular, orice altă valoare stabilește cheia de unicitate prin care va fi efectuată căutarea.
Valoare implicită: .
<Окно>(optional)

Tip: ; .
Fereastra aplicației în care va fi deschis formularul.
Se aplică numai formularului gestionat. O fereastră poate fi doar fereastra principală a aplicației sau o fereastră de formular auxiliară.
Dacă este specificat tipul, fereastra formularului va fi creată în funcție de opțiunea selectată.
<НавигационнаяСсылка>(optional)

Tip: ; .
Dacă conține o altă valoare decât , atunci acea valoare este atribuită unei proprietăți a formularului care rezultă din apelarea acestei metode, iar proprietatea acelui formular este setată la .
Valoare implicită: .
Valoarea returnată:

Tip: ; ; .
- dacă handlerul este setat să respingă crearea formularului.
Descriere:

Obține formularul sau formularul gestionat. Înainte de a primi, se efectuează o căutare pentru o formă deja deschisă de același tip.
Căutarea se efectuează după tipul formularului, valorile parametrilor cheii formularului, proprietarul formularului, cheia unicității utilizatorului.
Dacă în parametru<Уникальность>valoarea este transmisă, apoi căutarea formularelor deja deschise nu se efectuează.
Disponibilitate:

Client subțire, client web, client gros, aplicație mobilă (client).
Nota:

În clientul thin și web, se primește doar formularul gestionat.
Formele convenționale de prelucrare externă nu sunt acceptate.
Dacă, la primirea unui formular regulat în parametru<ИмяФормы>Este specificat un nume de formular non-standard; parametrii trecuți nu sunt procesați.
Pot exista mai multe apeluri către server în timpul execuției. Unele dintre ele sunt stocate în cache. Există întotdeauna cel puțin o cerere către server și nu este stocată în cache. Memorarea în cache depinde de versiunea platformei și de versiunea de configurare în ansamblu. Dacă viteza conexiunii este setată la mică și linia curentă nu este specificată, formularul de selecție este stocat în cache. Cache-ul este șters la fiecare 20 de minute. Formularele care nu au fost folosite în această perioadă de timp sunt șterse.
Vezi și:

Acasă Pentru dezvoltatori începători Învață să programezi

Cum se deschide o formă a unui obiect existent?

Când deschideți o formă a unui obiect existent, trebuie, pe lângă numele formularului, să indicați și obiectul al cărui formular trebuie deschis. Pentru a face acest lucru, utilizați parametrul Formular cheie și un link către obiectul de interes pentru noi.

De exemplu, dacă din formularul de listă de organizații trebuie să deschideți formularul organizației pe care se află cursorul, puteți face acest lucru în felul următor:

Trecem parametrii formularului sub forma unei structuri, unde numele elementului de structură corespunde numelui parametrului formularului, iar valoarea este valoarea la care dorim să setăm parametrul formularului.

Dacă doriți să deschideți nu forma principală, ci o formă arbitrară a unui obiect creat în configurator, în loc de numele standard al formei principale (ObjectForm), indicați cuvântul Form urmat de un punct - numele formei create în configuratorul.

De exemplu:

ReferenceToDirectoryElement = Elements.List.CurrentRow; FormParameters = New Structure ("Cheie", ReferenceToDirectoryElement); OpenForm("Directory.Organizations.Form.UniversalObjectForm",FormParameters);

Trebuie remarcat faptul că, în cazul în care, în afară de o legătură către un obiect, nu trebuie să treacă parametri în formularul care se deschide și este nevoie de forma principală a obiectului existent, puteți utiliza o metodă mai simplă - deschideți formularul folosind procedura OpenValue():

OpenValue(Items.List.CurrentRow);

Această metodă este mai puțin versatilă, dar în unele cazuri economisește timp și efort. De exemplu, în cazul luat în considerare, o astfel de linie poate înlocui întreaga procedură de trei linii pe care am scris-o mai devreme.

Cu toate acestea, trebuie să aveți grijă când utilizați această procedură. În unele cazuri, poate provoca apeluri suplimentare către server, de exemplu, atunci când trebuie să deschideți un formular de element de director ierarhic. Când utilizați această procedură, platforma va efectua un apel suplimentar către server pentru a determina dacă un element este un grup sau nu, deoarece trebuie deschise diferite formulare pentru element și pentru grup.

În același timp, această informație poate fi cunoscută în prealabil dezvoltatorului în cadrul algoritmului său și, folosind funcția OpenForm(), dezvoltatorul poate deschide formularul dorit fără apeluri suplimentare către server, specificând imediat numele standard al principalului formă.