1c kuidas saada teavet ootehalduri täitmise kohta. liidese "vilkumine" või asünkroonsete kõnede ahelad

Kood 1C v 8.2 UP Connect Handleri ootused (<ИмяПроцедуры>, <Интервал>, <Однократно>)
Valikud:
<ИмяПроцедуры>
<Интервал>(nõutav) Tüüp: Number. Ajavahemik, sekundites, täpsusega 1/10 sekundit, mille järel kutsutakse protseduur (positiivne arv) Kui väärtus on määratud väiksemaks kui 1, siis kolmanda parameetri väärtus peab olema Tõene.
<Однократно>(valikuline) Tüüp: Boolean. Ootejuhi ühekordse hukkamise lipp.
Tõene – määratud ootekäsitleja käivitatakse üks kord. Vaikeväärtus: False
Kirjeldus: Kinnitab määratud protseduuri ootekäsitlejana. Protseduur kutsutakse välja süsteemi ootel iga kord pärast määratud ajavahemikku.

Saadavus:
Õhuke klient, veebiklient, paks klient.

Märge:
Kõne ootetöötlejale jätkub kuni vormi sulgemiseni või kuni vormi DisableWaitHandleri kutsumiseni. Kood 1C v 8.2 UE DisableWaitingHandler (<ИмяПроцедуры>)

Kood 1C v 8.2 UP
& OnClient
WrapperHandler () Protseduur
Protsess ootab ();
Menetluse lõpp

&Serveris
Protseduuriprotsess on ootel ()
// tehke kõik, mida nõutakse
Menetluse lõpp

//....
ConnectWaitingHandler ("HandlerShell", 3, õige);

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Ühendab kõne hallatava rakenduse mooduli (tavalise rakenduse mooduli) või globaalse ühismooduli määratud protseduuriga määratud ajaintervalli järel. Kõne tehakse ainult "puhkeolekus", st hetkel, kui programm ei tee ühtegi toimingut. Ootamise töötleja kutse jätkub, kuni süsteem lülitub välja või kuni DisableWaitHandleri globaalse konteksti meetodi väljakutsumiseni.
Kood 1C v 8.x protseduuride müügiaruanne päeva kohta ()
// ...
Menetluse lõpp

//...
ConnectWaitingHandler ("ReportOverDaySales", 60); // iga minut
Kood 1C v 8.x // Tüüpilised dyn. konfiguratsiooni värskendused iga 20 minuti järel.
ConnectWaitingHandler ("WaitingHandlerDynamicChangeIBCheckWaiting", 20 * 60);
// ühendage andmevahetuse töötleja
ConnectWaitingHandler ("DataExchangeCheck", chapVariableValue ("chapNumber ofExchangePolishSeconds"));
ConnectWaitingHandler ("CheckRepliesOnConnectionApplication", 86400); // = 24 (t) * 60 (min) * 60 (sek) = 1 päev

Vormi jaoks
Kood 1C v 8.x ConnectWaitingHandler (<ИмяПроцедуры>, <Интервал>, <Однократно>)
Valikud:
<ИмяПроцедуры>(nõutav) Tüüp: String. Ootekäitlejaga liitumise protseduuri nimi.
<Интервал>(nõutav) Tüüp: Number. Ajavahemik, sekundites, täpsusega 1/10 sekundit, mille järel tehakse protseduurikutse (positiivne number). Kui määratud väärtus on väiksem kui 1, peab kolmanda parameetri väärtus olema Tõene.
<Однократно>(valikuline) Tüüp: Boolean. Ootejuhi ühekordse hukkamise lipp. 0 Tõene – määratud ootekäsitleja käivitatakse üks kord. Vaikeväärtus: False

Kirjeldus:
Kinnitab määratud protseduuri ootekäsitlejana. Protseduur kutsutakse välja süsteemi ootel iga kord pärast määratud ajavahemikku.

Saadavus:
Paks klient.
Märge:
Kõne ootetöötlejale jätkub kuni vormi sulgemiseni või kuni vormi DisableWaitHandleri kutsumiseni.
Näide:
Kood 1C v 8.х ConnectWaitingHandler ("Ootan", 1);
Kood 1C v 8.x Vorm. Automaatsalvestuse intervall = 300; // 5 minutit
Kui Form.AutoSave Interval<>0 Siis
Form.ConnectWaitingHandler ("EventHandlerByTimer", täisarv (Form.AutoSaveInterval * 60));
EndIf;

Ootab töötlemist süsteemis 1C: Enterprise, nagu dokumentatsioonist tuleneb, on mõeldud globaalse mooduli protseduuri perioodiliseks täitmiseks kindlaksmääratud ajaintervalli järel. Käivitatav kood näeb välja selline:
Kood 1C v 7.x ootuste töötlemine ("RefreshCounter _", 1);
Kus "RefreshCounter_"- globaalse mooduli protseduuri nimi, mis käivitatakse sagedusega 1 sekund. (teine ​​parameeter võrdub 1-ga)

Aga! Probleem on selles, et ootetöötlust saate käivitada ainult üks kord. Taaskäivitamine tühistab eelmise. Teisisõnu, kui soovite teha näiteks taimeri töötlust kulunud aja loendamiseks, saate käivitada ainult ühe taimeri, kuna teise taimeri käivitamine peatab esimese. Aga mis siis, kui teil on vaja korraga käivitada 2, 3 või enam taimerit? Või peate siiski perioodiliselt kontrollima dokumentide olekut?

Väljapääs on olemas! Selle lõime globaalsest kontekstist lahtihaakimiseks tuleb ootetöötlust alustada vormi kontekstis. Ja siis on võimalik perioodiliselt käivitada kohaliku mooduli protseduur, st. protseduur, mis asub teie töötlemisvormi moodulis.

Käivitatav kood näeb välja selline:
Kood 1C v 7.x Form.Waiting töötlemine ("RefreshCounter _", 1);
Kus "RefreshCounter_"- töötlemisvormi kohaliku mooduli protseduuri nimetus, mis käivitatakse sagedusega 1 sekund. (teine ​​parameeter võrdub 1-ga)
Seega saate igas töötlemises alustada oma ootetöötlust, mis toimib seni, kuni vorm on avatud.

Vormides, mida saate kasutada Kood 1C v 8.х Form.Waiting töötlemine ("ProcedureName", käivitusaeg),
kus ProcedureName on protseduuri nimi, mis käivitub pärast käivitussekundeid
Protseduuri enda sisse peate sisestama koodi 1C v 8.x Form.Waiting Processing ("ProcedureName", 0), et lõpetada ootamise töötlemine (muidugi pärast vajalike tingimuste täitmist).
Allikas

Kood 1C v 8.2 UP Connect Handleri ootused (<ИмяПроцедуры>, <Интервал>, <Однократно>)
Valikud:
<ИмяПроцедуры>
<Интервал>(nõutav) Tüüp: Number. Ajavahemik, sekundites, täpsusega 1/10 sekundit, mille järel kutsutakse protseduur (positiivne arv) Kui väärtus on määratud väiksemaks kui 1, siis kolmanda parameetri väärtus peab olema Tõene.
<Однократно>(valikuline) Tüüp: Boolean. Ootejuhi ühekordse hukkamise lipp.
Tõene – määratud ootekäsitleja käivitatakse üks kord. Vaikeväärtus: False
Kirjeldus: Kinnitab määratud protseduuri ootekäsitlejana. Protseduur kutsutakse välja süsteemi ootel iga kord pärast määratud ajavahemikku.

Saadavus:
Õhuke klient, veebiklient, paks klient.

Märge:
Kõne ootetöötlejale jätkub kuni vormi sulgemiseni või kuni vormi DisableWaitHandleri kutsumiseni. Kood 1C v 8.2 UE DisableWaitingHandler (<ИмяПроцедуры>)

Kood 1C v 8.2 UP
& OnClient
WrapperHandler () Protseduur
Protsess ootab ();
Menetluse lõpp

&Serveris
Protseduuriprotsess on ootel ()
// tehke kõik, mida nõutakse
Menetluse lõpp

//....
ConnectWaitingHandler ("HandlerShell", 3, õige);

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Ühendab kõne hallatava rakenduse mooduli (tavalise rakenduse mooduli) või globaalse ühismooduli määratud protseduuriga määratud ajaintervalli järel. Kõne tehakse ainult "puhkeolekus", st hetkel, kui programm ei tee ühtegi toimingut. Ootamise töötleja kutse jätkub, kuni süsteem lülitub välja või kuni DisableWaitHandleri globaalse konteksti meetodi väljakutsumiseni.
Kood 1C v 8.x protseduuride müügiaruanne päeva kohta ()
// ...
Menetluse lõpp

//...
ConnectWaitingHandler ("ReportOverDaySales", 60); // iga minut
Kood 1C v 8.x // Tüüpilised dyn. konfiguratsiooni värskendused iga 20 minuti järel.
ConnectWaitingHandler ("WaitingHandlerDynamicChangeIBCheckWaiting", 20 * 60);
// ühendage andmevahetuse töötleja
ConnectWaitingHandler ("DataExchangeCheck", chapVariableValue ("chapNumber ofExchangePolishSeconds"));
ConnectWaitingHandler ("CheckRepliesOnConnectionApplication", 86400); // = 24 (t) * 60 (min) * 60 (sek) = 1 päev

Vormi jaoks
Kood 1C v 8.x ConnectWaitingHandler (<ИмяПроцедуры>, <Интервал>, <Однократно>)
Valikud:
<ИмяПроцедуры>(nõutav) Tüüp: String. Ootekäitlejaga liitumise protseduuri nimi.
<Интервал>(nõutav) Tüüp: Number. Ajavahemik, sekundites, täpsusega 1/10 sekundit, mille järel tehakse protseduurikutse (positiivne number). Kui määratud väärtus on väiksem kui 1, peab kolmanda parameetri väärtus olema Tõene.
<Однократно>(valikuline) Tüüp: Boolean. Ootejuhi ühekordse hukkamise lipp. 0 Tõene – määratud ootekäsitleja käivitatakse üks kord. Vaikeväärtus: False

Kirjeldus:
Kinnitab määratud protseduuri ootekäsitlejana. Protseduur kutsutakse välja süsteemi ootel iga kord pärast määratud ajavahemikku.

Saadavus:
Paks klient.
Märge:
Kõne ootetöötlejale jätkub kuni vormi sulgemiseni või kuni vormi DisableWaitHandleri kutsumiseni.
Näide:
Kood 1C v 8.х ConnectWaitingHandler ("Ootan", 1);
Kood 1C v 8.x Vorm. Automaatsalvestuse intervall = 300; // 5 minutit
Kui Form.AutoSave Interval<>0 Siis
Form.ConnectWaitingHandler ("EventHandlerByTimer", täisarv (Form.AutoSaveInterval * 60));
EndIf;

Ootab töötlemist süsteemis 1C: Enterprise, nagu dokumentatsioonist tuleneb, on mõeldud globaalse mooduli protseduuri perioodiliseks täitmiseks kindlaksmääratud ajaintervalli järel. Käivitatav kood näeb välja selline:
Kood 1C v 7.x ootuste töötlemine ("RefreshCounter _", 1);
Kus "RefreshCounter_"- globaalse mooduli protseduuri nimi, mis käivitatakse sagedusega 1 sekund. (teine ​​parameeter võrdub 1-ga)

Aga! Probleem on selles, et ootetöötlust saate käivitada ainult üks kord. Taaskäivitamine tühistab eelmise. Teisisõnu, kui soovite teha näiteks taimeri töötlust kulunud aja loendamiseks, saate käivitada ainult ühe taimeri, kuna teise taimeri käivitamine peatab esimese. Aga mis siis, kui teil on vaja korraga käivitada 2, 3 või enam taimerit? Või peate siiski perioodiliselt kontrollima dokumentide olekut?

Väljapääs on olemas! Selle lõime globaalsest kontekstist lahtihaakimiseks tuleb ootetöötlust alustada vormi kontekstis. Ja siis on võimalik perioodiliselt käivitada kohaliku mooduli protseduur, st. protseduur, mis asub teie töötlemisvormi moodulis.

Käivitatav kood näeb välja selline:
Kood 1C v 7.x Form.Waiting töötlemine ("RefreshCounter _", 1);
Kus "RefreshCounter_"- töötlemisvormi kohaliku mooduli protseduuri nimetus, mis käivitatakse sagedusega 1 sekund. (teine ​​parameeter võrdub 1-ga)
Seega saate igas töötlemises alustada oma ootetöötlust, mis toimib seni, kuni vorm on avatud.

Vormides, mida saate kasutada Kood 1C v 8.х Form.Waiting töötlemine ("ProcedureName", käivitusaeg),
kus ProcedureName on protseduuri nimi, mis käivitub pärast käivitussekundeid
Protseduuri enda sisse peate sisestama koodi 1C v 8.x Form.Waiting Processing ("ProcedureName", 0), et lõpetada ootamise töötlemine (muidugi pärast vajalike tingimuste täitmist).
Allikas

1C platvorm pakub meile asünkroonsete protseduuride kõnede võimalusi, mida mõnikord saab kasutada lihtsate, kuid lõbusate asjade jaoks. Näiteks saab "pilgutada" kõike, millel on värv või mis tahes võimalus visuaalset kujundust muuta. Lisaks saate kasutada kas lihtsamat, kuid kontrollimatut mehhanismi või luua huvitava asünkroonsete kõnede ahela ja määrata selle eelistatud käitumise.

Me räägime siin loomulikult AttachWaitHandleri () protseduurist.

Lubage mul teile meelde tuletada protseduuri süntaksit:

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

Veelgi enam, kui määrate intervalli alla sekundi, tuleb protseduuri alustada üks kord. See on koht, kus me kaotame kontrolli täitmise voo üle ja kaotame võimaluse seda "kohandada" (paindlikult, individuaalselt).

Kuid sellest piirangust on lihtne mööda hiilida.

Et mõte mööda puud laiali ei läheks, toon kohe lihtsa näite ja seletan lahti.

Oletame, et meil on vormil arvutustabeli dokument ja me tahame selle teatud alaga viis korda "vilgutada".

//////////////////// // // // // // ////////////////// & OnClient Protseduur Vilgutusala (käsk) mf Blink Time = 3; // Loendur. Vorm atribuut "nähtav" ootekäsitlejate protseduurides ConnectWaitingHandler ("ShowAreaSelection", 0.1, True); // Saate ka otse kutsuda EndProcedure & Kliendi protseduuris ShowAreaSelection () Area = Object.TD.Area (mfFirstDataString, mfFirstDataColumn, mfLastDataRow, mfLastDataColumn); Ääris = uus rida (TabularDocumentCellLineType.Double); Piirkond.Ring (Border, Border, Border, Border); // Piirake ala: mfFlashMost = mfFlashMount - 1; // Loenduri vähendamine ConnectWaitingHandler ("RemoveAreaSelection", 0.5, True); // Ühendage asünkroonsete kõnede ahel EndProcedure & Kliendi protseduuri juures RemoveSelectionArea () Area = Object.TD.Area (mfFirstDataString, mfFirstDataColumn, mfLastDataRow, mfLastDataColumn); Ääris = uus rida (TabularDocumentCellLineType.NoLine); Piirkond.Ring (Border, Border, Border, Border); // Eemaldage ala kontuurid If mfSkink> 0 Siis ConnectWaitingHandler ("ShowAreaSelection", 0.5, True); // Korda nii palju, kui loendurisse jääb EndIf; Menetluse lõpp

Peamine nõue on ainult see, et loenduri muutuja mfWindBlow peaks olema asünkroonselt käivitatavatest protseduuridest "nähtav". V sel juhul muutuja on vormiatribuut.

Tähelepanelik lugeja võis märgata, et selliste kettide moodustumisega tapame kaks kärbest ühe hoobiga:

  • Me eirame protseduurikutsete korratavuse piirangut intervalliväärtustega alla sekundi;
  • Meil on võimalus moodustada erineva pikkuse ja keerukusega kette:
    • ühendage ootekäitleja otse ootehalduri protseduuris endas;
    • teha sellised protseduurid omavahel ühenduses;
    • organiseerida kõneahelate keerukam struktuur;
    • muudab kõnehalduse muutlikkuse lõpmatult keeruliseks (näiteks muutke kõnede sees mitte ainult nende loendureid, vaid ka intervallide väärtusi, kujundusstiile (nii, et vikerkaar säraks 🌈).

Vaatamata kirjeldatud meetodi lihtsusele on selles peidus märkimisväärne potentsiaal.

2017. aastal on programmi käitumist paindlikum kontrollida – see on kaasaegne.