Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Hekuri
  • Përpunimi në pritje 1-sh 8.3. "pulsimi" i ndërfaqes, ose zinxhirët e thirrjeve asinkrone

Përpunimi në pritje 1-sh 8.3. "pulsimi" i ndërfaqes, ose zinxhirët e thirrjeve asinkrone

Platforma 1C na ofron mundësinë për të thirrur në mënyrë asinkrone procedura, të cilat ndonjëherë mund të përdoren për gjëra të thjeshta por argëtuese. Për shembull, ju mund të "pulsoni" çdo gjë që ka një ngjyrë ose ndonjë aftësi për të ndryshuar pamjen vizuale. Për më tepër, mund të përdorni ose një mekanizëm më të thjeshtë, por të pakontrolluar, ose të ndërtoni një zinxhir interesant thirrjesh asinkrone dhe t'i jepni sjelljen e preferuar.

Ne po flasim këtu, natyrisht, për procedurën ConnectWaitingHandler().

Më lejoni t'ju kujtoj sintaksën e procedurës:

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

Për më tepër, nëse specifikoni një interval prej më pak se një sekondë, procedura duhet të fillojë një herë. Kjo është ajo ku ne humbasim kontrollin mbi rrjedhën e ekzekutimit dhe humbasim aftësinë për ta "përshtatur" atë (në mënyrë fleksibël, konfiguroni në mënyrë individuale).

Por ky kufizim shmanget lehtësisht.

Për të mos i lënë mendimet e mia të enden, do të jap menjëherë një shembull të thjeshtë dhe do ta shpjegoj.

Le të themi se kemi një dokument të fletëllogaritjes në formular dhe duam të "pulsojmë" një pjesë të tij 5 herë.

////////////////// // // "Blink" zonën e dokumentit Spreadsheet 5 herë, me një interval prej gjysmë sekonde // //// /////// ///////// &Për procedurën e klientit Blink Area (Komanda) mf Sa herë për të Blink = 3; // Kundër. Atributi i formës, "i dukshëm" në procedurat e mbajtësit të pritjes ConnectWaitHandler ("ShowAreaSelection", 0.1, True); // Ju gjithashtu mund të telefononi drejtpërdrejt EndProcedure &Në procedurën e klientit ShowArea Selection() Area = Object.TD.Area(mfFirstDataLine, mfFirstDataColumn, mfLastDataLine, mfLastDataColumn); Border = New Line (TableDocumentCellLineType.Double); Zona.Rrethi (Kufiri, Kufiri, Kufiri, Kufiri); // Përvijoni zonën mfSa herë të pulsoni = mfSa herë të pulsoni - 1; // Zvogëloni numëruesin Connect WaitHandler ("RemoveArea Alocation", 0.5, True); ( Border = New Line (TableDocumentCellLineType.NoLine); Zona.Rrethi (Kufiri, Kufiri, Kufiri, Kufiri); // Hiq skicën e zonës Nëse mf Sa herë të pulsosh > 0 Pastaj lidh WaitHandler("Trego përzgjedhjen e zonës", 0.5, e vërtetë); // Përsërite aq sa ka mbetur në numërues EndIf; Fundi i procedurës

Kërkesa e vetme është që variabli numërues mfHow Many Times Blink duhet të jetë "i dukshëm" nga procedurat që nisim në mënyrë asinkrone. Në këtë rast, ndryshorja është një atribut i formës.

Një lexues i vëmendshëm mund të ketë vënë re se me formimin e zinxhirëve të tillë ne po vrasim dy zogj me një gur:

  • Ne anashkalojmë kufizimin në përsëritjen e thirrjeve të procedurës me vlera intervali më pak se një sekondë;
  • Ne kemi aftësinë të formojmë zinxhirë me gjatësi dhe kompleksitet të ndryshëm:
    • lidhni mbajtësin e pritjes drejtpërdrejt në vetë procedurën e mbajtësit të pritjes;
    • sigurohuni që procedura të tilla të lidhen me njëra-tjetrën;
    • organizoni një strukturë më komplekse të zinxhirëve të thirrjeve;
    • komplikoni pafundësisht ndryshueshmërinë e menaxhimit të thirrjeve (për shembull, ndryshoni jo vetëm numëruesit e tyre brenda thirrjeve, por edhe vlerat e intervalit, stilet e dizajnit (në mënyrë që 🌈 të shkëlqejë si një ylber).

Pavarësisht nga thjeshtësia e metodës së përshkruar, në të fshihet një potencial i konsiderueshëm.

Në vitin 2017, menaxhimi i sjelljes së programit në mënyrë më fleksibël është modern.

Kodi 1C v 8.2 UE ConnectWaiting Handler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Opsione:
<ИмяПроцедуры>
<Интервал>(kërkohet) Lloji: Numri. Intervali kohor në sekonda, i saktë në 1/10 e sekondës, pas së cilës procedura do të thirret (një numër pozitiv Nëse specifikohet një vlerë më e vogël se 1, atëherë vlera e parametrit të tretë duhet të jetë e vërtetë).
<Однократно>(opsionale) Lloji: Boolean. Shenjë e një ekzekutimi një herë të mbajtësit të pritjes.
E vërtetë - mbajtësi i specifikuar i pritjes do të ekzekutohet një herë. Parazgjedhja: E rreme
Përshkrimi: Lidh procedurën e specifikuar si një mbajtës pritjeje. Procedura do të thirret gjatë periudhës së skadimit të sistemit sa herë që të ketë kaluar intervali kohor i specifikuar.

Disponueshmëria:
Klient i hollë, klient në internet, klient i trashë.

Shënim:
Thirrja për mbajtësin e pritjes vazhdon derisa formulari të mbyllet ose derisa të thirret metoda DisableWaitHandler e formularit. Kodi 1C v 8.2 UE DisableWaiting Handler(<ИмяПроцедуры>)

Kodi 1C v 8.2 UP
&OnClient
Procedura ShellHandler()
Procesi në pritje();
Fundi i procedurës

&Në server
Procedura Procesi në pritje ()
// bëj gjithçka që kërkohet
Fundi i procedurës

//....
ConnectWaitHandler ("HandlerWrapper", 3, True);

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Lidh një telefonatë në modulin e specifikuar të aplikacionit të menaxhuar (moduli i rregullt i aplikacionit) ose procedurën globale të modulit të përbashkët në një interval kohor të caktuar. Thirrja do të bëhet vetëm në një "gjendje pushimi", domethënë në një kohë kur programi nuk po kryen asnjë veprim. Thirrja e mbajtësit të pritjes vazhdon derisa sistemi të mbyllet ose të thirret metoda DisableWaitHandler e kontekstit global.
Kodi 1C v 8.x Procedura e Raportit të Shitjeve Dita()
// ...
Fundi i procedurës

//...
ConnectWaitingHandler ("DaySalesReport", 60); // cdo minute
Kodi 1C v 8.x // Në kontrollin standard të dinamizmit. përditësimet e konfigurimit çdo 20 minuta.
ConnectWaitingHandler ("IB DynamicChangeCheckWaitingHandler", 20 * 60);
// lidhni mbajtësin e shkëmbimit të të dhënave
ConnectWaitingHandler("CheckingDataExchange", chValueVariable("chNumberofSecondsPollExchange"));
ConnectWaitingHandler ("Kontrollo përgjigjet ndaj aplikacioneve të lidhjes", 86400); // = 24 (h) * 60 (min) * 60 (sek) = 1 ditë

Për Formularin
Kodi 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Opsione:
<ИмяПроцедуры>(kërkohet) Lloji: String. Emri i procedurës që do të lidhet si mbajtës i pritjes.
<Интервал>(kërkohet) Lloji: Numri. Intervali kohor në sekonda, i saktë në 1/10 e sekondës, pas së cilës do të thirret procedura (numri pozitiv). Nëse specifikohet një vlerë më e vogël se 1, atëherë vlera e parametrit të tretë duhet të jetë e vërtetë.
<Однократно>(opsionale) Lloji: Boolean. Shenjë e një ekzekutimi një herë të mbajtësit të pritjes. 0 E vërtetë - mbajtësi i specifikuar i pritjes do të ekzekutohet një herë. Parazgjedhja: E rreme

Përshkrim:
Lidh procedurën e specifikuar si një mbajtës pritjeje. Procedura do të thirret gjatë periudhës së skadimit të sistemit sa herë që të ketë kaluar intervali kohor i specifikuar.

Disponueshmëria:
Klient i shëndoshë.
Shënim:
Thirrja në mbajtësin e pritjes vazhdon derisa formulari të mbyllet ose derisa të thirret metoda DisableWaitHandler e formularit.
Shembull:
Kodi 1C v 8.x ConnectWaitingHandler("WhenWaiting", 1);
Kodi 1C v 8.x Form.mAutosave Interval = 300; // 5 minuta
Nëse Form.mAutosave Interval<>0 Pastaj
Form.ConnectWaitingHandler("EventHandlerByTimer", Int(Form.mAutoSaveInterval * 60));
fundNëse;

Përpunimi në pritje në sistemin 1C:Enterprise, siç vijon nga dokumentacioni, është menduar për ekzekutimin periodik të procedurës së modulit global me një interval kohor të caktuar. Kodi për të ekzekutuar do të duket si ky:
Kodi 1C v 7.x Përpunimi në pritje ("UpdateCounter_",1);
Ku "UpdateCounter_"- emri i procedurës globale të modulit që do të nisë çdo 1 sekondë. (parametri i dytë i barabartë me 1)

Por! Problemi është se ju mund të ekzekutoni përpunimin e pritjes vetëm një herë. Rinisja do të anulojë atë të mëparshmen. Me fjalë të tjera, nëse doni të bëni, për shembull, një përpunim me kohëmatës për të numëruar kohën e kaluar, atëherë mund të ekzekutoni vetëm një kohëmatës, sepse nisja e kohëmatësit të dytë do të ndalojë të parën. Por, çka nëse duhet të ekzekutoni 2, 3 ose më shumë nga këta kohëmatës në të njëjtën kohë? Apo ju duhet ende të skanoni periodikisht statusin e dokumenteve?

Ka një dalje! Përpunimi i pritjes duhet të kryhet në kontekstin e formës për të ndarë këtë fill nga konteksti global. Dhe atëherë do të bëhet e mundur që periodikisht të nisë procedura e modulit lokal, d.m.th. procedurë e vendosur në modulin e formularit tuaj të përpunimit.

Kodi për të ekzekutuar do të duket si ky:
Kodi 1C v 7.x Forma.Përpunimi në pritje ("UpdateCounter_",1);
Ku "UpdateCounter_"- emërtimi i procedurës së modulit lokal të formularit të përpunimit, i cili do të lançohet në intervale prej 1 sekonde. (parametri i dytë i barabartë me 1)
Kështu, në çdo përpunim mund të kryeni përpunimin tuaj të pritjes, i cili do të funksionojë për sa kohë që formulari është i hapur.

Mund ta përdorni në forma Kodi 1C v 8.x Forma. Përpunimi në pritje ("ProcedureName",StartTime) ,
ku ProcedureName është emri i procedurës që funksionon pas sekondave StartTime
Në vetë procedurën, duhet të futni kodin 1C v 8.x Form.Waiting Processing("ProcedureName",0) për të ndaluar përpunimin në pritje (natyrisht, pasi të plotësohen kushtet e nevojshme).
Burimi

Kodi 1C v 8.2 UE ConnectWaiting Handler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Opsione:
<ИмяПроцедуры>
<Интервал>(kërkohet) Lloji: Numri. Intervali kohor në sekonda, i saktë në 1/10 e sekondës, pas së cilës procedura do të thirret (një numër pozitiv Nëse specifikohet një vlerë më e vogël se 1, atëherë vlera e parametrit të tretë duhet të jetë e vërtetë).
<Однократно>(opsionale) Lloji: Boolean. Shenjë e një ekzekutimi një herë të mbajtësit të pritjes.
E vërtetë - mbajtësi i specifikuar i pritjes do të ekzekutohet një herë. Parazgjedhja: E rreme
Përshkrimi: Lidh procedurën e specifikuar si një mbajtës pritjeje. Procedura do të thirret gjatë periudhës së skadimit të sistemit sa herë që të ketë kaluar intervali kohor i specifikuar.

Disponueshmëria:
Klient i hollë, klient në internet, klient i trashë.

Shënim:
Thirrja për mbajtësin e pritjes vazhdon derisa formulari të mbyllet ose derisa të thirret metoda DisableWaitHandler e formularit. Kodi 1C v 8.2 UE DisableWaiting Handler(<ИмяПроцедуры>)

Kodi 1C v 8.2 UP
&OnClient
Procedura ShellHandler()
Procesi në pritje();
Fundi i procedurës

&Në server
Procedura Procesi në pritje ()
// bëj gjithçka që kërkohet
Fundi i procedurës

//....
ConnectWaitHandler ("HandlerWrapper", 3, True);

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Lidh një telefonatë në modulin e specifikuar të aplikacionit të menaxhuar (moduli i rregullt i aplikacionit) ose procedurën globale të modulit të përbashkët në një interval kohor të caktuar. Thirrja do të bëhet vetëm në një "gjendje pushimi", domethënë në një kohë kur programi nuk po kryen asnjë veprim. Thirrja e mbajtësit të pritjes vazhdon derisa sistemi të mbyllet ose të thirret metoda DisableWaitHandler e kontekstit global.
Kodi 1C v 8.x Procedura e Raportit të Shitjeve Dita()
// ...
Fundi i procedurës

//...
ConnectWaitingHandler ("DaySalesReport", 60); // cdo minute
Kodi 1C v 8.x // Në kontrollin standard të dinamizmit. përditësimet e konfigurimit çdo 20 minuta.
ConnectWaitingHandler ("IB DynamicChangeCheckWaitingHandler", 20 * 60);
// lidhni mbajtësin e shkëmbimit të të dhënave
ConnectWaitingHandler("CheckingDataExchange", chValueVariable("chNumberofSecondsPollExchange"));
ConnectWaitingHandler ("Kontrollo përgjigjet ndaj aplikacioneve të lidhjes", 86400); // = 24 (h) * 60 (min) * 60 (sek) = 1 ditë

Për Formularin
Kodi 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Opsione:
<ИмяПроцедуры>(kërkohet) Lloji: String. Emri i procedurës që do të lidhet si mbajtës i pritjes.
<Интервал>(kërkohet) Lloji: Numri. Intervali kohor në sekonda, i saktë në 1/10 e sekondës, pas së cilës do të thirret procedura (numri pozitiv). Nëse specifikohet një vlerë më e vogël se 1, atëherë vlera e parametrit të tretë duhet të jetë e vërtetë.
<Однократно>(opsionale) Lloji: Boolean. Shenjë e një ekzekutimi një herë të mbajtësit të pritjes. 0 E vërtetë - mbajtësi i specifikuar i pritjes do të ekzekutohet një herë. Parazgjedhja: E rreme

Përshkrim:
Lidh procedurën e specifikuar si një mbajtës pritjeje. Procedura do të thirret gjatë periudhës së skadimit të sistemit sa herë që të ketë kaluar intervali kohor i specifikuar.

Disponueshmëria:
Klient i shëndoshë.
Shënim:
Thirrja në mbajtësin e pritjes vazhdon derisa formulari të mbyllet ose derisa të thirret metoda DisableWaitHandler e formularit.
Shembull:
Kodi 1C v 8.x ConnectWaitingHandler("WhenWaiting", 1);
Kodi 1C v 8.x Form.mAutosave Interval = 300; // 5 minuta
Nëse Form.mAutosave Interval<>0 Pastaj
Form.ConnectWaitingHandler("EventHandlerByTimer", Int(Form.mAutoSaveInterval * 60));
fundNëse;

Përpunimi në pritje në sistemin 1C:Enterprise, siç vijon nga dokumentacioni, është menduar për ekzekutimin periodik të procedurës së modulit global me një interval kohor të caktuar. Kodi për të ekzekutuar do të duket si ky:
Kodi 1C v 7.x Përpunimi në pritje ("UpdateCounter_",1);
Ku "UpdateCounter_"- emri i procedurës globale të modulit që do të nisë çdo 1 sekondë. (parametri i dytë i barabartë me 1)

Por! Problemi është se ju mund të ekzekutoni përpunimin e pritjes vetëm një herë. Rinisja do të anulojë atë të mëparshmen. Me fjalë të tjera, nëse doni të bëni, për shembull, një përpunim me kohëmatës për të numëruar kohën e kaluar, atëherë mund të ekzekutoni vetëm një kohëmatës, sepse nisja e kohëmatësit të dytë do të ndalojë të parën. Por, çka nëse duhet të ekzekutoni 2, 3 ose më shumë nga këta kohëmatës në të njëjtën kohë? Apo ju duhet ende të skanoni periodikisht statusin e dokumenteve?

Ka një dalje! Përpunimi i pritjes duhet të kryhet në kontekstin e formës për të ndarë këtë fill nga konteksti global. Dhe atëherë do të bëhet e mundur që periodikisht të nisë procedura e modulit lokal, d.m.th. procedurë e vendosur në modulin e formularit tuaj të përpunimit.

Kodi për të ekzekutuar do të duket si ky:
Kodi 1C v 7.x Forma.Përpunimi në pritje ("UpdateCounter_",1);
Ku "UpdateCounter_"- emërtimi i procedurës së modulit lokal të formularit të përpunimit, i cili do të lançohet në intervale prej 1 sekonde. (parametri i dytë i barabartë me 1)
Kështu, në çdo përpunim mund të kryeni përpunimin tuaj të pritjes, i cili do të funksionojë për sa kohë që formulari është i hapur.

Mund ta përdorni në forma Kodi 1C v 8.x Forma. Përpunimi në pritje ("ProcedureName",StartTime) ,
ku ProcedureName është emri i procedurës që funksionon pas sekondave StartTime
Në vetë procedurën, duhet të futni kodin 1C v 8.x Form.Waiting Processing("ProcedureName",0) për të ndaluar përpunimin në pritje (natyrisht, pasi të plotësohen kushtet e nevojshme).
Burimi

Artikujt më të mirë mbi këtë temë