1C اختيار النموذج الخاضع للرقابة. كيفية فتح نموذج قائمة مع بعض التحديد؟ تحديد الاختيار في التكوين

الكود 1C v 8.x DirectoryList.Selection.Reset();
DirectoryList.Selection.status.ComparisonType=ComparisonType.Contains;
DirectoryList.Selection.Status.Value="مقبول";
DirectoryList.Selection.Status.Set();

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

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

عند فتح النموذج، سيتم الاختيار بناءً على الحقل المحدد.
Code 1C v 8.2 UP // على سبيل المثال، في المثال التالي، يتم فتح قائمة الفواتير مع التحديد بواسطة حقل الرقم الذي يساوي 333.
قيمة التحديد = بنية جديدة("Number"، "333");
SelectionParameters = New Structure("Selection", SelectionValue);

OpenForm("Document.Receipt Invoice. List Form"، Selection Options);

// على سبيل المثال، يفتح المثال التالي قائمة الفواتير
// مع التحديد بواسطة حقل المقاول يساوي "OJSC Horns and Hooves".
قيمة التحديد = هيكل جديد ("الطرف المقابل"، "OJSC Horns and Hooves")؛
SelectionParameters = New Structure("Selection", SelectionValue);
OpenForm("Document.Receipt Invoice. List Form"، Selection Options);

2. يمكنك فتح نموذج قائمة بدون معلمات:
Code 1C v 8.2 UE OpenForm("Document.Receipt Invoice.List Form");

وبعد ذلك، في معالج الحدث الخاص بالنموذج الخاص بقائمة الفواتير، عند إنشاء CreatedOnServer، اكتب التعليمات البرمجية التي تنشئ تحديدًا في القائمة الديناميكية، وهي السمة الرئيسية للنموذج:
كود 1C v 8.2 UP &OnServer

Selection Element = List.Selection.Elements.Add(Type("DataComposition Selection Element"));
SelectionElement.LeftValue = NewDataCompositionField("Number");

SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.Inaccessible;
SelectionElement.RightValue = "000000001";
نهاية الإجراء

&على الخادم
الإجراء عند CreatedOnServer (الفشل، المعالجة القياسية)
عنصر التحديد = List.Selection.Elements.Add(Type
("DataCompositionSelectionElement"))؛
SelectionElement.LeftValue = NewDataCompositionField("DocumentAmount");
SelectionElement.ComparisonView = DataCompositionComparisonView.More;
SelectionElement.Use = True;
SelectionElement.RightValue = 150000;
نهاية الإجراء

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

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

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

للقيام بذلك، في شكل قائمة العناصر، قم بإنشاء أمر والزر المقابل استلام الفواتير.

لنملأ معالج التنفيذ لهذا الأمر على النحو التالي:
الكود 1C v 8.2 UP &OnClient
إجراءات الإيصالاتالفواتير (الأمر)

ListForm = GetForm("Document.Invoice.ListForm");
ListForm.FilterByProduct = Elements.List.CurrentRow;
ListForm.Open();

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

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

ثم سنقوم بإنشاء نموذج لقائمة المستندات: استلام الفاتورة وإنشاء سمة النموذج FilterBy Product، والتي سنستخدمها كمعلمة للنموذج عند فتحه. الآن دعونا نفتح لوحة الخصائص للسمة الرئيسية لنموذج القائمة. قم بتعيين علامة ArbitraryRequestوفي سطر إعدادات القائمة، انقر فوق يفتح.

في حقل الطلب، أدخل نص الطلب التالي:
كود 1C v 8.2 UP SELECT
فاتورة استلام الوثيقة رقم،
فاتورة استلام الوثيقة.التاريخ
من
Document.ReceiptInvoice AS DocumentReceiptInvoice
أين
مستند استلام الفاتورة.المنتجات.المنتج = &المنتج

في الطلب، نستخدم معلمة العنصر، والتي ستتلقى رابطًا إلى السطر الحالي في قائمة العناصر، الموجودة في معلمة نموذج قائمة فاتورة العنصر FilterBy. للقيام بذلك، في معالج أحداث نموذج قائمة OnOpen، سنكتب تعليمات برمجية لتعيين قيمة معلمة طلب المنتج:
الكود 1C الإصدار 8.2 UP
&OnClient
إجراء الافتتاح (الفشل)

List.Parameters.SetParameterValue("Product", FilterByProduct);

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

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

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

المعلومات مأخوذة من الموقع

الاختيار على النماذج المُدارة في 1C 8.3

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

  • تحديد الاختيار في التكوين

تحديد الاختيار في وضع المستخدم

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

لإعداد التحديد في وضع المؤسسة، تحتاج إلى استدعاء أمر "تخصيص القائمة".

سيتم فتح نافذة.


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


نقوم بتعيين نوع المقارنة وقيمتها، ثم نضغط على "إنهاء التحرير"، ويتم ضبط الاختيار.


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


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


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

تحديد الاختيار في التكوين

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

لا يختلف مبدأ تحديد التحديد الثابت في المكوِّن عن ضبطه في وضع المستخدم الموضح أعلاه. لتعيين التحديد، يجب علينا فتح إعدادات القائمة الديناميكية.


سيتم فتح نافذة.


يتم ضبط التحديد بنفس الطريقة كما في وضع المستخدم.

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


الاختيار الديناميكي (البرمجيات).

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

طُرق

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

GeneralPurposeClientServer.SetDynamicListSelectionElement()

توقيع هذه الطريقة:

قائمة ديناميكية النوع: DynamicList - القائمة التي تريد تعيين التحديد فيها.

اسم الحقل النوع: سلسلة - الحقل الذي تريد تعيين التحديد من خلاله.

القيمة الصحيحة النوع: تعسفي – قيمة التحديد (اختياري. القيمة الافتراضية: غير محددة. ملاحظة: إذا قمت بتمرير غير محدد، فلن تتغير القيمة).

عرض المقارنة النوع: نوع مقارنة تكوين البيانات - حالة التحديد.

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

الاستخدام النوع: منطقي - علامة لاستخدام هذا التحديد (اختياري. الافتراضي: غير محدد).

وضع العرض النوع: ItemDisplayModeDataCompositionSettings - كيفية عرض هذا التحديد للمستخدم. القيم الممكنة:

  • وضع عرض العنصر، إعدادات تخطيط البيانات، الوصول السريع – في المجموعة إعدادات سريعةفوق القائمة.
  • وضع عرض العنصر، إعدادات تخطيط البيانات، عادي – في إعدادات القائمة (في القائمة الفرعية المزيد).
  • ElementDisplayModeDataCompositionSettings.Inaccessible - منع المستخدم من تغيير هذا التحديد.

إعدادات معرف المستخدم النوع: سلسلة - المعرف الفريد لهذا التحديد (يستخدم للتواصل مع إعدادات المستخدم).

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

الغرض العامClientServer. RemoveGroupElementsSelectionDynamicList()

توقيع هذه الطريقة:

قائمة ديناميكية النوع: DynamicList - سمة النموذج التي تريد تعيين التحديد لها.

اسم الحقل النوع: سلسلة - اسم حقل التخطيط (لا يستخدم للمجموعات).

أداء النوع: سلسلة – تمثيل حقل التخطيط.

إذا لم يكن هناك BSP في النظام، فيمكن تعيين التحديد بشكل مستقل باستخدام كائن DataComposition Field.

Selection Element = List.Selection.Elements.Add(Type("DataComposition Selection Element")); Selection Element.LeftValue = NewDataCompositionField("Name"); عنصر التحديد. نوع المقارنة = نوع مقارنة تكوين البيانات. متساوي؛ Selection Element.DisplayMode = ElementDisplayModeDataCompositionSettings.QuickAccess; // عنصر التحديد الاختياري RightValue = "Ivanov";

سيحدد هذا التحديد الصفوف التي تكون فيها القيمة "الاسم الكامل" = "إيفانوف".

لاستخدام "AND" و"OR" و"NOT" المنطقي، فإن نوع البيانات المقصود هو DataCompositionSelectionElementGroup

Selection Group = List.Selection.Elements.Add(Type("مجموعة عناصر تحديد DataComposition")); SelectionGroup.GroupType = DataCompositionSelectionElementGroupType.GroupOR; Selection Element = Selection Group.Elements.Add(Type("عنصر تحديد تكوين البيانات")); Selection Element.LeftValue = NewDataCompositionField("Name"); عنصر التحديد. نوع المقارنة = نوع مقارنة تكوين البيانات. متساوي؛ Selection Element.RightValue = "إيفانوف"؛ Selection Element = Selection Group.Elements.Add(Type("عنصر تحديد تكوين البيانات")); Selection Element.LeftValue = NewDataCompositionField("Name"); عنصر التحديد. نوع المقارنة = نوع مقارنة تكوين البيانات. متساوي؛ SelectionElement.RightValue = "بيتروف"؛

سيحدد هذا التحديد الصفوف التي تكون فيها القيمة "الاسم الكامل" = "إيفانوف" أو "بيتروف".

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


للقيام بذلك، أضف الشرط "أين هو الصحيح" إلى نص الاستعلام...


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

List.QueryText = List.QueryText + " And DirectoryUsers.Full Name V(""Ivanov""،""Petrov"""";

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

أين (ليس &SelectionInstalled أو DirectoryUsers.Name IN (&PermitName))

List.Parameters.SetParameterValue("SelectionSet", Full Name.Quantity() > 0); List.Parameters.SetParameterValue("الاسم الكامل المسموح به"، الاسم الكامل)؛

هنا الاسم الكامل هو مصفوفة.

كما ترون، سطرين من التعليمات البرمجية مقابل 10. تعتمد الطريقة التي تختارها على مهمة التطبيق المحددة.

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

التحديد في النموذج في حقل الإدخال 1C 8.2 بعدة قيم

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

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

تحديد التحديد في حقل الإدخال في النموذج في 1C 8.3، حدث بداية التحديد

الآن دعونا نفكر التحديد في حقل الإدخال في نموذج مُدار في 1C 8.3. دعونا نجد في النموذج العنصر الذي نهتم به، والذي سنحدد فيه الاختيار، في حالتنا هذا هو حقل "المنظمة". نجد حدث "بدء التحديد"، انقر على العدسة المكبرة ونجد أنفسنا في الإجراء. نرى معلمة بيانات التحديد؛ هذه المعلمة من نوع ValueList. لكي يقتصر الاختيار على العناصر الضرورية، نحتاج إلى ملء قائمة القيم. يمكننا تحديد العناصر فقط على الخادم، لذلك نقوم بإنشاء إجراء باستخدام توجيه التحويل البرمجي &OnServer. في هذا الإجراء، قم بملء بيانات التحديد.

الكود 1C v 8.x DirectoryList.Selection.Reset();
DirectoryList.Selection.status.ComparisonType=ComparisonType.Contains;
DirectoryList.Selection.Status.Value="مقبول";
DirectoryList.Selection.Status.Set();

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

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

عند فتح النموذج، سيتم الاختيار بناءً على الحقل المحدد.
Code 1C v 8.2 UP // على سبيل المثال، في المثال التالي، يتم فتح قائمة الفواتير مع التحديد بواسطة حقل الرقم الذي يساوي 333.
قيمة التحديد = بنية جديدة("Number"، "333");
SelectionParameters = New Structure("Selection", SelectionValue);

OpenForm("Document.Receipt Invoice. List Form"، Selection Options);

// على سبيل المثال، يفتح المثال التالي قائمة الفواتير
// مع التحديد بواسطة حقل المقاول يساوي "OJSC Horns and Hooves".
قيمة التحديد = هيكل جديد ("الطرف المقابل"، "OJSC Horns and Hooves")؛
SelectionParameters = New Structure("Selection", SelectionValue);
OpenForm("Document.Receipt Invoice. List Form"، Selection Options);

2. يمكنك فتح نموذج قائمة بدون معلمات:
Code 1C v 8.2 UE OpenForm("Document.Receipt Invoice.List Form");

وبعد ذلك، في معالج الحدث الخاص بالنموذج الخاص بقائمة الفواتير، عند إنشاء CreatedOnServer، اكتب التعليمات البرمجية التي تنشئ تحديدًا في القائمة الديناميكية، وهي السمة الرئيسية للنموذج:
كود 1C v 8.2 UP &OnServer

Selection Element = List.Selection.Elements.Add(Type("DataComposition Selection Element"));
SelectionElement.LeftValue = NewDataCompositionField("Number");


SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.Inaccessible;
SelectionElement.RightValue = "000000001";
نهاية الإجراء

&على الخادم
الإجراء عند CreatedOnServer (الفشل، المعالجة القياسية)
عنصر التحديد = List.Selection.Elements.Add(Type
("DataCompositionSelectionElement"))؛
SelectionElement.LeftValue = NewDataCompositionField("DocumentAmount");
SelectionElement.ComparisonView = DataCompositionComparisonView.More;
SelectionElement.Use = True;
SelectionElement.RightValue = 150000;
نهاية الإجراء

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

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

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

للقيام بذلك، في شكل قائمة العناصر، قم بإنشاء أمر والزر المقابل استلام الفواتير.

لنملأ معالج التنفيذ لهذا الأمر على النحو التالي:
الكود 1C v 8.2 UP &OnClient
إجراءات الإيصالاتالفواتير (الأمر)

ListForm = GetForm("Document.Invoice.ListForm");
ListForm.FilterByProduct = Elements.List.CurrentRow;
ListForm.Open();

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

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

ثم سنقوم بإنشاء نموذج لقائمة المستندات: استلام الفاتورة وإنشاء سمة النموذج FilterBy Product، والتي سنستخدمها كمعلمة للنموذج عند فتحه. الآن دعونا نفتح لوحة الخصائص للسمة الرئيسية لنموذج القائمة. قم بتعيين علامة ArbitraryRequestوفي سطر إعدادات القائمة، انقر فوق يفتح.

في حقل الطلب، أدخل نص الطلب التالي:
كود 1C v 8.2 UP SELECT
فاتورة استلام الوثيقة رقم،
فاتورة استلام الوثيقة.التاريخ
من
Document.ReceiptInvoice AS DocumentReceiptInvoice
أين
مستند استلام الفاتورة.المنتجات.المنتج = &المنتج

في الطلب، نستخدم معلمة العنصر، والتي ستتلقى رابطًا إلى السطر الحالي في قائمة العناصر، الموجودة في معلمة نموذج قائمة فاتورة العنصر FilterBy. للقيام بذلك، في معالج أحداث نموذج قائمة OnOpen، سنكتب تعليمات برمجية لتعيين قيمة معلمة طلب المنتج:
الكود 1C الإصدار 8.2 UP
&OnClient
إجراء الافتتاح (الفشل)

List.Parameters.SetParameterValue("Product", FilterByProduct);

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

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

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

كيفية فتح نموذج قائمة مع بعض التحديد؟

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

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

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

قيمة التحديد = بنية جديدة("Number"، "333");

SelectionParameters = New Structure("Selection", SelectionValue);

OpenForm("Document.Receipt Invoice. List Form"، Selection Options);

2. يمكنك فتح نموذج قائمة بدون معلمات:

OpenForm("Document.Invoice.ListForm");

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

&على الخادم

الإجراء عند CreatedOnServer (الفشل، المعالجة القياسية)

Selection Element = List.Selection.Elements.Add(Type("DataComposition Selection Element"));

SelectionElement.LeftValue = NewDataCompositionField("Number");

SelectionElement.ComparisonView = DataCompositionComparisonView.More;

SelectionElement.Use = True;

SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.Inaccessible;

SelectionElement.RightValue = "000000001";

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

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

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

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

للقيام بذلك، في شكل قائمة العناصر، قم بإنشاء أمر وزر مناسب استلام الفواتير.

لنملأ معالج التنفيذ لهذا الأمر على النحو التالي:

&OnClient

إجراءات الإيصالاتالفواتير (الأمر)

ListForm = GetForm("Document.Invoice.ListForm");

ListForm.FilterByProduct = Elements.List.CurrentRow;

ListForm.Open();

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

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

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

في حقل الطلب، أدخل نص الطلب التالي:

يختار

فاتورة استلام الوثيقة رقم،

فاتورة استلام الوثيقة.التاريخ

من

Document.ReceiptInvoice AS DocumentReceiptInvoice

أين

مستند استلام الفاتورة.المنتجات.المنتج = &المنتج

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

&OnClient

إجراء الافتتاح (الفشل)

List.Parameters.SetParameterValue("Product", FilterByProduct);

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

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

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

يوجد مثال تجريبي للخيار الثالث في الدليل 1CITS/EXE/FAQ/OpenFormWithSelection.dt. تم تنفيذ المثال على إصدار النظام الأساسي 8.2.9.356.




قمة