"blink" sučelja, odnosno lanaca asinkronih poziva. "treperenje" sučelja ili lanci asinkronih poziva Povežite rukovatelja čekanjem 1s 8.3

Kod 1C v 8.2 UE ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Mogućnosti:
<ИмяПроцедуры>
<Интервал>(obavezno) Tip: Broj. Vremenski interval u sekundama, točan do 1/10 sekunde, nakon kojeg će se izvršiti poziv procedure (pozitivan broj). Ako je navedena vrijednost manja od 1, tada vrijednost trećeg parametra mora biti True.
<Однократно>(neobavezno) Tip: Booleov. Znak jednog izvršavanja rukovatelja čekanjem.
Istina - navedeni rukovatelj čekanjem izvršit će se jednom. Zadana vrijednost: False
Opis: povezuje navedeni postupak kao rukovatelj čekanjem. Procedura će biti pozvana tijekom perioda čekanja sustava svaki put nakon isteka navedenog vremenskog intervala.

Dostupnost:
Tanki klijent, web klijent, debeli klijent.

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

Kod 1C v 8.2 UP
&Kod klijenta
Procedure WrapperHandler()
Proces Čeka();
EndProcedure

&Na poslužitelju
Procedura ProcesWaiting()
// učiniti sve što je potrebno
EndProcedure

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

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Povezuje poziv s navedenom procedurom upravljanog aplikacijskog modula (uobičajeni aplikacijski modul) ili globalnog zajedničkog modula u određenom vremenskom intervalu. Poziv će biti upućen samo u "mirnom stanju", odnosno u trenutku kada program ne izvodi nikakve radnje. Poziv rukovatelju čekanja nastavlja se sve dok sustav ne izađe ili dok se ne pozove metoda DisableWaitHandler globalnog konteksta.
Kod 1C v 8.x Procedura ReportSalesDaily()
// ...
EndProcedure

//...
ConnectWaitingHandler("Dnevno izvješće o prodaji", 60); // svake minute
Kod 1C v 8.x // U tipičnoj provjeri din. konfiguracija se ažurira svakih 20 minuta.
ConnectWaitingHandler("WaitingHandlerCheckingDynamicChangeIB", 20 * 60);
// povezivanje obrađivača razmjene podataka
ConnectWaitingHandler("CheckDataExchange", hlVariableValue("hlNumber ofExchangePollSeconds"));
ConnectWaitingHandler("CheckConnectionRequestResponses", 86400); // = 24 (h) * 60 (min) * 60 (sek) = 1 dan

Za obrazac
Kod 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Mogućnosti:
<ИмяПроцедуры>(obavezno) Tip: niz. Naziv procedure za spajanje kao rukovatelja čekanjem.
<Интервал>(obavezno) Tip: Broj. Vremenski interval u sekundama, točan do 1/10 sekunde, nakon čega će se izvršiti poziv procedure (pozitivan broj). Ako je navedena vrijednost manja od 1, tada vrijednost trećeg parametra mora biti True.
<Однократно>(neobavezno) Tip: Booleov. Znak jednog izvršavanja rukovatelja čekanjem. 0 True - navedeni rukovatelj čekanjem će se izvršiti jednom. Zadana vrijednost: False

Opis:
Povezuje navedeni postupak kao rukovatelj čekanjem. Procedura će biti pozvana tijekom perioda čekanja sustava svaki put nakon isteka navedenog vremenskog intervala.

Dostupnost:
Debeli klijent.
Bilješka:
Poziv rukovatelju čekanja nastavlja se sve dok se obrazac ne zatvori ili dok se ne pozove metoda obrasca DisableWaitHandler.
Primjer:
Kod 1C v 8.x ConnectWaitingHandler("WhileWaiting", 1);
Kod 1C v 8.x Form.mAutosave Interval = 300; // 5 minuta
Ako Shape.mAutosave Interval<>0 Zatim
Form.ConnectWaitingHandler("EventHandlerBy Timer", Int(Form.mAutosave Interval * 60));
Završi ako;

Obrada na čekanju u sustavu 1C:Enterprise, kao što slijedi iz dokumentacije, dizajniran je za periodičko izvršavanje procedure globalnog modula u određenom vremenskom intervalu. Kod za pokretanje izgledat će ovako:
Kod 1C v 7.x HandlingWaiting("UpdateCounter_",1);
Gdje "Brojač ažuriranja_"- naziv procedure globalnog modula koji će se pokretati u intervalima od 1 sekunde. (drugi parametar jednak 1)

Ali! Problem je u tome što se obrada na čekanju može pokrenuti samo jednom. Ponovno pokretanje će poništiti prethodno. Drugim riječima, ako želite napraviti, na primjer, obradu timera za brojanje proteklog vremena, tada možete pokrenuti samo jedan timer, jer pokretanje drugog mjerača vremena zaustavit će prvi. Ali što ako trebate pokrenuti 2, 3 ili više ovakvih mjerača vremena u isto vrijeme? Ili ipak morate povremeno skenirati status dokumenata?

Postoji izlaz! Obrada čekanja mora se pokrenuti u kontekstu obrasca kako bi se ova nit odvojila od globalnog konteksta. Tada će biti moguće povremeno pokretati postupak lokalnog modula, tj. postupak koji se nalazi u modulu obrasca vaše obrade.

Kod za pokretanje izgledat će ovako:
Kod 1C v 7.x Form.ProcessingWaiting("UpdateCounter_",1);
Gdje "Brojač ažuriranja_"- naziv procedure lokalnog modula obrasca 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.

Obrasci se mogu koristiti Kod 1C v 8.x Form.ProcessingWaiting("ProcedureName",StartTime) ,
gdje je ProcedureName naziv procedure koja se pokreće nakon StartTime sekundi
U samu proceduru potrebno je umetnuti Code 1C v 8.x Form.ProcessingWaiting("ProcedureName",0) za prekid obrade čekanja (naravno, nakon što su ispunjeni potrebni uvjeti).
Izvor

Kod 1C v 8.2 UE ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Mogućnosti:
<ИмяПроцедуры>
<Интервал>(obavezno) Tip: Broj. Vremenski interval u sekundama, točan do 1/10 sekunde, nakon kojeg će se izvršiti poziv procedure (pozitivan broj). Ako je navedena vrijednost manja od 1, tada vrijednost trećeg parametra mora biti True.
<Однократно>(neobavezno) Tip: Booleov. Znak jednog izvršavanja rukovatelja čekanjem.
Istina - navedeni rukovatelj čekanjem izvršit će se jednom. Zadana vrijednost: False
Opis: povezuje navedeni postupak kao rukovatelj čekanjem. Procedura će biti pozvana tijekom perioda čekanja sustava svaki put nakon isteka navedenog vremenskog intervala.

Dostupnost:
Tanki klijent, web klijent, debeli klijent.

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

Kod 1C v 8.2 UP
&Kod klijenta
Procedure WrapperHandler()
Proces Čeka();
EndProcedure

&Na poslužitelju
Procedura ProcesWaiting()
// učiniti sve što je potrebno
EndProcedure

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

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Povezuje poziv s navedenom procedurom upravljanog aplikacijskog modula (uobičajeni aplikacijski modul) ili globalnog zajedničkog modula u određenom vremenskom intervalu. Poziv će biti upućen samo u "mirnom stanju", odnosno u trenutku kada program ne izvodi nikakve radnje. Poziv rukovatelju čekanja nastavlja se sve dok sustav ne izađe ili dok se ne pozove metoda DisableWaitHandler globalnog konteksta.
Kod 1C v 8.x Procedura ReportSalesDaily()
// ...
EndProcedure

//...
ConnectWaitingHandler("Dnevno izvješće o prodaji", 60); // svake minute
Kod 1C v 8.x // U tipičnoj provjeri din. konfiguracija se ažurira svakih 20 minuta.
ConnectWaitingHandler("WaitingHandlerCheckingDynamicChangeIB", 20 * 60);
// povezivanje obrađivača razmjene podataka
ConnectWaitingHandler("CheckDataExchange", hlVariableValue("hlNumber ofExchangePollSeconds"));
ConnectWaitingHandler("CheckConnectionRequestResponses", 86400); // = 24 (h) * 60 (min) * 60 (sek) = 1 dan

Za obrazac
Kod 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Mogućnosti:
<ИмяПроцедуры>(obavezno) Tip: niz. Naziv procedure za spajanje kao rukovatelja čekanjem.
<Интервал>(obavezno) Tip: Broj. Vremenski interval u sekundama, točan do 1/10 sekunde, nakon čega će se izvršiti poziv procedure (pozitivan broj). Ako je navedena vrijednost manja od 1, tada vrijednost trećeg parametra mora biti True.
<Однократно>(neobavezno) Tip: Booleov. Znak jednog izvršavanja rukovatelja čekanjem. 0 True - navedeni rukovatelj čekanjem će se izvršiti jednom. Zadana vrijednost: False

Opis:
Povezuje navedeni postupak kao rukovatelj čekanjem. Procedura će biti pozvana tijekom perioda čekanja sustava svaki put nakon isteka navedenog vremenskog intervala.

Dostupnost:
Debeli klijent.
Bilješka:
Poziv rukovatelju čekanja nastavlja se sve dok se obrazac ne zatvori ili dok se ne pozove metoda obrasca DisableWaitHandler.
Primjer:
Kod 1C v 8.x ConnectWaitingHandler("WhileWaiting", 1);
Kod 1C v 8.x Form.mAutosave Interval = 300; // 5 minuta
Ako Shape.mAutosave Interval<>0 Zatim
Form.ConnectWaitingHandler("EventHandlerBy Timer", Int(Form.mAutosave Interval * 60));
Završi ako;

Obrada na čekanju u sustavu 1C:Enterprise, kao što slijedi iz dokumentacije, dizajniran je za periodičko izvršavanje procedure globalnog modula u određenom vremenskom intervalu. Kod za pokretanje izgledat će ovako:
Kod 1C v 7.x HandlingWaiting("UpdateCounter_",1);
Gdje "Brojač ažuriranja_"- naziv procedure globalnog modula koji će se pokretati u intervalima od 1 sekunde. (drugi parametar jednak 1)

Ali! Problem je u tome što se obrada na čekanju može pokrenuti samo jednom. Ponovno pokretanje će poništiti prethodno. Drugim riječima, ako želite napraviti, na primjer, obradu timera za brojanje proteklog vremena, tada možete pokrenuti samo jedan timer, jer pokretanje drugog mjerača vremena zaustavit će prvi. Ali što ako trebate pokrenuti 2, 3 ili više ovakvih mjerača vremena u isto vrijeme? Ili ipak morate povremeno skenirati status dokumenata?

Postoji izlaz! Obrada čekanja mora se pokrenuti u kontekstu obrasca kako bi se ova nit odvojila od globalnog konteksta. Tada će biti moguće povremeno pokretati postupak lokalnog modula, tj. postupak koji se nalazi u modulu obrasca vaše obrade.

Kod za pokretanje izgledat će ovako:
Kod 1C v 7.x Form.ProcessingWaiting("UpdateCounter_",1);
Gdje "Brojač ažuriranja_"- naziv procedure lokalnog modula obrasca 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.

Obrasci se mogu koristiti Kod 1C v 8.x Form.ProcessingWaiting("ProcedureName",StartTime) ,
gdje je ProcedureName naziv procedure koja se pokreće nakon StartTime sekundi
U samu proceduru potrebno je umetnuti Code 1C v 8.x Form.ProcessingWaiting("ProcedureName",0) za prekid obrade čekanja (naravno, nakon što su ispunjeni potrebni uvjeti).
Izvor

1C platforma nam daje mogućnost asinkronih poziva procedura, koje ponekad mogu poslužiti za jednostavne, ali zabavne stvari. Na primjer, možete "blinkati" sve što ima boju ili bilo kakvu mogućnost promjene vizualnog dizajna. Štoviše, možete koristiti i jednostavniji, ali nekontrolirani mehanizam, te konstruirati zanimljiv lanac asinkronih poziva i postaviti njegovo preferirano ponašanje.

Ovdje govorimo, naravno, o proceduri ConnectWaitingHandler().

Da vas podsjetim na sintaksu postupka:

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

Štoviše, ako navedete interval manji od sekunde, postupak se mora pokrenuti jednom. Tu gubimo kontrolu nad tijekom izvršenja i gubimo mogućnost da ga "prilagodimo" (fleksibilno, individualno).

Ali to se ograničenje lako zaobilazi.

Kako ne bih širio svoje misli po stablu, odmah ću dati jednostavan primjer i objasniti ga.

Recimo da imamo tablični dokument na obrascu i želimo "trepnuti" 5 puta s nekim njegovim područjem.

//////////////////// // // "Trepnite" područjem dokumenta proračunske tablice 5 puta, s intervalom od pola sekunde // /// //////// ///////// &Na klijentskom postupku Područje treptanja (naredba) mfBlink Koliko = 3; // Brojač. Atribut obrasca "vidljiv" u procedurama rukovatelja čekanjem ConnectWaitHandler("ShowAreaSelect", 0.1, True); // Također možete izravno pozvati EndProcedure &OnClient Procedure ShowAreaSelect() Area = Object.AP.Area(mfFirstDataRow, mfFirstDataColumn, mfLastDataRow, mfLastDataColumn); Obrub = Novi redak(LineTypeSpreadsheetDocumentCell.Double); Region.Border(Border, Border, Border, Border); // Ocrtavanje područja mfBlinkTimes = mfBlinkTimes - 1; // Smanjivanje brojača ConnectWaitingHandler("Odabir područja uklanjanja", 0.5, True); // Povežite lanac asinkronih poziva EndProcedure &AtClient Procedure RemoveAreaSelect() Area = Object.AP.Area(mfFirstDataRow, mfFirstDataColumn, mfLastDataRow, mfLastDataColumn); Obrub = Novi redak (Vrsta retkaSpreadsheetDocumentCell.NoLine); Region.Border(Border, Border, Border, Border); // Uklanjanje obrisa područja If mfBlinkTime > 0 Then ConnectWaitingHandler("ShowArea Selection", 0.5, True); // Ponovi onoliko koliko je ostalo na brojaču EndIf; EndProcedure

Glavni zahtjev je samo da varijabla brojača mfHow many timesBlink bude "vidljiva" iz procedura koje izvodimo asinkrono. U ovom slučaju, varijabla je atribut forme.

Pažljivi čitatelj mogao bi primijetiti da formiranjem takvih lanaca ubijamo dvije muhe jednim udarcem:

  • Zaobići ograničenje ponovljivosti poziva procedura s vrijednostima intervala manjim od sekunde;
  • Imamo mogućnost formiranja lanaca različitih duljina i složenosti:
    • povezati rukovatelja čekanjem izravno u samoj proceduri rukovatelja čekanjem;
    • da se takvi postupci međusobno povezuju;
    • organizirati složeniju strukturu lanaca poziva;
    • beskrajno komplicirati varijabilnost upravljanja pozivima (na primjer, promijeniti ne samo njihove brojače unutar poziva, već i vrijednosti intervala, stilove dizajna (tako da 🌈 svjetluca poput duge).

Unatoč jednostavnosti opisane metode, u njoj se krije znatan potencijal.

U 2017. godini je modernije fleksibilnije upravljati ponašanjem programa.