itthon / Skype / Eseménykezelő létrehozása 1s. Eseménykezelők hozzárendelése esemény-előfizetések segítségével. A töréspontok automatikus hozzáadása

Eseménykezelő létrehozása 1s. Eseménykezelők hozzárendelése esemény-előfizetések segítségével. A töréspontok automatikus hozzáadása

A különböző felhasználói feladatok megoldása során időnként szükségessé válik a már kialakult iratmozgások (nevezetesen bizonyos nyilvántartási készletek) valamilyen kiigazítása.

Erre a célra nagyon alkalmas az „Esemény előfizetés” objektum, amely lehetővé teszi bizonyos műveletek végrehajtását, amikor egy bizonyos esemény bekövetkezik egy nagy szám objektumokat (például fizetési bizonylatok rögzítésekor vagy új számú, az adóelszámoláshoz kapcsolódó könyvtár beállításakor).

Az eseményre való feliratkozás azért is kényelmes, mert lehetővé teszi különféle tevékenységek a különböző modulokban leírt tipikus mechanizmusok megváltoztatása nélkül.

Például felmerült egy feladat - bizonyos adatokat (a cég tevékenységére vonatkozó információkat) rögzíteni kell a fizetési bizonylatokban a dokumentum fő mozgásainak kialakulása után (a „Feldolgozás” eseményben). A feladat a "Manufacturing Enterprise Management" konfiguráción valósul meg. 1.3.

Nézzük a megoldást részletesebben:

Hozzon létre egy új előfizetést a „Fizetési irány rögzítése” eseményre. Egy előfizetésnek számos tulajdonsága van, amelyek meghatározzák a viselkedését:

Egy forrás egy objektum (például egy dokumentum vagy dokumentumok listája), amelyre a művelet meghívásra kerül. A mi esetünkben mi választjuk Kimenő fizetési megbízás és Bejövő fizetési megbízás

Fejlesztések- maga a művelet, amely után a kódunk végrehajtásra kerül. A probléma körülményei szerint választunk Feldolgozás

Kezelő- annak az eljárásnak a megjelölése, amelyben a feldolgozásra sor kerül. Ebből a célból az általános modult választjuk Általános rendeltetésű.

A fenti célok után létrejön egy eljárás, amelyben az irányra vonatkozó adatok kitöltéséhez kódot kell elhelyezni (feltételezzük, hogy a fizetési megbízások már tartalmaznak ilyen információkat).

Vegye figyelembe a paramétereit:

Egy forrás- ez a DirectoryObject vagy DocumentObject típusú objektum, amelyre a művelet megtörténik.

Elutasítás- egy paraméter, amely bizonyos feltételek mellett lehetővé teszi a bizonylat feladásának megszakítását.

Holding Mode- Lebonyolítási lehetőségek (operatív vagy nem működő), lehetővé téve a feldolgozási algoritmusok különböző módon történő felépítését.

Álljunk meg a paraméternél Egy forrás. A mi feladatunkban ennek a paraméternek a típusa lesz: DocumentObject. Ehhez a típushoz gyűjtemény áll rendelkezésre mozgások, amely tartalmazza az összes olyan regiszterrekordkészletet, amelyhez ez a dokumentum anyakönyvvezető.

Ez a gyűjtemény rekordokat tartalmaz Elszámolások szerződő felekkel SetRecords ami érdekel minket. Tegyük fel, hogy a regiszterben létrejön az Irány dimenzió, amit a dokumentumból kell kitöltenünk.

Írjuk be a következő kódot:

Készletek = Forrás. mozgások; Számítások = Halmazok. Elszámolások vállalkozókkal; Minden oldalra a számítási ciklus oldaláról. Irány = Forrás. Irány; EndIf ;

Amint látjuk, a megvalósítás meglehetősen egyszerű, a halmazírási művelet feldolgozása után nem kell további műveletet végrehajtani - az eseményre való előfizetés a ProcessingPerforming esemény tranzakció részeként történik, annak befejezése után a készlet automatikusan meg lesz írva.

Ennek a megközelítésnek az előnyei: az adatok szabványos algoritmusokon kívüli feldolgozása, a frissítések során a változtatások megtalálásával és átvitelével kapcsolatos munka csökkentése, jobb láthatóság – az összes kód egy eljárásban.

Ennek a megközelítésnek a hátránya: a dokumentumok vezetésére és a címtárak elemeinek rögzítésére fordított idő növekedése.

Remény, ez az információ mind a kezdő programozók, mind a tapasztaltabb kollégáik számára hasznos lesz látókörük kiterjesztéseként.

Valamelyik gombra kattintottunk, egy bizonyos művelet azonnal megkezdődik - az űrlap bezárásra vagy megnyitásra kerül, a dokumentum mentésre vagy olvasásra kerül - a megfelelő esemény bekövetkezik. A programozó bármilyen eseményhez hozzárendelhet egy speciális funkciót, amely a beépített 1C nyelven van megírva, és az esemény bekövetkezésekor képes lesz végrehajtani a számára meghatározott műveleteket.

Nagyon gyakran szükséges egy kezelőt hozzárendelni egy teljes dokumentumhoz vagy egyszerre több különálló dokumentumhoz. Például mindegyik dokumentum tartalmazza a „Felhasználó” attribútumot. Vagy csak egy ilyen közös kelléket adtunk hozzá. Hogy ez a feltétel ki van-e töltve, azt csak a teljes folyamat önálló irányításával láthatjuk. De hogyan tehetjük meg?

Előfizetések az 1C eseményekre

Az 1C esemény-előfizetése egy olyan objektum, amely a megfelelő Általános / Esemény-előfizetések konfigurációjában található. Ez az előfizetés lehetővé teszi egy kezelő hozzárendelését azokra az esetekre, amikor bizonyos események egyszerre több objektumra vonatkoznak.

Állítsa be a nevet, és adjon hozzá új előfizetést az 1C eseményhez

Az előfizetés tulajdonságaiban több vagy egy konkrét dokumentumot kell kiválasztani, azt a könyvtárat, amelyre a kezelőt helyezzük. Ennek megfelelően az előfizetés tulajdonságai között ki kell választania az egyik szabványos eseményt, amely a kiválasztott objektummal történhet.

A "dokumentumok és segédkönyvek" kifejezéssel nagyon leegyszerűsítjük a dolgokat, mert a valóságban nagyon sokféle objektumot használhat. Az egyik hátránya, hogy nem tudsz feliratkozni az űrlapeseményekre.

A kiválasztható események száma magától az objektumtól függ. Nagyon óvatosnak kell lennie, mert ha sok objektumot választ ki, akkor a listában csak azok az események jelennek meg, amelyekkel a kiválasztott objektumok mindegyike rendelkezhet. (Az összes kiválasztott objektumra közös események).


Mindezen lépések elvégzése után már csak egy kezelő függvény létrehozása van hátra. Ehhez szükség van egy közös modulra a konfigurációban, ahol egy pipa kerül az "Északi" elem mellé. Ha rákattint a nagyító gombra, egy kezelő funkció jön létre.

Az "Írás előtt" esemény minden dokumentumára elő tudtunk jelentkezni. Most a funkció végrehajtásra kerül minden olyan dokumentum írásakor, amelyben a csekk regisztrálva van. Ha az ellenőrzés negatív volt, akkor a dokumentum írásának megtagadásához be kell állítania a funkcióparamétert
Elutasítás = Igaz.

Amikor a felhasználó rákattint egy adott gombra, az űrlap megnyílik vagy bezárul, egy dokumentum íródik - esemény történik.

Minden egyes dokumentum megírása előtt ellenőrizni szeretnénk, hogy ez az attribútum ki van-e töltve.

Hogyan kell csinálni?

Előfizetések 1C eseményekre

Az 1C eseményekre vonatkozó előfizetés az Általános / Előfizetések 1C eseményekre konfigurációs ágban található.

Az 1C eseményre való feliratkozás lehetővé teszi egy kezelő hozzárendelését, ha egy esemény több objektumhoz (könyvtárak, dokumentumok) történik.

Adjunk hozzá új előfizetést az 1C eseményhez, állítsuk be a nevet.

Az 1C esemény előfizetési tulajdonságban Forrás - ki kell választania egy vagy több dokumentumot, könyvtárat - objektumot, amelyre a kezelőt helyezzük.

Az 1C esemény előfizetési tulajdonságban Esemény - ki kell választania a kiválasztott dokumentumokkal és könyvtárakkal előforduló szabványos események egyikét.

Egyszerűsítjük azzal, hogy „dokumentumok és könyvtárak” – valójában sok 1C objektum használható. Sajnos nem iratkozhat fel az 1C űrlapeseményekre - például egy űrlap megnyitásakor, amit sok programozó sajnál.

A lehetséges események halmaza az objektumtól függ. Legyen óvatos, mert ha több (sok) objektumot választ ki, akkor az események listája csak azokat az eseményeket tartalmazza, amelyekkel a kiválasztott objektumok mindegyike rendelkezhet (azaz az összes kiválasztott objektumra közös események).

Ezt követően van hátra egy kezelő függvény létrehozása. Ehhez a konfigurációban be kell jelölni a Szerver jelölőnégyzetet a tulajdonságokban. Ha a nagyító gombra kattint, létrejön egy funkció - egy kezelő.

Mindenki! Nemrég feliratkoztunk az 1C PreWrite eseményre az összes dokumentumhoz. Most bármilyen dokumentum írásakor lefut a függvényünk, amibe a csekk be van írva.

Annak érdekében, hogy megtagadja a dokumentum megírását, ha az ellenőrzés negatív volt, be kell állítania a függvényparamétert

Amikor dolgozik információs bázis Az 1C. ábrán gyakran válik szükségessé egy új algoritmus hozzárendelése egy objektum változásával kapcsolatos eseményhez. A program 7-es verziójában a kezelő futtatásához át kellett írni a program forráskódját, ami problémákhoz vezetett a konfiguráció frissítése során.

A felhasználói visszajelzések elemzése után a G8 fejlesztői új objektumot vezettek be "Event Subscription" néven. Ebben a cikkben megpróbáljuk felfedni:

  • Előfizetési beállítások;
  • Teremtés;
  • A működés jellemzői.

Hozzon létre egy új előfizetést

Mint minden más metaadat-objektum, az 1C eseményre való előfizetést ad hozzá a konfigurátor.

Ezek az elemek az „Általános” fa ágában találhatók (1. ábra).

Új kezelő hozzáadása:


3. ábra

A frissítésekkel kapcsolatos problémák elkerülése érdekében a legjobb, ha saját fejlesztései saját közös modullal rendelkeznek, amely csak az Ön eljárásait és funkcióit tartalmazza.

Az előfizetések működésének jellemzői

Az egyik fő kérdés, amely felmerül azon felhasználók számára, akik elkezdenek dolgozni az Event Subscription objektummal, az eljárások meghívásának sorrendje. Gyakran ez az a hely, ahol a hibák abból fakadnak, hogy az eljárás nem működik, vagy minden más alkalommal működik.

Az OnRecord() eljárás példáján bármely dokumentum esetében láthatja a kezelők meghívásának sorrendjét.

Tehát ha a dokumentumobjektum modulban van ez az eljárás, és ezzel párhuzamosan az előfizetésből meghívott feldolgozás és ugyanazon esemény feldolgozása történik, akkor elsősorban a dokumentummodul kerül feldolgozásra. Ha a dokumentummodulban az OnWrite() végrehajtása során a Valamilyen okból elutasítva paraméter True-ra van állítva, az előfizetés garantáltan nem működik.

Abban az esetben, ha egy forráshoz és egy eseményhez több előfizetési objektum is megegyezik, nagyon nehéz nyomon követni a végrehajtási sorrendet. És ha legalább egy kezelő végrehajtása során kivételt vetnek fel, akkor az eljárások egy része végrehajtás nélkül marad.

Így a feldolgozás sorrendje a következő sémával határozható meg:

  1. Az objektummodul eseményei feldolgozásra kerülnek;
  2. Az aktuális adattípushoz közvetlenül kapcsolódó előfizetések feldolgozása megtörténik;
  3. Az általános típushoz kötött kód feldolgozásra kerül.

Nagyon fontos megjegyezni, hogy a forrásobjektum adatait megváltoztató kódot semmi esetre sem szabad az íráskor végrehajtott eljárásokba beilleszteni, mert ez szükségtelen hurkoláshoz vezethet. Jobb hasonló kódot használni a BeforeWrite eljárásokban.

Nyitott űrlap eseménykezelő

Növekvő népszerűség kezelt űrlapok A program 8-as verziójában használt , valamint ezen objektumok frissítésével kapcsolatos problémák saját változtatásaik mentése közben vezettek oda, hogy a 8.2.15-ös platformtól kezdve a ProcessingFormReceive esemény megjelent a programban. Ide szúrhat be olyan kódot, amely megváltoztatja és helyettesíti a szabványos űrlapokat.

Ennek a kezelőnek néhány jellemzője:

  • Az esemény nem fog működni, ha a konfigurációt megnyitják típusú űrlap szigorúan kiírva;
  • Az esemény csak kezelt űrlapokhoz valósítható meg;
  • Általános modul A , amely tartalmazza ezt a kezelőt, nem csak a "Server" attribútummal kell, hogy rendelkezzen, hanem tartalmaznia kell egy bejelölt négyzetet a "Szerverhívás" mezőben.

Fontos figyelembe venni, hogy ezt az előfizetést nem egy adott objektumra hívják, hanem annak kezelőjére, vagyis a forrás mezőnek tartalmaznia kell ezt a szót (4. ábra).

4. ábra

Összegezve a fentieket, szeretném elmondani, hogy az „Event Subscription” egy rendkívül hasznos és szükséges eszköz a fejlesztő számára, amely lehetővé teszi saját céljainak és célkitűzéseinek megvalósítását anélkül, hogy komolyabb beavatkozásokat kellene végezni a konfigurációban.

Ez a cikk egy új funkció bejelentése.
Nem ajánlott a cikk tartalmát új funkciók megismerésére használni.
Teljes leírás Az új funkciókat az adott verzióhoz tartozó dokumentáció tartalmazza.
Teljes lista megváltozik új verzió a v8Update.htm fájlban található.

Az EDT 1.7.0.567 verziójában implementálva.

Az 1C:Enterprise Development Tools (EDT) programban egy új eszköz prototípusát implementáltuk. Ennek az eszköznek a munkacíme Szerkesztő Minden esemény előfizetés. Segít kényelmesen elemezni az alkalmazásmegoldásban létező összes eseményre vonatkozó előfizetéseket.

Esemény előfizetések

Az 1C:Enterprise platform lehetővé teszi, hogy előfizetéseket hozzon létre a konfigurációs objektumok eseményeire egy alkalmazásmegoldásban. Az előfizetés egy olyan eljárás, amely az eredeti eseménykezelő végrehajtása után kerül végrehajtásra. Az előfizetések kényelme abban rejlik, hogy egy eljárás különböző konfigurációs objektumokhoz tartozó eseményre „előfizethető”. Így ha van olyan algoritmus, amit a szervezet rögzítésekor és egy részleg rögzítésekor is végre kell hajtani, akkor azt el lehet helyezni egy előfizetésbe, és akkor magukban az objektumokban sem kell módosítani ennek az eseménynek a kezelőit. .

Kiderült, hogy az előfizetés kényelmes és univerzális mechanizmus. De a nagy alkalmazási megoldásokban a rendezvény-előfizetések száma elérheti a több százat is. Kényelmetlenné válik ezek elemzése a konfigurációs fában, egy lineáris listában. Például az alkalmazott megoldásban 1C: Vállalati menedzsment (ERP) több mint 340 esemény előfizetés.

Az EDT egy kicsit megkönnyíti az előfizetésekkel való munkát azáltal, hogy megjeleníti őket a panelen Rendszer amikor bármelyik alkalmazásobjektum modulja megnyílik.


Az előfizetések ezen megjelenítése számos, a modulszerkesztéssel kapcsolatos feladathoz kényelmes. De még mindig nem megfelelő, ha gyorsan meg kell találnia és elemeznie kell az előfizetésekben végrehajtott összes algoritmust, amikor egy esemény bekövetkezik.

Minden esemény előfizetés

Hogy megszabaduljunk a fent felsorolt ​​kellemetlenségektől, megvalósítottuk univerzális módon az előfizetések, események, konfigurációs objektumok és az előfizetési algoritmusokat megvalósító eljárások reprezentációi.


Ennek eredményeként felhívhatja a szerkesztőt Minden esemény előfizetés a teljes konfigurációra, vagy csak egy objektumra - a különbség csak a valamilyen módon szűrt adatok összetételében lesz.


A bal oldalon a szerkesztő megjeleníti az összes eseményt, és minden eseménynél az összes előfizetést. Ha egy adott előfizetést kiválaszt, a jobb felső sarokban megjelenik azon konfigurációs objektumok listája, amelyekre az előfizetés „előfizetett”. A jobb alsó sarokban pedig a modul és az eljárás, amelyben az előfizetési algoritmus található. Egy eljárásra duplán kattintva megnyithatja azt a beépített nyelvi szerkesztőben.

A szerkesztőben nem csak az egyes előfizetéseket, hanem az ugyanahhoz az eseményhez kapcsolódó összes előfizetést is elemezheti. Ha kiválaszt egy eseményt, a szerkesztő megjeleníti az összes modult és az esemény kezelésére előfizetett eljárásokat.


Ha meghívja a szerkesztőt egy konfigurációs objektumon, csak az objektum eseményei és előfizetései jelennek meg, és maga az objektum mindig piros színnel lesz kiemelve a forráslistában. Így gyorsan ellenőrizheti például, hogy a kiválasztott előfizetés minden olyan konfigurációs objektumnál működik-e, amelynek szüksége van rá.


A szerkesztő kontextus paranccsal történő meghívása (a konfigurációs objektumon) lehetővé teszi, hogy azonnal csökkentse a szerkesztőben megjelenő előfizetések számát. Például csak az objektummodulban vagy a kezelőmodulban feldolgozott események előfizetéseit tekintheti meg.


Ezenkívül a szerkesztő tartalmaz egy univerzális szűrőt, amellyel tetszőlegesen testreszabhatja az objektumok, események és eljárások összetételét.


Vegye figyelembe, hogy ezzel a szűrővel nem csak konkrét objektumokat választhat ki, amelyek az események forrásai, hanem típuskészleteket is, mint pl. DirectoryObject, DocumentObject Egyéb. Az ilyen típusú készletek a konfigurációban szereplő összes könyvtárat vagy dokumentumot tartalmazzák.

A karakterlánc-kereséssel gyorsan csak azokat az előfizetéseket találhatja meg, amelyek az Önt érdeklő motorra vonatkoznak.


Bármikor gyorsan szűrheti a tartalmat a szerkesztőben megjelenő esemény vagy forrás alapján. Például talált egy előfizetést Ellenőrizze a képlet számítását. Forrása a számítási típusok terve Tart.


A számítási típusok tervére vonatkozó kontextuális parancs segítségével gyorsan csak azokat az előfizetéseket láthatja, amelyek az eseményeihez kapcsolódnak.


A töréspontok automatikus hozzáadása

Az esemény-előfizetések elemzésének egyik gyakori módja az összes meghívott eljárás szekvenciális megtekintése a hibakeresőben a végrehajtás sorrendjében. Ehhez a szerkesztő kényelmes eszközt biztosít a töréspontok automatikus hozzáadásához a kezelőkhöz.

Először is hívhatja ezt az eszközt közvetlenül a szerkesztőben.


Megtalálhatja és kiválaszthatja az Önt érdeklő objektumot, kiválaszthatja annak eseményeit, és megjelölheti például az összes kezelőt. Megnyomás után rendben a töréspontok minden ellenőrzött kezelő első végrehajtható sorába kerülnek, és ezek a töréspontok megjelennek a panelen Töréspontok perspektívában Hibakeresés.


A töréspontok hozzáadásának másik módja akkor kényelmes, ha a szerkesztőben már megtalálta az Önt érdeklő objektumot vagy eseményt. Ebben az esetben től helyi menü hívhatja az Önnek megfelelő parancsot.


És végül, a harmadik módszer, amelyet használhat, az, hogy automatikusan hozzáadja a töréspontokat már a hibakeresés folyamatában. Ebben az esetben nem kell megnyitni a szerkesztőt, mert az add parancs közvetlenül a panelen található Töréspontok.


Tehát a szerkesztő Minden esemény előfizetés egy sokoldalú eszköz, amely lehetővé teszi különféle elemzési forgatókönyvek használatát. Nemcsak az alkalmazott megoldást jól ismerő fejlesztőknek lesz hasznos, hanem olyan implementációs szakembereknek vagy informatikusoknak is, akiknek ismeretlen funkcionalitással kell megküzdeniük.