قائمة طعام
مجاني
التسجيل
الصفحة الرئيسية  /  التثبيت والتكوين/ الأعمال الروتينية والخلفية (1Cv8). تم إنهاء عملية وظيفة الخلفية بشكل غير طبيعي تم إنهاء عملية وظيفة الخلفية 8.3

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

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

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

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

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

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

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

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

الحدث: تبادل البيانات
(SharedModule.LongedOperations.Module (371)): تم إنهاء سير عمل وظيفة الخلفية بشكل غير طبيعي
CallException (ErrorText) ؛

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

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

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

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

بعد التحميل ، فتحت قواعد تحويل البيانات والكائنات والخصائص في "تحويل البيانات 3.0". أجرى التعديلات التي احتاجها. ثم استخدمت الزر "Unload exchange manager module". تم نسخ نص الوحدة إلى الحافظة. يبقى فقط لإدخاله في التكوين.

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

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

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

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

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

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

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

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

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

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


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

ما هي الأدوات التي لدينا لإدارة وظائف الخلفية؟ هذا المرفق هو كائن بيانات وصفية "BackdropManager"... هذا الكائن له طريقة "يركض"، بهذه الطريقة ، يتم بدء وظيفة الخلفية.

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

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

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

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

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

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

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

من أجل هذا:

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


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

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

سنضمن الآن إجراء هذه الحسابات في الخلفية ، أي ، بحيث يتم تنفيذ مهمة الخلفية 1C 8.2 ، 8.3 ، لكنها لا تزعجنا.

من أجل هذا:

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

الإجراء KnNazenie () معلمات = صفيف جديد ؛ خيارات. يضيف( "بعض المعلمات") ؛ وظيفة الخلفية. ينفذ ( "معالجات الوظائف في الخلفية. الإنتاج والحساب الخلفي"، معلمات، معرف فريد جديد، "اختبار") ؛ نهاية الإجراء

هنا ، كمعامل أول ، نقوم بتمرير اسم إجراء الوحدة العامة ، والثاني - مجموعة من المعلمات. المعلمة الثالثة هي مفتاح فريد والرابع هو وصف لإجراءاتنا.

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

خيار الملف

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

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

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

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

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

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

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

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

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

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

الخطوة 2.في التكوين ، أضف وحدة نمطية شائعة "AsynchronousHandlers"

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

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

وبالتالي ، نحن بحاجة إلى وحدة مشتركة.

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

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

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

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

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

وفريقان

قم بإجراء عملية طويلة ؛

اكسيكوتيلونجوببيريشن غير متزامن.

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

& في إجراء العميل ExecuteLongOperation (Command) ExecuteLongOperationAtServer ()؛ EndProcedure & AtServer Procedure ExecuteLongServerOperation () AsynchronousHandlers.OurLongOperation (Duration)؛ EndProcedure & OnClient Procedure ExecuteLongOperationAsynchronically (Command) ExecuteLongOperationAsynchronouslyAtServer ()؛ EndProcedure & AtServer Procedure ExecuteLongOperationAsynchronouslyOnServer () Parameters = New Array؛ Options.Add (Duration) ؛ BackgroundJobs.Run ("AsynchronousHandlers.OurLongOperation" ، المعلمات ، New UniqueIdentifier ، "مثال على مفهوم البرمجة غير المتزامن") ؛ نهاية الإجراء

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

نتيجة:

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

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

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

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

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

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

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

دعنا نحلل كود البرنامج في النموذج.

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

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

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

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



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


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

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

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

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

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

أولاً ، دعنا نتعرف على ما يقصدونه وما هو اختلافهم:

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

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

افتح التكوين وأضف وظيفة مجدولة.

ضبط الخصائص

لنأخذ في الاعتبار أهم المعلمات التي يجب ملؤها في خصائصها.

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

جدولة الإعداد

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

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

منع الوظائف المجدولة

قم بتشغيل الأداة المساعدة القياسية "إدارة خوادم 1C Enterprise" وافتح خصائص قاعدة المعلومات حيث أنشأت المهمة المجدولة (لإصدارات خادم العميل من 1C).

في النافذة التي تفتح (بعد إدخال معلومات تسجيل الدخول وكلمة المرور للوصول إلى الوسيط المعرّف) ، تحقق من عدم تعيين العلامة الموجودة في العنصر "تم تمكين حظر المهام المجدولة". إذا كنت تواجه موقفًا لا تنجح فيه المهمة ، فتحقق من هذا الإعداد أولاً.

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

الخلفية والمهام المجدولة في وضع الملف

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

في هذه الحالة ، يتم تنشيط المهام المجدولة باستخدام طريقة "RunJobProcessing ()".

يمكنك أيضًا استخدام البناء التالي:

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

تتبع الأخطاء في وظائف الخلفية

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

سيعرض السجل جميع الإدخالات التي تطابق اختيارك ، مع تعليق يشير إلى سبب الخطأ.