تم إنهاء عملية المهمة في الخلفية بشكل غير طبيعي. الوظائف المجدولة والخلفية (1Cv8) مهمة الخلفية 8.3 تم إنهاء العملية المنفذة بشكل غير طبيعي

سأصف في هذه المقالة تجربتي، الصغيرة حتى الآن، في تنظيم تبادل البيانات من خلال تنسيق EnterpriseData العالمي.

في حالتي، يتم تكوين البورصة بين تكوينات "إدارة التجارة 11.2" (يشار إليها فيما بعد بـ UT) و"محاسبة المؤسسات 3.0.43" (يشار إليها فيما بعد بـ BP). التبادل في اتجاه واحد، من UT إلى BP. قبل ترقية إدارة التجارة 11.1 إلى 11.2، تم تكوين تبادل البيانات باستخدام تكوين تحويل البيانات 2.0. ومع ذلك، بعد التحول إلى "11.2"، ظهرت أخطاء في "إدارة التجارة" للمستخدمين. تم تنفيذ إجراءات تحديث قواعد الصرف، لكنها لم تسفر عن أي نتائج. أظهر المصحح أن المشكلة كانت في تبادل البيانات. تقرر إزالة إعداد تبادل البيانات في كلا التكوينين وتكوينه مرة أخرى.

يعمل كل من "إدارة التجارة" و"محاسبة المؤسسات" في إصدار خادم العميل. لقد بدأت في إعداد المزامنة مع UT. لقد قمت بذلك بطريقة تم من خلالها تحميل البيانات من UT إلى ملف. وهذا هو، المزامنة من خلال دليل الشبكة. في BP قمت بتكوين التبادل بطريقة لا يتم فيها تنزيل أي بيانات من BP.

خطأ عند استدعاء أسلوب السياق (التحقق): خطأ في التحقق من صحة بيانات XDTO:
بنية الكائن "/حساب البنك المقابل/البنك" لا تتوافق مع النوع: (http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.1)KeyPropertiesBank
التحقق من خاصية "BIK":
الشكل: العنصر
الاسم: (http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.1)BIK
يكتب:
الممتلكات المطلوبة مفقودة
الهدف: الاتفاق مع الطرف المقابل رقم ...

ولتحليل الخطأ قمت بالضغط على أيقونة "تركيب البيانات المرسلة" وفي قائمة اتفاقيات المقاولين المسجلة للإرسال وجدت الاتفاقية التي ظهر الخطأ بشأنها. فتحت الاتفاقية وتذكرت الحساب البنكي للطرف المقابل المحدد في الاتفاقية. ثم انتقلت إلى الحسابات البنكية المسجلة للشحن. وتبين أن الحساب المطلوب غير موجود في قائمة المسجلين. لقد قمت بإعادة حساب الحساب البنكي والعقد الذي به مشاكل. وبعد ذلك قمت بتسجيل الحساب البنكي المطلوب يدويًا.

حاولت مرة أخرى مزامنة البيانات من UT. هذه المرة تم تحميل البيانات بنجاح. تم إنشاء ملف XML في مجلد الشبكة الذي يحتوي على البيانات التي سيتم نقلها من UT إلى BP.

الخطوة التالية هي تحميل البيانات من الملف إلى قسم محاسبة المؤسسة. في تكوين "محاسبة المؤسسة"، قمت بالنقر فوق الزر "مزامنة"، وتم فتح نموذج معالجة مع الرسالة "تحليل البيانات قيد التقدم". وبعد قليل تغيرت الرسالة إلى "تحميل البيانات قيد التقدم". وفي الوقت نفسه أظهر المؤشر والعداد أنه تم تفريغ أكثر من 80 ألف كائن من وحدة الإمداد بالطاقة. لقد أربكني هذا، لأنني أشرت في الإعدادات إلى أنه لا ينبغي تفريغ أي شيء من مصدر الطاقة. استغرقت المعالجة وقتًا طويلاً وانتهت بالخطأ:

الحدث: تبادل البيانات
(generalModule.Long-runningOperations.Module(371)): تم إنهاء عملية عامل المهمة الخلفية بشكل غير طبيعي
RaiseException(ErrorText);

لتوطين الخطأ، حاولت تغيير إعدادات المزامنة وخيارات التشغيل لقاعدة إمداد الطاقة. نتيجة لذلك، عندما قمت بتحويل قاعدة البيانات إلى إصدار ملف، عمل النظام بشكل مناسب: تم ​​فتح نموذج لمقارنة قاعدتي بيانات. بعد مطابقة الكائنات، كانت المزامنة الأولية ناجحة. ثم قمت بتحويل قاعدة البيانات مرة أخرى إلى إصدار خادم العميل.

مع مزيد من اختبار المزامنة، كان من الضروري إجراء بعض التغييرات على قواعد تحويل الكائنات. حان الوقت لاستخدام تكوين Data Conversion 3.0. تصف تعليمات التكوين المضمنة إجراءات التشغيل. ساعدت أيضًا المقالات الموجودة على موقع ITS الإلكتروني.

ونتيجة لذلك، قمت بتحميل البيانات التالية في "Data Conversion 3.0":

  • نصوص الوحدة العامة "مدير تبادل البيانات من خلال تنسيق عالمي" من قاعدتي بيانات
  • تخطيط كلا القاعدتين
  • وصف تنسيق EnterpriseData (من أي قاعدة بيانات واحدة)
  • قواعد التحويل

بعد التنزيل قمت بفتح قواعد تحويل البيانات والكائنات والخصائص في “Data Conversion 3.0”. قمت بإجراء التغييرات التي احتاجها. ثم استخدمت زر "إلغاء تحميل وحدة مدير التبادل". تم نسخ نص الوحدة إلى الحافظة. كل ما تبقى هو إدراجه في التكوين.

بعد تجربة إعداد القواعد في "تحويل البيانات 3.0"، خلصت بنفسي إلى أنه في الحالة التي تكون فيها التغييرات التي يتم إجراؤها غير مهمة، فمن الأسهل إعداد القواعد مباشرة في تكوينات UT وBP، في الوحدة العامة “مدير تبادل البيانات من خلال التنسيق العالمي”. إذا كانت التعديلات جادة، مثل، على سبيل المثال، إضافة كائن جديد إلى التبادل، فيجب عليك استخدام التكوين " تحويل البيانات 3.0".

لقد قمت بمهمة إضافة مستند "الطلب إلى المورد" إلى خطة التبادل باستخدام " تحويل البيانات 3.0". في الإصدار القياسي من UT - BP، لم يتم تضمين هذا المستند في خطة التبادل.

دعونا نتذكر أن قواعد تسجيل الكائنات للتحميل لا تزال مهيأة في تكوين "تحويل البيانات 2.0".

هذه هي الانطباعات الأولى لمزامنة البيانات من خلال تنسيق EnterpriseData العالمي.

ملاحظة. إذا كانت لديك أسئلة أو ملاحظاتك الخاصة حول تبادل البيانات عبر التنسيق والتكوينات العامة" تحويل البيانات 3.0"، اكتب في التعليقات. سنتبادل الخبرات.

  • مزامنة البيانات
  • تنسيق بيانات المؤسسة العالمي
  • تحويل البيانات 3.0
  • تحويل البيانات 2.0
  • إدارة التجارة
  • محاسبة المؤسسة

المشكلة ليست جديدة ويتم مناقشتها من وقت لآخر في منتديات 1C المختلفة. الحل الأبسط والأكثر شيوعًا هو إعادة تشغيل خادم 1C. لسوء الحظ، هذا الخيار ليس مقبولًا دائمًا أو غير مرغوب فيه إلى حد كبير. في مثل هذه الحالة، هناك حلول أكثر حساسية.

هنا إحدى هذه الطرق في شكل تعليمات مختصرة خطوة بخطوة:

1. باستخدام وحدة تحكم إدارة خادم 1C، نبحث عن مشكلة fوظيفة جديدة في قائمة الاتصال (على سبيل المثال، بحلول وقت بدء تشغيلها، مقارنة بوقت بدء مهمة منظمة في وحدة التحكم في الوظيفة). نحددالعملية المنفذة التي يوجد بها الاتصال المعلق.

2. افتح خصائص هذه العملية وقم بوضع علامة عليها كغير مستخدمة (إذا تم استخدام عملية واحدة فقط، فيجب عليك أولاً إنشاء عملية عاملة جديدة حتى تتمكن جميع الاتصالات النشطة من إعادة الاتصال بها). نتذكر رقم PID لهذه العملية.


3. ننتظر حتى تنتقل كافة الاتصالات الحالية من العملية المعطلة إلى إحدى الاتصالات المستخدمة. في النهاية، يجب أن تبقى الاتصالات التي بها مشاكل فقط في عمليتنا، والتي نريد إزالتها.

4. على جهاز كمبيوتر مزود بخادم 1C، باستخدام مدير المهام، ابحث عن عملية rphost.exe المقابلة بواسطة معرف العملية المنفذة المعطلة واحذفها.

5 . تحسبًا لذلك، يمكنك حذف سير عمل 1C الذي قمنا بتعطيله باستخدام المسؤول. وحدة التحكم، وإذا لزم الأمر، قم بإنشاء واحدة جديدة.

6. مستعد. يمكنك تسجيل الدخول إلى وحدة التحكم في المهام والتحقق من وظائف المهمة المجدولة.

يسمح لنا بإجراء أي حسابات في النظام دون أن يلاحظها أحد من قبل المستخدم، أي في الخلفية. علاوة على ذلك، تتيح لنا هذه الآلية موازنة عملية الحساب. يمكننا حتى موازنة الإجراء الذي سيتم تنفيذه. للقيام بذلك، يجب أن تقوم مهمتنا الخلفية بتشغيل عدة وظائف خلفية أخرى. في هذه الحالة، تكون العمليات متوازية، وإذا كان لدينا نظام متعدد المعالجات ومتعدد النواة، فستعمل الخوارزمية الخاصة بنا بكفاءة. بعد إطلاق العديد من العمليات، يمكننا أن نقول للنظام أنه يحتاج إلى الانتظار حتى الانتهاء من هذه العمليات من أجل دمج النتيجة بطريقة أو بأخرى.

على سبيل المثال، في التكوينات النموذجية، أثناء عمل المستخدم، يتم تنفيذ أنواع مختلفة من مهام الخدمة الخلفية. يمكن إثبات ذلك من خلال إدخالات السجل التي تسجل حقيقة تنفيذ مثل هذه الإجراءات. علاوة على ذلك، فإن هذا لا يؤثر على عمل المستخدم بأي شكل من الأشكال، فهو ببساطة لا يلاحظه.

من الناحية المثالية، يتم تنفيذ مهمة الخلفية في إصدار خادم العميل، وفي هذه الحالة يذهب التحميل بالكامل إلى الخادم. أما بالنسبة لخيار الملف، فمن الممكن العمل في الخلفية، ولكن لديه بعض الخصائص.

هذا ما سينتجه النظام إذا لم تأخذ هذه الميزات في الاعتبار وقمت بتشغيل مهمة الخلفية في إصدار ملف قاعدة المعلومات.


مهمة الخلفية 1C لها بعض القيود.نظرًا لأنه يعمل على جانب الخادم، فلا توجد إمكانية للعمل التفاعلي مع المستخدم. على سبيل المثال، لا يمكنك عرض رسالة أو أي معلومات على الإطلاق. يجب تخزين كل هذه البيانات داخل قاعدة المعلومات ومعالجتها بطريقة ما.
من خلال الاتصال بمساعد بناء الجملة، يمكنك الحصول على معلومات أكثر تفصيلاً حول وظائف الخلفية 1C. وتجدر الإشارة هنا إلى أن هذا الكائن هو برنامج بحت ولا يتم تخزينه في قاعدة البيانات بأي شكل من الأشكال. أي أننا نقوم بإنشاء مثيل للفئة وتهيئة الخصائص وبدء تشغيلها للتنفيذ.

ما الأدوات التي لدينا لإدارة وظائف الخلفية؟ هذا المرفق هو كائن بيانات التعريف "مدير مهام الخلفية". هذا الكائن لديه طريقة "يجري"باستخدام هذه الطريقة، يتم تشغيل مهمة الخلفية.

لديها المعلمات التالية:
"اسم الأسلوب"- اسم الإجراء أو الوظيفة المراد تنفيذها، ويجب أن يكون إجراء أو وظيفة في سياق الخادم؛

"خيارات"- مجموعة من المعلمات، يجب أن يتوافق عدد عناصرها مع عدد معلمات الإجراء/الوظيفة المحددة في المعلمة "اسم الأسلوب";

"مفتاح"- مفتاح تفرد معين، وهو عبارة عن سطر يفهم النظام من خلاله ما إذا كانت هناك حاجة لبدء مهمة في الخلفية أو ما إذا كانت هذه المهمة قيد التشغيل بالفعل؛

"اسم"- هنا يمكنك تحديد وصف عشوائي لطريقتنا.

قيمة الإرجاع هي كائن "مهمة في الخلفية"، يحتوي على اسم الطريقة الحالية، والمفتاح الحالي، والعديد من الخصائص والأساليب الأخرى. إحدى هذه الطرق هي الطريقة "انتظر اكتمل". والغرض منه هو أن نتمكن من إخبار النظام بعدم القيام بأي شيء حتى تكتمل مهمة الخلفية.

مهمة الخلفية 1C 8.2، 8.3 - مثال للاستخدام

دعونا نعطي مثالاً على العمل مع وظائف الخلفية 1C. أولاً، سنقوم بإنشاء خوارزمية بسيطة تقوم بتحميل نظام 1C لفترة وجيزة بحيث لا يمكننا فعل أي شيء في هذا الوقت.

لهذا:

1. لنقم بإنشاء وحدة مشتركة "معالجات المهام في الخلفية"والتي سيتم تجميعها على جانب الخادم؛


2. سنصف إجراءات التصدير فيه "ProduceBackgroundCalculation (المعلمة)"، والذي يأخذ معلمة واحدة من نوع السلسلة؛

الإجراء PerformanceBackgroundCalculation(Parameter) ExportStartTime = CurrentDate(); بينما CurrentDate() - وقت البدء< = 6 Цикл КонецЦикла ; КонецПроцедуры Процедура КнНажатие() ОбработчикиФоновыхЗаданий. ПроизветиФоновоеВычисление("بعض المعلمات") ; نهاية الإجراء
مستعد. الآن، عند بدء المعالجة والضغط على الزر، يتجمد النظام لعدة ثوانٍ، لا يمكن خلالها فعل أي شيء. هذا هو بالضبط ما يتعين علينا القيام به.

الآن سوف نتأكد من تنفيذ هذه الحسابات في الخلفية، أي أن مهمة الخلفية 1C 8.2، 8.3 يتم تنفيذها، لكنها لا تتداخل معنا.

لهذا:

1. أثناء المعالجة، في حدث النقر على الزر، اكتب الكود التالي.

الإجراء KnPress() Parameters = New Array; خيارات. يضيف( "بعض المعلمات") ; مهمة في الخلفية. يجري ( "معالجات مهام الخلفية. إجراء حساب الخلفية"المعلمات، معرف فريد جديد، "امتحان") ; نهاية الإجراء

نقوم هنا بتمرير اسم إجراء الوحدة الشائعة كمعلمة أولى، ومجموعة من المعلمات كمعلمة ثانية. يجب أن يتم تمرير المعلمة الثالثة مفتاحًا فريدًا، ويجب أن يتم تمرير المعلمة الرابعة إلى بعض وصف الإجراء الخاص بنا.

مفهوم البرمجة غير المتزامنة

مفهوم البرمجة غير المتزامنة هو أن نتيجة الوظيفة ليست متاحة على الفور، ولكن بعد مرور بعض الوقت في شكل بعض الاستدعاءات غير المتزامنة (انتهاك الترتيب الطبيعي للتنفيذ).

أولئك. الفكرة الرئيسية للبرمجة غير المتزامنة هي إصدار استدعاءات الأساليب الفردية ومواصلة القيام بأعمال أخرى بالتوازي دون انتظار انتهاء الاستدعاءات.

بعض الأساليب التي تقلل من احتمالية الاستثناءات لا تتطلب نهجا غير متزامن، ولكن البعض الآخر يتطلب ذلك في بداية التطوير.

كما يتبين من الرسوم البيانية، لا يوجد معامل لإجراءات المستخدم التفاعلية المفيدة مع نموذج برمجة متزامن، حيث يقوم النظام بحظر واجهة المستخدم، بينما مع النموذج غير المتزامن، يستمر المستخدم في العمل بنشاط في النظام.

عند التشغيل بشكل متزامن، يحتوي التطبيق على مؤشر ترابط واحد فقط. باستخدام نموذج البرمجة غير المتزامنة، يمكنك تشغيل عدة سلاسل رسائل بالتوازي والتفاعل مع إجراءات المستخدم الجديدة أثناء تشغيلها. بمجرد تنفيذ الخيط n، يمكنك عرض النتيجة على الشاشة.

مهام الخلفية في 1C:Enterprise 8

في 1C:Enterprise 8، تم تصميم وظائف الخلفية لتنفيذ مهام التطبيق بشكل غير متزامن. يمكنهم إنشاء وظائف خلفية فرعية، على سبيل المثال، لموازاة الحسابات المعقدة عبر خوادم عمل مختلفة للمجموعة في وضع تشغيل خادم العميل.

من الممكن تقييد تنفيذ مهام الخلفية التي لها نفس الأساليب بناءً على معيار تطبيق محدد. يمكن إنشاء وظائف الخلفية وإدارتها بشكل برمجي من أي اتصال مستخدم بقاعدة معلومات النظام. تعمل مهمة الخلفية نيابة عن المستخدم الذي قام بإنشائها.

تعمل آلية المهمة في كل من وضعي تشغيل الخادم العميل والملف، ولكن تختلف قدرات إدارة المهام وتنفيذها في كلا الإصدارين إلى حد ما.

خيار خادم العميل

في إصدار خادم العميل، يتم تنفيذ جدولة المهام بواسطة برنامج جدولة المهام، الموجود فعليًا في مدير المجموعة.

يتحقق المجدول بشكل دوري لمعرفة ما إذا كان قد تم تلقي أي طلبات لتشغيل وظائف الخلفية. إذا كانت هناك وظائف يجب تنفيذها، يحدد المجدول العمليات المنفذة الأقل تحميلًا في المجموعة ويعين لكل منها مهمته للتنفيذ بشكل تسلسلي. وبالتالي، يمكن لنفس العملية المنفذة تنفيذ وظائف متعددة بالتوازي. بعد استلام مهمة من خلال عملية عاملة، تقوم العملية المنفذة بإنشاء اتصال بقاعدة المعلومات وتنفيذ المهمة ضمن هذا الاتصال. بعد اكتمال المهمة، تقوم العملية المنفذة بإعلام المجدول ما إذا كانت المهمة قد اكتملت بنجاح أو دون جدوى.

خيار الملف

بدءًا من الإصدار 8.3.3.641 من النظام الأساسي، قام المطورون بتبسيط العمل بشكل كبير باستخدام وظائف الخلفية في إصدار الملف.

في السابق، لتنفيذ المهام تلقائيًا، كان من الضروري إطلاق جلسة 1C:Enterprise منفصلة وإضافية، تُستخدم كبرنامج جدولة المهام. وفي هذه الجلسة كان من الضروري تنفيذ طريقة اللغة المضمنة بشكل دوري تنفيذ المهام ().كان هذا الأسلوب مرهقًا للغاية وغير مريح ويحد بشكل كبير من استخدام الخلفية والمهام الروتينية في إصدار ملف العمل.

الآن أصبح كل شيء أسهل بكثير. إذا بدأ عميل رفيع أو سميك، وكذلك إذا كان خادم الويب لديه اتصالات العميل، فسيتم تشغيل مؤشر ترابط آخر تلقائيًا في كل من هذه التطبيقات مع اتصال بقاعدة البيانات. تشارك هذه المواضيع في أداء المهام الخلفية والروتينية.

يؤدي كل تطبيق من التطبيقات المدرجة مهام الخلفية الخاصة به. إذا قام أحد التطبيقات ببدء العديد من المهام الخلفية، فسيتم تنفيذها بالتسلسل، بالترتيب الذي تم استلامها به.

العيب الواضح لوظائف الخلفية 1C: نظرًا لأنه يتم تنفيذها من جانب الخادم، فلا توجد إمكانية للعمل التفاعلي مع المستخدم (على سبيل المثال، من المستحيل عرض رسالة أو بعض المعلومات الأخرى؛ يجب تخزين كل هذه البيانات داخل قاعدة المعلومات ومعالجتها بشكل أكبر في بطريقة ما).

تجدر الإشارة إلى أن وظائف الخلفية هي كائنات برمجية بحتة ولا يمكن تخزينها في قاعدة البيانات. أي أنه لا يمكننا سوى إنشاء مثيل للفئة وتهيئة خصائصها وتشغيلها للتنفيذ.

مثال على تنفيذ التعليمات البرمجية غير المتزامنة في 1C:Enterprise 8

"إن كتابة البرامج التي تصل فيها نتيجة استدعاء دالة غير معروفة تكون أصعب بكثير من البرامج العادية. المكالمات المتداخلة، ومعالجة الأخطاء، والتحكم في ما يحدث - كل شيء يصبح أكثر تعقيدًا،" فقط أولئك الذين لا يعرفون كيفية استخدام إمكانيات النظام الأساسي بشكل صحيح سيقولون هذا، ولكن ليس نحن!

دعونا نوضح بساطة وأناقة تنفيذ التعليمات البرمجية غير المتزامنة في 1C:Enterprise 8!

الخطوة 1.لنقم بإنشاء نظام جديد لأمن المعلومات لتطوير التكوين

الخطوة 2.في التكوين سنضيف الوحدة العامة "المعالجات غير المتزامنة"

لماذا أضفنا وحدة مشتركة؟ كل شيء بسيط هنا: لتنفيذ عمليات غير متزامنة في 1C:Enterprise 8، يتم استخدام وظائف الخلفية التي لها مديرها الخاص - "BackgroundTask Manager". يحتوي هذا الكائن على طريقة "تشغيل" يتم من خلالها إطلاق مهمة الخلفية.

دعنا ننتقل إلى مساعد بناء الجملة.

لذلك سوف نحتاج إلى وحدة مشتركة.

الخطوه 3.في الوحدة العامة "المعالجات غير المتزامنة" سنضيف إجراء التصدير OurLongOperation()

الإجراء OurLongOperation(Duration) Export // محاكاة إجراء طويل المدى (المدة ثانية). OperationStartDate = CurrentDate(); بينما CurrentDate() - تاريخ بدء العملية< Длительность Цикл КонецЦикла; КонецПроцедуры

الخطوة 4.أضف معالجة "مفهوم البرمجة غير المتزامنة" إلى التكوين (يمكنك إنشاء معالجة خارجية)

أضف سمة واحدة إلى النموذج:

المدة (العدد)

وفريقين

تنفيذ عملية طويلة؛

إجراء عملية طويلة الأمد بشكل غير متزامن.

الخطوة 5.وفقًا لمساعد بناء الجملة، املأ وحدة النموذج

&في إجراء العميل تنفيذ Long-RunningOperation(Command) ExecuteLong-RunningOperationOnServer(); EndProcedure &OnServer الإجراء ExecuteLongOperationOnServer() AsynchronousHandlers.OURLongOperation(Duration); نهاية الإجراء &في إجراء العميل إجراء عملية طويلة الأمد بشكل غير متزامن (الأمر) إجراء عملية طويلة الأمد بشكل غير متزامن على الخادم ()؛ نهاية الإجراء &في إجراء الخادم تنفيذ عملية طويلة الأمد بشكل غير متزامن على Server() Parameters = New Array; Parameters.Add(Duration); الخلفيةTasks.Execute("AsynchronousHandlers.OURLongOperation"، المعلمات، معرف فريد جديد، "مثال لمفهوم البرمجة غير المتزامنة"); نهاية الإجراء

الخطوة 6.دعونا نبدأ والتحقق!

نتيجة:

إذا نقرنا على زر "إجراء عملية طويلة"، فسيتم حظر واجهة المستخدم لمدة "المدة" للثواني؛

إذا نقرنا على زر "إجراء عملية طويلة الأمد بشكل غير متزامن"، فلن يتم حظر واجهة المستخدم ويتم تنفيذ رمز البرنامج بالتوازي.

يمكننا التحقق من تنفيذ كود البرنامج بشكل غير متزامن من خلال النظر في السجل.

يمكننا تصحيح كود البرنامج الذي يعمل في "الخلفية" إذا قمنا بتعيين الخاصية المناسبة في معلمات التصحيح.

مثال على تنفيذ التعليمات البرمجية غير المتزامنة في 1C:Enterprise 8 باستخدام BSP

لنفكر في مثال على تنفيذ مفهوم البرمجة غير المتزامنة في 1C:Enterprise 8 في BSP باستخدام مثال معالجة "الشؤون الحالية".

المنطق هو كما يلي: عند إطلاق البرنامج، تتم تهيئة منطقة العمل لصفحة البداية، حيث يمكن عرض نموذج معالجة "الشؤون الحالية". يتم ملء هذا النموذج بالشؤون الحالية للمستخدم، ويستغرق ملئه بعض الوقت. إذا لم يكن لدى المطورين القدرة على تنفيذ التعليمات البرمجية بشكل غير متزامن، فسيتم حظر واجهة المستخدم طوال وقت ملء نموذج المعالجة!

دعونا نحلل رمز البرنامج للنموذج.

حدث النموذج "عندما يستدعي CreatedOnServer" إجراء "RunBackgroundTask" - وهذا ما نحتاج إليه.

دون تشتيت انتباهك بالفروق الدقيقة، دعونا نحلل هذا الإجراء

وهنا نرى أنه يتم استخدام مدير المهام الخلفية وطريقة "التشغيل" الخاصة به. لاحظ أن المطورين يقومون بتخزين معرف فريد لمهمة الخلفية.

للقيام بذلك، يستخدم المطورون هذه الطريقة كونيكت ويت هاندلر (<ИмяПроцедуры>, <Интервал>, <Однократно>).



في إجراء متصل Connectable_CheckTaskComplete()يقوم المطورون باستدعاء الوظيفة اكتملت المهمة (معرف المهمة)


تتحقق هذه الوظيفة من تنفيذ مهمة الخلفية بواسطة المعرف.

تجدر الإشارة إلى أن BSP قام بتطوير وحدات عامة لدعم عمليات الخادم طويلة المدى.

وبالتالي، فإن مفهوم البرمجة غير المتزامنة في 1C:Enterprise 8 يزيد قليلاً من تعقيد حل المشكلات للمطور، ولكنه يحسن بشكل كبير وظائف البرنامج من وجهة نظر المستخدم.