1 ج اجعل عنصر الشكل مطلوبًا. إضافة وتعديل عناصر النموذج المُدارة برمجيًا

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

قد يكون التعديل البرنامجي للنموذج مطلوبًا في عدة حالات:

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

في نموذج مُدار ، يمكنك إضافة وتعديل وإزالة برمجيًا:

  • المتطلبات.
  • أوامر محلية
  • عناصر.

كل هذه العمليات ممكنة فقط على الخادم.

لإعادة التشكيل البرنامجي قيود:

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

أوامر تغيير النموذج

لإدارة تكوين الأوامر لكائن الشكل المدارلديك مجموعة فرق

    يضيف (< ИмяКоманды >)

    كمية ()

    تجد (< ИмяКоманды >)

    حذف (< Команда >)

تتوفر مجموعة الأوامر لكل من العميل والخادم. تعديل المجموعة (طرق Add () و Remove ()) ممكن فقط على الخادم. يمكنك البحث والحصول على عدد العناصر (طرق Find () و Quantity ()) على كل من العميل والخادم.

كمثال على العمل مع أوامر النموذج ، دعنا ننشئ أمر ChangeHistory جديد بعنوان "Change History ..." ، والذي سيستدعي المعالج عرض التاريخ(). يتم الإنشاء عند فتح النموذج.

& على الخادم
إجراء OnCreateOnServer (فشل ، معالجة قياسية)
فريق = أوامر. يضيف( "تاريخ التغييرات");
فريق . العمل = ؛
فريق . العنوان = "تاريخ التغييرات ...";
EndProcedure
& AtClient
إجراء Connected_DisplayHistory (Command)
// إجراءات الأوامر
EndProcedure

يجب أن يكون معالج الأوامر موجودًا في النموذج وأن يحتوي على توجيه الترجمة & AtClient.

تغيير تفاصيل النموذج

يتم تنفيذ قراءة تكوين سمات النموذج بواسطة الوظيفة احصل على التفاصيل(< Путь >) تقوم بإرجاع صفيف من النوع FormAttributes. تحدد معلمة الوظيفة المسار إلى السمة الأصل (كسلسلة). إذا تم حذف المعلمة أو تحديد سلسلة فارغة ، يتم إرجاع بيانات اعتماد المستوى الأعلى.

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

انتباه!

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

لنقم بإنشاء سمة نموذج جديدة باسم المشتري:


addedAttributes = صفيف جديد ؛
التفاصيل المضافة. أضف (سمة نموذج جديد("المشتري" ، وصف النوع الجديد ("DirectoryReference.Counterparties") ، "العميل") ؛

// التغييرات في تكوين السمات
);

تغيير عناصر النموذج

لإدارة تكوين عناصر الكائن الشكل المدارلديك مجموعة عناصر. المجموعة لها عدة طرق:

    إدراج (< Имя>, < ТипЭлемента>, < Родитель>, < Элемент >)

    يضيف (< Имя>, < ТипЭлемента>, < Родитель >)

    كمية ()

    تجد (< Имя >)

    يتحرك(< Элемент>, < Родитель>, < МестоРасположения >)

    حذف (< Элемент >)

تتوفر مجموعة Elements على كل من العميل والخادم. تعديل المجموعة (طرق الإدراج () ، إضافة () ، نقل () وحذف ()) متوفرة فقط على الخادم. يمكنك البحث والحصول على عدد العناصر (طرق Find () و Quantity ()) على كل من العميل والخادم. يمكن أن تكون عناصر المجموعة:

  • GroupForm ؛
  • TableForms
  • حقل النموذج؛
  • ButtonForms.

يمكنك تعيين معالجات الأحداث برمجيًا لتشكيل العناصر. لهذا الغرض ، الطريقة SetAction (< ИмяСобытия>, < Действие >) .

لنلقِ نظرة على بعض الأمثلة العملية الأكثر شيوعًا للعمل مع الأوامر والسمات وعناصر النموذج.

إضافة أمر والزر المرتبط به:

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

إضافة سمة وحقل الإدخال المرتبط بها:

// وصف التفاصيل المضافة
addedAttributes = صفيف جديد ؛
التفاصيل المضافة. يضيف(سمة النموذج الجديد ("المشتري" ، وصف نوع جديد ( "ارتباط مرجعي. الأطراف المقابلة")، "عميل" ))؛
// تغيير تكوين السمات
تحرير السمات (addedAttributes);
// إنشاء حقل إدخال وربطه بسمة
عنصر = عناصر. إضافة ("العميل" ، النوع ("FormField")) ؛
عنصر . عرض = ViewFormFields. مجال الدخول
عنصر . PathToData= "المشتري" ؛

تعيين معالج حدث لعنصر نموذج:

البندالمشتري. SetAction("عندما يتغير" ، "Plug-in_BuyerOnChange");

& AtClient
إجراء Plugin_BuyerOnChange(عنصر )
// إجراءات الحدث
EndProcedure

انتباه!

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

انتباه!

يمكنك تنزيل المعالجة بأمثلة من البحث الآلي وتغيير التفاصيل والأوامر والعناصر لنموذج مُدار.

وكائن نقل البيانات إلى هيكلة الكود ، شكل مُدار في بيئة 1C 8.2.

مقدمة

لنبدأ بوصف موجز لمفهوم "النموذج المُدار" والمفاهيم ذات الصلة لمنصة 1C. يمكن لخبراء المنصة تخطي هذا القسم.

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

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

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

دعنا نحدد المشكلة

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

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

  • كلمات غير إعلامية "عام ، خدمة ، مساعدة".
  • يحاول خجول فصل أساليب العميل والخادم.
  • غالبًا ما يتم تجميع الأساليب حسب عناصر الواجهة "العمل مع المنتجات ذات الأجزاء المجدولة ، معلومات الاتصال".
  • الترتيب التعسفي للأساليب ومجموعات الرموز. على سبيل المثال ، قد تكون معالجات الأحداث في الأعلى في أحد النماذج ، وفي الأسفل في شكل آخر ، ولا يتم تمييزها على الإطلاق في الشكل الثالث ، وهكذا.
  • ودعونا لا ننسى أن هذا كله ضمن نفس التكوين.
  • نعم ، هناك تكوينات تكون فيها الكلمات "عام ، خدمي ، مساعد" دائمًا في نفس الأماكن ، ولكن ...
لماذا تحتاج هيكل كود؟
  • تبسيط الصيانة.
  • تبسيط التعلم.
  • تحديد المبادئ العامة / الهامة / الناجحة.
  • ... خيارك
لماذا لا يساعد معيار التطوير الحالي من 1C؟
لنلقِ نظرة على المبادئ المنشورة على أقراص أنظمة النقل الذكية (ITS) وفي العديد من "أدلة المطورين ..." الموصى بها عند كتابة نموذج مُدار.
  • قلل عدد مكالمات الخادم.
  • الحد الأقصى للحوسبة على الخادم.
  • تكون مكالمات الخادم غير السياقية أسرع من استدعاءات السياق.
  • برنامج مع وضع التفاعل بين العميل والخادم في الاعتبار.
  • إلخ.
هذه شعارات صحيحة تماما ولكن كيف تتحقق؟ كيفية تقليل عدد المكالمات ، ماذا يعني البرنامج في وضع خادم العميل؟

أنماط التصميم أو حكمة الأجيال

تم استخدام التفاعل بين العميل والخادم في تقنيات برمجية مختلفة لعقود. لطالما عرفت الإجابة على الأسئلة الموضحة في القسم السابق وتم تلخيصها في مبدأين أساسيين.
  • الواجهة البعيدة(يشار إليها فيما يلي باسم واجهة الوصول عن بُعد)
  • كائن نقل البيانات(يشار إليه فيما بعد باسم كائن نقل البيانات)
كلمة لمارتن فاولر ووصفه لهذه المبادئ:
  • يجب أن يحتوي كل كائن من المحتمل أن يكون مخصصًا للوصول عن بُعد واجهة منخفضة الدقة، والتي ستقلل من عدد المكالمات المطلوبة لتنفيذ إجراء معين. ... بدلاً من طلب فاتورة وجميع نقاطها بشكل منفصل ، من الضروري قراءة وتحديث جميع نقاط الفاتورة في مكالمة واحدة. يؤثر هذا على بنية الكائن بالكامل ... تذكر: واجهة الوصول عن بُعد لا يحتوي على منطق المجال.
  • ... إذا كنت أمًا مهتمة ، فسأقول بالتأكيد لطفلي: "لا تكتب أبدًا كائنات نقل البيانات!" في معظم الحالات ، لا تعد كائنات ترحيل البيانات أكثر من مجموعة الحقول المتضخمة… تكمن قيمة هذا الوحش المثير للاشمئزاز في الاحتمال فقط نقل عناصر متعددة من المعلومات عبر الشبكة في مكالمة واحدة- تقنية ذات أهمية كبيرة للأنظمة الموزعة.
أمثلة على القوالب في منصة 1C
تحتوي واجهة برمجة التطبيقات المتاحة للمطور عند تطوير نموذج مُدار على العديد من الأمثلة على هذه المبادئ.
على سبيل المثال ، أسلوب OpenForm () ، واجهة "خشنة" نموذجية.
OpenParameters = بنية جديدة ("المعلمة 1 ، المعلمة 2 ، المعلمة 3" ، القيمة 1 ، القيمة 2 ، القيمة 3) ؛ Form = OpenForm (FormName، OpenParameters) ؛
قارن مع أسلوب v8.1.
Form = GetForm (FormName) ، Form.Parameter1 = Value1 ؛ Form.Parameter2 = Value2 ؛ Form.Open () ؛

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

  • هيكل البيانات
  • تجميع البيانات
  • DataFormStructureCollection
  • DataFormsTree
يتم تحويل كائنات نظام نقل البيانات إلى أنواع التطبيقات والعكس بالطرق التالية:
  • ValueVDataForm ()
  • FormDataToValue ()
  • CopyFormData ()
  • ValueVFormProps ()
  • FormAttributeToValue ()
غالبًا ما يتم استخدام تحويل صريح عند تكييف حل موجود. قد تتوقع الأساليب (ميزة) معلمات إدخال مثل ValueTable بدلاً من FormDataCollection ، أو تم تعريف الطريقة في سياق كائن التطبيق وأصبحت غير متاحة للاتصال المباشر من النموذج.
مثال 1C v8.1:
// على العميل في سياق النموذج FillUsersCache (DepartmentReference)
مثال 1C v8.2:
// على الخادم في سياق النموذج ProcessingObject = FormAttributeToValue ("الكائن") ؛ ProcessingObject.FillCacheUsers (DepartmentReference) ، ValueVFormAttribute (ProcessingObject، "كائن") ،

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

  • أنواع بدائية (سلسلة ، رقم ، منطقي)
  • بنية
  • المطابقة
  • مجموعة مصفوفة
  • روابط إلى كائنات التطبيق (معرف فريد وتمثيل نصي)
مثال: يقبل الأسلوب قائمة الطلبات لتغيير الحالة ويعيد وصف الأخطاء إلى العميل.
& OnServerWithoutContext Function ServerChangeOrderStatus (الطلبات ، NewStatus) أخطاء = تطابق جديد () ؛ // [order] [وصف الخطأ] لكل طلب من حلقة الطلبات StartTransaction () ؛ محاولة DocOb = Order.GetObject () ، …. إجراءات أخرى ، ربما ليس فقط مع الأمر ... استثناء CancelTransaction () ؛ Errors.Insert (Order، DescriptionError ()) ؛ نهاية المحاولة نهاية الدورة عودة الخطأ ؛ EndFunction // ServerChangeOrderStatus ()

هيكلة الكود

الأهداف الرئيسية التي يجب أن تعكسها وحدة النموذج المدارة وأساليب الحل.
  • فصل واضح بين كود العميل والخادم.دعونا لا ننسى أنه في وقت التنفيذ ، هناك عمليتان متفاعلتان ، تختلف الوظائف المتاحة في كل منهما اختلافًا كبيرًا.
  • تحديد واضح لواجهة الوصول عن بعد ، ما هي طرق الخادم التي يمكن استدعاؤها من العميل ، وأيها لا يمكن؟ تبدأ أسماء أساليب الواجهة البعيدة بالبادئة "Server". يسمح لك هذا برؤية انتقال عنصر التحكم على الفور إلى الخادم عند قراءة التعليمات البرمجية ، ويبسط استخدام التلميحات السياقية. لاحظ أن التوصية الرسمية (ITS) تقترح طرق تسمية مع الإصلاحات اللاحقة ، مثل ChangeOrderStatusOnServer (). ومع ذلك ، للتكرار ، لا يمكن استدعاء جميع طرق الخادم من العميل ، وبالتالي فإن إمكانية الوصول المنطقية أكثر أهمية من موقع التجميع. لذلك ، باستخدام البادئة "Server" ، نحدد فقط الطرق المتاحة للعميل ، وسيسمى أسلوب المثال ServerChangeOrderStatus ().
  • مقروئية.من باب الذوق ، نقبل الطلب عندما تبدأ الوحدة بإجراءات إنشاء نموذج على الخادم وطرق الوصول عن بُعد.
  • قابلية الصيانة.يجب تحديد مكان إضافة رمز جديد بوضوح. نقطة مهمة ، الأسلوب stubs الذي تم إنشاؤه تلقائيًا بواسطة المُكوِّن تتم إضافته إلى نهاية الوحدة. نظرًا لأنه يتم غالبًا إنشاء معالجات أحداث عنصر النموذج تلقائيًا ، يتم وضع الكتلة المقابلة أخيرًا حتى لا يتم سحب كل معالج إلى مكان آخر في الوحدة النمطية.
يوجد أدناه الهيكل الأساسي للوحدة التي تنفذ الأهداف المدرجة.
  • خيار رسومي - يوضح بوضوح التدفق الرئيسي للتنفيذ.
  • يعد خيار النص مثالاً لتصميم قالب لإدراج بنية بسرعة في وحدة نموذجية جديدة.

//////////////////////////////////////////////////////////////////////////////// // <(c) Автор=""التاريخ =""/> // <Описание> // // ////////////////////////////////////////////////////// / ////////////////////////////// // MODULE VARIABLES /////////////// / ///////////////////////////////////////////////////// // // ////////////// // ON THE SERVER // ******* الأحداث على الخادم ******* & On The Server Procedure On CreationOn The Server ( فشل ، معالجة قياسية) // أدخل محتويات المعالج EndProcedure // ******* واجهة الوصول عن بُعد ******* // ******* منطق الأعمال على الخادم **** *** ///////// //////////////////////////////////////// ///////////// ///////////////////// // COMMON CLIENT AND SERVER METHODS ///////// ///////////////// ///////////////////////////////////// //////////////// //////// // ON THE CLIENT // ******* منطق الأعمال على العميل ******* // ******* COMMANDS ******* // ******* الأحداث على العميل ****** ////////////// //////////////////// ////////////////////////////////// /////////////////// / / مشغلو البرنامج الرئيسيون

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

1. مجال الإدخال
2. خانة اختيار
3. التبديل

مجال الدخول

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

الاختيار من قائمة (SelectFromListMode)

التحديد من نموذج آخر (زر التحديد)

أزرار التحكم

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

الإجراء pvNomenclature اختيار التنظيم (عنصر ، اتجاه ، معالجة قياسية)
// حدد البيانات لحقل الإدخال
// في هذه الحالة مرجع التسمية
طلب = طلب جديد ؛
Request.Text =
"يختار
| التسمية. المرجع كعنصر
| من
| الدليل. التسمية AS التسمية
| ترتيب حسب
| Nomenclature.Code "؛
TZNomenclature = Request.Execute (). Upload () ،

// نحن نبحث عن العنصر الحالي للدليل المحدد في حقل الإدخال
CurrentElement = TKNomenclature.Find (Element.value) ؛

إذا CurrentItem = Undefined ثم
// إذا لم يتم العثور على العنصر ، فقم بتعيين رقم الفهرس
// خارج جدول القيم ، لأن أول عنصر في
// يحتوي جدول القيمة على فهرس 0
CurrentIndex = -1 ؛
خلاف ذلك
// إذا تم العثور على العنصر ، احصل على الفهرس الخاص به
TekIndex = T3Nomenclature.Index (TekElement) ؛
إنهاء إذا؛

// حساب مؤشر جديد بناءً على النقر فوق الزر
// ناقص أمام المتغير الاتجاه من أجل
// النقر على السهم العلوي يظهر العنصر أعلاه
// وبالتالي بمؤشر أقل
NewIndex = CurrentIndex-Direction ؛

// الحصول على عدد العناصر في الدليل
// طرح واحد لأن تبدأ جميع المجموعات في 8.1 من 0
عدد العناصر = تسمية المعارف التقليدية. الكمية () -1 ؛

إذا كان NewIndex< 0 Или НовИндекс >عدد العناصر ثم
// إذا كان الفهرس خارج جدول القيم عند التغيير
// بمعنى آخر. رقمه أكبر من أكبر مؤشر أو أقل من 0 حينئذٍ
// لا تغير القيمة وتطلع المستخدم عليها
تنبيه ("لقد وصلت إلى الحد الأقصى للدليل") ؛
خلاف ذلك
// تعيين قيمة جديدة ، "المنتج" هو اسم عمود جدول القيمة
Element.value = TKNomenclature.Get (NewIndex). المنتج ؛
إنهاء إذا؛

EndProcedure

خانة اختيار

في معظم البرامج ، يتم استخدام خانة الاختيار لعرض حالتين: محدد ، غير محدد. في 1s ، يحتوي مربع الاختيار على ثلاث حالات ، وفي الحالة الثالثة يتم عرض مربع الاختيار - كما هو محدد ومظلل. لا تتوفر الحالات الثلاث إلا إذا كانت بيانات العلم عبارة عن رقم ، مع وجود المعاني التالية للحالات:

يُحوّل

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

في هذه الحالة ، قد تكمن راحة استخدام أزرار الاختيار في حقيقة أن كل منها يمكن أن يكون له بعض القيمة ، والتي يتم تعيينها في خاصية "Selectable Value". وبعد ذلك يمكن لـ "خصم 5٪" تخزين القيمة 5 أو 0.05.

هناك ثلاثة أشياء مهمة يجب مراعاتها عند استخدام أزرار الاختيار:

      يجب أن يحتوي زر الاختيار الأول على خاصية "FirstInGroup" (في هذا المثال ، يكون هذا هو زر الاختيار "خصم 5٪").

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

  1. يتم تعيين نوع القيمة المحددة بواسطة رمز التبديل الذي يحتوي على خاصية "FirstInGroup".

يتكون تطوير الواجهة في 1C من جزأين - تطوير قائمة أو سطح مكتب وتطوير أشكال شاشة 1C. النوافذ التي يعمل بها المستخدم في 1C تسمى أشكال الشاشة 1C أو ببساطة نماذج 1C.

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

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

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

سننتقل الآن إلى برنامج تعليمي موجز حول رسم نماذج 1C.

ما هي أشكال 1C

النموذج 1C هو طريقة العرض للمستخدم. عادةً ما يكون النموذج عبارة عن سلسلة من الحقول التي يجب ملؤها ومجموعة من الأزرار (أوامر القائمة) للتحكم. النموذج 1C متاح لمعظم كائنات 1C.

يستخدم العميل السميك 1C نماذج 1C "العادية". هذا يعني أن المبرمج يرسم ببساطة نموذج 1C بالماوس ، تمامًا كما يحدث في Visual Studio وأطر أخرى.

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

معظم أشكال التكوينات النموذجية 1C في 1C لها تمثيلها النموذجي الخاص ، والمألوف لدى المستخدم.

كيف تعمل أشكال 1C

منطق (ترتيب) عمل المستخدم في 1C هو كما يلي:

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

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

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

أين هي النماذج 1C

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

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

خيار آخر هو فتح محرر الكائنات (مرتين باستخدام الماوس أو وضع المؤشر و Enter) والانتقال إلى علامة التبويب Form 1C.

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

إنشاء نماذج 1C

لإضافة نموذج 1C جديد ، تحتاج إلى النقر فوق الزر "إضافة" (Ins on the keyboard). لإدخال واحدة موجودة ، انقر نقرًا مزدوجًا عليها بالماوس.

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

يتم فتح نموذج 1C ، ويتم ملؤه افتراضيًا - جميع تفاصيل كائن 1C التي تمت إضافتها إليه. يمكنك تحديد قائمة محددة من الحقول المطلوبة في علامة التبويب الثانية للمنشئ.

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

لنقل سمات أخرى إلى المساحة الخالية ، حددها بنفس الطريقة واسحبها بالماوس.

لإضافة تفاصيل جديدة إلى نموذج 1C ، انقر فوق الزر الموجود في لوحة وضع البيانات (نموذج القائمة / وضع البيانات) ، وحدد المربعات الخاصة بالعناصر التي تريد إضافتها ، بالإضافة إلى مربعي الاختيار "إدراج تسميات" و "وضع تلقائيًا" .

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

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

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

لتغيير حجم النموذج 1C ، ما عليك سوى تحريك المؤشر إلى حافة النموذج 1C ، واضغط على زر الماوس الأيسر واسحب ببساطة حافة النموذج 1C.

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

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

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

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

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

التحقق من استكمال النموذج العادي

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

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

سيؤدي تسجيل عناصر الدليل أو ترحيل المستندات التي تحتوي على حقول إلزامية غير مملوءة إلى استثناء (الشكل 2).

أرز. 2

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

يتم تعيين العلامة نفسها ، للإبلاغ عن الملء الإلزامي للحقل ، في خصائص عنصر النموذج. لهذا:

  1. افتح النموذج في Configurator ؛
  2. نقوم بالنقر بزر الماوس الأيمن فوق عنصر النموذج ، ثم ندعو نافذة "خصائص" ؛
  3. من الضروري تحديد المربعات AutoMarkUnfilled و AutoSelectUnfilled في القائمة الفرعية "Usage" (الشكل 3) ؛

الفحص المباشر ، كقاعدة عامة ، يسجل في وحدة الكائن.

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

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

التحقق من الصحة في النماذج المُدارة

تترك ميزات النظام الأساسي في إصدار العميل-الخادم بصماتها على فحص الملء.

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

لذلك ، بعد الضغط على زر "تسجيل" ، "موافق" ، "إرسال":

  1. يسمى الإجراء "قبل الكتابة" على العميل ؛
  2. يتم نقل البيانات إلى الخادم وتحدث الأحداث المسجلة في وحدة النموذج على الخادم (هنا يمكنك تشغيل إجراء ProcessingFillCheckOnServer) ؛
  3. يتم نقل بيانات النموذج إلى وحدة الكائن على الخادم (يصبح من الممكن تشغيل الإجراء القياسي FillCheckProcessing) ؛
  4. يتم إرجاع البيانات من الوحدة النمطية إلى الوحدة النمطية للنموذج على الخادم ، ويحدث الإجراء BeforeWriteOnServer ؛
  5. يتم إرجاع البيانات إلى وحدة الكائن ، ويحدث إجراء BeforeWrite آخر ؛
  6. يتم كتابة الكائن مباشرة إلى قاعدة البيانات.

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

الاختلافات بين المعالجات HandleFillCheck () و ProcessFillCheckOnServer ()

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

  1. الرفض (هنا ، بعد الشيك ، يتم إرسال نتائجه) ؛
  2. CheckedAttributes (نوع البيانات عبارة عن مصفوفة ، إذا لم يتم ملؤها ، فسيتم فحص جميع التفاصيل التي تم تعيين الخصائص لها على "فحص الملء" ، وإلا ستتم معالجة التفاصيل المحددة برمجيًا).

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

يتحقق إجراء ProcessingFillingCheck () من التفاصيل الأساسية.