Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Iron
  • Čekanje obrade 1s 8.3. „treptanje“ interfejsa ili lanci asinhronih poziva

Čekanje obrade 1s 8.3. „treptanje“ interfejsa ili lanci asinhronih poziva

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 "prilagođavamo" (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.

/////////////////// // // “Zatrepni” područje tabelarnog dokumenta 5 puta, u intervalu od pola sekunde // //// /////// ///////// &O klijentskoj proceduri BlinkArea (naredba) mf Koliko puta treptati = 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 Zatim Povežite WaitHandler("Show Area Selection", 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;
    • organizovati složeniju strukturu lanaca poziva;
    • beskrajno komplikuju varijabilnost upravljanja pozivima (na primjer, promijenite ne samo njihove brojače unutar poziva, već i vrijednosti intervala, stilove dizajna (tako da 🌈 svjetluca kao duga).

Uprkos jednostavnosti opisane metode, u njoj se krije znatan potencijal.

U 2017. fleksibilnije upravljanje ponašanjem programa je moderno.

Kod 1C v 8.2 UE ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Opcije:
<ИмяПроцедуры>
<Интервал>(obavezno) Vrsta: Broj. Vremenski interval u sekundama, sa tačnošću od 1/10 sekunde, nakon kojeg će procedura biti pozvana (pozitivan broj).Ako je navedena vrijednost manja od 1, tada vrijednost trećeg parametra mora biti True.
<Однократно>(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 perioda vremenskog ograničenja sistema svaki put kada protekne navedeni vremenski interval.

Dostupnost:
Tanki klijent, web klijent, debeli klijent.

Bilješka:
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

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

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

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Izaziva poziv specificiranoj proceduri modula upravljane aplikacije (obični modul aplikacije) ili 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(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Opcije:
<ИмяПроцедуры>(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 perioda vremenskog ograničenja sistema svaki put kada protekne navedeni vremenski interval.

Dostupnost:
Debeli klijent.
Bilješka:
Poziv rukovaocu č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("TimerEventHandler", 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 zadatim 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 će zaustaviti 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 se mora pokrenuti u kontekstu obrasca kako bi se ova nit odvojila od globalnog konteksta. I tada će biti moguće povremeno pokretati proceduru lokalnog modula, tj. postupak koji se nalazi u modulu vašeg obrasca za obradu.

Kod za pokretanje će izgledati ovako:
Kod 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

Kod 1C v 8.2 UE ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Opcije:
<ИмяПроцедуры>
<Интервал>(obavezno) Vrsta: Broj. Vremenski interval u sekundama, sa tačnošću od 1/10 sekunde, nakon kojeg će procedura biti pozvana (pozitivan broj).Ako je navedena vrijednost manja od 1, tada vrijednost trećeg parametra mora biti True.
<Однократно>(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 perioda vremenskog ograničenja sistema svaki put kada protekne navedeni vremenski interval.

Dostupnost:
Tanki klijent, web klijent, debeli klijent.

Bilješka:
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

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

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

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Izaziva poziv specificiranoj proceduri modula upravljane aplikacije (obični modul aplikacije) ili 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(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Opcije:
<ИмяПроцедуры>(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 perioda vremenskog ograničenja sistema svaki put kada protekne navedeni vremenski interval.

Dostupnost:
Debeli klijent.
Bilješka:
Poziv rukovaocu č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("TimerEventHandler", 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 zadatim 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 će zaustaviti 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 se mora pokrenuti u kontekstu obrasca kako bi se ova nit odvojila od globalnog konteksta. I tada će biti moguće povremeno pokretati proceduru lokalnog modula, tj. postupak koji se nalazi u modulu vašeg obrasca za obradu.

Kod za pokretanje će izgledati ovako:
Kod 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

Najbolji članci na ovu temu