1c وحدة تطبيق مُدارة حيث يتم تنفيذها. الوحدات العامة. ماذا تستخدم

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

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

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

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

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

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

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

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

لا تحتوي جميع الوحدات على أقسام إعلان متغير وقسم رئيسي للبرنامج.
على سبيل المثال: الوحدة النمطية المشتركة أو وحدة الجلسة.

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

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

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

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

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

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

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

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

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

وحدة التطبيق

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

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

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

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

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

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

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

وحدة الجلسة

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

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

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

الوحدات العامة

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

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

وحدة النموذج

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

وحدة الكائن

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

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

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

وحدة مدير الكائن

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

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

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

طباعة (Ctrl + P)

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

WorkWithTradeEquipment.ConnectBarcodeScanner ();

سياق مختلف والوحدات النمطية المشتركة

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



#If ThinClient ثم
// إظهار التحذير
ShowAlertUser("على العميل") ؛
#إنهاء إذا
EndProcedure
ثم على جانب الخادم ، سيبدو الرمز كما يلي:
إجراء طريقة الوحدة العامة ()يصدر
// العديد من الكودات المهمة هنا
EndProcedure
وعلى جانب العميل الرقيق ، سيبدو الرمز كما يلي:
الإجراء CommonModule Method () Export
// العديد من الكودات المهمة هنا
// إظهار التحذير
ShowUserAlert ("على العميل") ؛
EndProcedure

هناك عدة طرق لنقل التحكم من العميل إلى الخادم:
● استدعاء طريقة وحدة الخادم المشتركة ؛
● في نموذج أو وحدة أمر ، قم باستدعاء طريقة مسبوقة بتوجيهات الترجمة & AtServer، & AtServerWithoutContext

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

إعادة استخدام قيم الإرجاع

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

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

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

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

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

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

نظرية

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

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

دعنا ننتقل من النظرية إلى التطبيق.

يمارس

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

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

أضف الوظيفة التالية إلى وحدة كائن القاموس:

// قم بتمرير إشارة إلى عنصر الدليل إلى الوظيفةالوظيفة PrintSelectedItems (ارتباط) تصدير TabDoc = New TabDoc ؛ التخطيط = الدلائل. منتجات. GetLayout ("Layout") ؛ طلب = طلب جديد ؛ سؤال. نص = "حدد | العناصر . العرض كبضائع ،| منتجات . وضع علامة حذف ،| منتجات . رمز البائع |من| الدليل . المنتجات AS Products| أين | منتجات . الارتباط ب (& مصفوفة العناصر)"؛ طلب. SetParameter (" صفيف البضائع "، مرجع) ؛ // تعيين التحديد بالرجوع

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

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

& طباعة الإجراء على العميل (الأمر) // اتصل بإجراء الخادم للحصول على مستند جدول البيانات الذي تم إنشاؤه TabDoc = PrintServer () ، // إظهار مستند جدول البيانات الذي تم إنشاؤه TabDoc. تبين() ؛ EndProcedure & OnServer Function PrintServer () // قم بتحويل كائن النموذج إلى كائن من دليل "Products" لاستدعاء الوظيفة من وحدة الكائن ItemObject = FormAttributeToValue ("كائن") ، // قم باستدعاء الإجراء الخاص بوحدة الكائن ، مع تمرير إشارة إلى العنصر الحالي في القاموس. نتيجة // العودة إلى جانب العميلعنصر إرجاع. PrintSelectedItems (Object.Reference) ، وظائف النهاية

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

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

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

// تمرير مجموعة من الروابط للمنتجاتالوظيفة PrintSelectedItems (ItemsArray) تصدير TabDoc = New SpreadsheetDocument ؛ التخطيط = الدلائل. منتجات. GetLayout ("Layout") ؛ طلب = طلب جديد ؛ سؤال. نص = "حدد | العناصر . العرض كبضائع ،| منتجات . وضع علامة حذف ،| منتجات . رمز البائع |من| الدليل . المنتجات AS Products| أين | منتجات . الارتباط ب (& مصفوفة العناصر)"؛ طلب. SetParameter (" مصفوفة العناصر "، صفيف العناصر) ؛ // ضبط التصفية حسب المصفوفةالنتيجة = الطلب. ينفذ () ؛ AreaTitle = تخطيط. GetRegion ("العنوان") ؛ AreaFooter = تخطيط. GetRegion ("الطابق السفلي") ؛ منطقة رأس الجدول = التخطيط. GetArea ("رأس الجدول") ؛ AreaFooterTables = التخطيط. GetRegion ("TableFooter") ؛ AreaDetailRecords = تخطيط. GetRegion ("التفاصيل") ؛ TabDoc. صافي() ؛ TabDoc. الإخراج (رأس المنطقة) ؛ TabDoc. الإخراج (RegionTableHeader) ؛ TabDoc. StartAutoGroupRows () ، SampleDetailRecords = النتيجة. يختار() ؛ أثناء أخذ عينات من السجلات التفصيلية. التالي () LoopDetailRecordsArea. المعلمات. ملء (SelectionDetailRecords) ؛ TabDoc. الإخراج (RegionDetailRecords ، SelectionDetailRecords. Level ()) ؛ نهاية الدورة TabDoc. EndAutoGroupRows () ، TabDoc. الإخراج (RegionFooterTables) ؛ TabDoc. الإخراج (AreaFooter) ؛ عودة TabDoc ؛ وظائف النهاية

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

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

& في إجراء العميل طباعة (الأمر) TabDoc = PrintServer ()؛ TabDoc. تبين() ؛ EndProcedure & OnServer Function PrintServer () // تمرير مجموعة من ارتباطات المنتجات المحددة في قائمة البحث // في وظيفة مدير "PrintSelectedItems"كتيبات العودة. منتجات. PrintSelectedItems (قائمة العناصر. خطوط محددة) ؛ وظائف النهاية

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

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

ماذا تستخدم؟

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

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

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

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

الوحدات العامة

يمكن استدعاء الوظائف المُعلنة بعلامة "تصدير" في مثل هذه الوحدة النمطية من أي مكان في التكوين. يتم إجراء المكالمة عبر CommonModuleName.FunctionName ().

هذه الوحدات لا تحتوي على قسم متغير.

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

وضع علامة على "عمومي"

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

وضع علامة على "الخادم"

يمكن أداء وظائف هذه الوحدة على الخادم.

ضع علامة على "العميل (تطبيق عادي)"

يمكن تنفيذ وظائف هذه الوحدة على العميل في وضع التطبيق العادي.

ضع علامة على "العميل (تطبيق مُدار)"

يمكن تنفيذ وظائف هذه الوحدة النمطية على العميل في وضع التطبيق المُدار.

علم استدعاء الخادم

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

وضع علامة على "الانضمام الخارجي"

يمكن استدعاء وظائف التصدير لهذه الوحدة النمطية عند الاتصال من مصدر خارجي.

وضع علامة على "Privileged"

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

خيار إعادة الاستخدام

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

وحدة التطبيق

مصمم للتعامل مع أحداث بدء التطبيق ونهايته. هناك نوعان: للتطبيقات العادية والمدارة.

يجب ألا تفرط في تحميله ، لأن هذا يؤثر على وقت بدء تشغيل التطبيق.

وحدة الجلسة

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

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

مع خالص التقدير (مدرس و مطور).