„blikanie“ rozhrania, alebo reťazcov asynchrónnych hovorov. "blikanie" rozhrania, alebo reťazcov asynchrónnych hovorov Čakajúce spracovanie 1s 8.3

Očakávania obsluhy kódu Code 1C v 8.2 UP Connect (<ИмяПроцедуры>, <Интервал>, <Однократно>)
Možnosti:
<ИмяПроцедуры>
<Интервал>(povinné) Typ: Číslo. Časový interval v sekundách s presnosťou na 1/10 sekundy, po ktorom bude volaná procedúra (kladné číslo). Ak je zadaná hodnota menšia ako 1, potom hodnota tretieho parametra musí byť True.
<Однократно>(voliteľné) Typ: Boolean. Príznak jednorazového vykonania obsluhy čakania.
True – zadaný obslužný program čakania sa vykoná raz. Predvolená hodnota: Nepravda
Opis: Pripája zadaný postup ako obslužný program čakania. Procedúra bude vyvolaná počas čakania systému vždy po uplynutí určeného časového intervalu.

Dostupnosť:
Tenký klient, webový klient, hrubý klient.

Poznámka:
Volanie obsluhy čakania pokračuje, kým sa formulár nezavrie alebo kým sa nezavolá DisableWaitHandler formulára. Kód 1C v 8.2 UE DisableWaitingHandler (<ИмяПроцедуры>)

Kód 1C v 8.2 UP
& OnClient
WrapperHandler () Postup
ProcessWaiting ();
Koniec procedúry

&Na serveri
Postup Čakajúci proces ()
// urobte všetko, čo je potrebné
Koniec procedúry

//....
ConnectWaitingHandler ("HandlerShell", 3, pravda);

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Pripája volanie k zadanej procedúre riadeného aplikačného modulu (bežný aplikačný modul) alebo globálneho spoločného modulu v určenom časovom intervale. Hovor sa uskutoční len v „kľudovom stave“, teda v momente, keď program nevykoná žiadnu akciu. Volanie obslužného programu čakania pokračuje, kým sa systém nevypne alebo kým sa nezavolá metóda globálneho kontextu DisableWaitHandler.
Kód 1C v. 8.x Správa o predaji procedúr za deň ()
// ...
Koniec procedúry

//...
ConnectWaitingHandler ("ReportOverDaySales", 60); // každú minútu
Kód 1C v 8.x // Pri štandardných kontrolách dyn. aktualizácia konfigurácie každých 20 min.
ConnectWaitingHandler ("WaitingHandlerDynamicChangingIBCheckWaiting", 20 * 60);
// pripojenie obsluhy výmeny údajov
ConnectWaitingHandler ("DataExchangeCheck", chapVariableValue ("kapNumber of ExchangePolishSeconds"));
ConnectWaitingHandler ("CheckRepliesOnConnectionApplication", 86400); // = 24 (h) * 60 (min) * 60 (s) = 1 deň

Pre Formulár
Kód 1C v 8.x ConnectWaitingHandler (<ИмяПроцедуры>, <Интервал>, <Однократно>)
Možnosti:
<ИмяПроцедуры>(povinné) Typ: Reťazec. Názov procedúry, ktorá sa má pripojiť ako obsluha čakania.
<Интервал>(povinné) Typ: Číslo. Časový interval v sekundách s presnosťou 1/10 sekundy, po ktorom sa uskutoční volanie procedúry (kladné číslo). Ak je zadaná hodnota menšia ako 1, potom hodnota tretieho parametra musí byť True.
<Однократно>(voliteľné) Typ: Boolean. Príznak jednorazového vykonania obsluhy čakania. 0 True – zadaný obslužný program čakania sa vykoná raz. Predvolená hodnota: Nepravda

Popis:
Pripojí špecifikovaný postup ako obslužný program čakania. Procedúra bude vyvolaná počas čakania systému vždy po uplynutí určeného časového intervalu.

Dostupnosť:
Hrubý klient.
Poznámka:
Volanie obslužného programu čakania pokračuje, kým sa formulár nezavrie alebo kým sa nezavolá DisableWaitHandler formulára.
Príklad:
Kód 1C v 8.x ConnectWaitingHandler („Čakanie“, 1);
Kód 1C v 8.x formulár Interval automatického ukladania = 300; // 5 minút
Ak Form.AutoSave Interval<>0 Potom
Form.ConnectWaitingHandler ("EventHandlerByTimer", Integer (Form.AutoSaveInterval * 60));
Koniec Ak;

Čakajúce spracovanie v systéme 1C: Enterprise, ako vyplýva z dokumentácie, je určený na periodické vykonávanie procedúry globálneho modulu v stanovenom časovom intervale. Kód na spustenie bude vyzerať takto:
Kód 1C v 7.x Spracovanie očakávaní ("RefreshCounter _", 1);
Kde "RefreshCounter_"- názov procedúry globálneho modulu, ktorý sa bude spúšťať s frekvenciou 1 sekundy. (druhý parameter sa rovná 1)

Ale! Problém je v tom, že spracovanie čakania môžete spustiť iba raz. Reštartovaním sa zruší predchádzajúci. Inými slovami, ak chcete vykonať napríklad spracovanie časovača na počítanie uplynutého času, môžete spustiť iba jeden časovač, pretože spustenie druhého časovača zastaví prvý. Čo ak však potrebujete spustiť 2, 3 alebo viac týchto časovačov súčasne? Alebo stále potrebujete pravidelne skenovať stav dokumentov?

Existuje východ! Spracovanie čakania sa musí spustiť v kontexte formulára, aby sa toto vlákno oddelilo od globálneho kontextu. A potom bude možné periodicky začať postup miestneho modulu, t.j. postup, ktorý sa nachádza v module vášho spracovateľského formulára.

Kód na spustenie bude vyzerať takto:
Kód 1C v 7.x Form.Waiting Processing ("RefreshCounter _", 1);
Kde "RefreshCounter_"- názov procedúry lokálneho modulu spracovateľského formulára, ktorý sa bude spúšťať s frekvenciou 1 sekundy. (druhý parameter sa rovná 1)
V každom spracovaní teda môžete začať vlastné spracovanie čakania, ktoré bude fungovať, pokiaľ je formulár otvorený.

Vo formulároch, ktoré môžete použiť Kód 1C v 8.х Form.Waiting Processing ("ProcedureName", Startup Time),
kde ProcedureName je názov procedúry, ktorá sa spustí po sekundách Startup Time
V samotnej procedúre je potrebné vložiť Code 1C v 8.x Form.Waiting Processing ("ProcedureName", 0), aby ste zastavili čakacie spracovanie (samozrejme po splnení potrebných podmienok).
Zdroj

Platforma 1C nám poskytuje možnosti asynchrónnych volaní procedúr, ktoré je niekedy možné použiť na jednoduché, ale zábavné veci. Môžete napríklad „žmurknúť“ všetko, čo má farbu alebo akúkoľvek možnosť zmeny vizuálneho dizajnu. Navyše môžete použiť jednoduchší, ale nekontrolovaný mechanizmus, alebo navrhnúť zaujímavý reťazec asynchrónnych volaní a nastaviť jeho preferované správanie.

Hovoríme tu, samozrejme, o procedúre AttachWaitHandler ().

Dovoľte mi pripomenúť syntax postupu:

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

Navyše, ak zadáte interval kratší ako jedna sekunda, začiatok postupu musí byť jednorazový. Tu strácame kontrolu nad tokom vykonávania a strácame možnosť „prispôsobiť“ si ho (flexibilne, individuálne).

Ale toto obmedzenie sa dá ľahko obísť.

Aby sa myšlienka nešírila po strome, hneď uvediem jednoduchý príklad a vysvetlím.

Povedzme, že máme na formulári tabuľkový dokument a chceme 5-krát „bliknúť“ nejakou jeho oblasťou.

//////////////////// // // // // // ////////////////// & OnClient Postup Oblasť žmurkania (príkaz) mf Doba žmurkania = 3; // Počítadlo. Atribút formulára, "viditeľný" v procedúrach obsluhy čakania ConnectWaitingHandler ("ShowAreaSelection", 0.1, True); // Môžete tiež priamo zavolať EndProcedure & On the Client Procedure ShowSelectionArea () Area = Object.TD.Area (mfFirstDataString, mfFirstDataColumn, mfLastDataRow, mfLastDataColumn); Border = New Line (TabularDocumentCellLineType.Double); Kraj.Kruh (Hranica, Hranica, Hranica, Hranica); // Načrtnite oblasť pomocou mfSpeedBlink = mfSwinkMow - 1; // Zníženie počítadla ConnectWaitingHandler ("RemoveAreaSelection", 0,5, True); // Prepojenie reťazca asynchrónnych volaní EndProcedure & At the Client Procedure RemoveSelectionArea () Area = Object.TD.Area (mfFirstDataString, mfFirstDataColumn, mfLastDataRow, mfLastDataColumn); Border = New Line (TabularDocumentCellLineType.NoLine); Kraj.Kruh (Hranica, Hranica, Hranica, Hranica); // Odstránenie obrysu oblasti If mfSkink> 0 Then ConnectWaitingHandler ("ShowAreaSelection", 0.5, True); // Opakujte, kým zostáva v počítadle EndIf; Koniec procedúry

Hlavnou požiadavkou je len to, aby premenná počítadla mfWindBlow bola "viditeľná" z procedúr, ktoré spúšťame asynchrónne. V tomto prípade je premennou atribút formulára.

Pozorný čitateľ si mohol všimnúť, že vytvorením takýchto reťazí zabijeme dve muchy jednou ranou:

  • Obchádzame obmedzenie opakovateľnosti volaní procedúr s intervalovými hodnotami menšími ako jedna sekunda;
  • Máme schopnosť vytvárať reťazce rôznych dĺžok a zložitosti:
    • pripojiť obsluhu čakania priamo v samotnej procedúre obsluhy čakania;
    • aby sa takéto postupy navzájom spájali;
    • organizovať zložitejšiu štruktúru volacích reťazcov;
    • nekonečne komplikujú variabilitu správy hovorov (napríklad zmena vnútri hovorov nielen ich počítadiel, ale aj hodnôt intervalov, štýlov dizajnu (aby sa dúha trblietala 🌈).

Napriek jednoduchosti opísanej metódy sa v nej skrýva značný potenciál.

V roku 2017 je flexibilnejšie kontrolovať správanie programu – to je moderné.

Očakávania obsluhy kódu Code 1C v 8.2 UP Connect (<ИмяПроцедуры>, <Интервал>, <Однократно>)
Možnosti:
<ИмяПроцедуры>
<Интервал>(povinné) Typ: Číslo. Časový interval v sekundách s presnosťou na 1/10 sekundy, po ktorom bude volaná procedúra (kladné číslo). Ak je zadaná hodnota menšia ako 1, potom hodnota tretieho parametra musí byť True.
<Однократно>(voliteľné) Typ: Boolean. Príznak jednorazového vykonania obsluhy čakania.
True – zadaný obslužný program čakania sa vykoná raz. Predvolená hodnota: Nepravda
Opis: Pripája zadaný postup ako obslužný program čakania. Procedúra bude vyvolaná počas čakania systému vždy po uplynutí určeného časového intervalu.

Dostupnosť:
Tenký klient, webový klient, hrubý klient.

Poznámka:
Volanie obsluhy čakania pokračuje, kým sa formulár nezavrie alebo kým sa nezavolá DisableWaitHandler formulára. Kód 1C v 8.2 UE DisableWaitingHandler (<ИмяПроцедуры>)

Kód 1C v 8.2 UP
& OnClient
WrapperHandler () Postup
ProcessWaiting ();
Koniec procedúry

&Na serveri
Postup Čakajúci proces ()
// urobte všetko, čo je potrebné
Koniec procedúry

//....
ConnectWaitingHandler ("HandlerShell", 3, pravda);

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Pripája volanie k zadanej procedúre riadeného aplikačného modulu (bežný aplikačný modul) alebo globálneho spoločného modulu v určenom časovom intervale. Hovor sa uskutoční len v „kľudovom stave“, teda v momente, keď program nevykoná žiadnu akciu. Volanie obslužného programu čakania pokračuje, kým sa systém nevypne alebo kým sa nezavolá metóda globálneho kontextu DisableWaitHandler.
Kód 1C v. 8.x Správa o predaji procedúr za deň ()
// ...
Koniec procedúry

//...
ConnectWaitingHandler ("ReportOverDaySales", 60); // každú minútu
Kód 1C v 8.x // Pri štandardných kontrolách dyn. aktualizácia konfigurácie každých 20 min.
ConnectWaitingHandler ("WaitingHandlerDynamicChangingIBCheckWaiting", 20 * 60);
// pripojenie obsluhy výmeny údajov
ConnectWaitingHandler ("DataExchangeCheck", chapVariableValue ("kapNumber of ExchangePolishSeconds"));
ConnectWaitingHandler ("CheckRepliesOnConnectionApplication", 86400); // = 24 (h) * 60 (min) * 60 (s) = 1 deň

Pre Formulár
Kód 1C v 8.x ConnectWaitingHandler (<ИмяПроцедуры>, <Интервал>, <Однократно>)
Možnosti:
<ИмяПроцедуры>(povinné) Typ: Reťazec. Názov procedúry, ktorá sa má pripojiť ako obsluha čakania.
<Интервал>(povinné) Typ: Číslo. Časový interval v sekundách s presnosťou 1/10 sekundy, po ktorom sa uskutoční volanie procedúry (kladné číslo). Ak je zadaná hodnota menšia ako 1, potom hodnota tretieho parametra musí byť True.
<Однократно>(voliteľné) Typ: Boolean. Príznak jednorazového vykonania obsluhy čakania. 0 True – zadaný obslužný program čakania sa vykoná raz. Predvolená hodnota: Nepravda

Popis:
Pripojí špecifikovaný postup ako obslužný program čakania. Procedúra bude vyvolaná počas čakania systému vždy po uplynutí určeného časového intervalu.

Dostupnosť:
Hrubý klient.
Poznámka:
Volanie obslužného programu čakania pokračuje, kým sa formulár nezavrie alebo kým sa nezavolá DisableWaitHandler formulára.
Príklad:
Kód 1C v 8.x ConnectWaitingHandler („Čakanie“, 1);
Kód 1C v 8.x formulár Interval automatického ukladania = 300; // 5 minút
Ak Form.AutoSave Interval<>0 Potom
Form.ConnectWaitingHandler ("EventHandlerByTimer", Integer (Form.AutoSaveInterval * 60));
Koniec Ak;

Čakajúce spracovanie v systéme 1C: Enterprise, ako vyplýva z dokumentácie, je určený na periodické vykonávanie procedúry globálneho modulu v stanovenom časovom intervale. Kód na spustenie bude vyzerať takto:
Kód 1C v 7.x Spracovanie očakávaní ("RefreshCounter _", 1);
Kde "RefreshCounter_"- názov procedúry globálneho modulu, ktorý sa bude spúšťať s frekvenciou 1 sekundy. (druhý parameter sa rovná 1)

Ale! Problém je v tom, že spracovanie čakania môžete spustiť iba raz. Reštartovaním sa zruší predchádzajúci. Inými slovami, ak chcete vykonať napríklad spracovanie časovača na počítanie uplynutého času, môžete spustiť iba jeden časovač, pretože spustenie druhého časovača zastaví prvý. Čo ak však potrebujete spustiť 2, 3 alebo viac týchto časovačov súčasne? Alebo stále potrebujete pravidelne skenovať stav dokumentov?

Existuje východ! Spracovanie čakania sa musí spustiť v kontexte formulára, aby sa toto vlákno oddelilo od globálneho kontextu. A potom bude možné periodicky začať postup miestneho modulu, t.j. postup, ktorý sa nachádza v module vášho spracovateľského formulára.

Kód na spustenie bude vyzerať takto:
Kód 1C v 7.x Form.Waiting Processing ("RefreshCounter _", 1);
Kde "RefreshCounter_"- názov procedúry lokálneho modulu spracovateľského formulára, ktorý sa bude spúšťať s frekvenciou 1 sekundy. (druhý parameter sa rovná 1)
V každom spracovaní teda môžete začať vlastné spracovanie čakania, ktoré bude fungovať, pokiaľ je formulár otvorený.

Vo formulároch, ktoré môžete použiť Kód 1C v 8.х Form.Waiting Processing ("ProcedureName", Startup Time),
kde ProcedureName je názov procedúry, ktorá sa spustí po sekundách Startup Time
V samotnej procedúre je potrebné vložiť Code 1C v 8.x Form.Waiting Processing ("ProcedureName", 0), aby ste zastavili čakacie spracovanie (samozrejme po splnení potrebných podmienok).
Zdroj