az interfész „villogása”, vagy az aszinkron hívások láncai. A kód időszakos végrehajtása adott időintervallumban - ProcessingWait() 1s 8 várakozási kezelő

Az 1C platform lehetőséget biztosít számunkra az eljárások aszinkron meghívására, ami néha egyszerű, de szórakoztató dolgokra is használható. Például „pisloghat” bármire, aminek színe van, vagy bármilyen képességgel rendelkezik a vizuális megjelenés megváltoztatására. Ezenkívül használhat egy egyszerűbb, de ellenőrizetlen mechanizmust, vagy létrehozhat egy érdekes aszinkron hívásláncot, és megadhatja a kívánt viselkedést.

Itt természetesen a ConnectWaitingHandler() eljárásról van szó.

Hadd emlékeztesselek az eljárás szintaxisára:

ConnectWaitHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)

Ezenkívül, ha egy másodpercnél rövidebb intervallumot ad meg, az eljárást egyszer el kell indítani. Itt veszítjük el az irányítást a végrehajtási folyamat felett, és elveszítjük a „testreszabás” (rugalmas, egyedi konfigurálás) képességét.

De ez a korlát könnyen áthidalható.

Hogy ne kalandozzanak el a gondolataim, azonnal mondok egy egyszerű példát és elmagyarázom.

Tegyük fel, hogy van egy táblázatos dokumentumunk az űrlapon, és annak egy részét ötször szeretnénk „pislogni”.

/////////////////// // // „pislogjon” a Táblázat dokumentum területén 5-ször, fél másodperces időközzel // //// /////// ///////// &Az ügyféleljárásról BlinkArea (parancs) mf Hányszor kell pislogni = 3; // Számláló. Form attribútum, „látható” a várakozáskezelő eljárásokban ConnectWaitHandler("ShowAreaSelection", 0.1, True); // Az EndProcedure &A kliens eljárásban közvetlenül is meghívható ShowArea Selection() Area = Object.TD.Area(mfFirstDataLine, mfFirstDataColumn, mfLastDataLine, mfLastDataColumn);

Szegély = Új sor(TableDocumentCellLineType.Double);

Area.Circle(Border, Border, Border, Border); // A terület körvonalazása mfHányszor kell pislogni = mfHányszor kell pislogni - 1; // A számláló csökkentése Connect WaitHandler("RemoveArea Allocation", 0.5, True); // Aszinkron hívások láncának csatlakoztatása Eljárás vége & Az ügyféleljáráson Terület eltávolítása() Terület = Object.TD.Area(mfFirstDataLine, mfFirstDataColumn, mfLastDataLine, mfLastDataColumn);

  • Szegély = Új sor(TableDocumentCellLineType.NoLine);
  • Area.Circle(Border, Border, Border, Border); // Távolítsa el a terület körvonalát If mf Hányszor kell pislogni > 0 Then Connect WaitHandler("Terület kijelölés megjelenítése", 0.5, igaz); // Ismételje meg, amennyi a számlálón maradt EndIf; Az eljárás vége
    • Az egyetlen követelmény az, hogy az mfHow Many Times Blink számlálóváltozónak „láthatónak” kell lennie az aszinkron módon elindított eljárásokból. Ebben az esetben a változó egy form attribútum.
    • Egy figyelmes olvasó észrevehette, hogy ilyen láncok kialakításával két legyet ölünk egy csapásra:
    • Megkerüljük az eljáráshívások ismétlődésének korlátozását az egy másodpercnél rövidebb intervallumértékekkel;
    • Lehetőségünk van különböző hosszúságú és összetettségű láncok kialakítására:

csatlakoztassa a várakozáskezelőt közvetlenül magában a várakozáskezelő eljárásban;

gondoskodjon arról, hogy az ilyen eljárások kapcsolódjanak egymáshoz;

a hívási láncok bonyolultabb struktúrájának megszervezése;<ИмяПроцедуры>, <Интервал>, <Однократно>)
végtelenül bonyolítja a híváskezelés változékonyságát (például ne csak a hívásokon belüli számlálóikat változtassuk meg, hanem az intervallumértékeket, tervezési stílusokat is (hogy a 🌈 szivárványként csillogjon).
<ИмяПроцедуры>
<Интервал>(kötelező) Típus: Szám. Az az időintervallum másodpercben, 1/10 másodperc pontossággal, amely után az eljárás meghívásra kerül (pozitív szám Ha 1-nél kisebb érték van megadva, akkor a harmadik paraméter értékének True-nak kell lennie).
<Однократно>(nem kötelező) Típus: Logikai. A várakozási kezelő egyszeri végrehajtásának jele.
Igaz – a megadott várakozási kezelő egyszer végrehajtásra kerül. Alapértelmezés: False
Leírás: A megadott eljárást várakozáskezelőként csatlakoztatja. Az eljárást a rendszer a rendszer időtúllépési időszakában hívja meg minden alkalommal, amikor a megadott időintervallum letelik.

Elérhetőség:
Vékony kliens, webkliens, vastag kliens.

Jegyzet:
A várakozási kezelő hívása az űrlap bezárásáig vagy az űrlap DisableWaitHandler metódusának meghívásáig folytatódik. Code 1C v 8.2 UE DisableWaitingHandler(<ИмяПроцедуры>)

Kód 1C v 8.2 UP
&OnClient
ShellHandler() eljárás
ProcessWaiting();
Az eljárás vége

&OnServer
Procedure Process Waiting()
// tegye meg, amit szükséges
Az eljárás vége

//....
ConnectWaitHandler("HandlerWrapper", 3, igaz);

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Egy adott felügyelt alkalmazásmodulhoz (szokásos alkalmazásmodulhoz) vagy globális megosztott moduleljáráshoz köt egy hívást meghatározott időintervallumban. A hívás csak „nyugalmi állapotban” történik, azaz olyan időpontban, amikor a program nem hajt végre semmilyen műveletet. A várakozáskezelő hívása addig folytatódik, amíg a rendszer le nem áll, vagy a globális környezet DisableWaitHandler metódusa meg nem hívódik.
Code 1C v 8.x Eljárás Értékesítési Jelentésnap()
// ...
Az eljárás vége

//...
ConnectWaitingHandler("DaySalesReport", 60); // percenként
Kód 1C v 8.x // Normál dinamizmus-ellenőrzésben. konfiguráció frissítések 20 percenként.
ConnectWaitingHandler("IB DynamicChangeCheckWaitingHandler", 20 * 60);
// csatlakoztassa az adatcsere-kezelőt
ConnectWaitingHandler("CheckingDataExchange", chValueVariable("chNumberofSeconds PollingExchange"));
ConnectWaitingHandler("Ellenőrizze a csatlakozási alkalmazásokra adott válaszokat", 86400); // = 24 (óra) * 60 (perc) * 60 (mp) = 1 nap

Formához
Code 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
végtelenül bonyolítja a híváskezelés változékonyságát (például ne csak a hívásokon belüli számlálóikat változtassuk meg, hanem az intervallumértékeket, tervezési stílusokat is (hogy a 🌈 szivárványként csillogjon).
<ИмяПроцедуры>(kötelező) Típus: String. A várakozási kezelőként csatlakoztatandó eljárás neve.
<Интервал>(kötelező) Típus: Szám. Időintervallum másodpercben, 1/10 másodperc pontossággal, amely után az eljárás meghívásra kerül (pozitív szám). Ha 1-nél kisebb értéket adunk meg, akkor a harmadik paraméter értékének True-nak kell lennie.
<Однократно>(nem kötelező) Típus: Logikai. A várakozási kezelő egyszeri végrehajtásának jele. 0 Igaz – a megadott várakozási kezelő egyszer végrehajtásra kerül. Alapértelmezés: False

Leírás:
A megadott eljárást várakozáskezelőként kapcsolja össze. Az eljárást a rendszer a rendszer időtúllépési időszakában hívja meg minden alkalommal, amikor a megadott időintervallum letelik.

Elérhetőség:
Kövér kliens.
Jegyzet:
A várakozási kezelő hívása az űrlap bezárásáig vagy az űrlap DisableWaitHandler metódusának meghívásáig folytatódik.
Példa:
Code 1C v 8.x ConnectWaitingHandler("WhenWaiting", 1);
Code 1C v 8.x Form.mAutosave Interval = 300; // 5 perc
Ha a Form.mAutosave Interval<>0 Akkor
Form.ConnectWaitingHandler("TimerEventHandler", Int(Form.mAutoSaveInterval * 60));
endIf;

Feldolgozásra vár az 1C:Enterprise rendszerben, ahogy a dokumentációból következik, a globális modul eljárás adott időintervallumú periodikus végrehajtására szolgál. A futtatandó kód így fog kinézni:
Kód 1C v 7.x Várakozás feldolgozásra ("UpdateCounter_",1);
Ahol "UpdateCounter_"- az 1 másodpercenként induló globális moduleljárás neve. (a második paraméter egyenlő 1-gyel)

De! A probléma az, hogy csak egyszer futtathatja a várakozási feldolgozást. Az újraindítás törli az előzőt. Más szóval, ha például egy időzítő feldolgozást szeretne végezni az eltelt idő számlálására, akkor csak egy időzítőt futtathat, mert a második időzítő elindítása leállítja az elsőt. De mi van akkor, ha 2, 3 vagy több ilyen időzítőt kell egyszerre futtatnia? Vagy továbbra is rendszeresen ellenőriznie kell a dokumentumok állapotát?

Van kiút! A várakozási feldolgozást az űrlapkontextusban kell futtatni, hogy elválassza ezt a szálat a globális kontextustól. És akkor lehetővé válik a helyi modul eljárás időszakos elindítása, pl. eljárást, amely a feldolgozási űrlap moduljában található.

A futtatandó kód így fog kinézni:
Code 1C v 7.x Form.Waiting Processing("UpdateCounter_",1);
Ahol "UpdateCounter_"- a feldolgozási űrlap helyi moduljának eljárásának neve, amely 1 másodperces időközönként indul el. (a második paraméter egyenlő 1-gyel)
Így minden feldolgozásban futtathatja a saját várakozási feldolgozást, amely addig működik, amíg az űrlap nyitva van.

Használhatja formákban Code 1C v 8.x Form.Waiting Processing ("ProcedureName", StartTime) ,
ahol a ProcedureName a StartTime másodperc után lefutó eljárás neve
Magában az eljárásban be kell illesztenie a Code 1C v 8.x Form.Waiting Processing("ProcedureName",0) kódot a várakozási feldolgozás leállításához (természetesen a szükséges feltételek teljesülése után).
Forrás

a hívási láncok bonyolultabb struktúrájának megszervezése;<ИмяПроцедуры>, <Интервал>, <Однократно>)
végtelenül bonyolítja a híváskezelés változékonyságát (például ne csak a hívásokon belüli számlálóikat változtassuk meg, hanem az intervallumértékeket, tervezési stílusokat is (hogy a 🌈 szivárványként csillogjon).
<ИмяПроцедуры>
<Интервал>(kötelező) Típus: Szám. Az az időintervallum másodpercben, 1/10 másodperc pontossággal, amely után az eljárás meghívásra kerül (pozitív szám Ha 1-nél kisebb érték van megadva, akkor a harmadik paraméter értékének True-nak kell lennie).
<Однократно>(nem kötelező) Típus: Logikai. A várakozási kezelő egyszeri végrehajtásának jele.
Igaz – a megadott várakozási kezelő egyszer végrehajtásra kerül. Alapértelmezés: False
Leírás: A megadott eljárást várakozáskezelőként csatlakoztatja. Az eljárást a rendszer a rendszer időtúllépési időszakában hívja meg minden alkalommal, amikor a megadott időintervallum letelik.

Elérhetőség:
Vékony kliens, webkliens, vastag kliens.

Jegyzet:
A várakozási kezelő hívása az űrlap bezárásáig vagy az űrlap DisableWaitHandler metódusának meghívásáig folytatódik. Code 1C v 8.2 UE DisableWaitingHandler(<ИмяПроцедуры>)

Kód 1C v 8.2 UP
&OnClient
ShellHandler() eljárás
ProcessWaiting();
Az eljárás vége

&OnServer
Procedure Process Waiting()
// tegye meg, amit szükséges
Az eljárás vége

//....
ConnectWaitHandler("HandlerWrapper", 3, igaz);

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Egy adott felügyelt alkalmazásmodulhoz (szokásos alkalmazásmodulhoz) vagy globális megosztott moduleljáráshoz köt egy hívást meghatározott időintervallumban. A hívás csak „nyugalmi állapotban” történik, azaz olyan időpontban, amikor a program nem hajt végre semmilyen műveletet. A várakozáskezelő hívása addig folytatódik, amíg a rendszer le nem áll, vagy a globális környezet DisableWaitHandler metódusa meg nem hívódik.
Code 1C v 8.x Eljárás Értékesítési Jelentésnap()
// ...
Az eljárás vége

//...
ConnectWaitingHandler("DaySalesReport", 60); // percenként
Kód 1C v 8.x // Normál dinamizmus-ellenőrzésben. konfiguráció frissítések 20 percenként.
ConnectWaitingHandler("IB DynamicChangeCheckWaitingHandler", 20 * 60);
// csatlakoztassa az adatcsere-kezelőt
ConnectWaitingHandler("CheckingDataExchange", chValueVariable("chNumberofSeconds PollingExchange"));
ConnectWaitingHandler("Ellenőrizze a csatlakozási alkalmazásokra adott válaszokat", 86400); // = 24 (óra) * 60 (perc) * 60 (mp) = 1 nap

Formához
Code 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
végtelenül bonyolítja a híváskezelés változékonyságát (például ne csak a hívásokon belüli számlálóikat változtassuk meg, hanem az intervallumértékeket, tervezési stílusokat is (hogy a 🌈 szivárványként csillogjon).
<ИмяПроцедуры>(kötelező) Típus: String. A várakozási kezelőként csatlakoztatandó eljárás neve.
<Интервал>(kötelező) Típus: Szám. Időintervallum másodpercben, 1/10 másodperc pontossággal, amely után az eljárás meghívásra kerül (pozitív szám). Ha 1-nél kisebb értéket adunk meg, akkor a harmadik paraméter értékének True-nak kell lennie.
<Однократно>(nem kötelező) Típus: Logikai. A várakozási kezelő egyszeri végrehajtásának jele. 0 Igaz – a megadott várakozási kezelő egyszer végrehajtásra kerül. Alapértelmezés: False

Leírás:
A megadott eljárást várakozáskezelőként kapcsolja össze. Az eljárást a rendszer a rendszer időtúllépési időszakában hívja meg minden alkalommal, amikor a megadott időintervallum letelik.

Elérhetőség:
Kövér kliens.
Jegyzet:
A várakozási kezelő hívása az űrlap bezárásáig vagy az űrlap DisableWaitHandler metódusának meghívásáig folytatódik.
Példa:
Code 1C v 8.x ConnectWaitingHandler("WhenWaiting", 1);
Code 1C v 8.x Form.mAutosave Interval = 300; // 5 perc
Ha a Form.mAutosave Interval<>0 Akkor
Form.ConnectWaitingHandler("TimerEventHandler", Int(Form.mAutoSaveInterval * 60));
endIf;

Feldolgozásra vár az 1C:Enterprise rendszerben, ahogy a dokumentációból következik, a globális modul eljárás adott időintervallumú periodikus végrehajtására szolgál. A futtatandó kód így fog kinézni:
Kód 1C v 7.x Várakozás feldolgozásra ("UpdateCounter_",1);
Ahol "UpdateCounter_"- az 1 másodpercenként induló globális moduleljárás neve. (a második paraméter egyenlő 1-gyel)

De! A probléma az, hogy csak egyszer futtathatja a várakozási feldolgozást. Az újraindítás törli az előzőt. Más szóval, ha például egy időzítő feldolgozást szeretne végezni az eltelt idő számlálására, akkor csak egy időzítőt futtathat, mert a második időzítő elindítása leállítja az elsőt. De mi van akkor, ha 2, 3 vagy több ilyen időzítőt kell egyszerre futtatnia? Vagy továbbra is rendszeresen ellenőriznie kell a dokumentumok állapotát?

Van kiút! A várakozási feldolgozást az űrlapkontextusban kell futtatni, hogy elválassza ezt a szálat a globális kontextustól. És akkor lehetővé válik a helyi modul eljárás időszakos elindítása, pl. eljárást, amely a feldolgozási űrlap moduljában található.

A futtatandó kód így fog kinézni:
Code 1C v 7.x Form.Waiting Processing("UpdateCounter_",1);
Ahol "UpdateCounter_"- a feldolgozási űrlap helyi moduljának eljárásának neve, amely 1 másodperces időközönként indul el. (a második paraméter egyenlő 1-gyel)
Így minden feldolgozásban futtathatja a saját várakozási feldolgozást, amely addig működik, amíg az űrlap nyitva van.

Használhatja formákban Code 1C v 8.x Form.Waiting Processing ("ProcedureName", StartTime) ,
ahol a ProcedureName a StartTime másodperc után lefutó eljárás neve
Magában az eljárásban be kell illesztenie a Code 1C v 8.x Form.Waiting Processing("ProcedureName",0) kódot a várakozási feldolgozás leállításához (természetesen a szükséges feltételek teljesülése után).
Forrás