يختلف فتح النماذج برمجيًا في تطبيق 1C مُدار بشكل كبير عن فتحها في تطبيق عادي. دعونا نلقي نظرة على الطريقة القديمة أولا. وهو يتألف من تلقي نموذج ثم فتحه في الوضع العادي أو المشروط (عند فتحه في الوضع المشروط، يحظر النموذج البرنامج).
الحصول على النموذج () . يفتح()
هذه هي أبطأ طريقة لفتح النماذج. ومع ذلك، فإنه يسمح لك بمعالجة النموذج برمجياً قبل فتحه. لمعالجة الكود تحتاج إلى تغيير قليلاً:
النموذج = GetForm( "المستند. استلام البضائع والخدمات. نموذج المستند")
;
// هنا نقوم بتنفيذ الإجراءات باستخدام النموذج
استمارة. يفتح()؛
يجب أن يؤخذ في الاعتبار أنه عند استلام النموذج، سيتم تنفيذ إجراء حدث آخر عندماCreatedOnServer.
دعونا نلقي نظرة على الطرق الأخرى التي تسمح لك بفتح النماذج في تطبيق 1C مُدار بشكل أسرع وأكثر ملاءمة. اعتمادًا على الموقف المحدد، يمكن استخدام طرق مختلفة.
في هذه الحالة، كل شيء بسيط للغاية.
RefLink = الدلائل. التسميات. FindByCode("000000001");
OpenValue(RefLink) ؛
هناك وظيفة لهذا أدخل القيمة().تحتوي الدالة على 3 معلمات:
نتيجة لتنفيذ الوظيفة، سيتم فتح نموذج التحديد الافتراضي لكائن من النوع المحدد.
قيمة متغيرة؛
صفيف = صفيف جديد؛
مجموعة مصفوفة. إضافة(نوع( "DirectoryLink.Nomenclature")
)
;
مجموعة مصفوفة. إضافة(نوع( "DirectoryLink.Counterparties")
)
;
TypeDescription= new TypeDescription(Array) ;
Res = EnterValue(Value, "Hint" , TypeDescription) ;
سمحت لك الطرق السابقة فقط بفتح النماذج الافتراضية للكائنات (نموذج الكائن أو نموذج التحديد). إذا كنت بحاجة إلى فتح نموذج مخصص، يمكنك استخدام الوظيفة نموذج مفتوح ().
تحتوي هذه الوظيفة على عدد غير قليل من المعلمات. دعونا نلقي نظرة على بعض منهم:
دعونا نلقي نظرة على كيفية استخدام الوظيفة نموذج مفتوح ()في حالات مختلفة.
يحتوي كل نموذج على سمة رئيسية واحدة. يتم تمييزه بالخط العريض في قائمة تفاصيل النموذج ويتم استدعاؤه عادةً شيءفي أشكال عناصر الكتب والوثائق المرجعية. قد يكون للكائنات الأخرى اسم مختلف. لفتح نموذج لكائن موجود، تحتاج إلى تمرير معلمة إلى النموذج الذي يتم فتحه مفتاحمع القيمة كمرجع إلى كائن.
&OnClient
أمر الإجراء1 (الأمر)
المعلمة = بنية جديدة؛
معامل. إدراج("مفتاح" , FindC() ) ;
OpenForm(, المعلمة);
EndProcedure
&على الخادم
وظيفة FindC();
إرجاع الدلائل. الأطراف المقابلة. FindByRequisites ("TIN"، "745107734623")
وظيفة النهاية
وظيفة بسيطة سوف تفعل هنا نموذج مفتوح ()دون أي معلمات.
&OnClient
أمر الإجراء1 (الأمر)
نموذج مفتوح( "الدليل. الأطراف المقابلة. نموذج الكائن")
;
EndProcedure
تحتاج إلى تمرير المعلمة قاعدة، والتي ستكون قيمتها مرجعًا لكائن قاعدة التعبئة. سيبدأ هذا الإجراء عملية ملء ().
&OnClient
أمر الإجراء1 (الأمر)
المعلمة = بنية جديدة؛
معامل. إدراج ("قاعدة"، LinkToBuyerAccount) ؛
نموذج مفتوح( "المستند. مبيعات السلع والخدمات. نموذج الكائن"، معامل) ؛
EndProcedure
سيؤدي هذا المثال إلى إنشاء مستند مبيعات السلع والخدماتويتم ملؤها على أساس فاتورة الدفع للمشتري، والتي تم إرسال الرابط إليها.
يمكن أن يكون الاختيار في نماذج 1C بسيطًا أو معقدًا. يتضمن الاختيار البسيط تعبيرات مثل المنظمة = Horns and Hooves LLC.يتضمن الاختيار المعقد أنواعًا أخرى من المقارنة، على سبيل المثال. في القائمة. في هذه المقالة سننظر في تنظيم الاختيار البسيط، وسيتم تخصيص مقال منفصل للاختيار المعقد.
لتنظيم اختيار بسيط، تحتاج إلى تمرير معلمة مع مفتاح للنموذج الذي يتم فتحه اختيار، ستكون القيمة عبارة عن بنية يكون المفتاح فيها هو اسم حقل القائمة الديناميكية، والقيمة هي البيانات المطلوبة.
على سبيل المثال، لنفتح نموذج قائمة الدليل أرقام جي تي ديوقم بالاختيار هناك بواسطة المالك - عنصر الدليل التسميات.
&OnClient
أمر الإجراء1 (الأمر)
المعلمة = بنية جديدة؛
التحديد= الهيكل الجديد؛
اختيار. إدراج ("المالك"، LinkToNomenclature) ؛
معامل. إدراج ("اختيار"، اختيار)؛
نموذج مفتوح( "الدليل.أرقام GTD.نموذج القائمة"، معامل) ؛
EndProcedure
للقيام بذلك، سوف تحتاج إلى مفتاح إدخال سجل المعلومات.
مفتاح التسجيل- هذه هي قيم جميع القياسات والفترة (إذا كان السجل دوريا). أي أن مفتاح السجل هو المعلمات التي يمكن من خلالها تعريف السجل بشكل فريد.
خوارزمية الافتتاح هي كما يلي:
&OnClient
أمر الإجراء1 (الأمر)
المعلمة = بنية جديدة؛
KeyParameters= هيكل جديد؛
المعلمات الرئيسية. إدراج("التسميات"، LinkToNomenclature) ;
المعلمات الرئيسية. إدراج("PriceType"، LinkToPriceType) ;
المعلمات الرئيسية. إدراج ("الفترة"، التاريخ)؛
KeyArray = صفيف جديد؛
KeyArray. إضافة (معلمات المفاتيح) ؛
مفتاح الإدخال = جديد( "مفتاح تسجيل المعلومات.تسميات الأسعار"، كيايراري) ؛
معامل. إدراج ("مفتاح"، مفتاح التسجيل)؛
نموذج مفتوح( "سجل المعلومات. أسعار التسميات. نموذج السجل"، معامل) ؛
EndProcedure
عند فتح نموذج لكائن موجود، يجب عليك، بالإضافة إلى اسم النموذج، الإشارة أيضًا إلى الكائن الذي يجب فتح نموذجه. للقيام بذلك، استخدم معلمة النموذج الرئيسي ورابطًا للكائن الذي يهمنا.
على سبيل المثال، إذا كنت بحاجة من قائمة نموذج المؤسسات إلى فتح نموذج المؤسسة التي يوجد عليها المؤشر، فيمكنك القيام بذلك بالطريقة التالية:
نقوم بتمرير معلمات النموذج في شكل بنية، حيث يتوافق اسم عنصر البنية مع اسم معلمة النموذج، والقيمة هي القيمة التي نريد تعيين معلمة النموذج عليها.
إذا كنت لا ترغب في فتح النموذج الرئيسي، ولكن النموذج التعسفي لكائن تم إنشاؤه في المكوّن، فبدلاً من الاسم القياسي للنموذج الرئيسي (ObjectForm)، قم بالإشارة إلى كلمة النموذج متبوعة بنقطة - اسم النموذج الذي تم إنشاؤه فيه المكوّن.
على سبيل المثال:
ReferenceToDirectoryElement = Elements.List.CurrentRow; FormParameters = New Structure("Key", ReferenceToDirectoryElement); OpenForm("Directory.Organizations.Form.UniversalObjectForm",FormParameters);
تجدر الإشارة إلى أنه في حالة عدم الحاجة إلى تمرير أي معلمات إلى النموذج الذي يتم فتحه، بالإضافة إلى الارتباط بالكائن، ويكون النموذج الرئيسي للكائن الموجود هو المطلوب، يمكنك استخدام طريقة أبسط - افتح النموذج باستخدام الإجراء قيمة مفتوحة ():
OpenValue(Items.List.CurrentRow);
هذه الطريقة أقل تنوعًا، ولكنها في بعض الحالات توفر الوقت والجهد. على سبيل المثال، في الحالة التي تم النظر فيها، يمكن أن يحل سطر واحد من هذا القبيل محل الإجراء المكون من ثلاثة أسطر بأكمله الذي كتبناه سابقًا.
ومع ذلك، يجب توخي الحذر عند استخدام هذا الإجراء. في بعض الحالات، قد يؤدي ذلك إلى استدعاءات إضافية للخادم، على سبيل المثال، عندما تحتاج إلى فتح نموذج عنصر دليل هرمي. عند استخدام هذا الإجراء، سيقوم النظام الأساسي بإجراء اتصال إضافي بالخادم لتحديد ما إذا كان العنصر عبارة عن مجموعة أم لا، حيث يجب فتح نماذج مختلفة للعنصر والمجموعة.
في الوقت نفسه، يمكن معرفة هذه المعلومات مسبقًا للمطور ضمن خوارزميته، وباستخدام وظيفة OpenForm()، يمكن للمطور فتح النموذج المطلوب دون استدعاءات إضافية للخادم، مع تحديد الاسم القياسي للنموذج الرئيسي على الفور استمارة.