1c كيفية تعيين رمز ترجمة الجلسة برمجيًا. خيارات الجلسة

الفرق بين مفهومي الجلسة والاتصال في 1C:Enterprise 8

ماذا ستتعلم من هذه المقالة؟

  • الإجابة الصحيحة على أحد الأسئلة الأكثر شيوعًا عند اجتياز 1C: خبير
  • الغرض وميزات الاتصالات وجلسات 1C
  • ماذا تخزن بيانات الجلسة؟

ما هي الاختلافات بين الجلسة والاتصال؟ هذا السؤال الذي يبدو بسيطًا في اختبار 1C:Expert يربك الكثيرين. على الرغم من الخبرة الكبيرة في البرمجة، لا يستطيع كل متخصص صياغة إجابة واضحة وصحيحة.

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

الجلسة 1ج

دعونا نشير إلى دليل المسؤول. ويحدد مفهوم الجلسة على النحو التالي:

تحدد الجلسة المستخدم النشط لقاعدة المعلومات وتدفق التحكم لهذا المستخدم.

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

وهذا يؤكد التمثيل المرئي لعنصر "الجلسات" - يتم عرض الرمز في شكل مستخدمين.

يجب التوضيح أن المستخدم النشط لا يعني بالضرورة اتصال العميل، فمن الممكن أن يكون أيضًا:

  • مثيل لتطبيق العميل 1C:Enterprise
  • مثيل تطبيق الويب حيث يتم تنفيذ عميل الويب
  • تم الحصول على مثيل الاتصال الخارجي من كائن V83.COMConnector
  • 1 مثيل لوظيفة الخلفية
  • مكالمة واحدة إلى خدمة الويب

بيانات الجلسة

دعونا نفكر في مفهوم بيانات الجلسة. تحتوي الجلسة على بعض المعلومات مثل:

  • اسم قاعدة المعلومات
  • رقم الجلسة
  • اسم مستخدم قاعدة المعلومات المصادق عليه
  • لغة الواجهة
  • قيم معلمات الجلسة
  • تخزين مؤقت
  • إحصائيات الجلسة
  • معلومات نماذج الطلبات المُدارة
  • بعض بيانات المنصة الداخلية

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

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

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

للحفاظ على الجلسة، يقوم العميل الرقيق وعميل الويب بالوصول إلى المجموعة مرة واحدة على الأقل كل 10 دقائق.

اتصال 1C

الآن دعونا نفهم مفهوم الاتصال. دعونا نلقي نظرة على دليل المسؤول مرة أخرى:

الاتصال هو وسيلة للوصول إلى الجلسات لمجموعة من خوادم 1C:Enterprise، ويحتوي على مجموعة محدودة من بيانات الاتصال، ولا يتم تحديده مع المستخدم النشط.

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

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

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

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

تُستخدم الاتصالات أيضًا للتواصل بين عمليات المجموعة، أي أن العمليات العاملة (rphost) تتواصل مع مدير المجموعة (عملية rmngr) باستخدام الاتصالات بدلاً من استخدام الجلسات.

الاختلافات بين الاتصالات والجلسات

من أجل وصف الفرق الرئيسي بين هذه المفاهيم، سنقدم تشبيهًا.

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

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

يوضح هذا التشبيه بوضوح أن الجلسة والاتصال ليسا نفس الشيء، ويمكن للجلسة أن تنجو بسهولة من انقطاع الاتصال.

بورميستروف أندريه

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

منع الجلسات

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

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

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

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

ماذا تفعل إذا لم يتم تثبيت المكون؟

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

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

تستمر المقالة في سلسلة "الخطوات الأولى في التطوير على 1C"، وتناقش بالتفصيل المشكلات التالية:

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

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

تتناول المقالة منصة 1C:Enterprise 8.3.4.496. المادة ذات صلة أيضًا بإصدارات النظام الأساسي الحالية.

الوحدات في "1C:Enterprise 8.3"

الوحدات هي تلك الكائنات التي تحتوي على رمز البرنامج.

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

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

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

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

على الرغم من الاسم نفسه، إلا أن هذين المتغيرين مختلفان: أحدهما يستخدم داخل إجراء معين، والآخر يستخدم خارجه.

في بعض الوحدات، قد يكون للمتغيرات موقع تجميع (متاح) على الخادم أو العميل. على سبيل المثال:

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

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

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

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

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

وحدة التطبيق

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

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

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

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

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

تجدر الإشارة إلى أنه يوجد في النظام الأساسي 8.3 وحدتا تطبيق مختلفتان: وحدة التطبيق المُدار ووحدة التطبيق العادي. تتم معالجة أحداث وحدة التطبيق المُدارة عند تشغيل عميل الويب والتطبيق المُدار الرقيق والسميك.

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

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

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

يمكن أيضًا فتح هذه الوحدة من لوحة الخصائص لعنصر التكوين الجذر.

لفتح وحدة نمطية تطبيق منتظم، يجب عليك الرجوع إلى إعدادات التكوين (command خياراتعلى القائمة خدمة).

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

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

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

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

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

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

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

عند تنفيذ معالج الحدث "قبل"، يعتبر الإجراء لم يحدث بعد. عند تنفيذ معالج الحدث "at"، يكون الإجراء قد اكتمل بالفعل.

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

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

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

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

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

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

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

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

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

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

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

تحتوي هذه الوحدة على أحداث: عند بدء تشغيل النظامو عند إيقاف تشغيل النظام.

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

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

في وحدة الاتصال الخارجي، من الممكن وصف متغيرات التصدير وطرق التصدير التي ستكون متاحة على الجانب الذي يحدث فيه الاتصال الخارجي بـ 1C:Enterprise 8.3.

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

وحدة الجلسة

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

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

توفر وحدة الجلسة حدثًا إعدادات الجلسة.

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

تصف وحدة الجلسة الإجراءات المختلفة لتهيئة معلمات الجلسة وفقًا للظروف المختلفة.

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

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

في وحدة الجلسة، من الممكن تحديد الإجراءات والوظائف فقط، أي: لا يوجد قسم وصف متغير ولا يوجد قسم رئيسي للبرنامج. لا يمكنك تحديد طرق التصدير في وحدة الجلسة.

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

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

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

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

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

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

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

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

أولئك. ال الوحدة العامةسيشارك في تشكيل سياق التكوين العالمي.

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

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

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

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

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

ل الوحدة العامةالخامس لوحة الخصائصيمكنك ضبط الخاصية ذو امتياز.

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

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

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

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

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

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

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

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

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

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

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

بالإضافة إلى ذلك، إذا قمت بتبديل وضع تحرير التكوين إلى التطبيق المُدار والتطبيق العادي، فسيكون سياق التجميع الآخر ممكنًا - العميل (التطبيق العادي).

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

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

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

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

إذا لم تحدد توجيه التحويل البرمجي لإجراء (وظيفة)، فسيتم تجميعه في جميع السياقات المحددة للوحدة.

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

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

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

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

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

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

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

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

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

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

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

ومع ذلك، هناك قيود زمنية معينة. يتم مسح ذاكرة التخزين المؤقت تلقائيًا بعد 20 دقيقة من دخول القيمة إلى ذاكرة التخزين المؤقت.

وحدة النموذج

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

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

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

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

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

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

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

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

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

وحدة الكائن

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

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

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

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

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

يوضح الشكل أدناه قائمة بأحداث وحدة الدليل المتوفرة.

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

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

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

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

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

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

بالنسبة للسجلات هناك وحدة السجلات.

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

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

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

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

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

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

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

وحدة المدير

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

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

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

لإجراء هذه المكالمة، من الضروري الحصول على نوع البيانات مدير الدليل.

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

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

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

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

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

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

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

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

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

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

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

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

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

بسبب ال معلمة الجلسةهو كائن بيانات وصفية، وله ميزات معينة:

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

إذا كان نوع معلمة الجلسة هو:

  • صفيف ثابت
  • مجموعة ثابتة
  • هيكل ثابت

ثم يمكن أن تكون قيمة عنصر المجموعة غير معرف.

المجال الرئيسي للمعلمات هو استخدام قيمها في استعلامات RLS (تقييد الوصول إلى مستوى السجل).

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

معلمات الجلسة.CurrentUser =<значение>

Table.User = &CurrentUser

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

CurrentUser = SessionParameters.CurrentUser;


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

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

الإجراءSettingSessionParameters(SessionParametersNames) إذا كانت SessionParametersNames غير محددة ثم إذا ParameterName = "CurrentUser" ثم SessionParameters.CurrentUser = ; ElseIf ParameterName = "CurrentOrganization" ثمSessionParameters.CurrentOrganization = ; // إلخ. إنهاء إذا؛ إنهاء إذا؛ قيمة EndProcedure>القيمة>>

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

2023 asm59.ru
الحمل والولادة. البيت و العائلة. الترفيه والتسلية