ინტერფეისის „მოციმციმე“ ან ასინქრონული ზარების ჯაჭვები. კოდის პერიოდული შესრულება მოცემულ დროის ინტერვალზე - ProcessingWait() 1s 8 ლოდინის დამმუშავებლები

1C პლატფორმა გვაძლევს პროცედურების ასინქრონულად გამოძახების შესაძლებლობას, რომელიც ზოგჯერ შეიძლება გამოვიყენოთ მარტივი, მაგრამ სახალისო საქმეებისთვის. მაგალითად, შეგიძლიათ „დაახამხამოთ“ ყველაფერი, რომელსაც აქვს ფერი ან ვიზუალური გარეგნობის შეცვლის რაიმე უნარი. უფრო მეტიც, შეგიძლიათ გამოიყენოთ ან უფრო მარტივი, მაგრამ უკონტროლო მექანიზმი, ან ააწყოთ ასინქრონული ზარების საინტერესო ჯაჭვი და მიანიჭოთ მას სასურველი ქცევა.

აქ, რა თქმა უნდა, ვსაუბრობთ ConnectWaitingHandler() პროცედურაზე.

შეგახსენებთ პროცედურის სინტაქსს:

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

უფრო მეტიც, თუ თქვენ მიუთითებთ წამზე ნაკლებ ინტერვალს, პროცედურა უნდა დაიწყოს ერთხელ. სწორედ აქ ვკარგავთ კონტროლს შესრულების ნაკადზე და ვკარგავთ მისი „მორგების“ უნარს (მოქნილად, ინდივიდუალურად კონფიგურაცია).

მაგრამ ეს შეზღუდვა ადვილად გადალახულია.

იმისათვის, რომ ჩემი აზრები არ გამეფუჭოს, მაშინვე მარტივ მაგალითს მოვიყვან და ავხსნი.

ვთქვათ, ფორმაზე გვაქვს ელცხრილის დოკუმენტი და გვსურს მისი ზოგიერთი უბანი 5-ჯერ „დაახამხამოთ“.

////////////////// // // ელცხრილის დოკუმენტის არე 5-ჯერ, ნახევარი წამის ინტერვალით „დააციმციმე“ // //// /////// ///////// &კლიენტის პროცედურის შესახებ BlinkArea (ბრძანება) mf რამდენჯერ უნდა დახატო = 3; // მრიცხველი. ფორმის ატრიბუტი, „ხილული“ ლოდინის დამმუშავებლის პროცედურებში ConnectWaitHandler("ShowAreaSelection", 0.1, True); // ასევე შეგიძლიათ პირდაპირ დარეკოთ EndProcedure &Client Procedure-ზე ShowArea Selection() Area = Object.TD.Area(mfFirstDataLine, mfFirstDataColumn, mfLastDataLine, mfLastDataColumn);

Border = ახალი ხაზი (TableDocumentCellLineType.Double);

ფართობი.წრე (საზღვარი, საზღვარი, საზღვარი, საზღვარი); // ფართობის გამოკვეთა mfHow many times to blink = mf რამდენჯერ უნდა დავახამხამოთ - 1; // მრიცხველის შემცირება Connect WaitHandler ("RemoveArea Allocation", 0.5, True); // ასინქრონული ზარების ჯაჭვის დაკავშირება პროცედურის დასასრული & კლიენტის პროცედურაზე Remove Area Selection() Area = Object.TD.Area(mfFirstDataLine, mfFirstDataColumn, mfLastDataLine, mfLastDataColumn);

  • Border = ახალი ხაზი (TableDocumentCellLineType.NoLine);
  • ფართობი.წრე (საზღვარი, საზღვარი, საზღვარი, საზღვარი); // ამოიღეთ არეალის მონახაზი If mf How Many Times to Blink > 0 then ConnectWaitingHandler("ShowSelectedArea", 0.5, True); // გაიმეორეთ იმდენი, რამდენიც დარჩა მრიცხველზე EndIf; პროცედურის დასასრული
    • ერთადერთი მოთხოვნაა, რომ მრიცხველის ცვლადი mfHow Many Times Blink უნდა იყოს „ხილული“ პროცედურებიდან, რომლებსაც ჩვენ ასინქრონულად ვხსნით. ამ შემთხვევაში, ცვლადი არის ფორმის ატრიბუტი.
    • ყურადღებიან მკითხველს შეიძლება შეემჩნია, რომ ასეთი ჯაჭვების ჩამოყალიბებით ჩვენ ვხოცავთ ორ ფრინველს ერთი ქვით:
    • ჩვენ გვერდს ვუვლით პროცედურის ზარების განმეორების შეზღუდვას წამზე ნაკლები ინტერვალით;
    • ჩვენ გვაქვს შესაძლებლობა ჩამოვაყალიბოთ სხვადასხვა სიგრძისა და სირთულის ჯაჭვები:

დააკავშირეთ ლოდინის დამმუშავებელი უშუალოდ ლოდინის დამმუშავებლის პროცედურაში;

დარწმუნდით, რომ ასეთი პროცედურები ერთმანეთთან არის დაკავშირებული;

ზარის ჯაჭვების უფრო რთული სტრუქტურის ორგანიზება;<ИмяПроцедуры>, <Интервал>, <Однократно>)
გაუთავებლად ართულებს ზარების მართვის ცვალებადობას (მაგალითად, შეცვალეთ არა მხოლოდ მათი მრიცხველები ზარების შიგნით, არამედ ინტერვალის მნიშვნელობები, დიზაინის სტილი (ისე, რომ 🌈 ცისარტყელავით ანათებს).
<ИмяПроцедуры>
<Интервал>(აუცილებელია) ტიპი: ნომერი. დროის ინტერვალი წამში, 1/10 წამის სიზუსტით, რის შემდეგაც პროცედურა გამოიძახება (დადებითი რიცხვი თუ მითითებულია 1-ზე ნაკლები მნიშვნელობა, მაშინ მესამე პარამეტრის მნიშვნელობა უნდა იყოს True).
<Однократно>(არასავალდებულო) ტიპი: ლოგიკური. ლოდინის დამმუშავებლის ერთჯერადი შესრულების ნიშანი.
True - მითითებული ლოდინის დამმუშავებელი შესრულდება ერთხელ. ნაგულისხმევი მნიშვნელობა: False
აღწერა: აკავშირებს მითითებულ პროცედურას, როგორც ლოდინის დამმუშავებელი. პროცედურა გამოიძახება სისტემის დროის ამოწურვის პერიოდში, ყოველ ჯერზე მითითებული დროის ინტერვალის გასვლისას.

ხელმისაწვდომობა:
თხელი კლიენტი, ვებ კლიენტი, სქელი კლიენტი.

შენიშვნა:
მოლოდინის დამმუშავებელთან ზარი გრძელდება ფორმის დახურვამდე ან ფორმის DisableWaitHandler მეთოდის გამოძახებამდე. კოდი 1C v 8.2 UE DisableWaitingHandler(<ИмяПроцедуры>)

კოდი 1C v 8.2 UP
&OnClient
პროცედურა ShellHandler()
ProcessWaiting();
პროცედურის დასასრული

&სერვერზე
პროცედურა პროცესის მოლოდინში()
// გააკეთე რაც საჭიროა
პროცედურის დასასრული

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

<ИмяПроцедуры>, <Интервал>, <Однократно>)
აკავშირებს ზარს მართული აპლიკაციის მოდულის (ჩვეულებრივი აპლიკაციის მოდული) ან გლობალური გაზიარებული მოდულის მითითებულ პროცედურაზე მითითებულ დროში. ზარი განხორციელდება მხოლოდ "დასვენების მდგომარეობაში", ანუ იმ დროს, როდესაც პროგრამა არ ასრულებს რაიმე მოქმედებას. ლოდინის დამმუშავებლის გამოძახება გრძელდება მანამ, სანამ სისტემა არ დაიხურება ან არ გამოიძახება გლობალური კონტექსტის DisableWaitHandler მეთოდი.
კოდი 1C v 8.x პროცედურის გაყიდვების ReportDay()
// ...
პროცედურის დასასრული

//...
ConnectWaitingHandler ("DaySalesReport", 60); // ყოველ წუთს
კოდი 1C v 8.x // სტანდარტული დინამიზმის შემოწმებაში. კონფიგურაციის განახლება ყოველ 20 წუთში.
ConnectWaitingHandler ("IB DynamicChangeCheckWaitingHandler", 20 * 60);
// დააკავშირეთ მონაცემთა გაცვლის დამმუშავებელი
ConnectWaitingHandler("CheckingDataExchange", chValueVariable("chNumberofSecondsPollExchange"));
ConnectWaitingHandler ("შეამოწმეთ პასუხები კავშირის აპლიკაციებზე", 86400); // = 24 (სთ) * 60 (წთ) * 60 (წმ) = 1 დღე

ფორმისთვის
კოდი 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
გაუთავებლად ართულებს ზარების მართვის ცვალებადობას (მაგალითად, შეცვალეთ არა მხოლოდ მათი მრიცხველები ზარების შიგნით, არამედ ინტერვალის მნიშვნელობები, დიზაინის სტილი (ისე, რომ 🌈 ცისარტყელავით ანათებს).
<ИмяПроцедуры>(აუცილებელია) ტიპი: სტრიქონი. პროცედურის სახელწოდება, რომელიც უნდა იყოს დაკავშირებული, როგორც ლოდინის დამმუშავებელი.
<Интервал>(აუცილებელია) ტიპი: ნომერი. დროის ინტერვალი წამებში, ზუსტი წამის 1/10-მდე, რის შემდეგაც პროცედურა გამოიძახება (დადებითი ნომერი). თუ მითითებულია 1-ზე ნაკლები მნიშვნელობა, მაშინ მესამე პარამეტრის მნიშვნელობა უნდა იყოს True.
<Однократно>(არასავალდებულო) ტიპი: ლოგიკური. ლოდინის დამმუშავებლის ერთჯერადი შესრულების ნიშანი. 0True - მითითებული ლოდინის დამმუშავებელი შესრულდება ერთხელ. ნაგულისხმევი მნიშვნელობა: False

აღწერა:
აკავშირებს მითითებულ პროცედურას, როგორც ლოდინის დამმუშავებელი. პროცედურა გამოიძახება სისტემის დროის ამოწურვის პერიოდში, ყოველ ჯერზე მითითებული დროის ინტერვალის გასვლისას.

ხელმისაწვდომობა:
მსუქანი კლიენტი.
შენიშვნა:
მოლოდინის დამმუშავებელთან ზარი გრძელდება ფორმის დახურვამდე ან ფორმის DisableWaitHandler მეთოდის გამოძახებამდე.
მაგალითი:
კოდი 1C v 8.x ConnectWaitingHandler("WhenWaiting", 1);
კოდი 1C v 8.x Form.mAutosave ინტერვალი = 300; // 5 წუთი
თუ Form.mAutosave Interval<>0 შემდეგ
Form.ConnectWaitingHandler("TimerEventHandler", Int(Form.mAutoSaveInterval * 60));
endIf;

ელოდება დამუშავებას 1C:Enterprise სისტემაში, როგორც დოკუმენტაციადან ირკვევა, განკუთვნილია გლობალური მოდულის პროცედურის პერიოდული შესრულებისთვის მოცემული დროის ინტერვალით. გასაშვები კოდი ასე გამოიყურება:
კოდი 1C v 7.x Waiting Processing("UpdateCounter_",1);
სად "UpdateCounter_"- გლობალური მოდულის პროცედურის დასახელება, რომელიც ამოქმედდება ყოველ 1 წამში. (მეორე პარამეტრი უდრის 1)

მაგრამ! პრობლემა ის არის, რომ ლოდინის დამუშავება მხოლოდ ერთხელ შეგიძლიათ. გადატვირთვა გააუქმებს წინას. სხვა სიტყვებით რომ ვთქვათ, თუ გსურთ გააკეთოთ, მაგალითად, ტაიმერის დამუშავება გასული დროის დასათვლელად, მაშინ შეგიძლიათ მხოლოდ ერთი ტაიმერის გაშვება, რადგან მეორე ტაიმერის დაწყება შეაჩერებს პირველს. მაგრამ რა მოხდება, თუ თქვენ გჭირდებათ 2, 3 ან მეტი ამ ტაიმერის ერთდროულად გაშვება? ან ჯერ კიდევ გჭირდებათ პერიოდულად დოკუმენტების სტატუსის სკანირება?

არის გამოსავალი! ლოდინის დამუშავება უნდა განხორციელდეს ფორმის კონტექსტში, რათა გამოეყოთ ეს თემა გლობალური კონტექსტიდან. შემდეგ კი შესაძლებელი გახდება ლოკალური მოდულის პროცედურის პერიოდულად გაშვება, ე.ი. პროცედურა, რომელიც მდებარეობს თქვენი დამუშავების ფორმის მოდულში.

გასაშვები კოდი ასე გამოიყურება:
კოდი 1C v 7.x Form.Waiting Processing("UpdateCounter_",1);
სად "UpdateCounter_"- დამუშავების ფორმის ლოკალური მოდულის პროცედურის დასახელება, რომელიც ამოქმედდება 1 წამის ინტერვალით. (მეორე პარამეტრი უდრის 1)
ამრიგად, თითოეულ დამუშავებისას შეგიძლიათ აწარმოოთ თქვენი ლოდინის დამუშავება, რომელიც იმუშავებს მანამ, სანამ ფორმა ღიაა.

შეგიძლიათ გამოიყენოთ იგი ფორმებშიკოდი 1C v 8.x Form.Waiting Processing("ProcedureName",StartTime) ,
სადაც ProcedureName არის პროცედურის სახელი, რომელიც გადის StartTime წამის შემდეგ
თავად პროცედურაში, თქვენ უნდა ჩასვათ კოდი 1C v 8.x Form.Waiting Processing("ProcedureName",0), რათა შეწყვიტოთ ლოდინის დამუშავება (რა თქმა უნდა, აუცილებელი პირობების დაკმაყოფილების შემდეგ).
წყარო

ზარის ჯაჭვების უფრო რთული სტრუქტურის ორგანიზება;<ИмяПроцедуры>, <Интервал>, <Однократно>)
გაუთავებლად ართულებს ზარების მართვის ცვალებადობას (მაგალითად, შეცვალეთ არა მხოლოდ მათი მრიცხველები ზარების შიგნით, არამედ ინტერვალის მნიშვნელობები, დიზაინის სტილი (ისე, რომ 🌈 ცისარტყელავით ანათებს).
<ИмяПроцедуры>
<Интервал>(აუცილებელია) ტიპი: ნომერი. დროის ინტერვალი წამში, 1/10 წამის სიზუსტით, რის შემდეგაც პროცედურა გამოიძახება (დადებითი რიცხვი თუ მითითებულია 1-ზე ნაკლები მნიშვნელობა, მაშინ მესამე პარამეტრის მნიშვნელობა უნდა იყოს True).
<Однократно>(არასავალდებულო) ტიპი: ლოგიკური. ლოდინის დამმუშავებლის ერთჯერადი შესრულების ნიშანი.
True - მითითებული ლოდინის დამმუშავებელი შესრულდება ერთხელ. ნაგულისხმევი მნიშვნელობა: False
აღწერა: აკავშირებს მითითებულ პროცედურას, როგორც ლოდინის დამმუშავებელი. პროცედურა გამოიძახება სისტემის დროის ამოწურვის პერიოდში, ყოველ ჯერზე მითითებული დროის ინტერვალის გასვლისას.

ხელმისაწვდომობა:
თხელი კლიენტი, ვებ კლიენტი, სქელი კლიენტი.

შენიშვნა:
მოლოდინის დამმუშავებელთან ზარი გრძელდება ფორმის დახურვამდე ან ფორმის DisableWaitHandler მეთოდის გამოძახებამდე. კოდი 1C v 8.2 UE DisableWaitingHandler(<ИмяПроцедуры>)

კოდი 1C v 8.2 UP
&OnClient
პროცედურა ShellHandler()
ProcessWaiting();
პროცედურის დასასრული

&სერვერზე
პროცედურა პროცესის მოლოდინში()
// გააკეთე რაც საჭიროა
პროცედურის დასასრული

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

<ИмяПроцедуры>, <Интервал>, <Однократно>)
აკავშირებს ზარს მართული აპლიკაციის მოდულის (ჩვეულებრივი აპლიკაციის მოდული) ან გლობალური გაზიარებული მოდულის მითითებულ პროცედურაზე მითითებულ დროში. ზარი განხორციელდება მხოლოდ "დასვენების მდგომარეობაში", ანუ იმ დროს, როდესაც პროგრამა არ ასრულებს რაიმე მოქმედებას. ლოდინის დამმუშავებლის გამოძახება გრძელდება მანამ, სანამ სისტემა არ დაიხურება ან არ გამოიძახება გლობალური კონტექსტის DisableWaitHandler მეთოდი.
კოდი 1C v 8.x პროცედურის გაყიდვების ReportDay()
// ...
პროცედურის დასასრული

//...
ConnectWaitingHandler ("DaySalesReport", 60); // ყოველ წუთს
კოდი 1C v 8.x // სტანდარტული დინამიზმის შემოწმებაში. კონფიგურაციის განახლება ყოველ 20 წუთში.
ConnectWaitingHandler ("IB DynamicChangeCheckWaitingHandler", 20 * 60);
// დააკავშირეთ მონაცემთა გაცვლის დამმუშავებელი
ConnectWaitingHandler("CheckingDataExchange", chValueVariable("chNumberofSecondsPollExchange"));
ConnectWaitingHandler ("შეამოწმეთ პასუხები კავშირის აპლიკაციებზე", 86400); // = 24 (სთ) * 60 (წთ) * 60 (წმ) = 1 დღე

ფორმისთვის
კოდი 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
გაუთავებლად ართულებს ზარების მართვის ცვალებადობას (მაგალითად, შეცვალეთ არა მხოლოდ მათი მრიცხველები ზარების შიგნით, არამედ ინტერვალის მნიშვნელობები, დიზაინის სტილი (ისე, რომ 🌈 ცისარტყელავით ანათებს).
<ИмяПроцедуры>(აუცილებელია) ტიპი: სტრიქონი. პროცედურის სახელწოდება, რომელიც უნდა იყოს დაკავშირებული, როგორც ლოდინის დამმუშავებელი.
<Интервал>(აუცილებელია) ტიპი: ნომერი. დროის ინტერვალი წამებში, ზუსტი წამის 1/10-მდე, რის შემდეგაც პროცედურა გამოიძახება (დადებითი ნომერი). თუ მითითებულია 1-ზე ნაკლები მნიშვნელობა, მაშინ მესამე პარამეტრის მნიშვნელობა უნდა იყოს True.
<Однократно>(არასავალდებულო) ტიპი: ლოგიკური. ლოდინის დამმუშავებლის ერთჯერადი შესრულების ნიშანი. 0True - მითითებული ლოდინის დამმუშავებელი შესრულდება ერთხელ. ნაგულისხმევი მნიშვნელობა: False

აღწერა:
აკავშირებს მითითებულ პროცედურას, როგორც ლოდინის დამმუშავებელი. პროცედურა გამოიძახება სისტემის დროის ამოწურვის პერიოდში, ყოველ ჯერზე მითითებული დროის ინტერვალის გასვლისას.

ხელმისაწვდომობა:
მსუქანი კლიენტი.
შენიშვნა:
მოლოდინის დამმუშავებელთან ზარი გრძელდება ფორმის დახურვამდე ან ფორმის DisableWaitHandler მეთოდის გამოძახებამდე.
მაგალითი:
კოდი 1C v 8.x ConnectWaitingHandler("WhenWaiting", 1);
კოდი 1C v 8.x Form.mAutosave ინტერვალი = 300; // 5 წუთი
თუ Form.mAutosave Interval<>0 შემდეგ
Form.ConnectWaitingHandler("TimerEventHandler", Int(Form.mAutoSaveInterval * 60));
endIf;

ელოდება დამუშავებას 1C:Enterprise სისტემაში, როგორც დოკუმენტაციადან ირკვევა, განკუთვნილია გლობალური მოდულის პროცედურის პერიოდული შესრულებისთვის მოცემული დროის ინტერვალით. გასაშვები კოდი ასე გამოიყურება:
კოდი 1C v 7.x Waiting Processing("UpdateCounter_",1);
სად "UpdateCounter_"- გლობალური მოდულის პროცედურის დასახელება, რომელიც ამოქმედდება ყოველ 1 წამში. (მეორე პარამეტრი უდრის 1)

მაგრამ! პრობლემა ის არის, რომ ლოდინის დამუშავება მხოლოდ ერთხელ შეგიძლიათ. გადატვირთვა გააუქმებს წინას. სხვა სიტყვებით რომ ვთქვათ, თუ გსურთ გააკეთოთ, მაგალითად, ტაიმერის დამუშავება გასული დროის დასათვლელად, მაშინ შეგიძლიათ მხოლოდ ერთი ტაიმერის გაშვება, რადგან მეორე ტაიმერის დაწყება შეაჩერებს პირველს. მაგრამ რა მოხდება, თუ თქვენ გჭირდებათ 2, 3 ან მეტი ამ ტაიმერის ერთდროულად გაშვება? ან ჯერ კიდევ გჭირდებათ პერიოდულად დოკუმენტების სტატუსის სკანირება?

არის გამოსავალი! ლოდინის დამუშავება უნდა განხორციელდეს ფორმის კონტექსტში, რათა გამოეყოთ ეს თემა გლობალური კონტექსტიდან. შემდეგ კი შესაძლებელი გახდება ლოკალური მოდულის პროცედურის პერიოდულად გაშვება, ე.ი. პროცედურა, რომელიც მდებარეობს თქვენი დამუშავების ფორმის მოდულში.

გასაშვები კოდი ასე გამოიყურება:
კოდი 1C v 7.x Form.Waiting Processing("UpdateCounter_",1);
სად "UpdateCounter_"- დამუშავების ფორმის ლოკალური მოდულის პროცედურის დასახელება, რომელიც ამოქმედდება 1 წამის ინტერვალით. (მეორე პარამეტრი უდრის 1)
ამრიგად, თითოეულ დამუშავებისას შეგიძლიათ აწარმოოთ თქვენი ლოდინის დამუშავება, რომელიც იმუშავებს მანამ, სანამ ფორმა ღიაა.

შეგიძლიათ გამოიყენოთ იგი ფორმებშიკოდი 1C v 8.x Form.Waiting Processing("ProcedureName",StartTime) ,
სადაც ProcedureName არის პროცედურის სახელი, რომელიც გადის StartTime წამის შემდეგ
თავად პროცედურაში, თქვენ უნდა ჩასვათ კოდი 1C v 8.x Form.Waiting Processing("ProcedureName",0), რათა შეწყვიტოთ ლოდინის დამუშავება (რა თქმა უნდა, აუცილებელი პირობების დაკმაყოფილების შემდეგ).
წყარო