1C واجهة برنامج الوحدة. وحدات مشتركة

14.02.2024

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

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

وحدة التطبيق

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

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

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

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

وحدة الاتصال الخارجية

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

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

وحدة الجلسة

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

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

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

وحدات مشتركة

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

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

وحدة النموذج

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

وحدة الكائن

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

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

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

وحدة إدارة الكائنات

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

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

الرموز على الرسم البياني: O.M. العميل - الوحدة النمطية المشتركة للعميل؛ او.م. الخادم - وحدة الخادم المشتركة؛ م.ف. العميل - إجراءات العميل الخاصة بوحدة النموذج؛ م.ف. الخادم - إجراءات الخادم الخاصة بوحدة النموذج.

أهلاً بكم.
اليوم سوف ننظر وحدات منصة 1C Enterprise 8.2، يوجد عدد أكبر منها في الإصدار 8.1 وفي بعض الأحيان ليس من السهل اكتشاف ذلك.
مثال:

إذا نظرت إلى مساعدة 1C، سترى التعريف التالي للوحدة:
الوحدة هي برنامج مكتوب باللغة المضمنة في نظام 1C:Enterprise.

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

يوجد أي سطر من التعليمات البرمجية في بعض الوحدات النمطية، وهذا على النقيض من 1C7.7، حيث يمكن وضع رمز البرنامج في خلايا جداول التخطيط وفي خصائص عناصر النموذج.

دعونا ندرج الوحدات الموجودة في 1C 8.2

وحدات النظام الأساسي 1C Enterprise 8.2:

وحدة التطبيقات المُدارة
وحدة التطبيق العادية
وحدة الاتصال الخارجية
وحدة الجلسة
وحدات مشتركة
وحدة الكائن
وحدة النموذج
وحدة إدارة الكائنات
وحدة إدارة القيمة
وحدات مجموعة السجلات

الأقسام الرئيسية للوحدة:
1. قسم وصف المتغيرات المحلية لهذه الوحدة، يمكنك تحديد توجيه التجميع (غير موجود لجميع الوحدات).
2. قسم يصف الإجراءات والمهام. إذا لم تكتب توجيه التحويل البرمجي، فسيكون افتراضيًا &OnServer، ولا يهم ترتيب الإجراءات والوظائف على الإطلاق.
3. قسم البرنامج الرئيسي للمقرر (يحتوي على بعض البيانات). يتم تنفيذ هذا القسم عند الوصول إلى وحدة نمطية (غير موجود لجميع الوحدات).

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

قواعد تجميع الوحدة:
1. يتم تجميع بعض الوحدات بالكامل إما من جانب العميل أو من جانب الخادم. جميع الأساليب فيها إما عميل أو خادم. مثال على وحدة العميل هو وحدة تطبيق مُدارة.
2. يمكن لبعض الوحدات الجمع بين أساليب العميل والخادم. في هذه الحالة، من الضروري لكل طريقة تحديد توجيهات الترجمة - &OnClient أو &OnServer. مثال على ذلك هو وحدات النماذج المُدارة.

تصنيف الوحدة:
1. الخادم. تم تجميعها فقط من جانب الخادم - وحدة الكائن، وحدة المدير، وحدة مجموعة السجلات.
2. العميل. يتم تجميعها فقط على العميل، مثل وحدة التطبيق المُدارة.
3. مجتمعة. يمكن تجميعها على كل من الخادم والعميل - وحدة النموذج والوحدات النمطية العامة.

موقع تجميع الوحدة:
1. العميل الرقيق (يوفر القدرة على استخدام متصفح الويب).
2. الخادم.
3. العميل السمين.

كما ترى، لا يوجد عدد قليل جدًا من الوحدات؛ فكل كائن تكوين تقريبًا لديه وحدة لها غرض خاص بها.

الغرض من كل وحدة 1C 8.2

يحمي:هل تفكر في شراء 1C Enterprise ولا تعرف من من؟ تعد شركة LBS من بين أفضل 20 شركة 1C: أصحاب الامتياز. تشارك في أتمتة المحاسبة على أساس منتجات 1C. قم بشراء منتجات 1C من LBS واحصل على دعم وخدمة 1C عالية الجودة.

ملاحظة. اضحك على نكتة لوكاشينكو))

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

ومع ذلك، يجب كتابة هذا البرنامج في مكان ما، أي موجود في مكان ما. في معظم الحالات، يتم كتابة كود البرنامج في ملفات نصية عادية. والفرق الوحيد هو أن الامتداد الموجود فيها ليس .txt، بل .cpp أو .php.

أين يتم كتابة برنامج 1C؟

ما هي الوحدة 1C؟

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

يتكون التكوين من كائنات 1C، كما ناقشنا ذلك في الدروس السابقة. يحتوي كل كائن 1C على كائنات متداخلة، على سبيل المثال، يحتوي الدليل على عدة أشكال.

يحتوي كل كائن 1C، بما في ذلك بعض الكائنات المتداخلة، على وحدة نمطية خاصة به - وهو ملف نصي يحتوي على رمز البرنامج.

هناك أيضًا وحدات نمطية مستقلة عن الكائن يمكن من خلالها كتابة كود البرنامج بشكل مستقل عن كائن معين.

وبالتالي، في 1C لا يوجد برنامج "واحد". توجد مجموعة من الوحدات لكتابة كود البرنامج لكل كائن تكوين 1C.

كيف يتم استخدام وحدات 1C؟

يمكن تقسيم البرنامج بأكمله تقريبًا إلى نوعين:

  • طريقة الكائن
  • رد الفعل على الأحداث.

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

يمكن أن تكون أساليب العديد من كائنات 1C قياسية (أي مبرمجة في منصة 1C) ومكتوبة بواسطة مبرمج بلغة 1C. بمساعدة الثانية، يمكنك توسيع وظائف كائنات 1C كما يحلو لك.

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

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

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

ترتيب تنفيذ وحدات 1C

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

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

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

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

العمل مع وحدات 1C

أنتجت في التكوين. يمكنك فتح الوحدة باستخدام نافذة التكوين.

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

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

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

نظرية

دعنا ننتقل إلى أساسيات البرمجة الموجهة للكائنات (OOP) ونرسم تشبيهًا بمثالنا. في OOP، يمكن تقسيم أساليب الكائنات إلى ثابتة وبسيطة. لا يمكن استدعاء الأساليب البسيطة إلا على كائن محدد يمكننا الوصول إليه في سياق الكود الحالي. لا تتمتع الطرق الثابتة بإمكانية الوصول المباشر إلى بيانات الكائن. للوصول إلى كائن ما، عليك أولاً إنشاء مثيل له. الأمر نفسه ينطبق على منصة 1C:Enterprise 8.x.

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

دعونا ننتقل من النظرية إلى الممارسة.

يمارس

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

إجراء الطباعة في وحدة الكائن

في وحدة كائن الدليل، أضف الوظيفة التالية:

// قم بتمرير مرجع إلى عنصر الدليل إلى الوظيفةوظيفة PrintSelectedProducts(Link) Export TabDoc = New TabularDocument; التخطيط = الدلائل. بضائع. GetLayout("تخطيط"); طلب = طلب جديد؛ طلب. النص = "اختر | المنتجات . عرض كمنتج,| بضائع . علامة الحذف,| بضائع . رمز البائع |من| الدليل . المنتجات كمنتجات|أين | بضائع . الارتباط ب(&مصفوفة المنتج)" ; Request.SetParameter(" مجموعة المنتجات ", Link); // اختر عن طريق الرابط

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

يتم تقديم رمز البرنامج لاستدعاء أسلوب الكائن "PrintSelectedProducts" باستخدام أمر النموذج "Print" في القائمة التالية:

طباعة إجراء &OnClient (الأمر) // اتصل بإجراء الخادم لتلقي مستند جدول البيانات الذي تم إنشاؤه TabDoc = PrintServer() ; // إظهار مستند جدول البيانات الذي تم إنشاؤه TabDoc. يعرض() ؛ وظيفة EndProcedure وOnServer PrintServer() // قم بتحويل كائن النموذج إلى كائن دليل "المنتجات" لاستدعاء وظيفة من وحدة الكائن ObjectItem = FormAttributeValue("Object" ) ; // استدعاء إجراء وحدة الكائن، وتمرير رابط إلى عنصر الدليل الحالي. نتيجة // العودة إلى جانب العميلمنتج كائن الإرجاع PrintSelectedProducts(Object.Link) ؛ وظيفة النهاية

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

إجراء الطباعة في وحدة المدير

دعونا نضيف إجراء التصدير التالي إلى وحدة مدير الدليل:

// تمرير مجموعة من الروابط إلى المنتجاتوظيفة PrintSelectedProducts(ArrayProducts) Export TabDoc = New TabularDocument; التخطيط = الدلائل. بضائع. GetLayout("تخطيط"); طلب = طلب جديد؛ طلب. النص = "اختر | المنتجات . عرض كمنتج,| بضائع . علامة الحذف,| بضائع . رمز البائع |من| الدليل . المنتجات كمنتجات|أين | بضائع . الارتباط ب(&مصفوفة المنتج)" ; Request.SetParameter(" مجموعة المنتجات ", مجموعة المنتجات) ; // تعيين الاختيار حسب المصفوفةالنتيجة = الطلب. يجري()؛ منطقة الرأس = التخطيط. GetArea("العنوان"); AreaFooter = Layout. GetArea("الطابق السفلي"); TableHeadArea = Layout. GetArea("رأس الجدول"); TableFooterArea = Layout. GetArea("TableFooter"); DetailRecordsArea = Layout. GetArea("التفاصيل"); TabDoc. واضح() ؛ TabDoc. الإخراج (AreaTitle) ؛ TabDoc. Output(TableHeadArea); TabDoc. StartAutoGroupingRows(); SelectionDetailRecords = Result. يختار() ؛ بينما يتم تحديد DetailedRecords. التالي () LoopDetailRecordArea. خيارات. ملء (SelectionDetailRecords) ؛ TabDoc. Output(DetailedRecordsArea, DetailedRecordsSelection.Level()) ; دورة النهاية؛ TabDoc. FinishAutoGroupingRows(); TabDoc. Output(TableFooterArea); TabDoc. الإخراج (منطقة القدم) ؛ إرجاع TabDoc؛ وظيفة النهاية

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

يبدو رمز البرنامج الخاص بوحدة أمر النموذج "طباعة" كما يلي:

& في إجراء العميل Print(Command) TabDoc = PrintServer(); TabDoc. يعرض() ؛ وظيفة EndProcedure وOnServer PrintServer() // قم بتمرير مجموعة من الروابط للمنتجات المحددة في قائمة الدليل // في وظيفة وحدة المدير "PrintSelectedProducts"إرجاع الدلائل. بضائع. PrintSelectedItems(Items.List.SelectedRows) ; وظيفة النهاية

في هذه الحالة، ستكون نتيجة تنفيذ الأمر في وضع 1C:Enterprise كما يلي:

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

ما يجب استخدامه؟

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

في التكوين القياسي للإصدار 11 من "إدارة التجارة"، يتم استخدام وحدة المدير في كل مكان لطباعة المستندات. إذا نظرت إلى تكوين "Manufacturing Enterprise Management"، فلن يتم استخدام وحدة المدير عمليًا، حيث تمت كتابة التكوين في الإصدارات الأقدم من النظام الأساسي، حيث لم يكن هناك دعم كامل لهذه الآلية.

التكوين مع أمثلة من المقال.

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

عادةً ما تتكون وحدة البرنامج من ثلاثة أقسام:

  • منطقة إعلان متغيرة;
  • مجال وصف الإجراءات والوظائف;
  • النص الرئيسي للبرنامج.

مثال على هيكل وحدة البرنامج:

//********************* منطقة الإعلان المتغيرة **********************

تصدير اسم عائلة بيرم؛ / / هذا متغير عالمي
تغيير الاسم، اسم العائلة؛ // هذا متغير الوحدة النمطية
بيرم الاسم الكامل؛ // هذا أيضًا متغير للوحدة النمطية ويمكن الوصول إليه

// من أي إجراء أو وظيفة في وحدتنا

//*************** وصف المنطقة للإجراءات والوظائف ****************

الإجراء الإجراء 1 ()
المجموع المتغير ; / / النتيجة متغير محلي (متغير الإجراء)

الإجمالي = اسم العائلة + " "+ الاسم الأول + " "+ الاسم الأوسط؛

نهاية الإجراء

وظيفة الوظيفة1()

// مشغلي الوظائف

Return(LastName + " "+ FirstName);

وظيفة النهاية

//********************* النص الرئيسي للبرنامج ***********************

الاسم الأخير = "إيفانوف"؛
الاسم = "إيفان"؛
اسم العائلة = "إيفانوفيتش"؛

//******************************************************************************

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

منطقة لوصف الإجراءات والوظائفيتم وضعها من بيان الإجراء أو الوظيفة الأول إلى أي بيان قابل للتنفيذ خارج نص الإجراء أو وصف الوظيفة.

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

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

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

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

وحدة التطبيق (مدارة أو عادية)

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

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

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

وحدة الاتصال الخارجية

  • يمكن أن تحتوي على جميع المجالات الثلاثة
  • الموجود في القسم الجذر للتكوين

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

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

وحدة الجلسة

  • يعمل على جانب الخادم
  • الموجود في القسم الجذر للتكوين

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

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

وحدات مشتركة

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

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

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

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

وحدة النموذج

  • يمكن أن تحتوي على جميع المجالات الثلاثة
  • يتم تنفيذها على جانبي الخادم والعميل

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

يحتوي هيكل النموذج المُدار على قسم لإعلانات المتغيرات، ووصف الإجراءات والوظائف، والنص الرئيسي للبرنامج (الذي يتم تنفيذه في وقت تهيئة النموذج). يمكننا الوصول إلى أحداث النموذج القياسي من خلال قائمة الإجراءات والوظائف المتوقعة للنموذج (Ctrl+Alt+P)أو من خلال لوحة خصائص النموذج نفسه.

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

وحدة الكائن

  • يمكن أن تحتوي على جميع المجالات الثلاثة
  • يعمل على جانب الخادم

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

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

وحدة إدارة الكائنات

  • يمكن أن تحتوي على جميع المجالات الثلاثة
  • يعمل على جانب الخادم

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

وحدة الأوامر

  • قد يحتوي على قسم يصف الإجراءات والوظائف
  • تنفيذها من جانب العميل

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