قم بإعداد مهمة روتينية 1s. المهام الروتينية والخلفية (1Cv8). إضافة مهمة مجدولة

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

القابلية للتطبيق

تتناول المقالة إصدار النظام الأساسي 1C:Enterprise 8.3.4.437. تم تحديث جميع الوظائف الموضحة في المقالة إلى الإصدار 8.3.11.

ابتكارات أخرى في 1C:Enterprise 8.3

دعنا نستمر في التعرف على ابتكارات منصة 1C:Enterprise 8.3.

الخلفية والمهام الروتينية في قاعدة معلومات الملف

في العديد من تكوينات النظام الأساسي النموذجي 8.2 كان هناك ثابت يشير إلى المستخدم الذي تم تنفيذ المهام من خلاله في إصدار الملف.

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

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

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

إذا كان هذا هو ملف IB ثم
=
Constants.UserForExecutingRoutineTasksInFileVariant.Get();
لو chValueVariable("glCurrentUser") =
UserTo ExecuteTaskReglثم
// مع فاصل زمني من الثواني نسمي الإجراء الخاص بالعمل مع المهام الروتينية
SupportRegularTaskForFileVersion();
IntervalForPoll=
Constants.IntervalForPollingRoutineTasksInFileVariant.Get();
لو IntervalForPoll= غير محدد
أو IntervalForPoll= 0 ثم
IntervalForPoll= 60 ;
إنهاء إذا ؛
ConnectWaitHandler("دعم RoutineTaskForFileVersion",
IntervalForPoll);
إنهاء إذا ؛
إنهاء إذا ؛

على المنصة 8.3 تنفيذ عمل الخلفية والمهام الروتينية في قاعدة معلومات الملف دون استخدام استدعاء أسلوب السياق العام تنفيذ المهام ().

يتم تنفيذ المهام الخلفية والمهام الروتينية مباشرة في أحد تطبيقات العميل (العميل الرفيع والسميك) أو عن طريق ملحق خادم الويب.

يتم تنفيذ مهمة الخلفية التي بدأتها الجلسة بواسطة نفس تطبيق العميل الذي بدأها.

يتم تنفيذ وظائف الخلفية بشكل تسلسلي، أي. في تطبيق عميل واحد، يمكن تنفيذ مهمة خلفية واحدة فقط (بما في ذلك المهام الروتينية) في وقت واحد.

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

يتم تنفيذ المهام الروتينية بواسطة تطبيق العميل الأول في أمر بدء التشغيل، وهو غير محظور تنفيذ المهام الروتينية (لمنع الجلسة، يجب بدء الجلسة باستخدام معلمة سطر الأوامر /AllowExecuteScheduledJobs -إيقاف).

عند انتهاء تلك الجلسة، ينتقل التنفيذ إلى أي من الجلسات الجارية المتبقية.

إذا كان سطر التشغيل لتطبيق العميل يشير بوضوح إلى الحاجة إلى تشغيل المهام الروتينية (يشار إليه في سطر الأوامر /AllowExecuteScheduledJobs -Force)، ثم يبدأ تنفيذ المهام الروتينية عليه، بغض النظر عن وجود جلسات أخرى.

تتم معالجة المهام الروتينية مرة واحدة كل 60 ثانية.

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

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

وفيما يلي الكود الذي يوضح ما ورد أعلاه:

للتكبير، انقر على الصورة.

حساب المجاميع الاختبارية

تتضمن المنصة الآن آليات لحساب المجاميع الاختبارية للبيانات.

دعونا نتذكر أن المجموع الاختباري (التجزئة) هو قيمة يتم حسابها من مجموعة من البيانات من خلال تطبيق خوارزمية معينة وتستخدم للتحقق من سلامة البيانات أثناء النقل أو التخزين.

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

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

هذا الكائن له طريقتان: يضيف()و اضف ملف()، والتي تقوم بتحديث مجموع التجزئة مع مراعاة البيانات التي تم تمريرها في المعلمات.

منصة 8.3.4.437 يدعم حساب وظائف التجزئة التالية: اتفاقية حقوق الطفل32, MD5, SHA1, SHA256. لكن الوظائف SHA1و SHA256غير مدعومة على النظام الأساسي للجوال.

دعونا نلقي نظرة على مثال بسيط. من المفترض أن يوجد ملف على الخادم في دليل البرنامج " ragent.exe" بحاجة لحساب MD5-مجموع لهذا الملف.

للقيام بذلك، سنقوم بإنشاء معالجة خارجية، على النموذج الذي سنضع الأمر احسب. يحتوي المعالج على الكود التالي:

&OnClient
حساب الإجراء (الأمر)
النتيجة = CalculateOnServer();
تقرير(سلسلة(نتيجة));
نهاية الإجراء
&على الخادم
وظيفة CalculateOnServer()
التجزئة = جديد HashingData(HashFunction.MD5);
Hash.AddFile(برامج الكتالوج() + "ragent.exe")؛
إرجاع Hash.HashSum؛
وظيفة النهاية

في منصة الإصدار 8.3.10+ في الطريقة يضيف()هدف HashingDataأصبح من الممكن استخدام دفق من البيانات الثنائية، مما أدى إلى تبسيط استخدامها بشكل كبير في حل المشكلات التطبيقية المختلفة لتحديث مبالغ التجزئة.

العمل مع الإصدارات المحمية من البروتوكولات SMTP/POP3

على المنصة 8.3 أصبح من الممكن استخدام الإصدارات المحمية من البروتوكولات SMTP/POP3(هناك مصطلحات سمتبس/بوب3Sأو سسلسمتب/SSLPOP3).

للكائن InternetMailProfileخصائص جديدة تم تنفيذها:

  • استخدم سلسسمتب;
  • استخدمSSLPOP3;
  • SecureAuthenticationSMTP فقط;
  • المصادقة الآمنة عبر POP3 فقط.

ملكيات مصادقة SMTPو مصادقة POP3هدف InternetMailProfile، وكذلك التحويلات طريقة مصادقة SMTPو طريقة المصادقة POP3لا يُنصح باستخدامها - فهي مدعومة من أجل التوافق.

باستخدام بروتوكول آمن SMTPSيجعل من الممكن إرسال البريد من 1Cباستخدام صندوق البريد جوجل.

لنلقي نظرة على مثال. في النموذج، سنضع حقولًا لإدخال موضوع الرسالة وعنوان المستلم، ولإدخال نص الرسالة - حقل مستند منسق.

للتكبير، انقر على الصورة.

عندما تضغط على الزر يرسلسيتم تنفيذ الكود التالي:

&OnClient
إجراء إرسال (أمر) البريد = New InternetMail؛ الملف الشخصي = جديد InternetMailProfile;
Profile.SMTPServerAddress= "smtp.googlemail.com" ;
الملف الشخصي.UserSMTP= “[البريد الإلكتروني محمي]” ;
الملف الشخصي.كلمة المرورSMTP= "كلمة المرور"؛
الملف الشخصي. استخدمSSLSMTP= صحيح؛
Profile.SMTPPort = 465 ; محاولة
البريد. الاتصال(حساب تعريفي)؛
استثناء
تقرير(وصف الخطأ());
يعود ؛
محاولة النهاية ; MailMessageText= “” ;
المرفقات = الهيكل الجديد ;
Text.GetHTML(MailMessageText، المرفقات)؛ رسالة بريدية= جديد رسالة بريد الإنترنت;
MailMessage.Recipients.Add(إلى من )؛
MailMessage.Subject= الموضوع؛
MailMessage.Texts.Add(MailMessageText,
MailMessageTextType.HTML); البريد.إرسال ( رسالة بريدية); البريد. قطع الاتصال();
نهاية الإجراء

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

في الإصدار 8.3.9، تغير هذا السلوك، والآن تقوم طريقة Send() بإرجاع تطابق مفتاحه هو المستلم وقيمته هي التشخيص من خادم البريد. يتيح لك ذلك تحديد أسباب الفشل في إرسال رسالة بريد إلكتروني إلى كل مستلم بدقة. في وضع التوافق مع الإصدار 8.3.8، لم يتغير السلوك.

الطباعة على الوجهين

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

على المنصة 8.3 أصبح من الممكن التحكم في الطباعة المزدوجة لمستند جدول بيانات ومخطط رسومي (من اللغة المضمنة وبشكل تفاعلي) ومستند نصي (تفاعلي فقط).

ظهرت تعدادات النظام باللغة المضمنة:

  • نوع الطباعة على الوجهين(لا شيء، FlipUp، FlipLeft)؛
  • (تلقائي، MirrorTop، MirrorLeft، لا تستخدم).

وبالنسبة للكائنات TabularDocumentو مخطط الجرافيكظهرت خصائص الطباعة على الوجهينو تناوب ترتيبات الصفحة، والتي يمكنك من خلالها تغيير تخطيط الصفحات المطبوعة.

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

أصبح مربع الحوار الخاص بنشر قاعدة المعلومات على خادم الويب أكثر فاعلية. يتيح لك النشر الآن من أداة التهيئة ضبط جميع معلمات الملف default.vrd.

بالنسبة لمربع الحوار الخاص بنشر عميل الويب وخدمات الويب من خلال أداة التهيئة، يتم تنفيذ ما يلي:

  • القدرة على التحكم في توفر خدمات الويب بشكل افتراضي (السمة pointEnableCommonعنصر ws);
  • القدرة على التحكم في تنفيذ مهام الخلفية في إصدار الملف (attribute السماح بتنفيذ المهام المجدولةعنصر ws).

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

وإلا، فسيتم وضع علامة على خدمات الويب على أنها غير قابلة للنشر. هذه العلامة تتوافق مع السمة pointEnableCommonعنصر wsفي الملف default.vrd، مخصص لإعداد عميل الويب وخدمات الويب.

يصف pointEnableCommonيعد عنصر WS مسؤولاً عن إمكانية استخدام خدمات الويب في قاعدة المعلومات هذه والتي يتم نشرها دون الإشارة بوضوح إلى إذن الاستخدام (السمة يُمكَِنعنصر نقطة).

إذا كانت السمة لها قيمة حقيقي، ثم جميع خدمات الويب التي لم يتم تحديد قيمة السمة لها بشكل صريح يُمكَِنعنصر نقطة، سيتم السماح باستخدامها.

وبخلاف ذلك، سيتم حظر استخدام خدمات الويب هذه.

إعدادات "وظائف الخلفية في وضع الملف"يطابق السمة السماح بتنفيذ المهام المجدولةعنصر ws في الملف default.vrd.

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

يمكن أن تأخذ السمة القيم التالية:

  • عن– في هذه الحالة، لن يقوم ملحق خادم الويب بتنفيذ المهام الروتينية. سيتم تنفيذ المهام الروتينية بواسطة تطبيق العميل (إن وجد)، والذي يتصل بقاعدة المعلومات مباشرة، دون استخدام خادم الويب.
  • قوة- في هذه الحالة، سيقوم ملحق خادم الويب بتنفيذ مهام روتينية.
    إذا لم يتم تحديد قيمة هذه السمة، فسيتم تنفيذ المهام الروتينية بواسطة التطبيق الذي سيتم من خلاله إجراء الاتصال الأول بقاعدة المعلومات.

أصبحت نافذة النشر على خدمة الويب أكثر ملاءمة ومريحة في الإصدار الحالي من النظام الأساسي. الآن يتم وضع المعلمات التي تصف مصادقة OpenID في علامة تبويب منفصلة.

ترقيم كائنات قاعدة المعلومات

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

تمت إضافة إشارة إلى الرقم أو الرمز غير الفريد في نص الرسالة حول انتهاك تفرد الرقم أو الرمز.

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

الوظائف الإجمالية للغة التعبير لنظام تكوين البيانات

يتم تنفيذ وظائف تجميعية جديدة بلغة التعبير لنظام تكوين البيانات:

  • كل()؛
  • أي()؛
  • StandardDeviationofPopulation();
  • StandardSampleDeviation();
  • عينات التباين();
  • تباين السكان();
  • التغاير السكاني();
  • SampleCovariance();
  • علاقة()؛
  • RegressionSlope();
  • RegressionSegment();
  • RegressionCount();
  • RegressionR2();
  • RegressionAverageX();
  • RegressionAverageY();
  • RegressionAverageSXX();
  • RegressionAverageSYY();
  • انحدارمتوسطSXY().

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

للتكبير، انقر على الصورة.

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

من المثير للاهتمام أيضًا ميزة جديدة التصنيفABC(). ستكون نتيجة الدالة رقم الفئة، بدءًا من 1 (1 يتوافق مع الفئة A، و2 للفئة B، و3 للفئة C، وما إلى ذلك).

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

يختار
استهلاك المنتجProducts.Product,
استهلاك المنتجProducts.Quantity
من
وثيقة.استهلاك البضائع.البضائعكيف منتجات استهلاك المنتج

دعونا نحدد حقلاً محسوبًا جديدًا فصل:

للتكبير، انقر على الصورة.

لنقم بتكوين الموارد على النحو التالي:

للتكبير، انقر على الصورة.

في وضع المستخدم، يبدو التقرير كما يلي:

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

بالإضافة إلى ذلك، لا تنس دورتنا المنفصلة التطوير المهني للتقارير في 1C 8.3 حول نظام تكوين البيانات، والذي يقسم إلى الذرة جميع التفاصيل الدقيقة والمزالق عند العمل مع هذه الآلية. تحقق من العرض لنفسك.

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

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

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

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

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

  • تحدث "الفرامل" باستمرار، بتردد معين
  • يبطئ فقط لمستخدم واحد
  • "يبطئ" في أي مكان عمل

لتأكيد تخميناتنا، دعونا نلقي نظرة على إعدادات المحاسبة:

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

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

تطبيق منتظم

في التكوينات المستندة إلى تطبيق عادي، لا توجد أداة واحدة لإدارة المهام الروتينية. ويرجع ذلك إلى حد كبير إلى حقيقة أنه في وقت التطوير الأولي، كان مفهوم المهام الروتينية نفسه ضعيفًا إلى حد ما.

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

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

في هذه الحالة، يجب عليك استخدام المعالجة الخارجية ConsoleTasks (JobsConsole)، والذي تم تضمينه في مجموعة المعالجة القياسية على قرص ITS. توفر المعالجة واجهة واحدة لجميع المهام وتسمح بتكوينها مركزيًا، بالإضافة إلى التحكم في المهام قيد التشغيل حاليًا.

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

التطبيق المدار

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

يوجد عنصر منفصل في القائمة لإدارة المهام الروتينية الإدارة - الدعم والصيانة.

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

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

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

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

تحديث مؤشر PPD- واحدة من أكثر العمليات استهلاكًا للموارد، ويتم إجراؤها مرة واحدة في الدقيقة بشكل افتراضي.

الآن دعونا نفكر في عدد المرات التي تتم فيها إضافة أو تحديث المعلومات التي تبحث عنها غالبًا في قاعدة البيانات؟ من الواضح أنه ليس كل دقيقة، لذلك سيكون تحديث الفهرس كافيًا بشكل أقل تكرارًا: مرة واحدة كل ساعة، أو مرة واحدة يوميًا، أو حتى مرة واحدة في الأسبوع.

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

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

  • العلامات:

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

إجراء تشغيل خوارزمية عشوائية في وظيفة الخلفية

لتشغيل الخوارزمية الخاصة بنا في مهمة خلفية منفصلة، ​​سوف نستخدم هذه الطريقة "يجري()"مدير الوظيفة الخلفية: بناء الجملة:ينفذ(<ИмяМетода>, <Параметры>, <Ключ>, <Наименование>)
  • <ИмяМетода>(مطلوب)؛ النوع: سلسلة
    اسم الإجراء الذي تم تصديره أو وظيفة الوحدة النمطية العامة غير العامة التي يمكن تنفيذها على الخادم، في النموذج ModuleName.MethodName.
  • <Параметры>(خياري)؛ النوع: مصفوفة
    تم تمرير مجموعة من المعلمات إلى الأسلوب. يجب أن يتطابق عدد المعلمات وأنواعها مع معلمات الطريقة. (مزيد من التفاصيل في مساعد بناء الجملة)
  • <Ключ>(خياري)؛ النوع: سلسلة
    إذا تم تحديد مفتاح، فيجب أن يكون فريدًا بين مفاتيح مهام الخلفية النشطة التي لها نفس اسم الأسلوب مثل مهمة الخلفية.
  • <Наименование>(خياري)؛ النوع: سلسلة.
    وصف المهمة.

الإجراء لتشغيل وظيفة الخلفية

في حالتنا، سوف نستخدم إجراء التصدير الموجود في الوحدة العامة "جنرال مودولسيرفر"(أعتقد أنه من غير الضروري توضيح أن الوحدة يجب أن تكون من جانب الخادم) إجراء كتابة معلومات حول المنتجات في الخلفية (معلمة BackgroundTask) طلب بيانات التصدير = طلب جديد ("SELECT | Products.Link AS Nomenclature | FROM | Directory. Nomenclature" منتجات AS"); جلب = DataRequest.Execute().Select(); while Selection.Next() MH Cycle = Information Registers.Product Data.CreateRecordManager(); MZ.Period = CurrentDate(); MZ.Nomenclature = Sampling.Nomenclature; MH.Information =backgroundTaskParameter; MZ.Write(); EndCycle; نهاية الإجراء لتوضيح تشغيل مهمة الخلفية، سنقوم بإنشاء إدخالات في سجل المعلومات الخاص بنا لكل عنصر، وسيتم تمرير المعلمة من النموذج الذي يتم فيه تشغيل مهمة الخلفية.

أمر بدء المهمة في الخلفية

سيتم أخذ المعلمة التي سنمررها إلى إجراء التنفيذ من سمة النموذج المُدار (السمة ذات النوع "سلسلة"):

سيبدو رمز وحدة النموذج المدارة كما يلي: &On the Client إجراءات StartBackgroundJob(Command) StartBackgroundJobOnServer(); نهاية الإجراء &في إجراء الخادم، بدء مهمة الخلفية على الخادم () // تشكيل مصفوفة بمعلمات Job Parameters = New Array; JobParameters.Add(TaskParameter); // نبدأ تنفيذ خوارزمية BackonTasks.Execute في الخلفية (// طريقة التصدير الخاصة بنا في الوحدة العامة " GeneralModuleServer.WriteInformationOnProductsInBackground"، // نقوم بتمرير مصفوفة تحتوي على المعلماتTaskParameters، // حدد مفتاح المهمة New UniqueIdentifier، // تحديد اسم وظيفة الخلفية "وظيفة الخلفية لدينا")؛ نهاية الإجراء

نتيجة التنفيذ

نتيجة لتنفيذ مهمة الخلفية، سيتم إنشاء الإدخالات في سجل المعلومات (وهذا ما نحتاجه).

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

لقد قمت مؤخرًا بنشر مقال: حان الوقت لأتمتة هذا:

المهام الروتينية والخلفية

تم تصميم محرك المهام لتنفيذ أي تطبيق أو وظيفة وفقًا لجدول زمني أو بشكل غير متزامن.

تعمل آلية المهمة على حل المشكلات التالية:

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

تتكون آلية العمل من العناصر التالية:

  • البيانات الوصفية للمهام الروتينية؛
  • المهام العادية؛
  • وظائف الخلفية؛
  • جدول المهام.

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

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

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

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

أعتقد أن هذا يكفي مع الوصف - فلنبدأ بالتنفيذ:

إنشاء مهمة روتينية

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

الاستخدام– علامة على استخدام مهمة روتينية.

محددة مسبقا- يشير إلى ما إذا كانت المهمة الروتينية محددة مسبقًا.

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

عدد مرات إعادة المحاولة عندما تنتهي المهمة بشكل غير طبيعي- عدد المرات التي تم فيها إعادة تشغيل مهمة الخلفية إذا تم تنفيذها مع حدوث خطأ.

إعادة المحاولة الفاصل الزمني عندما تنتهي المهمة بشكل غير طبيعي– عدد المرات التي سيتم فيها إعادة تشغيل مهمة الخلفية إذا تم إكمالها مع حدوث خطأ.

وضع جدول زمني

جدولإكمال المهمة:

كل ساعة، يوم واحد فقطفترة تكرار الأيام = 0، فترة تكرار الأيام = 3600
كل يوم مرة واحدة في اليومفترة RepeatDays = 1، فترة RepeatDays = 0
يوم واحد، مرة واحدةأيام تكرار الفترة = 0
كل يوم مرة واحدة في اليومأيام تكرار الفترة = 2
كل ساعة من 01.00 إلى 07.00 كل يومperiodRepeatDays = 1RepeatPeriodDuringDay = 3600StartTime = 01.00

وقت الانتهاء = 07.00

كل سبت وأحد الساعة 09.00فترة تكرار الأيام = 1WeekDays = 6، 7StartTime = 09.00
كل يوم لمدة أسبوع، تخطي أسبوعبيريوديريبيتدايز = 1بيريودويكس = 2
الساعة 01.00 مرة واحدةوقت البدء = 01.00
آخر يوم من كل شهر الساعة 9:00.periodRepeatDays = 1DayInMonth = -1StartTime = 09.00
اليوم الخامس من كل شهر الساعة 9:00periodRepeatDays = 1DayInMonth = 5StartTime = 09.00
الأربعاء الثاني من كل شهر الساعة 9:00 صباحاًperiodRepeatDays = 1DayWeekMonth = 2DaysWeek = 3

وقت البدء = 09.00

ميزات تنفيذ مهام الخلفية في متغيرات الملفات وخادم العميل

تختلف آليات تنفيذ مهام الخلفية في الملف وإصدارات خادم العميل.

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

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

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

في إصدار خادم العميل، من الممكن منع تنفيذ المهام الروتينية. يتم حظر تنفيذ المهام الروتينية في الحالات التالية:

  • تم تثبيت حظر صريح للمهام الروتينية على قاعدة المعلومات. يمكن ضبط القفل عبر وحدة التحكم العنقودية؛
  • هناك كتلة اتصال في قاعدة المعلومات. يمكن ضبط القفل عبر وحدة التحكم العنقودية؛
  • تم استدعاء الأسلوب SetExclusiveMode() مع المعلمة True من اللغة المضمنة؛
  • وفي بعض الحالات الأخرى (على سبيل المثال، عند تحديث تكوين قاعدة البيانات).

معالجة إطلاق وعرض المهام المجدولةيمكنك تحميل هنا.

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

ستجد تعليمات مفصلة باستخدام المثال أدناه.

ما هي المهام الروتينية والخلفية في 1C

  • المهام المجدولةهي آلية 1C Enterprise 8.3 خاصة مصممة لتنفيذ إجراء محدد وفقًا لجدول زمني محدد.
  • وظيفة الخلفية- الكائنات التي تم إنشاؤها بواسطة مهمة روتينية تؤدي الإجراء المقصود مباشرة دون مشاركة المستخدم أو مبرمج 1C 8.2.

تعمل آلية المهام المجدولة والخلفية في وضع خادم العميل (SQL)، وذلك بفضل وظيفة نظام إدارة قواعد البيانات (DBMS). إذا كان لديك قاعدة بيانات ملف، فيمكن أيضا تكوين المهمة، ولكن على مبدأ مختلف قليلا.

إعداد وظائف الخلفية في وضع خادم العميل 1C

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

احصل على 267 درس فيديو على 1C مجانًا:

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

والإعداد الأكثر إثارة للاهتمام هو جدول:

هنا يمكنك تكوين الفاصل الزمني لبدء الإجراء المحدد في حقل "اسم الطريقة". لنفترض أنني قمت بتكوينها

انتباه!لا تنس تعطيل حظر تنفيذ المهام الروتينية والخلفية على مستوى نظام إدارة قواعد البيانات (DBMS)!

يمكن القيام بذلك في الأداة الإدارية لإصدار خادم العميل أو عند إنشاء قاعدة بيانات جديدة:

إعداد المهام الروتينية في وضع الملف 1C

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

في وضع الملف، تتم تهيئة المهمة الروتينية عند تشغيل أسلوب "RunTaskProcessing()".

بالنسبة لمستخدم معين، يمكنك تكوين هذه الطريقة للتشغيل باستخدام طريقة أخرى -

كونيكت ويت هاندلر ( <ИмяПроцедуры>, <Интервал>, <Однократно>).

  • اسم الإجراء- اسم الإجراء المتصل كمعالج انتظار. اسم الإجراء الذي تم تصديره لوحدة التطبيق المُدارة (وحدة تطبيق عادية) أو وحدة نمطية مشتركة عامة. يجب أن يكون الإجراء موجودًا على العميل.
  • فاصلة— الفترة بين تنفيذ العمليات بالثواني.
  • مره واحده- كيفية إكمال المهمة مرة واحدة أم لا.

كونيكت ويت هاندلر، 3600 )؛

مقطع فيديو مدته دقيقتان يوضح كيفية إعداد مهمة روتينية في مكون 1C: