Ce este un handler de evenimente în 1s. Toate abonamentele la evenimente. Abonamente la evenimentul „La postarea” unui document

Acest articol este un anunț despre noi funcționalități.
Nu este recomandat să folosiți conținutul acestui articol pentru a afla funcționalități noi.
O descriere completă a noii funcționalități va fi furnizată în documentația pentru versiunea corespunzătoare.
O listă completă a modificărilor din noua versiune este furnizată în fișierul v8Update.htm.

Implementat în versiunea EDT 1.7.0.567.

În 1C: Instrumente de dezvoltare a întreprinderii (EDT) am implementat un prototip al unui nou instrument. Numele de lucru al acestui instrument este editor Toate abonamentele la evenimente. Vă va ajuta să analizați convenabil abonamentele la toate evenimentele care există în soluția aplicației.

Abonamente la evenimente

Platforma 1C:Enterprise vă permite să creați abonamente la evenimente ale obiectelor de configurare din soluția aplicației. Un abonament este o procedură care va fi executată după ce handlerul de evenimente inițial a fost executat. Comoditatea abonamentelor constă în faptul că o procedură poate fi „abonată” la un eveniment aparținând diferitelor obiecte de configurare. Astfel, dacă există un algoritm care trebuie executat atât la înregistrarea unei organizații, cât și la înregistrarea unui departament, acesta poate fi localizat în abonament și atunci nici măcar nu va trebui să schimbați handlerii pentru acest eveniment în obiectele în sine.

Se pare că abonamentul este un mecanism convenabil și universal. Dar în soluțiile de aplicații mari numărul de abonamente la evenimente poate ajunge la câteva sute. Devine incomod să le analizezi în arborele de configurare, într-o listă liniară. De exemplu, într-o soluție de aplicație 1C: Managementul întreprinderii (ERP) peste 340 de abonamente la evenimente.

EDT ușurează oarecum lucrul cu abonamentele afișându-le în panou Sistem, când este deschis un modul al unui obiect aplicație.


Această afișare a abonamentelor este convenabilă pentru o serie de sarcini legate de editarea unui modul. Dar încă nu este potrivit atunci când trebuie să găsiți și să analizați rapid toți algoritmii care sunt executați în abonamente atunci când are loc un anumit eveniment.

Toate abonamentele la evenimente

Pentru a scăpa de inconvenientele enumerate mai sus, am implementat o modalitate universală de a reprezenta abonamente, evenimente, obiecte de configurare și proceduri în care sunt implementați algoritmii de abonament.


Drept urmare, puteți apela editorul Toate abonamentele la evenimente pentru întreaga configurație, sau doar pentru un obiect - diferența va fi doar în compoziția datelor, filtrate într-un fel.


În partea stângă, editorul arată toate evenimentele și, în fiecare eveniment, toate abonamentele sale. Când selectați un anumit abonament, în dreapta sus este afișată o listă de obiecte de configurare la ale căror evenimente este „abonat” abonamentul. Iar modulul și procedura în care se află algoritmul de abonament sunt afișate în dreapta jos. Făcând dublu clic pe o procedură, o puteți deschide în editorul de limbă încorporat.

În timp ce vă aflați în editor, puteți analiza nu numai abonamentele individuale, ci și toate abonamentele legate de un eveniment. Dacă selectați un eveniment, editorul va afișa toate modulele și toate procedurile semnate pentru procesarea acestui eveniment.


Dacă apelați editorul pentru un obiect de configurare, vor fi afișate doar evenimentele și abonamentele acelui obiect, iar obiectul în sine va fi întotdeauna evidențiat cu roșu în lista sursă. Astfel puteți verifica rapid, de exemplu, dacă abonamentul pe care îl alegeți funcționează pentru toate obiectele de configurare pentru care este necesar.


Apelarea editorului folosind o comandă de context (pe un obiect de configurare) vă permite să reduceți imediat numărul de abonamente afișate în editor. De exemplu, puteți vizualiza abonamente numai pentru acele evenimente care sunt procesate în modulul obiect sau în modulul manager.


În plus, editorul conține un filtru universal cu ajutorul căruia poți personaliza în orice mod compoziția obiectelor, evenimentelor și procedurilor.


Rețineți că cu acest filtru puteți selecta nu numai obiecte specifice care sunt sursa evenimentelor, ci și seturi de tipuri precum DirectoryObject, DocumentObject si altii. Astfel de seturi de tipuri includ toate directoarele sau toate documentele care sunt în configurație.

Căutând după șir, puteți găsi rapid doar acele abonamente care se referă la mecanismul care vă interesează.


În orice moment, puteți filtra rapid conținutul după eveniment sau sursă afișată în editor. De exemplu, ați găsit un abonament Verificați formula de calcul. Sursa sa este planul tipurilor de calcul Ține.


Folosind comanda context din planul de tipuri de calcul, puteți vedea rapid doar acele abonamente care sunt asociate cu evenimentele acestuia.


Adăugarea automată a punctelor de întrerupere

O modalitate obișnuită de a analiza abonamentele la evenimente este de a vizualiza secvențial toate procedurile apelate în depanator, în ordinea în care au fost executate. Pentru a face acest lucru, editorul oferă un instrument convenabil pentru adăugarea automată a punctelor de întrerupere la handlere.

În primul rând, puteți apela acest instrument direct în editor.


Puteți găsi și selecta obiectul de care sunteți interesat, puteți selecta unul dintre evenimentele acestuia și puteți marca, de exemplu, toți gestionanții. După ce faceți clic Bine punctele de întrerupere vor fi adăugate la prima linie executabilă a fiecărui handler verificat și toate aceste puncte de întrerupere vor apărea în panou Puncte de întrerupereîn perspectivă Depanare.


O altă modalitate de a adăuga puncte de întrerupere este convenabilă atunci când ați găsit deja obiectul sau evenimentul de care sunteți interesat în editor. În acest caz, puteți apela comanda care vi se potrivește din meniul contextual.


Și, în sfârșit, a treia modalitate pe care o puteți folosi este să adăugați automat puncte de întrerupere în timpul depanării. În acest caz, nu este nevoie să deschideți editorul, deoarece comanda add se află chiar în panou Puncte de întrerupere.


Deci editorul Toate abonamentele la evenimente este un instrument universal care vă permite să utilizați o varietate de scenarii de analiză. Va fi util nu numai dezvoltatorilor care cunosc bine soluția aplicației, ci și specialiștilor în implementare sau specialiștilor IT care trebuie să înțeleagă funcționalitatea necunoscută.

Când utilizatorul efectuează orice acțiune, platforma 1C generează evenimente de program. De regulă, nu este generat un eveniment, ci un întreg lanț de evenimente. Sarcina programatorului este să plaseze corect codul programului în evenimente pentru a obține comportamentul așteptat din program. Cu toate acestea, acest lucru nu va fi ușor de făcut pentru un programator 1C începător, din motivele enumerate mai jos.

Evenimentele pot fi generate într-o formă controlată: On ReadingOnServer, OnCreatingOnServer, OnOpening etc.

Evenimentele într-o formă controlată sunt generate pe client și pe server: BeforeRecord, BeforeRecordOnServer.

Evenimentele sunt apelate în diferite module: ElementForm, ObjectModule, ManagerModule.

Unele evenimente pot fi apelate de mai multe ori dacă există mai multe elemente de director în listă, de exemplu: ProcessingGetView.

Un formular gestionat poate fi deschis ca urmare a diferitelor acțiuni ale utilizatorului, iar lanțurile de apeluri de evenimente vor diferi. Oricare dintre următoarele acțiuni ale utilizatorului cu directorul va deschide o formă controlată: crearea unui element nou, copierea unui element, modificarea unui element de director existent.

Evenimentele sunt generate și de elementele formularului: la adăugarea unui rând în partea tabulară, la editarea unui rând în partea tabulară, la activarea unui rând sau câmp, la selectarea unui element de căutare în câmpul de introducere etc.

Pentru a înțelege mai bine logica și secvența evenimentelor declanșate, puteți utiliza dezvoltarea „Studiul evenimentelor” atașată acestui articol. Cunoscând contextul apelului de eveniment, secvența evenimentelor și acțiunile pe care utilizatorul le va efectua, va fi mai ușor de înțeles în ce handler de evenimente este cel mai bine plasat codul programului.

Instrucțiuni pentru utilizarea programului Studiu de evenimente

Programul Event Study arată evenimentele pe care platforma 1C le generează în timpul acțiunilor interactive ale utilizatorului. Principiul de funcționare este următorul: utilizatorul deschide directorul, programul arată lanțul de evenimente. Utilizatorul marchează un element de director pentru ștergere, iar programul afișează secvența evenimentelor care au loc. Evenimentele sunt afișate implicit cu o ușoară întârziere de 3 secunde, acest lucru este necesar pentru a separa un lanț de evenimente de un alt lanț de evenimente. Prin urmare, trebuie să efectuați acțiuni interactive „încet”.

Toate evenimentele sunt afișate într-o fereastră specială „Ultimele evenimente”. Aici puteți activa sau dezactiva înregistrarea evenimentelor. În mod implicit, înregistrarea evenimentelor este activată la prima deschidere. Vă sfătuiesc să fixați fereastra „Ultimele evenimente” în partea de jos a ecranului imediat când porniți programul, pentru vizualizarea comodă a evenimentelor.

Programul în sine nu poate determina ce acțiune a provocat lanțul de evenimente; vă sfătuiesc să introduceți în câmpul „Cauza acțiunii” numele ultimelor acțiuni, de exemplu, „Formularul listei de director este deschis”, „Un element din director lista este marcată pentru ștergere” etc. Acest lucru va face apoi mai ușor de analizat acțiunile și evenimentele.

Evenimentele sunt înregistrate și afișate pentru obiectele plasate în secțiunea „Urmărirea evenimentelor”, cu condiția ca înregistrarea evenimentelor să fie activată în formularul „Evenimente recente”.

Toate evenimentele înregistrate pot fi vizualizate prin „Raportul evenimentului”, care se află în secțiunea „Servicii”.

Pentru a șterge rapid toate acțiunile și evenimentele înregistrate, în secțiunea „Servicii”, selectați „Ștergeți evenimentele și acțiunile”.

Abonamentul la un eveniment 1C 8.3 și 8.2 este un obiect de configurare care vă permite să atribuiți un handler unui anumit eveniment obiect. Un astfel de handler poate fi atribuit mai multor obiecte de configurare simultan, de exemplu, tuturor documentelor simultan.

Să aruncăm o privire mai atentă la acest obiect de metadate.

  • Când instalați un număr nou
  • La copiere
  • ProcesareUmplere
  • Înainte de înregistrare
  • Când se înregistrează
  • Înainte de Ștergere
  • PrelucrareConducere
  • ProcesareEliminare În curs de desfășurare
  • ProcesareVerificareUmplere

Vă puteți abona la un eveniment numai pe obiect, nu pe formă.

Ordinea de gestionare a apelurilor în 1C 8

Managerii de abonament la evenimente sunt apelați după handler-ul de obiect, adică. dacă abonamentul la eveniment este setat la evenimentul „ProcessingProcessing”, atunci va rula mai întâi handlerul din modulul obiect și apoi handlerul din abonament.

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

Dacă există mai multe abonamente la un eveniment, atunci, judecând după experiență, abonamentul care este mai sus în arborele de configurare este numit primul. Deși compania 1C însăși raportează că această prioritate nu a fost determinată.

Utilizarea abonamentelor la evenimente în 1C

Utilizarea abonamentelor este foarte convenabilă, de exemplu, pentru a înregistra modificări pentru . Sau o altă acțiune care este aceeași pentru diferite obiecte de configurare.

Folosesc adesea abonamente la evenimente pentru a nu schimba standardul. Acest lucru este foarte convenabil, de exemplu, într-un abonament putem ajusta mișcările documentelor sau putem adăuga mișcări la registre noi fără a modifica configurația.

Configurarea unui abonament la eveniment

Configurarea unui abonament este foarte simplă:

  • Sursă— tipuri de date pentru care este instalat handlerul;
  • Eveniment— evenimentul pentru care este instalat handlerul;
  • Handler— indică procedura din care va fi localizat handlerul de evenimente.

Când se dezvoltă sau se modifică soluții de aplicație pe platforma 1C:Enterprise 8.x, este foarte adesea necesar să se efectueze o acțiune standard pentru un grup de obiecte de configurare (de exemplu, directoare). Pentru a nu descrie acțiunile efectuate în modulul fiecărui obiect, dezvoltatorul poate folosi mecanismul standard al platformei - abonament la eveniment.

Abonamentele la evenimente vă permit să interceptați evenimente ale obiectelor de configurare, cum ar fi directoare, documente, planuri de tipuri caracteristice și altele. Astăzi, în articol, vom lua în considerare problema secvenței de execuție a gestionatorilor de abonamente la evenimente și vom analiza, de asemenea, comportamentul platformei cu mai multe abonamente la evenimente pentru o acțiune (de exemplu, la înregistrare).

Comportament standard

Exemplul nostru să folosească un anumit director „SimpleDirectory”. Are abonamente la evenimente create pentru fiecare eveniment la care dezvoltatorul poate interveni. Procedurile de gestionare a evenimentelor sunt localizate în modulul comun al serverului corespunzător.

Ordinea de apelare a gestionarilor de abonament este aceeași ca și în comportamentul standard al platformei atunci când lucrați cu acest obiect. Deoarece în exemplul nostru luăm în considerare lucrul cu un director, propun să luăm în considerare schema de apelare a handlerelor în funcție de acțiunile cu un obiect (vezi următoarea captură de ecran).

După cum putem vedea, în stadiul inițial sunt apelați handlerii de evenimente „ProcessingFill” (pentru a crea un element nou) sau „On Copying” (pentru a crea un element bazat pe unul existent). În ambele cazuri, după apelarea handlerilor numiți, se execută procedura „OnInstallNewCode”, în care dezvoltatorul poate seta un prefix în cod sau poate suprascrie comportamentul platformei la atribuirea unui nou cod.

Când scrieți un element de director, fie că acesta este un element nou sau unul existent, se numesc trei handlere: „ProcessingFillCheck” (în această etapă, handlerul poate verifica corectitudinea datelor introduse și, dacă există erori, poate refuza să scrie), „BeforeWrite” (până când obiectul este scris în baza de date, puteți ajusta valorile detaliilor și puteți verifica orice condiții suplimentare) și apoi „OnRecord” (a fost făcută o înregistrare în baza de date, dar tranzacția nu este închisă , dezvoltatorul poate verifica datele după înregistrare și, dacă este necesar, poate anula tranzacția).

Evenimentul „BeforeDelete” are loc numai dacă un obiect este șters direct din baza de informații. De obicei, niciun utilizator nu are permisiunea de a șterge direct fără a verifica integritatea referențială. Ștergerea trebuie efectuată întotdeauna folosind procesarea „Ștergerea obiectelor marcate”. În acest din urmă caz, este numit și handlerul „BeforeDelete”.

Astfel, dacă creăm un element de director și îl scriem în baza de informații, platforma va apela următorii handlere de evenimente în ordinea specificată:

În ceea ce privește alte obiecte de configurare, funcționarea mecanismului de abonare la evenimente va fi similară, doar evenimentele și ordinea acestora pot diferi. Consultați ajutorul de sintaxă pentru mai multe detalii.

Partea nedocumentată

Acum să ne uităm la o situație interesantă. Să presupunem că pentru directorul nostru „SimpleDirectory” sunt definite trei abonamente la evenimentul „BeforeRecord”:

În ce ordine credeți că vor fi chemați handlerii pentru aceste abonamente? Să nu ghicim. Voi da rezultatul înregistrării unui element în care handlerul pentru fiecare abonament afișează un mesaj cu numele abonamentului apelat (vezi următoarea captură de ecran).

Din captură de ecran, nu este greu de ghicit că ordinea procedurilor de gestionare a abonamentului pentru evenimente de apelare corespunde ordinii obiectelor de metadate din ramura „Abonamente la evenimente”. Această caracteristică nu este descrisă în nicio literatură de referință pe platforma 1C:Enterprise, așa că ar trebui să fiți atenți când o utilizați în configurație, deoarece caracteristicile nedocumentate se pot schimba de la o versiune la versiunea 1C:Enterprise și, în același timp, să lipsească din lista modificărilor programului.

Retragere

Puteți întreba: „De ce să creați mai multe abonamente pentru un eveniment de obiect de configurare?” Răspunsul este simplu. Dacă mai multe persoane sunt implicate în dezvoltare, atunci interferența în mecanismele create de celălalt poate duce la funcționarea incorectă a programului. În astfel de cazuri, cel mai logic lucru de făcut ar fi să creați abonamente la evenimente separate pentru fiecare dezvoltator, în conformitate cu sarcina în cauză. Desigur, este posibil ca în viitor să fie combinate într-o singură procedură de manipulare.

Când un utilizator dă clic pe un buton, se deschide sau se închide un formular, este scris un document, are loc un eveniment.

Înainte de a înregistra fiecare document, dorim să verificăm dacă acest detaliu este completat.

Cum să o facă?

Abonamente la evenimente 1C

Abonamentul la evenimente 1C este , se află în ramura de configurare General/Abonamente la evenimente 1C.

Abonarea la un eveniment 1C vă permite să atribuiți un handler atunci când are loc un eveniment pentru mai multe obiecte (directoare, documente).

Să adăugăm un nou abonament la evenimentul 1C și să setăm numele.

În proprietatea abonamentului eveniment 1C Sursă - trebuie să selectați unul sau mai multe documente, directoare - obiecte pe care plasăm handlerul.

În proprietatea abonamentului 1C Event, trebuie să selectați una dintre opțiunile pentru evenimentele standard care pot avea loc cu documentele și directoarele selectate.

Simplificăm spunând „documente și cărți de referință” - de fapt, puteți folosi multe obiecte 1C. Din păcate, nu vă puteți abona la evenimente de formular 1C - de exemplu, când deschideți un formular, ceea ce regretă mulți programatori.

Setul de evenimente posibile depinde de obiect. Fiți atenți, deoarece dacă selectați mai multe (multiple) obiecte, atunci lista de evenimente va conține doar acele evenimente pe care le poate avea fiecare dintre obiectele selectate (adică evenimente comune tuturor obiectelor selectate).

După aceasta, tot ce rămâne este să creați o funcție de gestionare. Pentru a face acest lucru, configurația trebuie să aibă caseta de selectare Server bifată în proprietăți. Când faceți clic pe butonul „lupă”, va fi creată o funcție - un handler.

Toate! Tocmai ne-am abonat la evenimentul 1C BeforeRecording pentru toate documentele. Acum, la înregistrarea oricărui document, se va executa funcția noastră, care include o verificare.

Pentru a refuza să scrieți un document dacă verificarea este negativă, trebuie să setați parametrul funcției