Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Internet, Wi-Fi, rețele locale
  • 1c deschide programatic un document. Cum deschid forma unui obiect existent? Cum se deschide formularul de selecție și apoi se obține valoarea selectată

1c deschide programatic un document. Cum deschid forma unui obiect existent? Cum se deschide formularul de selecție și apoi se obține valoarea selectată

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

Cum deschid forma unui obiect existent?

La deschiderea formei unui obiect existent, este necesar, pe lângă numele formularului, să se indice obiectul, a cărui formă ar trebui deschisă. Pentru aceasta, se utilizează parametrul de formular Cheie și un link către obiectul de interes pentru noi.

De exemplu, dacă din forma listei 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ă trebuie 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), este indicat cuvântul Form și, printr-un punct după acesta, numele de formularul creat în configurator.

De exemplu:

ReferenceItemRef = Items.List.CurrentString; Parametri de formular = Structură nouă („Cheie”, ReferenceElementRef); OpenForm („Directory.Organizations.Form.UniversalFormObject”, Parametri formular);

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

OpenValue (Items.List.CurrentLine);

Această metodă este mai puțin versatilă, dar în unele cazuri economisește timp și efort. De exemplu, în cazul considerat, 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 pentru un articol dintr-un catalog ierarhic. Când se utilizează această procedură, platforma va efectua un apel suplimentar către server pentru a determina dacă elementul 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 avans de către dezvoltator în interiorul algoritmului său, iar folosind funcția OpenForm (), dezvoltatorul poate deschide formularul necesar fără apeluri suplimentare către server, specificând imediat numele standard al formularului principal. .

Bună ziua tuturor!
Cred că informațiile din acest subiect vor fi foarte utile multor vizitatori ai acestui forum.
Multă vreme nu am putut rezolva problema - cum să deschid forma unui document nou, astfel încât să nu se deschidă gol, ci deja completat parțial programatic, în timp ce documentul în sine nu a fost încă scris în baza de date? Am petrecut mult timp căutând o soluție la această problemă pe Internet, am vizitat multe forumuri unde a fost ridicată această problemă, dar doar câțiva dintre ei au găsit soluții. Cel mai simplu dintre ele este să creați mai întâi un document nou, să completați programatic detaliile necesare, să scrieți documentul în baza de date și apoi să îl deschideți utilizatorului. Ce se întâmplă dacă utilizatorul nu dorește să-l salveze? Dacă se răzgândește și închide forma deschisă? În acest caz, documentul deja înregistrat va rămâne în baza de date. Și cine are nevoie de documente suplimentare în baza de date?
Și dacă nu salvați documentul, atunci cea mai populară opțiune este să utilizați metoda GetForm ("Documents.NeedDocumentView.DocumentForm"). Dar, în acest caz, puteți obține un formular de document gol și pur și simplu îl puteți afișa folosind metoda Open (). Nici aceasta nu este o optiune...
După ceva timp, problema a fost rezolvată folosind funcția de context global „FillPropertyValues”.

Contextul global
FillPropertyValues
Sintaxă:
FillPropertyValues ​​​​(<Приемник>, <Источник>, <Список свойств>, <Исключая свойства>)
Descriere:
Copiază valorile proprietăților<Источника>în proprietăți<Приемника>... Potrivirea se face prin nume de proprietate.

Folosind sarcina mea ca exemplu, aș dori să explic cum poate fi utilizată această funcție pentru a completa formularul unui document nou. Sarcina a fost după cum urmează - Există un document (Ordin de lucru), al cărui atribut al secțiunii tabelare este un alt document (Furnizarea de servicii). Deci, a fost necesar să se facă astfel încât la adăugarea unui nou document „Prestarea serviciilor” la secțiunea tabelară a „Comandă-Comandă”, forma unui nou document „Predarea serviciilor” cu detaliile deja completate preluate din ordinea-ordine din care a fost chemată creația. În același timp, astfel încât noul document în sine, în momentul în care forma lui apare pe ecran, nu a fost încă scris în baza de date. Acest lucru trebuia făcut dacă utilizatorul decide brusc să nu completeze documentul și doar închide formularul.
Iată un fragment de cod cu o soluție la problemă:

& OnClient Procedura EnterRecord () RecordForm = GetForm ("Document.RenderingMedServices.ObjectForm"); Completați valorile proprietății (Formular de înregistrare.Obiect, Obiect, „Data, Specialist, Specializare, Asistentă, Stare de execuție”,); // Completați valorile atributelor, ale căror nume sunt aceleași în ambele documente TekStr = Elements.Receiving.CurrentData; // Datele liniei curente a documentului sursă PropertyStructure = New Structure; // Structura conține valorile acelor detalii care trebuie completate pe forma unui document nou, dar care nu se află în documentul sursă PropertyStructure.Insert ("OutfitRecord", Object.Link); StructureProperties.Insert („ReceptionTime”, TekStr.ReceptionTime); FillValues ​​​​of Properties (RecordForm.Object, PropertyStructure, "AttireRecord, Reception Time",); RecordForm.Open (); Sfârșitul procedurii

Adică facem toate operațiunile direct pe client, fără a contacta serverul, în cadrul unei proceduri create independent. De fapt, în acest fel puteți completa și deschide formularul oricărui document sau cărți de referință. Mai întâi, am completat cerințele de la un formular la altul folosind obiecte formular, iar apoi, folosind obiectul „Structură”, în care am introdus cerințele lipsă, am completat mai multe cerințe din formularul deschis, apoi am deschis formularul. .
Sper că această temă va economisi timp pentru mulți care s-au confruntat cu o problemă similară!

Deschiderea de formulare în mod programatic într-o aplicație gestionată 1C este semnificativ diferită de deschiderea lor într-o aplicație obișnuită. Să începem cu 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ă funcționarea programului).

GetForm (). Deschis()

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ă modificați puțin:

Formular = GetForm ( „Document. Recepția mărfurilorServicii. Formular document”) ;
// Aici efectuăm acțiuni cu formularul
Formă. Deschis ();

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

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

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ă.

Pentru aceasta există o funcție Introduceți valoarea (). Funcția are 3 parametri:

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

Ca urmare a executării funcției, se va deschide formularul de selecție implicit pentru obiectul de tipul specificat.

Valoare Var;
Array = matrice nouă;
Matrice. Adăugați (Tastați ( „DirectoryLink.Nomenclatura”) ) ;
Matrice. Adăugați (Tastați ( „DirectoryLink. Contractori”) ) ;

TypeDescription = nou TypeDescription (Matrice);

Res = EnterValue (Valoare, „Sugestie”, Descrierea tipurilor);

Metodele anterioare permiteau deschiderea doar a formularelor setate pentru obiecte în mod implicit (formular obiect sau formular de selecție). Dacă trebuie să deschideți o formă arbitrară, puteți utiliza funcția OpenForm ().

Această funcție are destul de mulți parametri. Să luăm în considerare câteva dintre ele:

  • Numele formularului- aici puteți alege oricare dintre formele standard de obiect, de exemplu, Formular de selecție sau Formularul de listă... Sau un formular specific creat de dezvoltatori.
  • Parametrii- vă permite să vă transferați la formularul din formular structurilor câțiva parametri înainte de a-l deschide, definind astfel datele de ieșire. Parametrii pot fi orice date care pot fi transferate de la client la server. Parametrii trecuți la deschiderea formularului pot fi procesați în procedură OnCreateAtServer () la forma deschisă.
  • Modul deschidere formular- are 3 opțiuni: independent, blocați întreaga interfață, blocați formularul proprietarului.

Să vedem cum se aplică funcția OpenForm () in diferite situatii.

3. Cum se deschide forma unui obiect existent

Fiecare formular are o recuzită cheie. Este evidențiat cu aldine în lista de atribute de formular și este de obicei numit Un obiect la forme de elemente de directoare, documente. Alte obiecte pot avea un nume diferit. Pentru a deschide forma unui obiect existent, trebuie să treceți parametrul în formularul deschis Cheie cu o valoare sub forma unei referințe la obiect.

& OnClient
Procedură Comanda 1 (Comandă)
Parametru = structura noua;
Parametru. Insert ("Cheie", FindS ());
OpenForm (, Parametru);
Sfârșitul procedurii

&Pe server
Funcția FindC ();
Retur Directoare. Antreprenori. Căutați după cerințe ("INN", "745107734623")
EndFunction

4. Cum se deschide forma unui obiect nou

Doar o funcție va funcționa aici OpenForm () fara nici un parametru.

& OnClient
Procedură Comanda 1 (Comandă)
OpenForm ( "Director. Antreprenori. Formular 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. ProcessingFill ().

& OnClient
Procedură Comanda 1 (Comandă)
Parametru = structura noua;
Parametru. Inserare („Baza”, Link de cont către Cumpărător);
OpenForm ( „Document.RealizationGoodsServices.ObjectForm”, Parametru) ;
Sfârșitul procedurii

Acest exemplu va crea un document Vanzare de bunuri si servicii si completata pe baza facturii de plata catre cumparator, link-ul catre care a fost transmis.

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

Selecția pe formularele 1C poate fi simplă sau complexă. Selecția simplă oferă expresii precum Organizație = SRL „Horns and Hooves”. Selecția complicată implică alte tipuri de comparații, de exemplu, În listă... În acest articol, vom lua în considerare organizarea unei selecții simple, iar un articol separat va fi dedicat celei complexe.

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

De exemplu, să deschidem forma listei de directoare numere GTDși faceți o selecție acolo de către proprietar - un element de director Nomenclatură.

& OnClient
Procedură Comanda 1 (Comandă)
Parametru = structura noua;

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

Parametru. Inserare („Selectare”, Selecție);

OpenForm ( „Formular Directory.NumbersGTD.List”, Parametru) ;
Sfârșitul procedurii

7. Cum se deschide formularul de înregistrare a registrului de informații

Pentru a face acest lucru, aveți nevoie de o cheie de scriere a registrului de informații.

Cheie de înregistrare- acestea sunt valorile tuturor măsurătorilor și ale perioadei (dacă registrul este periodic). Adică, cheia de înregistrare reprezintă parametrii prin care înregistrarea 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 pus structura rezultată într-o matrice.
  3. Creați o cheie de înregistrare din matrice.
  4. Trecem parametrul în formularul deschis Cheie cu cheia de înregistrare de la articolul 3 ca valoare.

& OnClient
Procedură Comanda 1 (Comandă)
Parametru = structura noua;

KeyParameters = Structură nouă;
Parametri cheie. Inserare („Nomenclatură”, ReferenceNomenclature);
Parametri cheie. Inserare („PriceType”, LinkPriceType);
Parametri cheie. Inserare („Perioada”, Data);

KeyArray = matrice nouă;
ArrayKey. Adăugați (KeyParameters);

KeyRecord = Nou ( „Prețuri DataRecordRecordKey.Nomenclatură”, ArrayKey);

Parametru. Inserare („Cheie”, KeyRecord);

OpenForm ( "Registrul de informații. Nomenclatură prețuri. Formular de înregistrare", Parametru) ;
Sfârșitul procedurii

Top articole similare