Publicația este destinată celor care sunt interesați de posibilitățile neobișnuite de a lucra în program cu forme
Așa a fost. Verificările părții de masă în timpul executării documentului au fost adăugate la procesatorul de evenimente necorespunzător pentru evenimentul "Înainte de înregistrare". Pentru verificarea în sine a fost apelat codul de pe server. Depanarea de pe server este dezactivată. Eroarea din algoritmul de verificare sa prăbușit provocând o excepție dacă există unele elemente ale directorului în secțiunea de tabelă. Această bombă cu timp a lucrat la un document în care au fost adăugate câteva sute de linii. Ca de obicei în timpul procesului de umplere, butonul "Salvare" nu a fost niciodată apăsat. Ca rezultat, stocarea unui document cu dificultate nu a fost posibilă, iar căutarea manuală a liniilor care interferează cu înregistrările a fost comparabilă cu reumplerea documentului.
Solicitările către baza de date au fost inutile - documentul nu a fost înregistrat. Nu au existat procese externe de umplere a documentului și nu a existat nimic de înlocuit pentru a procesa partea de masă a unui document deja deschis. Lucrarea a fost efectuată într-un client gros cu o aplicație obișnuită, ceea ce a făcut imposibilă utilizarea metodei Get Window (). Documentul trebuia să fie salvat printr-o altă metodă.
Aceasta este ideea cheie care se exprimă într-o singură linie de cod:
NaKliente
Butonul Procedură Executați Apăsați (Comandă)
Manipularea Formularului Gestionat = TypeZHCH (Acest Formular) = Tip ("Formular Gestionat");
Dacă NU este această Manipulare a Formelor Gestionate Apoi, // în forma obișnuită, recuzele principale sunt numite HandlingObject,
Obiect = Acest formular. ObrabotkaObekt; // pentru uniformitatea codului vom lucra întotdeauna cu variabila Object
Sfârșit Dacă;
Dacă nu este formularul. Deschide () Apoi
Raport ("Ați selectat un document a cărui formă nu este deschisă" Mai întâi deschideți formularul de document. ");
return;
Sfârșit Dacă;
Dacă TypeZ (Form) = Type ("Formular gestionat") Apoi
Obiect copiere = Formă. opoziție; // aici nu luăm în considerare faptul că în cazuri rare obiectul poate fi redenumit
În caz contrar, dacă Type = (Type) = Type ("Form") atunci
Obiect copiere = Formă. DokumentObekt; // aici nu luăm în considerare faptul că în cazuri rare obiectul poate fi redenumit
Sfârșit Dacă;
Pe server
Funcția CopyObjectOnServersOn ControlApplication (Numele obiectului metadatelor)
// În aplicația gestionată ne vom baza pe date
DocumentObject = DataFormsValue (tipul obiectului ("DocumentObject." + Numele metadatelor));
NewObject = DocumentObject. Copiați ();
// Aici puteți face o modificare de program a documentului, de exemplu, ștergeți linii care interferează cu înregistrările
# Dacă clientul gros este o aplicație normală atunci
Funcția Application CopyObjectOnClientExtended (numele obiectului metadatelor)
Dacă TypeZ (Object) = Type ("Formulare de date") Atunci // datele de control al formularului
DocumentObject = DataFormsValue (tipul obiectului ("DocumentObject." + Numele metadatelor));
NewObject = DocumentObject. Copiați ();
În caz contrar, // un obiect dintr-un formular obișnuit
NewObject = Obiect. Copiați ();
Sfârșit Dacă;
// Aici puteți face o modificare de program a documentului, de exemplu, ștergeți linii care interferează cu înregistrările
Valoare deschisă (NewObject); // Într-o aplicație normală, documentul poate fi deschis fără scrierea în baza de date
Terminați funcția
# ENDIF