1c pretplata na događaj je samo interaktivna. Korištenje pretplata na događaje za prilagodbu kretanja dokumenata "izvana". Upute za korištenje programa Event Study

💖 Sviđa li vam se? Podijelite vezu sa svojim prijateljima

Pri razvoju ili modificiranju aplikativnih rješenja na platformi 1C:Enterprise 8.x vrlo je često potrebno izvršiti neku standardnu ​​akciju za grupu konfiguracijskih objekata (na primjer, direktorije). Kako ne bismo opisivali akcije koje se izvode u modulu svakog objekta, programer može koristiti standardni mehanizam platforme - pretplatu na događaje.

Pretplate na događaje omogućuju vam presretanje događaja konfiguracijskih objekata, kao što su imenici, dokumenti, planovi karakterističnih tipova i drugi. Danas ćemo u članku razmotriti pitanje slijeda izvršavanja rukovatelja pretplate na događaje, a također ćemo analizirati ponašanje platforme s nekoliko pretplata na događaje za jednu radnju (na primjer, prilikom snimanja).

Standardno ponašanje

Neka naš primjer koristi određeni direktorij "SimpleDirectory". Ima kreirane pretplate na događaje za svaki događaj na koji razvojni programer može intervenirati. Procedure rukovatelja događajima nalaze se u odgovarajućem zajedničkom modulu poslužitelja.

Redoslijed pozivanja rukovatelja pretplatama isti je kao u standardnom ponašanju platforme pri radu s ovim objektom. Budući da u našem primjeru razmatramo rad s imenikom, predlažem da razmotrimo shemu za pozivanje rukovatelja ovisno o radnjama s objektom (pogledajte sljedeću sliku zaslona).

Kao što vidimo, u početnoj fazi se pozivaju rukovatelji događajima "ProcessingFill" (za stvaranje novog elementa) ili "On Copying" (za stvaranje elementa na temelju postojećeg). U oba slučaja, nakon pozivanja imenovanih rukovatelja, izvršava se procedura "OnInstallNewCode", gdje programer može postaviti prefiks u kodu ili nadjačati ponašanje platforme prilikom dodjele novog koda.

Prilikom pisanja elementa imenika, bilo novog elementa ili postojećeg, pozivaju se tri rukovatelja: “ProcessingFillCheck” (u ovoj fazi rukovatelj može provjeriti ispravnost unesenih podataka i, ako postoje pogreške, odbiti pisanje), “BeforeWrite” (dok se objekt ne zapiše u bazu podataka, možete prilagoditi vrijednosti detalja i provjeriti sve dodatne uvjete), a zatim “OnRecord” (zapis je napravljen u bazi podataka, ali transakcija nije zatvorena , programer može provjeriti podatke nakon zapisa i po potrebi poništiti transakciju).

Događaj "BeforeDelete" događa se samo ako je objekt izravno izbrisan iz infobaze. Tipično, nijedan korisnik nema dopuštenje za izravno brisanje bez provjere referentnog integriteta. Brisanje treba uvijek izvršiti pomoću obrade "Brisanje označenih objekata". U potonjem slučaju također se poziva rukovatelj "BeforeDelete".

Dakle, ako kreiramo stavku imenika i upišemo je u informacijsku bazu, platforma će pozvati sljedeće rukovatelje događajima navedenim redoslijedom:

Što se tiče ostalih konfiguracijskih objekata, rad mehanizma pretplate na događaje bit će sličan, samo se događaji i njihov redoslijed mogu razlikovati. Više pojedinosti potražite u pomoćniku sintakse.

Nedokumentirana strana

Sada pogledajmo jednu zanimljivu situaciju. Recimo da su za naš imenik "SimpleDirectory" definirane tri pretplate na događaj "BeforeRecord":

Što mislite kojim redoslijedom će se pozivati ​​rukovatelji za ove pretplate? Nemojmo nagađati. Dat ću rezultat snimanja elementa gdje rukovatelj za svaku pretplatu prikazuje poruku s nazivom pozvane pretplate (pogledajte sljedeću sliku zaslona).

Iz snimke zaslona nije teško pogoditi da redoslijed pozivanja procedura rukovatelja pretplate na događaje odgovara redoslijedu objekata metapodataka u grani "Pretplate na događaje". Ova značajka nije opisana ni u jednoj referentnoj literaturi o platformi 1C:Enterprise, stoga biste trebali biti oprezni kada je koristite u konfiguraciji, budući da se nedokumentirane značajke mogu mijenjati od verzije do verzije 1C:Enterprise i istovremeno biti odsutne iz popis promjena programa.

Povlačenje

Možete pitati: "Zašto stvarati višestruke pretplate za jedan događaj konfiguracijskog objekta?" Odgovor je jednostavan. Ako je nekoliko ljudi uključeno u razvoj, tada uplitanje u međusobno stvorene mehanizme može dovesti do neispravnog rada programa. U takvim slučajevima, najlogičnije bi bilo kreirati zasebne pretplate na događaje za svakog programera u skladu sa zadatkom koji se radi. Naravno, moguće je da će se u budućnosti spojiti u jedan postupak rukovatelja.

Ovaj je članak najava nove funkcionalnosti.
Ne preporučuje se korištenje sadržaja ovog članka za učenje novih funkcija.
Potpuni opis nove funkcionalnosti bit će naveden u dokumentaciji za odgovarajuću verziju.
Potpuni popis promjena u novoj verziji nalazi se u datoteci v8Update.htm.

Implementirano u EDT verziji 1.7.0.567.

U 1C:Enterprise Development Tools (EDT) implementirali smo prototip novog alata. Radni naziv ovog alata je editor Sve pretplate na događaje. Pomoći će vam da praktično analizirate pretplate na sve događaje koji postoje u aplikacijskom rješenju.

Pretplate na događaje

Platforma 1C:Enterprise omogućuje stvaranje pretplata na događaje konfiguracijskih objekata u aplikativnom rješenju. Pretplata je postupak koji će se izvršiti nakon što se izvrši izvorni rukovatelj događajima. Pogodnost pretplata leži u činjenici da se jedna procedura može "pretplatiti" na događaj koji pripada različitim konfiguracijskim objektima. Dakle, ako postoji algoritam koji treba izvršiti i kod snimanja organizacije i kod snimanja odjela, on se može nalaziti u pretplati, a tada nećete morati ni mijenjati rukovatelje za ovaj događaj u samim objektima.

Ispada da je pretplata prikladan i univerzalan mehanizam. Ali u velikim aplikacijskim rješenjima broj pretplata na događaje može doseći nekoliko stotina. Postaje nezgodno analizirati ih u konfiguracijskom stablu, na linearnom popisu. Na primjer, u aplikacijskom rješenju 1C:Enterprise management (ERP) više od 340 pretplata na događaje.

EDT donekle olakšava rad s pretplatama prikazujući ih na ploči Shema, kada se otvori modul nekog aplikacijskog objekta.


Ovaj prikaz pretplata prikladan je za niz zadataka povezanih s uređivanjem modula. Ali još uvijek nije prikladan kada trebate brzo pronaći i analizirati sve algoritme koji se izvršavaju u pretplatama kada se dogodi određeni događaj.

Sve pretplate na događaje

Kako bismo se riješili gore navedenih neugodnosti, implementirali smo univerzalni način predstavljanja pretplata, događaja, konfiguracijskih objekata i procedura u kojima su implementirani algoritmi pretplate.


Kao rezultat toga, možete nazvati urednika Sve pretplate na događaje za cijelu konfiguraciju, ili samo za jedan objekt - razlika će biti samo u sastavu podataka, filtriranih na neki način.


S lijeve strane uređivač prikazuje sve događaje, au svakom događaju sve njegove pretplate. Kada odaberete određenu pretplatu, u gornjem desnom kutu prikazuje se popis konfiguracijskih objekata na čije događaje je pretplata “pretplaćena”. A dolje desno prikazan je modul i procedura u kojoj se nalazi algoritam pretplate. Duplim klikom na proceduru možete je otvoriti u ugrađenom uređivaču jezika.

Dok ste u uređivaču, možete analizirati ne samo pojedinačne pretplate, već i sve pretplate povezane s jednim događajem. Ako odaberete događaj, uređivač će prikazati sve module i sve procedure potpisane za obradu tog događaja.


Ako pozovete uređivač za konfiguracijski objekt, bit će prikazani samo događaji i pretplate tog objekta, a sam objekt uvijek će biti označen crvenom bojom na popisu izvora. Na taj način možete brzo provjeriti, na primjer, radi li pretplata koju odaberete za sve konfiguracijske objekte za koje je potrebna.


Pozivanje uređivača pomoću naredbe konteksta (na konfiguracijskom objektu) omogućuje vam da odmah smanjite broj pretplata prikazanih u uređivaču. Na primjer, možete vidjeti pretplate samo za one događaje koji se obrađuju u objektnom modulu ili u upravljačkom modulu.


Osim toga, uređivač sadrži univerzalni filtar s kojim možete na bilo koji način prilagoditi sastav objekata, događaja i postupaka.


Imajte na umu da ovim filtrom možete odabrati ne samo određene objekte koji su izvor događaja, već i skupove tipova kao što su DirectoryObject, DocumentObject i drugi. Takvi skupovi tipova uključuju sve direktorije ili sve dokumente koji su u konfiguraciji.

Pretragom po nizu možete brzo pronaći samo one pretplate koje se odnose na mehanizam koji vas zanima.


U svakom trenutku možete brzo filtrirati sadržaj prema događaju ili izvoru prikazanom u uređivaču. Na primjer, pronašli ste pretplatu Provjerite formulu izračuna. Njegov izvor je plan obračunskih vrsta Drži.


Pomoću naredbe konteksta na planu vrsta izračuna možete brzo vidjeti samo one pretplate koje su povezane s njegovim događajima.


Automatsko dodavanje prijelomnih točaka

Jedan uobičajeni način analize pretplata na događaje je sekvencijalni pregled svih pozvanih procedura u programu za ispravljanje pogrešaka redoslijedom kojim su izvršene. Da biste to učinili, uređivač nudi prikladan alat za automatsko dodavanje prijelomnih točaka rukovateljima.

Prije svega, ovaj alat možete nazvati izravno u uređivaču.


Možete pronaći i odabrati objekt koji vas zanima, odabrati jedan od njegovih događaja i označiti, primjerice, sve rukovatelje. Nakon klika u redu prijelomne točke bit će dodane u prvi izvršni redak svakog označenog rukovatelja i sve će se te prijelomne točke pojaviti na ploči Prijelomne točke u perspektivi Otklanjanje pogrešaka.


Drugi način dodavanja prijelomnih točaka prikladan je kada ste već pronašli objekt ili događaj koji vas zanima u uređivaču. U tom slučaju možete pozvati naredbu koja vam odgovara iz kontekstnog izbornika.


I konačno, treći način koji možete koristiti je automatsko dodavanje prijelomnih točaka tijekom otklanjanja pogrešaka. U ovom slučaju ne morate otvarati uređivač jer se naredba za dodavanje nalazi na ploči Prijelomne točke.


Dakle urednik Sve pretplate na događaje je univerzalni alat koji vam omogućuje korištenje različitih scenarija analize. Bit će korisno ne samo programerima koji dobro poznaju aplikacijsko rješenje, već i stručnjacima za implementaciju ili IT stručnjacima koji trebaju razumjeti nepoznate funkcije.

U tijeku rješavanja različitih korisničkih problema, ponekad postaje potrebno već generirane pokrete dokumenata (naime, određene skupove registara) podvrgnuti nekoj vrsti prilagodbe.

Objekt "Pretplata na događaje" vrlo je prikladan za ove svrhe, što vam omogućuje da izvršite neke radnje kada se određeni događaj dogodi za veliki broj objekata (na primjer, kada se bilježe dokumenti o plaćanju ili kada se postavlja novi broj za imenike koji se odnose na porez računovodstvo).

Također, pretplata na događaj je praktična jer vam omogućuje izvođenje različitih radnji bez mijenjanja standardnih mehanizama opisanih u različitim modulima.

Na primjer, pojavio se zadatak - potrebno je zabilježiti određene podatke (informacije o aktivnostima tvrtke) u dokumentima plaćanja nakon formiranja glavnih kretanja dokumenta (generiranog u događaju "Obrada obrade"). Zadatak ćemo implementirati pomoću konfiguracije “Manufacturing Enterprise Management”, ed. 1.3.

Pogledajmo rješenje detaljnije:

Kreirajmo novu pretplatu na događaj "Snimi upute za plaćanja". Pretplata ima niz svojstava koja će odrediti njezino ponašanje:

Izvor- ovo je objekt (na primjer, dokument ili popis dokumenata) za koji će se pozivati ​​akcije. Za naš slučaj, mi ćemo odabrati Nalog za plaćanje Odlazni i Nalog za plaćanje Dolazni

Događaji- sama akcija, nakon koje će se naš kod izvršiti. Prema uvjetima problema biramo ObradaProvođenje

rukovatelj– naznaku postupka u kojem će se odvijati obrada. Odaberimo opći modul za ove svrhe Opća namjena.

Nakon navedenih ciljeva kreira se procedura u koju je potrebno postaviti šifru za popunjavanje podataka o smjeru (pod pretpostavkom da su takvi podaci već sadržani u uplatama).

Razmotrimo njegove parametre:

Izvor- ovaj objekt tipa DirectoryObject ili DocumentObject za koji se radnja događa.

Odbijanje- parametar koji vam omogućuje da otkažete knjiženje dokumenta pod određenim uvjetima.

Način rada- mogućnosti implementacije (operativne ili neoperativne), što vam omogućuje da izgradite algoritme za obradu na različite načine.

Usredotočimo se na parametar Izvor. Za naš zadatak, tip ovog parametra će biti - DocumentObject. Za ovu vrstu dostupna je zbirka Pokreti, koji sadrži sve skupove upisničkih zapisa za koje je ovaj dokument zapisničar.

Ova zbirka sadrži skup zapisa Namirenje računa s protustrankama, što nas zanima. Pretpostavimo da je u registru kreirana dimenzija Smjer koju trebamo ispuniti iz dokumenta.

Napišimo sljedeći kod:

Skupovi = Izvor. Pokreti; Izračuni = Skupovi. Obračuni s drugim ugovornim stranama; Za svaku stranicu stranice ciklusa izračuna. Smjer = Izvor. Smjer; Završi ako ;

Kao što vidimo, implementacija je vrlo jednostavna; nakon obrade nema dodatne potrebe za poduzimanjem radnji za snimanje skupa - pretplata na događaj se izvodi kao dio transakcije događaja ProcessingProcessing, nakon njenog završetka skup će biti automatski zapisan .

Prednosti ovog pristupa: obrada podataka izvan standardnih algoritama, smanjenje količine posla oko pretraživanja i prijenosa promjena pri ažuriranju, veća preglednost - sav kod u jednoj proceduri.

Nedostatak ovog pristupa: povećanje vremena vođenja dokumenata i evidentiranja elemenata imenika.

Nadam se da će ove informacije biti korisne programerima početnicima i njihovim iskusnijim kolegama kao način da prošire svoje horizonte.

Kada korisnik izvrši bilo koju radnju, platforma 1C generira programske događaje. U pravilu se ne generira jedan događaj, već cijeli lanac događaja. Zadatak programera je ispravno smjestiti programski kod u događaje kako bi se postiglo očekivano ponašanje programa. Međutim, početniku 1C programeru to neće biti lako učiniti iz dolje navedenih razloga.

Događaji se mogu generirati u kontroliranom obliku: On ReadingOnServer, OnCreatingOnServer, OnOpening, itd.

Događaji u kontroliranom obliku generiraju se na klijentu i na poslužitelju: BeforeRecord, BeforeRecordOnServer.

Događaji se pozivaju u različitim modulima: ElementForm, ObjectModule, ManagerModule.

Neki se događaji mogu pozvati nekoliko puta ako na popisu postoji nekoliko elemenata imenika, na primjer: ProcessingGetView.

Upravljani obrazac može se otvoriti kao rezultat različitih radnji korisnika, a lanci poziva događaja će se razlikovati. Bilo koja od sljedećih radnji korisnika s imenikom otvorit će kontrolirani obrazac: stvaranje novog elementa, kopiranje elementa, promjena postojećeg elementa imenika.

Događaje također generiraju elementi obrasca: prilikom dodavanja retka u tabelarnom dijelu, kod uređivanja retka u tabelarnom dijelu, kod aktiviranja retka ili polja, kod odabira stavke pretraživanja u polju za unos itd.

Kako biste bolje razumjeli logiku i slijed pokrenutih događaja, možete koristiti razvoj „Studije događaja” priložen uz ovaj članak. Poznavajući kontekst poziva događaja, redoslijed događaja i radnje koje će korisnik izvesti, bit će lakše razumjeti u koji rukovatelj događajima je najbolje smjestiti vaš programski kod.

Upute za korištenje programa Event Study

Program Event Study prikazuje događaje koje 1C platforma generira tijekom interaktivnih radnji korisnika. Princip rada je sljedeći: korisnik otvara imenik, program prikazuje lanac događaja. Korisnik označava stavku imenika za brisanje, a program prikazuje slijed događaja koji se događaju. Događaji se prema zadanim postavkama prikazuju s malom odgodom od 3 sekunde, to je potrebno za odvajanje jednog lanca događaja od drugog lanca događaja. Stoga interaktivne radnje morate izvoditi "polako".

Svi događaji prikazani su u posebnom prozoru “Najnoviji događaji”. Ovdje možete omogućiti ili onemogućiti snimanje događaja. Prema zadanim postavkama, snimanje događaja je omogućeno pri prvom otvaranju. Savjetujem vam da prikvačite prozor "Najnoviji događaji" na dnu ekrana odmah kada pokrenete program, radi praktičnog pregledavanja događaja.

Sam program ne može utvrditi koja je radnja uzrokovala lanac događaja; savjetujem vam da u polje "Action Cause" upišete nazive svojih zadnjih radnji, na primjer, "Obrazac popisa imenika je otvoren", "Element u imeniku popis je označen za brisanje” itd. To će onda olakšati analizu radnji i događaja.

Događaji se bilježe i prikazuju za objekte smještene u odjeljku "Trag događaja", pod uvjetom da je uključeno snimanje događaja u obrascu "Nedavni događaji".

Sve snimljene događaje moguće je pregledati kroz “Event Report” koji se nalazi u odjeljku “Servis”.

Za brzo brisanje svih snimljenih radnji i događaja, u odjeljku "Servis" odaberite "Izbriši događaje i radnje".

Kada radite s informacijskom bazom 1C, često postaje potrebno povezati novi algoritam s događajem povezanim s promjenom objekta. U verziji 7 programa, za pokretanje rukovatelja bilo je potrebno prepisati izvorni kod programa, što je dovelo do problema prilikom ažuriranja konfiguracije.

Nakon analize povratnih informacija korisnika, osam programera implementiralo je novi objekt pod nazivom "Pretplata na događaje". U ovom ćemo članku pokušati otkriti:

  • Postavljanje pretplata;
  • Stvaranje;
  • Značajke funkcioniranja.

Kreirajte novu pretplatu

Kao i svaki drugi objekt metapodataka, pretplata na događaj u 1C dodaje se iz konfiguratora.

Ovi elementi nalaze se u grani stabla "Općenito" (slika 1).

Za dodavanje novog rukovatelja trebate:


sl.3

Kako biste izbjegli probleme s ažuriranjem, za vlastiti razvoj najbolje je izraditi vlastiti zajednički modul koji će sadržavati samo vaše procedure i funkcije.

Značajke funkcioniranja pretplate

Jedno od glavnih pitanja koje se postavlja korisnicima koji počnu raditi s objektom "Pretplata na događaje" je pitanje redoslijeda pozivanja procedura. Često tu leže pogreške zbog činjenice da postupak ne radi ili radi samo s vremena na vrijeme.

Koristeći primjer procedure AtWrite() za bilo koji dokument, možete vidjeti redoslijed kojim se pozivaju rukovatelji.

Dakle, ako u objektnom modulu dokumenta postoji ova procedura i paralelno s njom postoji obrada pozvana iz pretplate i obrada istog događaja, prvi će se obraditi modul dokumenta. Ako, tijekom izvršavanja AtRecord() u modulu dokumenta, parametar Rejection iz nekog razloga poprimi vrijednost True, pretplata zajamčeno neće raditi.

U slučaju kada postoji nekoliko objekata pretplate koji su isti za jedan izvor i jedan događaj, vrlo je teško pratiti redoslijed izvršenja. A ako se tijekom izvođenja barem jednog rukovatelja pojavi iznimka, neke će procedure ostati neizvršene.

Stoga se redoslijed obrade može odrediti na sljedeći način:

  1. Obrađuju se događaji modula objekta;
  2. Obrađuju se pretplate povezane izravno s trenutnom vrstom podataka;
  3. Kod vezan za opći tip se obrađuje.

Vrlo je važno zapamtiti da ni u kojem slučaju ne smijete umetati kod koji mijenja podatke izvornog objekta u procedure koje se izvode tijekom snimanja, jer to može dovesti do nepotrebnog ponavljanja. Bolje je koristiti takav kod u postupcima BeforeWrite.

Obrađivač događaja otvaranja obrasca

Rastuća popularnost upravljanih obrazaca koji se koriste u verziji 8 programa, kao i problemi povezani s ažuriranjem tih objekata uz spremanje vlastitih promjena, doveli su do činjenice da se, počevši od platforme 8.2.15, u programu pojavio događaj FormReceivingProcessing. Ovo je mjesto gdje možete umetnuti kod koji mijenja i zamjenjuje standardne obrasce.

Neke značajke ovog rukovatelja:

  • Događaj se neće aktivirati ako je standardni obrazac koji se otvara strogo naveden u konfiguraciji;
  • Događaj se može implementirati samo za upravljane obrasce;
  • Opći modul koji sadrži ovaj rukovatelj ne smije imati samo atribut "Poslužitelj", već mora sadržavati i označeni potvrdni okvir u polju "Pozivni poslužitelj".

Važno je uzeti u obzir da se ova pretplata ne poziva za određeni objekt, već za njegovog upravitelja, odnosno izvorno polje mora sadržavati ovu riječ (slika 4)

sl.4

Rezimirajući gore navedeno, želio bih reći da je „Pretplata na događaje“ izuzetno koristan i neophodan alat za programera, koji programeru omogućuje postizanje vlastitih ciljeva i ciljeva bez većih intervencija u konfiguraciji.

reci prijateljima
Početi…...
Sljedeći članak