1c cum să aflați despre execuția manipulatorului de așteptare. „clipind” interfața sau lanțurile de apeluri asincrone

Cod 1C v 8.2 Așteptările handlerului de conectare UP (<ИмяПроцедуры>, <Интервал>, <Однократно>)
Parametri:
<ИмяПроцедуры>
<Интервал>(obligatoriu) Tip: Număr. Interval de timp, în secunde, cu o precizie de 1/10 dintr-o secundă, după care se va apela procedura (număr pozitiv). Dacă o valoare este specificată mai mică de 1, atunci valoarea celui de-al treilea parametru trebuie să fie True.
<Однократно>(opțional) Tip: Boolean. Indică faptul că gestionarul de așteptare este executat o singură dată.
True - Handlerul de așteptare specificat va fi executat o singură dată. Valoare implicită: False
Descriere: atașează procedura specificată ca un handler de așteptare. Procedura va fi apelată în timp ce sistemul așteaptă de fiecare dată după intervalul de timp specificat.

Disponibilitate:
Client subțire, client web, client gros.

Notă:
Apelul către gestionarul de așteptare continuă până când formularul este închis sau până când este apelat DisableWaitHandler al formularului. Cod 1C v 8.2 UE DisableWaitingHandler (<ИмяПроцедуры>)

Cod 1C v 8.2 UP
& OnClient
WrapperHandler () Procedură
ProcessWaiting ();
Sfârșitul procedurii

& Pe server
Procedură Proces Așteptare ()
// faceți tot ce este necesar
Sfârșitul procedurii

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

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Conectează un apel la procedura specificată a unui modul de aplicație gestionat (modul de aplicație obișnuit) sau a unui modul comun global la un interval de timp specificat. Apelul se va face numai în „stare de repaus”, adică în momentul în care programul nu efectuează nicio acțiune. Apelul către gestionarul de așteptare continuă până când sistemul se oprește sau până când se apelează metoda contextului global DisableWaitHandler.
Cod 1C v 8.x Procedură Raport de vânzări pe zi ()
// ...
Sfârșitul procedurii

//...
ConnectWaitingHandler ("ReportOverDaySales", 60); // in fiecare minut
Cod 1C v 8.x // În verificările standard din. actualizări de configurare la fiecare 20 de minute.
ConnectWaitingHandler ("WaitingHandlerDynamicChangeIB CheckWaiting", 20 * 60);
// conectați un handler de schimb de date
ConnectWaitingHandler ("DataExchangeCheck", chapVariableValue ("chapNumber ofExchangePolishSeconds"));
ConnectWaitingHandler ("CheckRepliesOnConnectionApplication", 86400); // = 24 (h) * 60 (min) * 60 (sec) = 1 zi

Pentru Form
Cod 1C v 8.x ConnectWaitingHandler (<ИмяПроцедуры>, <Интервал>, <Однократно>)
Parametri:
<ИмяПроцедуры>(obligatoriu) Tip: Șir. Numele procedurii de conectat ca administrator de așteptare.
<Интервал>(obligatoriu) Tip: Număr. Interval de timp, în secunde, cu o precizie de 1/10 secunde, după care se va efectua apelul de procedură (număr pozitiv). Dacă valoarea specificată este mai mică de 1, atunci al treilea parametru trebuie să fie True.
<Однократно>(opțional) Tip: Boolean. Steagul execuției unice a handlerului de așteptare. 0 Adevărat - Handlerul de așteptare specificat va fi executat o singură dată. Valoare implicită: False

Descriere:
Atașează procedura specificată ca un handler de așteptare. Procedura va fi apelată în timpul perioadei de așteptare a sistemului de fiecare dată după intervalul de timp specificat.

Disponibilitate:
Client gros.
Notă:
Apelul către gestionarul de așteptare continuă până când formularul este închis sau până când este apelat DisableWaitHandler al formularului.
Exemplu:
Cod 1C v 8.x ConnectWaitingHandler („În așteptare”, 1);
Cod 1C v 8.x Form. Interval de salvare automată = 300; // 5 minute
Dacă Form.AutoSave Interval<>0 Atunci
Form.ConnectWaitingHandler ("EventHandlerByTimer", Integer (Form.AutoSaveInterval * 60));
EndIf;

Procesarea în așteptare în sistemul 1C: Enterprise, după cum urmează din documentație, este destinat executării periodice a procedurii modulului global la un interval de timp specificat. Codul de rulat va arăta astfel:
Cod 1C v 7.x Prelucrări așteptări ("RefreshCounter _", 1);
Unde „RefreshCounter_”- numele procedurii modulului global, care va fi lansat cu o frecvență de 1 secundă. (al doilea parametru egal cu 1)

Dar! Problema este că puteți rula procesarea așteptării o singură dată. Repornirea va anula cea anterioară. Cu alte cuvinte, dacă doriți să realizați, de exemplu, o prelucrare cu temporizator pentru numărarea timpului scurs, atunci puteți porni un singur temporizator, deoarece pornirea celui de-al doilea cronometru îl va opri pe primul. Dar dacă trebuie să porniți 2, 3 sau mai multe dintre aceste temporizatoare în același timp? Sau mai trebuie să scanați periodic starea documentelor?

Există o ieșire! Procesarea de așteptare trebuie să înceapă în contextul formularului pentru a separa acest fir de context global. Și apoi va fi posibil să porniți periodic procedura modulului local, adică procedura localizată în modulul formularului dvs. de procesare.

Codul de rulat va arăta astfel:
Cod 1C v 7.x Form.Waiting Processing („RefreshCounter _”, 1);
Unde „RefreshCounter_”- numele procedurii modulului local al formularului de procesare, care va fi lansat cu o frecvență de 1 secundă. (al doilea parametru egal cu 1)
Astfel, în fiecare procesare, puteți începe propria procesare de așteptare, care va funcționa atâta timp cât formularul este deschis.

În formularele pe care le puteți utiliza Cod 1C v 8.х Form.Waiting Processing („ProcedureName”, Startup Time),
unde ProcedureName este numele procedurii care începe după câteva secunde de pornire
În procedura însăși, trebuie să inserați Codul 1C v 8.x Form.Waiting Processing („ProcedureName”, 0) pentru a opri procesarea în așteptare (desigur, după îndeplinirea condițiilor necesare).
Sursă

Cod 1C v 8.2 Așteptările handlerului de conectare UP (<ИмяПроцедуры>, <Интервал>, <Однократно>)
Parametri:
<ИмяПроцедуры>
<Интервал>(obligatoriu) Tip: Număr. Interval de timp, în secunde, cu o precizie de 1/10 dintr-o secundă, după care se va apela procedura (număr pozitiv). Dacă o valoare este specificată mai mică de 1, atunci valoarea celui de-al treilea parametru trebuie să fie True.
<Однократно>(opțional) Tip: Boolean. Indică faptul că gestionarul de așteptare este executat o singură dată.
True - Handlerul de așteptare specificat va fi executat o singură dată. Valoare implicită: False
Descriere: atașează procedura specificată ca un handler de așteptare. Procedura va fi apelată în timp ce sistemul așteaptă de fiecare dată după intervalul de timp specificat.

Disponibilitate:
Client subțire, client web, client gros.

Notă:
Apelul către gestionarul de așteptare continuă până când formularul este închis sau până când este apelat DisableWaitHandler al formularului. Cod 1C v 8.2 UE DisableWaitingHandler (<ИмяПроцедуры>)

Cod 1C v 8.2 UP
& OnClient
WrapperHandler () Procedură
ProcessWaiting ();
Sfârșitul procedurii

& Pe server
Procedură Proces Așteptare ()
// faceți tot ce este necesar
Sfârșitul procedurii

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

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Conectează un apel la procedura specificată a unui modul de aplicație gestionat (modul de aplicație obișnuit) sau a unui modul comun global la un interval de timp specificat. Apelul se va face numai în „stare de repaus”, adică în momentul în care programul nu efectuează nicio acțiune. Apelul către gestionarul de așteptare continuă până când sistemul se oprește sau până când se apelează metoda contextului global DisableWaitHandler.
Cod 1C v 8.x Procedură Raport de vânzări pe zi ()
// ...
Sfârșitul procedurii

//...
ConnectWaitingHandler ("ReportOverDaySales", 60); // in fiecare minut
Cod 1C v 8.x // În verificările standard din. actualizări de configurare la fiecare 20 de minute.
ConnectWaitingHandler ("WaitingHandlerDynamicChangeIB CheckWaiting", 20 * 60);
// conectați un handler de schimb de date
ConnectWaitingHandler ("DataExchangeCheck", chapVariableValue ("chapNumber ofExchangePolishSeconds"));
ConnectWaitingHandler ("CheckRepliesOnConnectionApplication", 86400); // = 24 (h) * 60 (min) * 60 (sec) = 1 zi

Pentru Form
Cod 1C v 8.x ConnectWaitingHandler (<ИмяПроцедуры>, <Интервал>, <Однократно>)
Parametri:
<ИмяПроцедуры>(obligatoriu) Tip: Șir. Numele procedurii de conectat ca administrator de așteptare.
<Интервал>(obligatoriu) Tip: Număr. Interval de timp, în secunde, cu o precizie de 1/10 secunde, după care se va efectua apelul de procedură (număr pozitiv). Dacă valoarea specificată este mai mică de 1, atunci al treilea parametru trebuie să fie True.
<Однократно>(opțional) Tip: Boolean. Steagul execuției unice a handlerului de așteptare. 0 Adevărat - Handlerul de așteptare specificat va fi executat o singură dată. Valoare implicită: False

Descriere:
Atașează procedura specificată ca un handler de așteptare. Procedura va fi apelată în timpul perioadei de așteptare a sistemului de fiecare dată după intervalul de timp specificat.

Disponibilitate:
Client gros.
Notă:
Apelul către gestionarul de așteptare continuă până când formularul este închis sau până când este apelat DisableWaitHandler al formularului.
Exemplu:
Cod 1C v 8.x ConnectWaitingHandler („În așteptare”, 1);
Cod 1C v 8.x Form. Interval de salvare automată = 300; // 5 minute
Dacă Form.AutoSave Interval<>0 Atunci
Form.ConnectWaitingHandler ("EventHandlerByTimer", Integer (Form.AutoSaveInterval * 60));
EndIf;

Procesarea în așteptare în sistemul 1C: Enterprise, după cum urmează din documentație, este destinat executării periodice a procedurii modulului global la un interval de timp specificat. Codul de rulat va arăta astfel:
Cod 1C v 7.x Prelucrări așteptări ("RefreshCounter _", 1);
Unde „RefreshCounter_”- numele procedurii modulului global, care va fi lansat cu o frecvență de 1 secundă. (al doilea parametru egal cu 1)

Dar! Problema este că puteți rula procesarea așteptării o singură dată. Repornirea va anula cea anterioară. Cu alte cuvinte, dacă doriți să realizați, de exemplu, o prelucrare cu temporizator pentru numărarea timpului scurs, atunci puteți porni un singur temporizator, deoarece pornirea celui de-al doilea cronometru îl va opri pe primul. Dar dacă trebuie să porniți 2, 3 sau mai multe dintre aceste temporizatoare în același timp? Sau mai trebuie să scanați periodic starea documentelor?

Există o ieșire! Procesarea de așteptare trebuie să înceapă în contextul formularului pentru a separa acest fir de context global. Și apoi va fi posibil să porniți periodic procedura modulului local, adică procedura localizată în modulul formularului dvs. de procesare.

Codul de rulat va arăta astfel:
Cod 1C v 7.x Form.Waiting Processing („RefreshCounter _”, 1);
Unde „RefreshCounter_”- numele procedurii modulului local al formularului de procesare, care va fi lansat cu o frecvență de 1 secundă. (al doilea parametru egal cu 1)
Astfel, în fiecare procesare, puteți începe propria procesare de așteptare, care va funcționa atâta timp cât formularul este deschis.

În formularele pe care le puteți utiliza Cod 1C v 8.х Form.Waiting Processing („ProcedureName”, Startup Time),
unde ProcedureName este numele procedurii care începe după câteva secunde de pornire
În procedura însăși, trebuie să inserați Codul 1C v 8.x Form.Waiting Processing („ProcedureName”, 0) pentru a opri procesarea în așteptare (desigur, după îndeplinirea condițiilor necesare).
Sursă

Platforma 1C ne oferă capacitățile apelurilor de procedură asincrone, care, uneori, pot fi utilizate pentru lucruri simple, dar distractive. De exemplu, puteți „clipi” tot ce are o culoare sau orice capacitate de a schimba designul vizual. Mai mult, puteți utiliza atât un mecanism mai simplu, dar necontrolat, cât și să proiectați un lanț interesant de apeluri asincrone și să setați comportamentul său preferat.

Vorbim aici, desigur, despre procedura AttachWaitHandler ().

Permiteți-mi să vă reamintesc sintaxa procedurii:

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

Mai mult, dacă specificați un interval mai mic de o secundă, procedura trebuie să fie pornită o dată. Aici pierdem controlul asupra fluxului de execuție și pierdem capacitatea de a-l „personaliza” (flexibil, individual).

Dar această limitare este ușor ocolită.

Pentru a nu răspândi gândul de-a lungul copacului, voi da imediat un exemplu simplu și îl voi explica.

Să presupunem că avem un document de foaie de calcul pe formular și vrem să „clipim” de 5 ori cu o parte din zona sa.

//////////////////// // // // Haideți să „fulgerăm” zona Documentului de calcul tabelar de 5 ori, cu un interval de o jumătate de secundă // /////////// ///////// & OnClient Procedure Blink Area (Command) mf Blink Time = 3; // Tejghea. Atributul formularului "vizibil" în procedurile de gestionare a așteptării ConnectWaitingHandler ("ShowAreaSelection", 0.1, True); // De asemenea, puteți apela direct EndProcedure & On the Client Procedure ShowSelectionArea () Area = Object.TD.Area (mfFirstDataString, mfFirstDataColumn, mfLastDataRow, mfLastDataColumn); Border = New Line (TabularDocumentCellLineType.Double); Region.Circle (Border, Border, Border, Border); // Conturează zona cu mfFlashToFlash = mfFlashMoT - 1; // Decrementați contorul ConnectWaitingHandler („RemoveAreaSelection”, 0,5, True); // Conectați lanțul de apeluri asincrone EndProcedure & la procedura clientului RemoveSelectionArea () Area = Object.TD.Area (mfFirstDataString, mfFirstDataColumn, mfLastDataRow, mfLastDataColumn); Border = New Line (TabularDocumentCellLineType.NoLine); Region.Circle (Border, Border, Border, Border); // Eliminați conturul zonei Dacă mfSkink> 0 Apoi ConnectWaitingHandler ("ShowAreaSelection", 0,5, True); // Repetați cât mai rămâne în contorul EndIf; Sfârșitul procedurii

Principala cerință este doar ca variabila contorului mfHow to Blink să fie „vizibilă” din procedurile pe care le rulăm asincron. ÎN acest caz variabila este un atribut de formular.

Un cititor atent ar fi putut observa că odată cu formarea unor astfel de lanțuri, ucidem două păsări cu o singură piatră:

  • Ocolim restricția privind repetabilitatea apelurilor de procedură cu valori de interval mai mici de o secundă;
  • Avem capacitatea de a forma lanțuri de diferite lungimi și complexități:
    • conectați un handler de așteptare direct în procedura de handler de așteptare;
    • face ca astfel de proceduri să se conecteze între ele;
    • organizează o structură mai complexă a lanțurilor de apel;
    • complică infinit variabilitatea controlului apelurilor (de exemplu, schimbarea apelurilor în interiorul apelurilor nu numai a contoarelor acestora, ci și a valorilor intervalelor, stilurilor de proiectare (astfel încât un curcubeu să strălucească 🌈).

În ciuda simplității metodei descrise, există un potențial considerabil ascuns în ea.

În 2017, este mai flexibil să controlezi comportamentul programului - acest lucru este modern.