Rukovalac čekanja 1s 8.2. „treptanje“ interfejsa ili lanci asinhronih poziva

Kod 1C v 8.2 UE ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Parametri:
<ИмяПроцедуры>
<Интервал>(obavezno) Vrsta: Broj. Vremenski interval u sekundama, sa tačnošću od 1/10 sekunde, nakon kojeg će biti pozvana procedura (pozitivan broj ako je navedena vrednost manja od 1, tada vrednost trećeg parametra mora biti Tačna).
<Однократно>(opciono) Tip: Boolean. Znak jednokratnog izvršenja rukovaoca čekanja.
Tačno - navedeni obrađivač čekanja će se izvršiti jednom. Podrazumevano: False
Opis: Povezuje navedenu proceduru kao rukovalac čekanja. Procedura će biti pozvana tokom vremenskog perioda sistema svaki put kada protekne navedeni vremenski interval.

Dostupnost:
Tanki klijent, web klijent, debeli klijent.

Napomena:
Poziv rukovaocu čekanja nastavlja se sve dok se obrazac ne zatvori ili dok se ne pozove metoda DisableWaitHandler obrasca. Kod 1C v 8.2 UE DisableWaitingHandler(<ИмяПроцедуры>)

Kod 1C v 8.2 UP
&OnClient
Procedura ShellHandler()
ProcessWaiting();
Kraj procedure

&OnServer
Procedura ProcessWaiting()
// uradi sve što je potrebno
Kraj procedure

//....
ConnectWaitHandler("HandlerWrapper", 3, Tačno);

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Povezuje poziv sa navedenom procedurom modula upravljana aplikacija(modul redovna primjena) ili globalno zajednički modul nakon određenog vremenskog intervala. Poziv će biti upućen samo u "stanju mirovanja", odnosno u vrijeme kada program ne izvodi nikakve radnje. Pozivanje rukovaoca čekanja nastavlja se sve dok se sistem ne isključi ili se ne pozove metoda DisableWaitHandler globalnog konteksta.
Code 1C v 8.x Procedura Sales ReportDay()
// ...
Kraj procedure

//...
ConnectWaitingHandler("DaySalesReport", 60); // svake minute
Kod 1C v 8.x // U standardnoj provjeri dinamike. konfiguracija se ažurira svakih 20 minuta.
ConnectWaitingHandler("IB DynamicChangeCheckWaitingHandler", 20 * 60);
// povezujemo rukovaoca razmjene podataka
ConnectWaitingHandler("CheckingDataExchange", chValueVariable("chNumberofSecondsPollExchange"));
ConnectWaitingHandler("Provjeri odgovore na aplikacije za povezivanje", 86400); // = 24(h) * 60(min) * 60(sec) = 1 dan

Za formu
Kod 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Parametri:
<ИмяПроцедуры>(obavezno) Vrsta: String. Ime procedure koja se povezuje kao rukovalac čekanja.
<Интервал>(obavezno) Vrsta: Broj. Vremenski interval u sekundama, sa tačnošću od 1/10 sekunde, nakon čega će biti pozvana procedura (pozitivan broj). Ako je specificirana vrijednost manja od 1, tada vrijednost trećeg parametra mora biti Tačna.
<Однократно>(opciono) Tip: Boolean. Znak jednokratnog izvršenja rukovaoca čekanja. 0True - navedeni rukovalac čekanja će se izvršiti jednom. Podrazumevano: False

Opis:
Povezuje navedenu proceduru kao rukovalac čekanja. Procedura će biti pozvana tokom vremenskog perioda sistema svaki put kada protekne navedeni vremenski interval.

Dostupnost:
Debeli klijent.
Napomena:
Poziv rukovatelju čekanja nastavlja se sve dok se obrazac ne zatvori ili dok se ne pozove metoda DisableWaitHandler obrasca.
primjer:
Kod 1C v 8.x ConnectWaitingHandler("WhenWaiting", 1);
Kod 1C v 8.x Form.mAutosave Interval = 300; // 5 minuta
Ako Form.mAutoSave Interval<>0 Onda
Form.ConnectWaitingHandler("EventHandlerByTimer", Int(Form.mAutoSaveInterval * 60));
endIf;

Čeka se obrada u sistemu 1C:Enterprise, kako proizilazi iz dokumentacije, namijenjena je za periodično izvršavanje procedure globalnog modula sa određenim vremenskim intervalom. Kod za pokretanje će izgledati ovako:
Kod 1C v 7.x Obrada čekanja("UpdateCounter_",1);
Gdje "UpdateCounter_"- naziv globalne procedure modula koja će se pokretati svake 1 sekunde. (drugi parametar jednak 1)

Ali! Problem je što obradu čekanja možete pokrenuti samo jednom. Ponovno pokretanje će otkazati prethodni. Drugim riječima, ako želite da izvršite, na primjer, obradu tajmera za brojanje proteklog vremena, tada možete pokrenuti samo jedan tajmer, jer pokretanje drugog tajmera zaustavit će prvi. Ali šta ako trebate pokrenuti 2, 3 ili više ovih tajmera u isto vrijeme? Ili još uvijek trebate povremeno skenirati status dokumenata?

Postoji izlaz! Obrada čekanja mora biti pokrenuta u kontekstu obrasca kako bi se ova nit odvojila od globalnog konteksta. I tada će biti moguće povremeno pokretati proceduru lokalnog modula, tj. procedura koja se nalazi u modulu vašeg obrasca za obradu.

Kod za pokretanje će izgledati ovako:
Code 1C v 7.x Form.Waiting Processing("UpdateCounter_",1);
Gdje "UpdateCounter_"- naziv procedure lokalnog modula obrasca za obradu, koji će se pokretati u intervalima od 1 sekunde. (drugi parametar jednak 1)
Dakle, u svakoj obradi možete pokrenuti vlastitu obradu čekanja, koja će raditi sve dok je obrazac otvoren.

Možete ga koristiti u obrascima Code 1C v 8.x Form.Waiting Processing("ProcedureName",StartTime) ,
gdje je ProcedureName ime procedure koja se pokreće nakon StartTime sekundi
U samu proceduru potrebno je da ubacite Code 1C v 8.x Form.Waiting Processing("ProcedureName",0) da biste zaustavili obradu na čekanju (naravno, nakon što se ispune potrebni uslovi).
Izvor

1C platforma nam pruža mogućnost asinhronog pozivanja procedura, koje se ponekad mogu koristiti za jednostavne, ali zabavne stvari. Na primjer, možete "treptati" sve što ima boju ili bilo kakvu mogućnost promjene vizualnog izgleda. Štaviše, možete koristiti ili jednostavniji, ali nekontrolirani mehanizam, ili konstruirati zanimljiv lanac asinhronih poziva i dati mu željeno ponašanje.

Ovdje, naravno, govorimo o proceduri ConnectWaitingHandler().

Dozvolite mi da vas podsjetim na sintaksu procedure:

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

Štaviše, ako navedete interval manji od sekunde, procedura se mora pokrenuti jednom. Ovo je mjesto gdje gubimo kontrolu nad tokom izvršavanja i gubimo mogućnost da ga „prilagodimo“ (fleksibilno, individualno ga konfiguriramo).

Ali ovo ograničenje se lako prevazilazi.

Da mi misli ne odlutaju, odmah ću dati jednostavan primjer i objasniti ga.

Recimo da imamo tabelarni dokument na obrascu i želimo da „trepnemo“ neko njegovo područje 5 puta.

/////////////////// // // “Blink” područje Tabelarni dokument 5 puta, sa intervalom od pola sekunde // ////////////////////&O klijentskoj proceduri BlinkArea (naredba) mf Koliko puta treperi = 3; // Counter. Atribut obrasca, “vidljiv” u procedurama rukovanja čekanjem ConnectWaitHandler("ShowAreaSelection", 0.1, True); // Također možete direktno pozvati EndProcedure &On klijentsku proceduru ShowArea Selection() Area = Object.TD.Area(mfFirstDataLine, mfFirstDataColumn, mfLastDataLine, mfLastDataColumn);

Border = Nova linija(TableDocumentCellLineType.Double);

Oblast.Krug (Granica, Granica, Granica, Granica); // Označite područje mfHow much puta treptati = mfHow much times to treptati - 1; // Smanjenje brojača Connect WaitHandler("RemoveArea Allocation", 0.5, True); // Povezivanje lanca asinkronih poziva Kraj procedure & Na klijentskoj proceduri Uklonite izbor područja() Area = Object.TD.Area(mfFirstDataLine, mfFirstDataColumn, mfLastDataLine, mfLastDataColumn);

  • Border = Nova linija(TableDocumentCellLineType.NoLine);
  • Oblast.Krug (Granica, Granica, Granica, Granica); // Uklonite obris područja Ako je mf Koliko puta treptati > 0 Tada ConnectWaitingHandler("ShowSelectedArea", 0.5, True); // Ponavlja se onoliko koliko je ostalo na brojaču EndIf; Kraj procedure
    • Jedini uslov je da varijabla brojača mfHow Many Times Blink bude „vidljiva“ iz procedura koje pokrećemo asinhrono. U ovom slučaju, varijabla je atribut forme.
    • Pažljivi čitalac mogao bi primijetiti da formiranjem takvih lanaca ubijamo dvije muhe jednim udarcem:
    • Zaobilazimo ograničenje na ponavljanje poziva procedura s vrijednostima intervala manjim od sekunde;
    • Imamo mogućnost formiranja lanaca različitih dužina i složenosti:

povežite rukovalac čekanjem direktno u samu proceduru rukovaoca čekanjem;

pobrinite se da se takve procedure međusobno povezuju;

Kod 1C v 8.2 UE ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Parametri:
<ИмяПроцедуры>
<Интервал>(obavezno) Vrsta: Broj. Vremenski interval u sekundama, sa tačnošću od 1/10 sekunde, nakon kojeg će biti pozvana procedura (pozitivan broj ako je navedena vrednost manja od 1, tada vrednost trećeg parametra mora biti Tačna).
<Однократно>(opciono) Tip: Boolean. Znak jednokratnog izvršenja rukovaoca čekanja.
Tačno - navedeni obrađivač čekanja će se izvršiti jednom. Podrazumevano: False
Opis: Povezuje navedenu proceduru kao rukovalac čekanja. Procedura će biti pozvana tokom vremenskog perioda sistema svaki put kada protekne navedeni vremenski interval.

Dostupnost:
Tanki klijent, web klijent, debeli klijent.

Napomena:
Poziv rukovaocu čekanja nastavlja se sve dok se obrazac ne zatvori ili dok se ne pozove metoda DisableWaitHandler obrasca. Kod 1C v 8.2 UE DisableWaitingHandler(<ИмяПроцедуры>)

Kod 1C v 8.2 UP
&OnClient
Procedura ShellHandler()
ProcessWaiting();
Kraj procedure

&OnServer
Procedura ProcessWaiting()
// uradi sve što je potrebno
Kraj procedure

//....
ConnectWaitHandler("HandlerWrapper", 3, Tačno);

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Povezuje poziv sa specificiranim upravljanim modulom aplikacije (običnim modulom aplikacije) ili procedurom globalnog dijeljenog modula u određenom vremenskom intervalu. Poziv će biti upućen samo u "stanju mirovanja", odnosno u vrijeme kada program ne izvodi nikakve radnje. Pozivanje rukovaoca čekanja nastavlja se sve dok se sistem ne isključi ili se ne pozove metoda DisableWaitHandler globalnog konteksta.
Code 1C v 8.x Procedura Sales ReportDay()
// ...
Kraj procedure

//...
ConnectWaitingHandler("DaySalesReport", 60); // svake minute
Kod 1C v 8.x // U standardnoj provjeri dinamike. konfiguracija se ažurira svakih 20 minuta.
ConnectWaitingHandler("IB DynamicChangeCheckWaitingHandler", 20 * 60);
// povezujemo rukovaoca razmjene podataka
ConnectWaitingHandler("CheckingDataExchange", chValueVariable("chNumberofSecondsPollExchange"));
ConnectWaitingHandler("Provjeri odgovore na aplikacije za povezivanje", 86400); // = 24(h) * 60(min) * 60(sec) = 1 dan

Za formu
Kod 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Parametri:
<ИмяПроцедуры>(obavezno) Vrsta: String. Ime procedure koja se povezuje kao rukovalac čekanja.
<Интервал>(obavezno) Vrsta: Broj. Vremenski interval u sekundama, sa tačnošću od 1/10 sekunde, nakon čega će biti pozvana procedura (pozitivan broj). Ako je specificirana vrijednost manja od 1, tada vrijednost trećeg parametra mora biti Tačna.
<Однократно>(opciono) Tip: Boolean. Znak jednokratnog izvršenja rukovaoca čekanja. 0True - navedeni rukovalac čekanja će se izvršiti jednom. Podrazumevano: False

Opis:
Povezuje navedenu proceduru kao rukovalac čekanja. Procedura će biti pozvana tokom vremenskog perioda sistema svaki put kada protekne navedeni vremenski interval.

Dostupnost:
Debeli klijent.
Napomena:
Poziv rukovatelju čekanja nastavlja se sve dok se obrazac ne zatvori ili dok se ne pozove metoda DisableWaitHandler obrasca.
primjer:
Kod 1C v 8.x ConnectWaitingHandler("WhenWaiting", 1);
Kod 1C v 8.x Form.mAutosave Interval = 300; // 5 minuta
Ako Form.mAutoSave Interval<>0 Onda
Form.ConnectWaitingHandler("EventHandlerByTimer", Int(Form.mAutoSaveInterval * 60));
endIf;

Čeka se obrada u sistemu 1C:Enterprise, kako proizilazi iz dokumentacije, namijenjena je za periodično izvršavanje procedure globalnog modula sa određenim vremenskim intervalom. Kod za pokretanje će izgledati ovako:
Kod 1C v 7.x Obrada čekanja("UpdateCounter_",1);
Gdje "UpdateCounter_"- naziv globalne procedure modula koja će se pokretati svake 1 sekunde. (drugi parametar jednak 1)

Ali! Problem je što obradu čekanja možete pokrenuti samo jednom. Ponovno pokretanje će otkazati prethodni. Drugim riječima, ako želite da izvršite, na primjer, obradu tajmera za brojanje proteklog vremena, tada možete pokrenuti samo jedan tajmer, jer pokretanje drugog tajmera zaustavit će prvi. Ali šta ako trebate pokrenuti 2, 3 ili više ovih tajmera u isto vrijeme? Ili još uvijek trebate povremeno skenirati status dokumenata?

Postoji izlaz! Obrada čekanja mora biti pokrenuta u kontekstu obrasca kako bi se ova nit odvojila od globalnog konteksta. I tada će biti moguće povremeno pokretati proceduru lokalnog modula, tj. procedura koja se nalazi u modulu vašeg obrasca za obradu.

Kod za pokretanje će izgledati ovako:
Code 1C v 7.x Form.Waiting Processing("UpdateCounter_",1);
Gdje "UpdateCounter_"- naziv procedure lokalnog modula obrasca za obradu, koji će se pokretati u intervalima od 1 sekunde. (drugi parametar jednak 1)
Dakle, u svakoj obradi možete pokrenuti vlastitu obradu čekanja, koja će raditi sve dok je obrazac otvoren.

Možete ga koristiti u obrascima Code 1C v 8.x Form.Waiting Processing("ProcedureName",StartTime) ,
gdje je ProcedureName ime procedure koja se pokreće nakon StartTime sekundi
U samu proceduru potrebno je da ubacite Code 1C v 8.x Form.Waiting Processing("ProcedureName",0) da biste zaustavili obradu na čekanju (naravno, nakon što se ispune potrebni uslovi).
Izvor

Kako raditi