رابط "چک زدن" یا زنجیره ای از تماس های ناهمزمان. "چشمک زدن" رابط، یا زنجیره ای از تماس های ناهمزمان، کنترل کننده انتظار 1s 8.3 را وصل کنید

Code 1C v 8.2 UE ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
گزینه ها:
<ИмяПроцедуры>
<Интервал>(الزامی) نوع: شماره. فاصله زمانی بر حسب ثانیه با دقت 1/10 ثانیه و پس از آن فراخوانی رویه انجام می شود (عدد مثبت) اگر مقدار کمتر از 1 مشخص شده باشد، مقدار پارامتر سوم باید True باشد.
<Однократно>(اختیاری) نوع: Boolean. نشانه ای از یک اعدام مجرد انتظار.
درست - کنترل کننده انتظار مشخص شده یک بار اجرا می شود. مقدار پیش فرض: نادرست
توضیحات: رویه مشخص شده را به عنوان یک کنترل کننده انتظار وصل می کند. هر بار پس از سپری شدن بازه زمانی مشخص شده، این روش در طول دوره زمانی سیستم فراخوانی می شود.

دسترسی:
تین کلاینت، وب کلاینت، کلاینت ضخیم.

توجه داشته باشید:
تماس با کنترل کننده انتظار تا زمانی که فرم بسته شود یا تا زمانی که متد DisableWaitHandler فرم فراخوانی شود ادامه می یابد. Code 1C v 8.2 UE DisableWaitingHandler(<ИмяПроцедуры>)

کد 1C v 8.2 UP
&AtClient
Procedure WrapperHandler()
ProcessWaiting();
پایان رویه

&روی سرور
Procedure ProcessWaiting()
// هر کاری که لازم است را انجام دهید
پایان رویه

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

<ИмяПроцедуры>, <Интервал>, <Однократно>)
یک تماس را در یک بازه زمانی مشخص به رویه مشخص شده یک ماژول برنامه مدیریت شده (ماژول برنامه معمولی) یا ماژول مشترک جهانی متصل می کند. تماس فقط در "حالت ساکت" انجام می شود، یعنی در لحظه ای که برنامه هیچ عملی را انجام نمی دهد. تماس با کنترل کننده انتظار تا زمانی که سیستم خارج شود یا تا زمانی که متد DisableWaitingHandler در زمینه جهانی فراخوانی شود ادامه می یابد.
Code 1C v 8.x Procedure ReportSalesDaily()
// ...
پایان رویه

//...
ConnectWaitingHandler ("گزارش فروش روزانه"، 60)؛ // هر دقیقه
کد 1C v 8.x // در چک dyn معمولی. پیکربندی هر 20 دقیقه به روز می شود.
ConnectWaitingHandler("WaitingHandlerCheckingDynamicChangeIB"، 20 * 60);
// کنترل کننده تبادل داده را وصل کنید
ConnectWaitingHandler("CheckDataExchange"، hlVariableValue("hlNumber ofExchangePollSeconds"));
ConnectWaitingHandler("CheckConnectionRequestResponses"، 86400); // = 24 (ساعت) * 60 (دقیقه) * 60 (ثانیه) = 1 روز

برای فرم
کد 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
گزینه ها:
<ИмяПроцедуры>(الزامی) نوع: رشته. نام رویه برای اتصال به عنوان یک کنترل کننده انتظار.
<Интервал>(الزامی) نوع: شماره. فاصله زمانی بر حسب ثانیه با دقت 1/10 ثانیه و پس از آن فراخوانی رویه انجام می شود (شماره مثبت). اگر مقدار کمتر از 1 مشخص شود، مقدار پارامتر سوم باید True باشد.
<Однократно>(اختیاری) نوع: Boolean. نشانه ای از یک اعدام مجرد انتظار. 0 درست - کنترل کننده انتظار مشخص شده یک بار اجرا می شود. مقدار پیش فرض: نادرست

شرح:
رویه مشخص شده را به عنوان یک کنترل کننده انتظار وصل می کند. هر بار پس از سپری شدن بازه زمانی مشخص شده، این روش در طول دوره زمانی سیستم فراخوانی می شود.

دسترسی:
مشتری چاق
توجه داشته باشید:
تماس با کنترل کننده انتظار تا زمانی که فرم بسته شود یا تا زمانی که متد DisableWaitHandler فرم فراخوانی شود ادامه می یابد.
مثال:
Code 1C v 8.x ConnectWaitingHandler("WhileWaiting"، 1);
کد 1C v 8.x Form.mAutosave Interval = 300; // 5 دقیقه
If Shape.mAutosave Interval<>0 سپس
Form.ConnectWaitingHandler("EventHandlerBy Timer", Int(Form.mAutosave Interval * 60));
EndIf

پردازش در انتظار در سیستم 1C: Enterpriseهمانطور که از مستندات به شرح زیر است، برای اجرای دوره ای رویه ماژول جهانی با بازه زمانی مشخص طراحی شده است. کد اجرا شده به شکل زیر خواهد بود:
کد 1C v 7.x HandlingWaiting("UpdateCounter_",1);
جایی که "UpdateCounter_"- نام رویه ماژول جهانی که در فواصل زمانی 1 ثانیه راه اندازی می شود. (پارامتر دوم برابر با 1)

ولی! مشکل این است که پردازش انتظار فقط یک بار شروع می شود. راه اندازی مجدد، قبلی را لغو می کند. به عبارت دیگر، اگر می خواهید برای مثال پردازش تایمر برای شمارش زمان سپری شده انجام دهید، می توانید فقط یک تایمر را شروع کنید، زیرا شروع تایمر دوم تایمر اول را متوقف می کند. اما اگر بخواهید 2، 3 یا بیشتر از این تایمرها را همزمان اجرا کنید چه؟ یا هنوز نیاز به اسکن دوره ای وضعیت اسناد دارید؟

یک خروجی وجود دارد! پردازش انتظار باید در زمینه فرم اجرا شود تا این رشته از زمینه جهانی جدا شود. و سپس امکان راه اندازی دوره ای رویه ماژول محلی، یعنی. رویه واقع در ماژول فرم پردازش شما.

کد اجرا شده به شکل زیر خواهد بود:
کد 1C v 7.x Form.ProcessingWaiting("UpdateCounter_",1);
جایی که "UpdateCounter_"- نام رویه ماژول محلی فرم پردازش که در فواصل زمانی 1 ثانیه راه اندازی می شود. (پارامتر دوم برابر با 1)
بنابراین، در هر پردازش، می توانید پردازش انتظار خود را شروع کنید، که تا زمانی که فرم باز باشد، کار خواهد کرد.

می توان از فرم ها استفاده کردکد 1C v 8.x Form.ProcessingWaiting("ProcedureName",StartTime) ,
که در آن ProcedureName نام رویه‌ای است که بعد از StartTime ثانیه اجرا می‌شود
در خود رویه، باید Code 1C v 8.x Form.ProcessingWaiting ("ProcedureName"،0) را وارد کنید تا پردازش انتظار متوقف شود (طبیعاً پس از برآورده شدن شرایط لازم).
منبع

Code 1C v 8.2 UE ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
گزینه ها:
<ИмяПроцедуры>
<Интервал>(الزامی) نوع: شماره. فاصله زمانی بر حسب ثانیه با دقت 1/10 ثانیه و پس از آن فراخوانی رویه انجام می شود (عدد مثبت) اگر مقدار کمتر از 1 مشخص شده باشد، مقدار پارامتر سوم باید True باشد.
<Однократно>(اختیاری) نوع: Boolean. نشانه ای از یک اعدام مجرد انتظار.
درست - کنترل کننده انتظار مشخص شده یک بار اجرا می شود. مقدار پیش فرض: نادرست
توضیحات: رویه مشخص شده را به عنوان یک کنترل کننده انتظار وصل می کند. هر بار پس از سپری شدن بازه زمانی مشخص شده، این روش در طول دوره زمانی سیستم فراخوانی می شود.

دسترسی:
تین کلاینت، وب کلاینت، کلاینت ضخیم.

توجه داشته باشید:
تماس با کنترل کننده انتظار تا زمانی که فرم بسته شود یا تا زمانی که متد DisableWaitHandler فرم فراخوانی شود ادامه می یابد. Code 1C v 8.2 UE DisableWaitingHandler(<ИмяПроцедуры>)

کد 1C v 8.2 UP
&AtClient
Procedure WrapperHandler()
ProcessWaiting();
پایان رویه

&روی سرور
Procedure ProcessWaiting()
// هر کاری که لازم است را انجام دهید
پایان رویه

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

<ИмяПроцедуры>, <Интервал>, <Однократно>)
یک تماس را در یک بازه زمانی مشخص به رویه مشخص شده یک ماژول برنامه مدیریت شده (ماژول برنامه معمولی) یا ماژول مشترک جهانی متصل می کند. تماس فقط در "حالت ساکت" انجام می شود، یعنی در لحظه ای که برنامه هیچ عملی را انجام نمی دهد. تماس با کنترل کننده انتظار تا زمانی که سیستم خارج شود یا تا زمانی که متد DisableWaitingHandler در زمینه جهانی فراخوانی شود ادامه می یابد.
Code 1C v 8.x Procedure ReportSalesDaily()
// ...
پایان رویه

//...
ConnectWaitingHandler ("گزارش فروش روزانه"، 60)؛ // هر دقیقه
کد 1C v 8.x // در چک dyn معمولی. پیکربندی هر 20 دقیقه به روز می شود.
ConnectWaitingHandler("WaitingHandlerCheckingDynamicChangeIB"، 20 * 60);
// کنترل کننده تبادل داده را وصل کنید
ConnectWaitingHandler("CheckDataExchange"، hlVariableValue("hlNumber ofExchangePollSeconds"));
ConnectWaitingHandler("CheckConnectionRequestResponses"، 86400); // = 24 (ساعت) * 60 (دقیقه) * 60 (ثانیه) = 1 روز

برای فرم
کد 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
گزینه ها:
<ИмяПроцедуры>(الزامی) نوع: رشته. نام رویه برای اتصال به عنوان یک کنترل کننده انتظار.
<Интервал>(الزامی) نوع: شماره. فاصله زمانی بر حسب ثانیه با دقت 1/10 ثانیه و پس از آن فراخوانی رویه انجام می شود (شماره مثبت). اگر مقدار کمتر از 1 مشخص شود، مقدار پارامتر سوم باید True باشد.
<Однократно>(اختیاری) نوع: Boolean. نشانه ای از یک اعدام مجرد انتظار. 0 درست - کنترل کننده انتظار مشخص شده یک بار اجرا می شود. مقدار پیش فرض: نادرست

شرح:
رویه مشخص شده را به عنوان یک کنترل کننده انتظار وصل می کند. هر بار پس از سپری شدن بازه زمانی مشخص شده، این روش در طول دوره زمانی سیستم فراخوانی می شود.

دسترسی:
مشتری چاق
توجه داشته باشید:
تماس با کنترل کننده انتظار تا زمانی که فرم بسته شود یا تا زمانی که متد DisableWaitHandler فرم فراخوانی شود ادامه می یابد.
مثال:
Code 1C v 8.x ConnectWaitingHandler("WhileWaiting"، 1);
کد 1C v 8.x Form.mAutosave Interval = 300; // 5 دقیقه
If Shape.mAutosave Interval<>0 سپس
Form.ConnectWaitingHandler("EventHandlerBy Timer", Int(Form.mAutosave Interval * 60));
EndIf

پردازش در انتظار در سیستم 1C: Enterpriseهمانطور که از مستندات به شرح زیر است، برای اجرای دوره ای رویه ماژول جهانی با بازه زمانی مشخص طراحی شده است. کد اجرا شده به شکل زیر خواهد بود:
کد 1C v 7.x HandlingWaiting("UpdateCounter_",1);
جایی که "UpdateCounter_"- نام رویه ماژول جهانی که در فواصل زمانی 1 ثانیه راه اندازی می شود. (پارامتر دوم برابر با 1)

ولی! مشکل این است که پردازش انتظار فقط یک بار شروع می شود. راه اندازی مجدد، قبلی را لغو می کند. به عبارت دیگر، اگر می خواهید برای مثال پردازش تایمر برای شمارش زمان سپری شده انجام دهید، می توانید فقط یک تایمر را شروع کنید، زیرا شروع تایمر دوم تایمر اول را متوقف می کند. اما اگر بخواهید 2، 3 یا بیشتر از این تایمرها را همزمان اجرا کنید چه؟ یا هنوز نیاز به اسکن دوره ای وضعیت اسناد دارید؟

یک خروجی وجود دارد! پردازش انتظار باید در زمینه فرم اجرا شود تا این رشته از زمینه جهانی جدا شود. و سپس امکان راه اندازی دوره ای رویه ماژول محلی، یعنی. رویه واقع در ماژول فرم پردازش شما.

کد اجرا شده به شکل زیر خواهد بود:
کد 1C v 7.x Form.ProcessingWaiting("UpdateCounter_",1);
جایی که "UpdateCounter_"- نام رویه ماژول محلی فرم پردازش که در فواصل زمانی 1 ثانیه راه اندازی می شود. (پارامتر دوم برابر با 1)
بنابراین، در هر پردازش، می توانید پردازش انتظار خود را شروع کنید، که تا زمانی که فرم باز باشد، کار خواهد کرد.

می توان از فرم ها استفاده کردکد 1C v 8.x Form.ProcessingWaiting("ProcedureName",StartTime) ,
که در آن ProcedureName نام رویه‌ای است که بعد از StartTime ثانیه اجرا می‌شود
در خود رویه، باید Code 1C v 8.x Form.ProcessingWaiting ("ProcedureName"،0) را وارد کنید تا پردازش انتظار متوقف شود (طبیعاً پس از برآورده شدن شرایط لازم).
منبع

پلتفرم 1C به ما امکان تماس‌های رویه ناهمزمان را می‌دهد که در مواقعی می‌توان از آن برای کارهای ساده اما سرگرم‌کننده استفاده کرد. به عنوان مثال، شما می توانید هر چیزی را که دارای رنگ یا هر گونه امکان تغییر طراحی بصری است، "پلک" کنید. علاوه بر این، می‌توانید از یک مکانیسم ساده‌تر، اما کنترل‌نشده استفاده کنید و زنجیره‌ای جالب از تماس‌های ناهمزمان بسازید و رفتار ترجیحی آن را تنظیم کنید.

البته ما در اینجا در مورد رویه ConnectWaitingHandler() صحبت می کنیم.

بگذارید سینتکس رویه را به شما یادآوری کنم:

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

علاوه بر این، اگر فاصله زمانی کمتر از یک ثانیه را مشخص کنید، روش باید یک بار راه اندازی شود. اینجاست که کنترل جریان اجرا را از دست می‌دهیم و توانایی «سفارشی‌سازی» آن را از دست می‌دهیم (به صورت منعطف، به صورت جداگانه).

اما این محدودیت به راحتی قابل عبور است.

برای اینکه افکارم را در کنار درخت پخش نکنم، بلافاصله یک مثال ساده می زنم و توضیح می دهم.

فرض کنید یک سند صفحه‌گسترده روی فرم داریم و می‌خواهیم با مقداری از مساحت آن 5 بار پلک بزنیم.

/////////////////// // // ناحیه سند صفحه گسترده را 5 بار با فاصله نیم ثانیه "چک بزن" // /// //////// ///////// &در رویه مشتری منطقه چشمک زدن (فرمان) mfBlink How Many = 3; // پیشخوان. ویژگی فرم "قابل مشاهده" در رویه های کنترل کننده انتظار ConnectWaitHandler("ShowAreaSelect", 0.1, True); // همچنین می توانید مستقیماً EndProcedure &OnClient Procedure را فراخوانی کنید ShowAreaSelect() Area = Object.AP.Area(mfFirstDataRow, mfFirstDataColumn, mfLastDataRow, mfLastDataColumn); Border = New Line(LineTypeSpreadsheetDocumentCell.Double); Region.Border(Border, Border, Border, Border); // طرح کلی منطقه mfBlinkTimes = mfBlinkTimes - 1; // کاهش شمارنده ConnectWaitingHandler("RemoveArea Selection"، 0.5، True); // اتصال زنجیره فراخوانی های ناهمزمان EndProcedure &AtClient Procedure RemoveAreaSelect() Area = Object.AP.Area(mfFirstDataRow, mfFirstDataColumn, mfLastDataRow, mfLastDataColumn); Border = New Line(LineTypeSpreadsheetDocumentCell.NoLine); Region.Border(Border, Border, Border, Border); // حذف طرح کلی ناحیه اگر mfBlinkTime > 0 سپس ConnectWaitingHandler("ShowArea Selection", 0.5, True); // به تعداد سمت چپ روی شمارنده EndIf تکرار کنید. پایان رویه

شرط اصلی فقط این است که متغیر شمارنده mfHow many timesBlink از رویه هایی که به صورت ناهمزمان اجرا می کنیم "قابل مشاهده" باشد. در این حالت متغیر یک ویژگی فرم است.

یک خواننده با دقت ممکن است متوجه شود که با تشکیل چنین زنجیره‌هایی، دو پرنده را با یک سنگ می‌کشیم:

  • دور زدن محدودیت در تکرارپذیری فراخوانی های رویه با مقادیر فاصله کمتر از یک ثانیه؛
  • ما توانایی تشکیل زنجیره‌هایی با طول‌ها و پیچیدگی‌های مختلف را داریم:
    • کنترل کننده انتظار را مستقیماً در خود رویه کنترل کننده انتظار وصل کنید.
    • برای اینکه چنین رویه هایی به یکدیگر متصل شوند.
    • سازماندهی ساختار پیچیده تری از زنجیره های تماس؛
    • تنوع مدیریت تماس را به طور بی پایان پیچیده می کند (به عنوان مثال، نه تنها شمارنده های آنها را در داخل تماس ها، بلکه مقادیر فاصله، سبک های طراحی را نیز تغییر دهید (به طوری که 🌈 مانند رنگین کمان می درخشد).

با وجود سادگی روش توصیف شده، پتانسیل قابل توجهی در آن نهفته است.

در سال 2017، مدیریت رفتار برنامه با انعطاف بیشتر مدرن است.