تمرير المعلمات إلى النماذج المُدارة والعادية. تمرير المعلمات إلى النماذج المُدارة والعادية كيفية تمرير المعلمات من نموذج إلى آخر

21.12.2023

لدينا معالجة بهذا النموذج الأساسي:

من هذا النموذج نحتاج إلى فتح نموذج إضافي، ويجب نقل النص من حقل النموذج إلى النموذج المفتوح. النموذج الإضافي هو كما يلي:

وبالتالي، عند النقر فوق الزر "تشغيل"، يتم فتح نموذج إضافي بالنص الذي تم إدخاله بالفعل في الحقل:

دعونا نفكر في طريقة لحل مثل هذه المشكلة.

حل

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

1. استخدام متغير التصدير العالمي لوحدة النموذج.

أضف الكود التالي إلى النموذج الرئيسي لإجراء معالج الزر "تشغيل":

الإجراء ButtonExecutePress(Button)Form = GetForm(" نموذج إضافي" ) ; // "النص" هو متغير تصدير عالمي لوحدة النموذج التي يتم فتحهااستمارة. النص = عناصر النموذج. نص. معنى؛ استمارة. يفتح()؛ نهاية الإجراء

تمت إضافة متغير النص إلى الوحدة النمطية للنموذج الذي يتم فتحه مع معالج الأحداث "BeforeOpen":

تصدير النص المتغير؛ // المتغير الذي تم تمرير القيمة إليه من نموذج آخرالإجراء قبل فتح (الفشل، المعالجة القياسية) عناصر النموذج. نص منقول. القيمة = النص؛

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

تم حل المشكلة، وبكل بساطة!

2. استخدام دعائم النموذج.

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

الاستنتاجات

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

تحميل من الرابط

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

الحصول على النموذج () . يفتح()

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

يجب أن يؤخذ في الاعتبار أنه عند استلام النموذج، سيتم تنفيذ إجراء حدث آخر عندماCreatedOnServer.

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

1. كيفية فتح نموذج كائن في تطبيق مُدار إذا كان هناك رابط إليه.

في هذه الحالة، كل شيء بسيط للغاية.

RefLink = الدلائل. التسميات. FindByCode("000000001");
OpenValue(RefLink) ؛

2. كيفية فتح نموذج الاختيار ومن ثم الحصول على القيمة المحددة.

هناك وظيفة لهذا أدخل القيمة ().تحتوي الدالة على 3 معلمات:

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

نتيجة لتنفيذ الوظيفة، سيتم فتح نموذج التحديد الافتراضي لكائن من النوع المحدد.

قيمة متغيرة؛
صفيف = صفيف جديد؛
صفيف. إضافة(نوع( "DirectoryLink.Nomenclature") ) ;
صفيف. إضافة(نوع( "DirectoryLink.Counterparties") ) ;

TypeDescription= new TypeDescription(Array) ;

Res = EnterValue(Value, "Hint" , TypeDescription) ;

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

تحتوي هذه الوظيفة على عدد غير قليل من المعلمات. دعونا نلقي نظرة على بعض منهم:

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

دعونا نلقي نظرة على كيفية استخدام الوظيفة نموذج مفتوح ()في حالات مختلفة.

3. كيفية فتح شكل كائن موجود

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

&OnClient
أمر الإجراء1 (الأمر)
المعلمة = بنية جديدة؛
المعلمة. إدراج("مفتاح" , FindC() ) ;
OpenForm(, المعلمة);
نهاية الإجراء

&على الخادم
وظيفة FindC();
إرجاع الدلائل. الأطراف المقابلة. FindByRequisites ("TIN"، "745107734623")
وظيفة النهاية

4. كيفية فتح نموذج كائن جديد

وظيفة بسيطة سوف تفعل هنا نموذج مفتوح ()دون أي معلمات.

&OnClient
أمر الإجراء1 (الأمر)
نموذج مفتوح( "الدليل. الأطراف المقابلة. نموذج الكائن") ;
نهاية الإجراء

5. كيفية فتح نموذج كائن جديد وملئه بناءً على شيء ما

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

&OnClient
أمر الإجراء1 (الأمر)
المعلمة = بنية جديدة؛
المعلمة. إدراج ("قاعدة"، LinkToBuyerAccount) ؛
نموذج مفتوح( "المستند. مبيعات السلع والخدمات. نموذج الكائن"المعلمة) ؛
نهاية الإجراء

سيؤدي هذا المثال إلى إنشاء مستند مبيعات السلع والخدماتويتم ملؤها على أساس فاتورة الدفع للمشتري، والتي تم إرسال الرابط إليها.

6. كيفية فتح نموذج وتحديد التحديد عليه

يمكن أن يكون الاختيار في نماذج 1C بسيطًا أو معقدًا. يتضمن الاختيار البسيط تعبيرات مثل المنظمة = Horns and Hooves LLC.يتضمن الاختيار المعقد أنواعًا أخرى من المقارنة، على سبيل المثال. في القائمة. في هذه المقالة سننظر في تنظيم الاختيار البسيط، وسيتم تخصيص مقال منفصل للاختيار المعقد.

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

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

&OnClient
أمر الإجراء1 (الأمر)
المعلمة = بنية جديدة؛

التحديد= الهيكل الجديد؛
اختيار. إدراج ("المالك"، LinkToNomenclature) ؛

المعلمة. إدراج ("اختيار"، اختيار)؛

نموذج مفتوح( "الدليل.أرقام GTD.نموذج القائمة"المعلمة) ؛
نهاية الإجراء

7. كيفية فتح استمارة دخول سجل المعلومات

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

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

خوارزمية الافتتاح هي كما يلي:

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

&OnClient
أمر الإجراء1 (الأمر)
المعلمة = بنية جديدة؛

KeyParameters= هيكل جديد؛
المعلمات الرئيسية. إدراج("التسميات"، LinkToNomenclature) ;
المعلمات الرئيسية. إدراج("PriceType"، LinkToPriceType) ؛
المعلمات الرئيسية. إدراج ("الفترة"، التاريخ)؛

KeyArray = صفيف جديد؛
KeyArray. إضافة (معلمات المفاتيح) ؛

مفتاح الإدخال = جديد( "مفتاح تسجيل المعلومات.تسميات الأسعار"، كيايراري) ؛

المعلمة. إدراج ("مفتاح"، مفتاح التسجيل)؛

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

طباعة (Ctrl+P)

خيارات النموذج

1. معلومات عامة

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

// في مكان المكالمة.
// إنشاء معلمة النموذج.
المعلمات = هيكل جديد ()؛
خيارات.إدراج("أهمية"، قيمة محددة مسبقًا("التعداد.أهمية.هام"))؛
// افتح النموذج بالمعلمات.
OpenForm (" GeneralForm.ViewForm "، المعلمات)؛

// في وحدة النموذج.
&على الخادم
إجراء WhenCreatingOnServer (الفشل، المعالجة القياسية)
لو المعلمات.الأهمية = التعدادات.أهمية.هامس ثم

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

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

نصيحة. يجب حفظ معلمات النموذج غير الرئيسية المطلوبة لمزيد من العمل في بيانات النموذج.

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

3. مثال على العمل مع معلمات النموذج

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

&OnClient
إجراء SelectedProductStartSelection(العنصر، المعالجة القياسية)
المعالجة القياسية= خطأ؛
خيارات التحديد= الهيكل الجديد ;
خيارات التحديد.إدراج("وضع التحديد"، صحيح)؛
خيارات التحديد.إدراج("اختيار المجموعات والعناصر"، باستخدام GroupsAndElements.Elements);
خيارات التحديد.إدراج("AllowRootSelection"، خطأ)؛
خيارات التحديد.إدراج("الخط الحالي"، Object.SelectedProduct);
خيارات التحديد.إدراج("CloseAfterSelection"، خطأ)؛
OpenForm ("Directory.Products.SelectionForm"، خيارات التحديد, العناصر.العنصر المحدد);
نهاية الإجراء
من الضروري التطرق بشكل منفصل إلى المعلمة الثالثة لطريقة OpenForm(). تحدد هذه المعلمة من سيكون مالك نموذج الاختيار ومن سيتم إخطاره بالاختيار الذي تم إجراؤه. في هذه الحالة، قمنا بتحديد عنصر النموذج نفسه باعتباره مالك نموذج التحديد، ولكن يمكننا أيضًا تحديد النموذج نفسه باستخدام هذه المعلمة. في هذه الحالة، سيكون من الضروري تنفيذ معالج اختيار المعالجةوحدة النموذج وحدد فيها سمة النموذج التي تريد وضع البيانات المحددة فيها.
ملحوظة. إذا لم نقم بتنفيذ معالج الأحداث StartSelection، فسيتم تنفيذ إجراءاته بواسطة النظام نفسه. وينطبق هذا على كافة المعالجات الإضافية المستخدمة في المثال.
أنت الآن بحاجة إلى معالجة المعلمات التي تم تمريرها في نموذج التحديد. دعونا نفعل هذا في المعالج بعد استدعاء معالج الحدث() من وحدة نموذج الاختيار.

&على الخادم
إجراء WhenCreatingOnServer(Failure, StandardProcessing)
المعالجة القياسية= خطأ؛
Elements.List.SelectingGroupsAndElements = Parameters.SelectingGroupsAndElements;
Elements.List.AllowRootSelection = Parameters.AllowRootSelection;
Elements.List.CurrentRow = Parameters.CurrentRow;
CloseOnSelection = Options.CloseAfterSelection;
نهاية الإجراء
من أجل التحقق من وظيفة معلمات النموذج التي قمنا بتعيينها، باستخدام أداة التهيئة، سنقوم بتعيين خاصية القائمة لجدول نموذج التحديد اختيار المجموعات والعناصرإلى قيمة المجموعات (بدون استخدام المعلمة، لن يكون تحديد عناصر الدليل متاحًا).
ملحوظة. إذا لم يتم تعيين خاصية SelectionMode على True في جدول القائمة الذي يعرض قائمة المنتجات، فلن يكون تحديد المنتجات متاحًا.
الآن نحن بحاجة إلى التعامل مع اختيار العنصر المطلوب في نموذج التحديد. للقيام بذلك، تحتاج إلى تحديد معالج لحدث SelectValue لجدول النموذج.

&OnClient
إجراء ListValueSelection(العنصر، المعالجة القياسية، القيمة)
المعالجة القياسية= خطأ؛
NotifyOfSelection(Value);
نهاية الإجراء
كل ما يتعين علينا القيام به هو تنفيذ معالجة اختيار العناصر في حقل الإدخال نفسه. للقيام بذلك، تحتاج إلى التعامل مع الحدث اختيار المعالجةحقل الإدخال الخاص بنا SelectedProduct.

&OnClient
إجراء SelectedItemSelectionProcessing(Item, SelectedValue, StandardProcessing)
المعالجة القياسية= خطأ؛
Object.SelectedProduct = SelectedValue;
نهاية الإجراء
لقد قمنا بشكل مستقل بتنفيذ آلية نظام لتحديد قيمة في حقل الإدخال في النموذج.
انتباه!هذا المثال غير كامل. والغرض الوحيد منه هو إظهار آليات العمل مع معلمات النموذج.
إذا عند إنشاء المعلمات (handler SelectedProductStartSelection()) استبدل السطر:

خيارات التحديد.إدراج("CloseAfterSelection"، صحيح)؛
لكل سطر:
خيارات التحديد.إدراج("CloseAfterSelection"، خطأ) ؛
فلن يتم إغلاق نموذج الاختيار بعد إجراء التحديد. ويمكن استخدام ذلك، على سبيل المثال، لتنفيذ نموذج اختيار (اختيار عدة منتجات دون إغلاق نموذج الاختيار).

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

ندرج المعلمات التي يوفرها النظام والغرض منها:

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

مثال على العمل مع معلمات النموذج

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

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

  • وضع التشغيل الرئيسي - التطبيق المُدار؛
  • يوجد دليل للمنتجات مع تسلسل هرمي للمجموعات والعناصر؛
  • يوجد دليل نظائره مع السمة SelectedProduct من النوع DirectoryLink.Products؛
  • يحتوي كلا الدليلين على نماذج عناصر مُدارة.

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

دعونا نضيف علامة إضافية تتحكم في إغلاق نموذج التحديد بعد تحديد عنصر. دعنا نسمي هذه العلامة CloseAfterSelection (اكتب Boolean). دعونا نضيفه كنموذج معلمة لتحديد دليل المنتجات.

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

&OnClient

الإجراء SelectedProductStartSelection(العنصر، المعالجة القياسية)

StandardProcessing = خطأ؛

SelectionParameters = بنية جديدة؛

SelectionParameters.Insert("SelectionMode", True);

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

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

كيف يتم تمرير المعلمات في النماذج العادية

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

في كلتا الحالتين بدا استدعاء النموذج كما يلي:

Form = Object.GetForm("SelectionForm",FormOwner, UniquenessKey);
Form.Parameter = ParameterValue;
Form.Open();

كيفية تمرير المعلمات في النماذج المدارة

تتمتع النماذج المُدارة الآن بالقدرة على تمرير المعلمات فورًا عند استلام النموذج. يتم تمرير المعلمات كهيكل:

Parameters = New Structure("CurrentValue"، LastElement);
SelectionForm = GetForm("Directory.Nomenclature.SelectionForm", Parameters);
FoundItem = SelectionForm.OpenModal();

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

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

لتمرير معلمة معالجة محددة، عليك القيام بالمزيد:

1) تحديد المعلمة في نموذج متحكم فيه.
في معالج OnCreationOnServer، حدد معالجة هذه المعلمة (الوصول إلى المعلمات التي تم تمريرها من خلال خاصية "Parameters"، التي لها نوع FormDataStructure)
2) قم بوصف استلام النموذج وتمرير قيمة المعلمة الجديدة في معلمات وظيفة GetForm.
وهكذا سيبدو الكود كالتالي:
- في المكان الذي تستلم فيه الاستمارة

Parameters = New Structure("NewParameter"، LastElement);
SelectionForm = GetForm("Directory.Nomenclature.SelectionForm", Parameters);

في وحدة نموذج مُدارة

&على الخادم
الإجراء عند CreatedOnServer (الفشل، المعالجة القياسية)
إذا كانت Parameters.Property("NewParameter") إذن
// هنا هو رمز معالجة المعلمة
endIf;
نهاية الإجراء

خاتمة

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

[يجب عليك التسجيل لمشاهدة الرابط]