Interfeysni yoki asenkron qo'ng'iroqlar zanjirini "miltillash". Interfeysning "miltillashi" yoki asinxron qo'ng'iroqlar zanjiri Kutish moslamasini ulang 1s 8.3

Kod 1C v 8.2 UE ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Variantlar:
<ИмяПроцедуры>
<Интервал>(majburiy) Turi: Raqam. Vaqt oralig'i soniyaning 1/10 qismiga to'g'ri keladi, shundan so'ng protsedura chaqiriladi (musbat raqam 1 dan kichik bo'lsa, uchinchi parametrning qiymati True bo'lishi kerak).
<Однократно>(ixtiyoriy) Turi: mantiqiy. Kutish ishlovchisining bir martalik bajarilishi belgisi.
To'g'ri - belgilangan kutish ishlovchisi bir marta bajariladi. Standart qiymat: False
Tavsif: Belgilangan protsedurani kutish ishlovchisi sifatida ulaydi. Belgilangan vaqt oralig'i har safar o'tganda protsedura tizimning kutish vaqti davomida chaqiriladi.

Mavjudligi:
Yupqa mijoz, veb-mijoz, qalin mijoz.

Eslatma:
Kutish ishlovchisiga qo'ng'iroq forma yopilguncha yoki formaning DisableWaitHandler usuli chaqirilguncha davom etadi. Kod 1C v 8.2 UE DisableWaitingHandler(<ИмяПроцедуры>)

Kod 1C v 8.2 UP
&OnClient
ShellHandler() protsedurasi
ProcessWaiting();
Jarayonning oxiri

&Serverda
Jarayonni kutish ()
// nima kerak bo'lsa, bajaring
Jarayonning oxiri

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

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Belgilangan vaqt oralig'ida boshqariladigan dastur modulining (muntazam dastur moduli) yoki umumiy umumiy modulning belgilangan protsedurasiga qo'ng'iroqni keltirib chiqaradi. Qo'ng'iroq faqat "dam olish holatida", ya'ni dastur hech qanday harakat qilmayotgan vaqtda amalga oshiriladi. Kutish ishlovchisini chaqirish tizim yopilguncha yoki global kontekstning DisableWaitHandler usuli chaqirilguncha davom etadi.
Code 1C v 8.x Protsedura Sotish ReportDay()
// ...
Jarayonning oxiri

//...
ConnectWaitingHandler("DaySalesReport", 60); // har daqiqada
Kod 1C v 8.x // Standart dinamizmni tekshirishda. konfiguratsiya har 20 daqiqada yangilanadi.
ConnectWaitingHandler("IB DynamicChangeCheckWaitingHandler", 20 * 60);
// ma'lumotlar almashinuvi ishlovchisini ulang
ConnectWaitingHandler("CheckingDataExchange", chValueVariable("chNumberofSecondsPollExchange"));
ConnectWaitingHandler("Ulanish ilovalariga javoblarni tekshirish", 86400); // = 24(h) * 60(min) * 60(sek) = 1 kun

Shakl uchun
Kod 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Variantlar:
<ИмяПроцедуры>(majburiy) Turi: String. Kutish ishlovchisi sifatida ulanadigan protsedura nomi.
<Интервал>(majburiy) Turi: Raqam. Vaqt oralig'i soniyada, soniyaning 1/10 qismiga to'g'ri keladi, shundan so'ng protsedura chaqiriladi (ijobiy raqam). Agar 1 dan kichik qiymat ko'rsatilgan bo'lsa, uchinchi parametrning qiymati True bo'lishi kerak.
<Однократно>(ixtiyoriy) Turi: mantiqiy. Kutish ishlovchisining bir martalik bajarilishi belgisi. 0True - belgilangan kutish ishlovchisi bir marta bajariladi. Standart qiymat: False

Tavsif:
Belgilangan protsedurani kutish ishlovchisi sifatida ulaydi. Belgilangan vaqt oralig'i har safar o'tganda protsedura tizimning kutish vaqti davomida chaqiriladi.

Mavjudligi:
Semiz mijoz.
Eslatma:
Kutish ishlovchisiga qo'ng'iroq forma yopilguncha yoki formaning DisableWaitHandler usuli chaqirilguncha davom etadi.
Misol:
Code 1C v 8.x ConnectWaitingHandler("WhenWaiting", 1);
Kod 1C v 8.x Form.mAutosave Interval = 300; // 5 daqiqa
Agar Form.mAutosave Interval<>0 Keyin
Form.ConnectWaitingHandler("TimerEventHandler", Int(Form.mAutoSaveInterval * 60));
endIf;

1C: Enterprise tizimida ishlov berishni kutish, hujjatlardan ko'rinib turibdiki, ma'lum vaqt oralig'ida global modul protsedurasini davriy bajarish uchun mo'ljallangan. Ishlash uchun kod quyidagicha ko'rinadi:
Kod 1C v 7.x Kutishda ishlov berish("UpdateCounter_",1);
Qayerda "UpdateCounter_"- har 1 soniyada ishga tushadigan global modul protsedurasining nomi. (ikkinchi parametr 1 ga teng)

Lekin! Muammo shundaki, siz kutish jarayonini faqat bir marta ishga tushirishingiz mumkin. Qayta ishga tushirish avvalgisini bekor qiladi. Boshqacha qilib aytganda, agar siz, masalan, o'tgan vaqtni hisoblash uchun taymerni qayta ishlashni xohlasangiz, unda siz faqat bitta taymerni ishga tushirishingiz mumkin, chunki ikkinchi taymerni ishga tushirish birinchisini to'xtatadi. Ammo bir vaqtning o'zida ushbu taymerlarning 2, 3 yoki undan ko'pini ishlatish kerak bo'lsa-chi? Yoki siz hali ham vaqti-vaqti bilan hujjatlar holatini skanerlashingiz kerakmi?

Chiqish bor! Ushbu mavzuni global kontekstdan ajratish uchun kutish jarayoni shakl kontekstida bajarilishi kerak. Va keyin vaqti-vaqti bilan mahalliy modul protsedurasini ishga tushirish mumkin bo'ladi, ya'ni. protsedura sizning ishlov berish formangiz modulida joylashgan.

Ishlash uchun kod quyidagicha ko'rinadi:
Kod 1C v 7.x Shakl. Kutishda ishlov berish("UpdateCounter_",1);
Qayerda "UpdateCounter_"- 1 soniya oralig'ida ishga tushiriladigan ishlov berish shaklining mahalliy moduli protsedurasining nomi. (ikkinchi parametr 1 ga teng)
Shunday qilib, har bir ishlov berishda siz o'zingizning kutish jarayonini ishga tushirishingiz mumkin, bu forma ochiq ekan ishlaydi.

Siz uni shakllarda ishlatishingiz mumkin Kod 1C v 8.x Shakl. Kutishda ishlov berish (“Protsedura nomi”, boshlanish vaqti) ,
Bu erda ProcedureName - StartTime soniyadan keyin bajariladigan protsedura nomi
Jarayonning o'zida siz kutish jarayonini to'xtatish uchun 1C v 8.x Form.Waiting Processing("ProcedureName",0) kodini kiritishingiz kerak (albatta, zarur shartlar bajarilgandan keyin).
Manba

Kod 1C v 8.2 UE ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Variantlar:
<ИмяПроцедуры>
<Интервал>(majburiy) Turi: Raqam. Vaqt oralig'i soniyaning 1/10 qismiga to'g'ri keladi, shundan so'ng protsedura chaqiriladi (musbat raqam 1 dan kichik bo'lsa, uchinchi parametrning qiymati True bo'lishi kerak).
<Однократно>(ixtiyoriy) Turi: mantiqiy. Kutish ishlovchisining bir martalik bajarilishi belgisi.
To'g'ri - belgilangan kutish ishlovchisi bir marta bajariladi. Standart qiymat: False
Tavsif: Belgilangan protsedurani kutish ishlovchisi sifatida ulaydi. Belgilangan vaqt oralig'i har safar o'tganda protsedura tizimning kutish vaqti davomida chaqiriladi.

Mavjudligi:
Yupqa mijoz, veb-mijoz, qalin mijoz.

Eslatma:
Kutish ishlovchisiga qo'ng'iroq forma yopilguncha yoki formaning DisableWaitHandler usuli chaqirilguncha davom etadi. Kod 1C v 8.2 UE DisableWaitingHandler(<ИмяПроцедуры>)

Kod 1C v 8.2 UP
&OnClient
ShellHandler() protsedurasi
ProcessWaiting();
Jarayonning oxiri

&Serverda
Jarayonni kutish ()
// nima kerak bo'lsa, bajaring
Jarayonning oxiri

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

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Belgilangan vaqt oralig'ida boshqariladigan dastur modulining (muntazam dastur moduli) yoki umumiy umumiy modulning belgilangan protsedurasiga qo'ng'iroqni keltirib chiqaradi. Qo'ng'iroq faqat "dam olish holatida", ya'ni dastur hech qanday harakat qilmayotgan vaqtda amalga oshiriladi. Kutish ishlovchisini chaqirish tizim yopilguncha yoki global kontekstning DisableWaitHandler usuli chaqirilguncha davom etadi.
Code 1C v 8.x Protsedura Sotish ReportDay()
// ...
Jarayonning oxiri

//...
ConnectWaitingHandler("DaySalesReport", 60); // har daqiqada
Kod 1C v 8.x // Standart dinamizmni tekshirishda. konfiguratsiya har 20 daqiqada yangilanadi.
ConnectWaitingHandler("IB DynamicChangeCheckWaitingHandler", 20 * 60);
// ma'lumotlar almashinuvi ishlovchisini ulang
ConnectWaitingHandler("CheckingDataExchange", chValueVariable("chNumberofSecondsPollExchange"));
ConnectWaitingHandler("Ulanish ilovalariga javoblarni tekshirish", 86400); // = 24(h) * 60(min) * 60(sek) = 1 kun

Shakl uchun
Kod 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Variantlar:
<ИмяПроцедуры>(majburiy) Turi: String. Kutish ishlovchisi sifatida ulanadigan protsedura nomi.
<Интервал>(majburiy) Turi: Raqam. Vaqt oralig'i soniyada, soniyaning 1/10 qismiga to'g'ri keladi, shundan so'ng protsedura chaqiriladi (ijobiy raqam). Agar 1 dan kichik qiymat ko'rsatilgan bo'lsa, uchinchi parametrning qiymati True bo'lishi kerak.
<Однократно>(ixtiyoriy) Turi: mantiqiy. Kutish ishlovchisining bir martalik bajarilishi belgisi. 0True - belgilangan kutish ishlovchisi bir marta bajariladi. Standart qiymat: False

Tavsif:
Belgilangan protsedurani kutish ishlovchisi sifatida ulaydi. Belgilangan vaqt oralig'i har safar o'tganda protsedura tizimning kutish vaqti davomida chaqiriladi.

Mavjudligi:
Semiz mijoz.
Eslatma:
Kutish ishlovchisiga qo'ng'iroq forma yopilguncha yoki formaning DisableWaitHandler usuli chaqirilguncha davom etadi.
Misol:
Code 1C v 8.x ConnectWaitingHandler("WhenWaiting", 1);
Kod 1C v 8.x Form.mAutosave Interval = 300; // 5 daqiqa
Agar Form.mAutosave Interval<>0 Keyin
Form.ConnectWaitingHandler("TimerEventHandler", Int(Form.mAutoSaveInterval * 60));
endIf;

1C: Enterprise tizimida ishlov berishni kutish, hujjatlardan ko'rinib turibdiki, ma'lum vaqt oralig'ida global modul protsedurasini davriy bajarish uchun mo'ljallangan. Ishlash uchun kod quyidagicha ko'rinadi:
Kod 1C v 7.x Kutishda ishlov berish("UpdateCounter_",1);
Qayerda "UpdateCounter_"- har 1 soniyada ishga tushadigan global modul protsedurasining nomi. (ikkinchi parametr 1 ga teng)

Lekin! Muammo shundaki, siz kutish jarayonini faqat bir marta ishga tushirishingiz mumkin. Qayta ishga tushirish avvalgisini bekor qiladi. Boshqacha qilib aytganda, agar siz, masalan, o'tgan vaqtni hisoblash uchun taymerni qayta ishlashni xohlasangiz, unda siz faqat bitta taymerni ishga tushirishingiz mumkin, chunki ikkinchi taymerni ishga tushirish birinchisini to'xtatadi. Ammo bir vaqtning o'zida ushbu taymerlarning 2, 3 yoki undan ko'pini ishlatish kerak bo'lsa-chi? Yoki siz hali ham vaqti-vaqti bilan hujjatlar holatini skanerlashingiz kerakmi?

Chiqish bor! Ushbu mavzuni global kontekstdan ajratish uchun kutish jarayoni shakl kontekstida bajarilishi kerak. Va keyin vaqti-vaqti bilan mahalliy modul protsedurasini ishga tushirish mumkin bo'ladi, ya'ni. protsedura sizning ishlov berish formangiz modulida joylashgan.

Ishlash uchun kod quyidagicha ko'rinadi:
Kod 1C v 7.x Shakl. Kutishda ishlov berish("UpdateCounter_",1);
Qayerda "UpdateCounter_"- 1 soniya oralig'ida ishga tushiriladigan ishlov berish shaklining mahalliy moduli protsedurasining nomi. (ikkinchi parametr 1 ga teng)
Shunday qilib, har bir ishlov berishda siz o'zingizning kutish jarayonini ishga tushirishingiz mumkin, bu forma ochiq ekan ishlaydi.

Siz uni shakllarda ishlatishingiz mumkin Kod 1C v 8.x Shakl. Kutishda ishlov berish (“Protsedura nomi”, boshlanish vaqti) ,
Bu erda ProcedureName - StartTime soniyadan keyin bajariladigan protsedura nomi
Jarayonning o'zida siz kutish jarayonini to'xtatish uchun 1C v 8.x Form.Waiting Processing("ProcedureName",0) kodini kiritishingiz kerak (albatta, zarur shartlar bajarilgandan keyin).
Manba

1C platformasi bizga protseduralarni asinxron qo'ng'iroq qilish imkoniyatini beradi, ular ba'zan oddiy, ammo qiziqarli narsalar uchun ishlatilishi mumkin. Misol uchun, siz rangga ega bo'lgan yoki vizual ko'rinishni o'zgartirish qobiliyatiga ega bo'lgan har qanday narsani "miltillatishingiz" mumkin. Bundan tashqari, siz oddiyroq, ammo boshqarilmaydigan mexanizmdan foydalanishingiz yoki asenkron qo'ng'iroqlarning qiziqarli zanjirini yaratishingiz va unga afzal qilingan xatti-harakatni berishingiz mumkin.

Bu erda, albatta, ConnectWaitingHandler() protsedurasi haqida gapiramiz.

Jarayonning sintaksisini eslatib o'taman:

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

Bundan tashqari, agar siz bir soniyadan kamroq vaqt oralig'ini belgilasangiz, protsedura bir marta ishga tushirilishi kerak. Bu erda biz ijro oqimi ustidan nazoratni yo'qotamiz va uni "moslashtirish" qobiliyatini yo'qotamiz (moslashuvchan, individual ravishda sozlash).

Ammo bu cheklovni osongina engib o'tish mumkin.

Fikrlarim chalg'imasligi uchun darhol oddiy misol keltiraman va tushuntiraman.

Aytaylik, bizda shaklda elektron jadval hujjati bor va biz uning bir qismini 5 marta "miltillamoqchi".

////////////////// // // Elektron jadval hujjatining maydonini yarim soniya oralig'ida 5 marta "miltillash" // //// /////// ///////// &Mijoz protsedurasi bo'yicha BlinkArea (Buyruq) mf Necha marta miltillash = 3; // Hisoblagich. Shakl atributi, kutish ishlov beruvchisi protseduralarida "ko'rinadigan" ConnectWaitHandler("ShowAreaSelection", 0.1, True); // Siz to'g'ridan-to'g'ri EndProcedure &Client Procedure ga qo'ng'iroq qilishingiz mumkin ShowArea Selection() Area = Object.TD.Area(mfFirstDataLine, mfFirstDataColumn, mfLastDataLine, mfLastDataColumn); Chegara = Yangi qator (TableDocumentCellLineType.Double); Maydon.Doira(Chegara, Chegara, Chegara, Chegara); // Hududning konturini mfQancha marta miltillash = mfNecha marta miltillash - 1; // Hisoblagichni kamaytirish Connect WaitHandler("RemoveArea Allocation", 0,5, True); // Asinxron qo'ng'iroqlar zanjirini ulash Protseduraning oxiri & Mijoz protsedurasida Hududni tanlash() maydoni = Object.TD.Area(mfFirstDataLine, mfFirstDataColumn, mfLastDataLine, mfLastDataColumn); Chegara = Yangi qator (SpreadsheetDocumentCellLineType.NoLine); Maydon.Doira(Chegara, Chegara, Chegara, Chegara); // Hududning konturini olib tashlang Agar mf Qancha marta miltillash kerak bo'lsa > 0 Keyin WaitHandler ni ulang ("Hududni tanlashni ko'rsatish", 0,5, rost); // EndIf taymerda qancha qolsa, shuncha takrorlang; Jarayonning oxiri

Yagona talab shundaki, mfHow Many Times Blink hisoblagich o'zgaruvchisi biz asinxron tarzda ishga tushiradigan protseduralardan "ko'rinadigan" bo'lishi kerak. IN Ushbu holatda o'zgaruvchi shakl atributidir.

Diqqatli o'quvchi bunday zanjirlar paydo bo'lishi bilan biz ikkita qushni bitta tosh bilan o'ldirayotganimizni payqagan bo'lishi mumkin:

  • Biz bir soniyadan kam intervalli qiymatlar bilan protsedura qo'ng'iroqlarini takrorlash cheklovini chetlab o'tamiz;
  • Biz turli uzunlikdagi va murakkablikdagi zanjirlarni hosil qilish imkoniyatiga egamiz:
    • kutish ishlovchisini to'g'ridan-to'g'ri kutish jarayonining o'zida ulang;
    • bunday tartiblar bir-biriga bog'langanligiga ishonch hosil qiling;
    • qo'ng'iroq zanjirlarining yanada murakkab tuzilishini tashkil etish;
    • qo'ng'iroqlarni boshqarishning o'zgaruvchanligini cheksiz murakkablashtiring (masalan, nafaqat qo'ng'iroqlar ichidagi hisoblagichlarni, balki interval qiymatlarini, dizayn uslublarini ham o'zgartiring (shunda 🌈 kamalak kabi porlaydi).

Ta'riflangan usulning soddaligiga qaramay, unda katta potentsial yashiringan.

2017 yilda dastur xatti-harakatlarini yanada moslashuvchan boshqarish zamonaviydir.