Postup na vykonanie odberov udalostí 1s. Používanie odberov udalostí na úpravu pohybov dokumentov „zvonku“. Vytvorte nové predplatné

Postup na vykonanie odberov udalostí 1s.  Používanie odberov udalostí na úpravu pohybov dokumentov „zvonku“.  Vytvorte nové predplatné
Postup na vykonanie odberov udalostí 1s. Používanie odberov udalostí na úpravu pohybov dokumentov „zvonku“. Vytvorte nové predplatné

Predplatné udalosti 1C 8.3 a 8.2 je konfiguračný objekt, ktorý vám umožňuje priradiť handler ku konkrétnej udalosti objektu. Takýto handler môže byť priradený k niekoľkým konfiguračným objektom naraz, napríklad ku všetkým dokumentom naraz.

Pozrime sa bližšie na tento objekt metadát.

  • Pri inštalácii nového čísla
  • Pri kopírovaní
  • SpracovaniePlnenie
  • Pred nahrávaním
  • Pri nahrávaní
  • Pred odstránením
  • SpracovanieVedenie
  • SpracovanieOdstráneniePrebieha
  • SpracovanieKontrolaPlnenie

Môžete sa prihlásiť na odber udalosti iba na objekte, nie na formulári.

Poradie volajúcich operátorov v 1C 8

Obslužné rutiny odberu udalostí sa volajú po obsluhe objektu, t.j. ak je predplatné udalosti nastavené na udalosť „ProcessingProcessing“, potom sa najskôr spustí obslužná rutina z modulu objektu a potom obsluha z predplatného.

Získajte 267 video lekcií na 1C zadarmo:

Ak existuje niekoľko odberov na jednu udalosť, potom, súdiac podľa skúseností, sa najskôr volá odber, ktorý je vyššie v konfiguračnom strome. Aj keď samotná spoločnosť 1C uvádza, že táto priorita nebola stanovená.

Používanie odberov udalostí v 1C

Používanie odberov je veľmi pohodlné napríklad na registráciu zmien pre . Alebo nejakú inú akciu, ktorá je rovnaká pre rôzne konfiguračné objekty.

Často používam predplatné udalostí, aby som nezmenil štandard. To je veľmi výhodné, napríklad v predplatnom môžeme upravovať pohyby dokladov alebo pridávať pohyby do nových registrov bez zmeny konfigurácie.

Nastavenie predplatného udalosti

Nastavenie predplatného je veľmi jednoduché:

  • Zdroj— dátové typy, pre ktoré je ovládač nainštalovaný;
  • Udalosť— udalosť, na ktorú je manipulátor inštalovaný;
  • Handler— označuje postup, v ktorom sa bude obsluha udalosti nachádzať.

Pri vývoji alebo úprave aplikačných riešení na platforme 1C:Enterprise 8.x je veľmi často potrebné vykonať nejakú štandardnú akciu pre skupinu konfiguračných objektov (napríklad adresárov). Aby sa neopisovali akcie vykonávané v module každého objektu, vývojár môže použiť štandardný mechanizmus platformy - predplatné udalostí.

Predplatné udalostí vám umožňuje zachytiť udalosti konfiguračných objektov, ako sú adresáre, dokumenty, plány charakteristických typov a iné. Dnes v článku zvážime otázku postupnosti vykonávania obslužných programov predplatného udalostí a tiež analyzujeme správanie platformy s niekoľkými odbermi udalostí pre jednu akciu (napríklad pri nahrávaní).

Štandardné správanie

Nech náš príklad použije určitý adresár "SimpleDirectory". Pre každú udalosť má vytvorené predplatné udalostí, do ktorých môže vývojár zasahovať. Procedúry obsluhy udalostí sa nachádzajú v príslušnom spoločnom module servera.

Poradie volaní obsluhy predplatného je rovnaké ako pri štandardnom správaní platformy pri práci s týmto objektom. Keďže v našom príklade uvažujeme o práci s adresárom, navrhujem zvážiť schému volania obslužných programov v závislosti od akcií s objektom (pozri nasledujúci obrázok).

Ako vidíme, v počiatočnej fáze sa volajú obslužné rutiny udalostí „ProcessingFill“ (na vytvorenie nového prvku) alebo „On Copying“ (na vytvorenie prvku založeného na existujúcom prvku). V oboch prípadoch sa po zavolaní menovaných handlerov vykoná procedúra „OnInstallNewCode“, kde môže vývojár nastaviť prefix v kóde alebo prepísať správanie platformy pri priraďovaní nového kódu.

Pri písaní prvku adresára, či už ide o nový alebo existujúci prvok, sa nazývajú tri obslužné nástroje: „ProcessingFillCheck“ (v tejto fáze môže handler skontrolovať správnosť zadaných údajov a v prípade chýb odmietnuť zápis), „BeforeWrite“ (kým sa objekt nezapíše do databázy, môžete upraviť hodnoty podrobností a skontrolovať prípadné ďalšie podmienky) a potom „OnRecord“ (do databázy bol vytvorený záznam, ale transakcia nie je uzavretá , môže vývojár po zázname skontrolovať údaje a v prípade potreby transakciu zrušiť).

Udalosť „BeforeDelete“ nastane iba vtedy, ak je objekt priamo vymazaný z informačnej databázy. Zvyčajne žiadny používateľ nemá povolenie na priame odstránenie bez kontroly referenčnej integrity. Vymazanie by sa malo vždy vykonať pomocou spracovania "Vymazanie označených objektov". V druhom prípade sa volá aj handler "BeforeDelete".

Ak teda vytvoríme položku adresára a zapíšeme ju do informačnej databázy, platforma zavolá nasledujúce obslužné rutiny udalostí v zadanom poradí:

Čo sa týka ostatných konfiguračných objektov, fungovanie mechanizmu odberu udalostí bude podobné, iba udalosti a ich poradie sa môžu líšiť. Ďalšie podrobnosti nájdete v pomocníkovi syntaxe.

Strana bez dokumentov

Teraz sa pozrime na zaujímavú situáciu. Povedzme, že pre náš adresár „SimpleDirectory“ sú definované tri predplatné udalosti „BeforeRecord“:

V akom poradí si myslíte, že budú povolaní správcovia týchto odberov? Nehádajme. Výsledok nahrávania uvediem do prvku, kde handler pre každé predplatné zobrazí správu s názvom volaného predplatného (pozri nasledujúci screenshot).

Zo snímky obrazovky nie je ťažké uhádnuť, že poradie volania procedúr obsluhy predplatného udalosti zodpovedá poradiu objektov metadát vo vetve „Odbery udalostí“. Táto funkcia nie je opísaná v žiadnej referenčnej literatúre na platforme 1C:Enterprise, takže pri jej používaní v konfigurácii by ste mali byť opatrní, pretože nezdokumentované funkcie sa môžu meniť z verzie na verziu 1C:Enterprise a zároveň chýbať v zoznam zmien programu.

Ustúpiť

Môžete sa opýtať: „Prečo vytvárať viaceré odbery pre jednu udalosť konfiguračného objektu? Odpoveď je jednoduchá. Ak je do vývoja zapojených niekoľko ľudí, potom vzájomné zasahovanie do vytvorených mechanizmov môže viesť k nesprávnemu fungovaniu programu. V takýchto prípadoch by bolo najlogickejšie vytvoriť samostatné predplatné udalostí pre každého vývojára v súlade s danou úlohou. Samozrejme, je možné, že v budúcnosti budú spojené do jedného postupu handlera.

Keď používateľ klikne na tlačidlo, otvorí sa alebo zatvorí formulár, napíše sa dokument, dôjde k udalosti.

Pred zaznamenaním každého dokumentu chceme skontrolovať, či je tento údaj vyplnený.

Ako to spraviť?

Predplatné na udalosti 1C

Predplatné udalostí 1C je , nachádza sa v konfiguračnej vetve General/Subscriptions to 1C events.

Prihlásenie na odber udalosti 1C vám umožňuje priradiť obslužnú rutinu, keď nastane udalosť pre niekoľko objektov (adresárov, dokumentov).

Pridajme k udalosti 1C nové predplatné a nastavme názov.

Vo vlastnosti odberu udalosti 1C Zdroj - je potrebné vybrať jeden alebo viac dokumentov, adresárov - objektov, na ktoré umiestnime handler.

Vo vlastnosti predplatného udalosti 1C musíte vybrať jednu z možností pre štandardné udalosti, ktoré sa môžu vyskytnúť pri vybratých dokumentoch a adresároch.

Zjednodušujeme tým, že povieme „dokumenty a referenčné knihy“ - v skutočnosti môžete použiť veľa objektov 1C. Bohužiaľ, nemôžete sa prihlásiť na odber udalostí formulára 1C - napríklad pri otváraní formulára, čo mnohí programátori ľutujú.

Súbor možných udalostí závisí od objektu. Buďte opatrní, pretože ak vyberiete niekoľko (viacero) objektov, potom zoznam udalostí bude obsahovať iba tie udalosti, ktoré môže mať každý z vybraných objektov (teda udalosti spoločné pre všetky vybrané objekty).

Potom už zostáva len vytvoriť funkciu handlera. Ak to chcete urobiť, konfigurácia musí mať začiarknuté políčko Server vo vlastnostiach. Po kliknutí na tlačidlo „lupa“ sa vytvorí funkcia - handler.

Všetky! Práve sme sa prihlásili na odber udalosti 1C BeforeRecording pre všetky dokumenty. Teraz sa pri zaznamenávaní akéhokoľvek dokumentu vykoná naša funkcia, ktorá zahŕňa kontrolu.

Ak chcete odmietnuť napísať dokument, ak je kontrola negatívna, musíte nastaviť parameter funkcie

Pri práci s informačnou základňou 1C je často potrebné prepojiť nový algoritmus s udalosťou spojenou so zmenou objektu. Vo verzii 7 programu bolo na spustenie handlera potrebné prepísať zdrojový kód programu, čo viedlo k problémom pri aktualizácii konfigurácie.

Po analýze spätnej väzby od používateľov osem vývojárov implementovalo nový objekt s názvom „Event Subscription“. V tomto článku sa pokúsime odhaliť:

  • Nastavenie predplatného;
  • Tvorba;
  • Funkcie fungovania.

Vytvorte nové predplatné

Ako každý iný objekt metadát, predplatné udalosti v 1C sa pridáva z konfigurátora.

Tieto prvky sa nachádzajú vo vetve stromu „Všeobecné“ (obr. 1).

Ak chcete pridať nový obslužný nástroj, musíte:


Obr.3

Aby ste sa vyhli problémom s aktualizáciou, pre svoj vlastný vývoj je najlepšie vytvoriť si vlastný spoločný modul, ktorý bude obsahovať iba vaše postupy a funkcie.

Vlastnosti fungovania predplatného

Jednou z hlavných otázok, ktoré vyvstávajú pre používateľov, ktorí začínajú pracovať s objektom „Event Subscription“ je otázka poradia volaní procedúr. Často v tom spočívajú chyby v dôsledku skutočnosti, že postup nefunguje alebo funguje len raz za čas.

Pomocou príkladu procedúry OnWrite() pre ľubovoľný dokument môžete vidieť poradie, v ktorom sú volané obslužné programy.

Ak teda v module objektu dokumentu táto procedúra existuje a paralelne s ňou prebieha spracovanie volané z odberu a spracovanie tej istej udalosti, najskôr sa spracuje modul dokumentu. Ak počas vykonávania AtRecord() v module dokumentu nadobudne parameter Rejection z nejakého dôvodu hodnotu True, predplatné zaručene nebude fungovať.

V prípade, že existuje niekoľko objektov odberu, ktoré sú rovnaké pre jeden zdroj a jednu udalosť, je veľmi ťažké sledovať poradie vykonávania. A ak sa počas vykonávania aspoň jedného handlera vyvolá výnimka, niektoré postupy zostanú nevykonané.

Postupnosť spracovania teda môže byť špecifikovaná takto:

  1. Udalosti modulu objektu sú spracované;
  2. Spracujú sa predplatné spojené priamo s aktuálnym typom údajov;
  3. Kód viazaný na všeobecný typ sa spracováva.

Je veľmi dôležité zapamätať si, že v žiadnom prípade by ste do procedúr vykonávaných počas nahrávania nemali vkladať kód, ktorý mení údaje zdrojového objektu, pretože to môže viesť k zbytočnému zacykleniu. Je lepšie použiť takýto kód v procedúrach BeforeWrite.

Obslužný program otvorenej udalosti formulára

Rastúca obľuba spravovaných formulárov používaných vo verzii 8 programu, ako aj problémy spojené s aktualizáciou týchto objektov pri ukladaní vlastných zmien viedli k tomu, že počnúc platformou 8.2.15 sa v programe objavila udalosť FormReceivingProcessing. Tu môžete vložiť kód, ktorý mení a nahrádza štandardné formuláre.

Niektoré funkcie tohto obslužného programu:

  • Udalosť sa nespustí, ak je v konfigurácii presne špecifikovaný štandardný formulár, ktorý sa má otvoriť;
  • Udalosť je možné implementovať len pre riadené formuláre;
  • Všeobecný modul obsahujúci tento handler musí mať nielen atribút „Server“, ale musí obsahovať aj zaškrtnuté políčko v poli „Call Server“.

Je dôležité vziať do úvahy, že toto predplatné nie je volané pre konkrétny objekt, ale pre jeho manažéra, to znamená, že zdrojové pole musí obsahovať toto slovo (obr. 4).

Obr.4

Aby som zhrnul vyššie uvedené, rád by som povedal, že “Event Subscription” je pre vývojárov mimoriadne užitočný a potrebný nástroj, ktorý vývojárovi umožňuje dosiahnuť jeho vlastné ciele a zámery bez väčších zásahov do konfigurácie.