استعلامات متداخلة في المنشئ. العمل مع مصمم الاستعلام مع الإخراج إلى مستند جدول بيانات، مصمم الاستعلام 1C 8.3 كيفية التشغيل

19.02.2024 برمجة

يتكون مصمم الاستعلام من علامات التبويب التالية:

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

يمكنك تعيين معلمات للجداول الافتراضية من خلال النقر على زر "معلمات الجداول الافتراضية":

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

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

2. "العلاقات" - تشير علامة التبويب إلى الاتصالات بين الجداول.

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

3. "التجميع" - تشير علامة التبويب إلى الحقول التي تم تجميعها والتي تم تجميعها (تلخيصها).

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

5. "متقدم"
المعلمات الإضافية المفروضة على الطلب

6. "الجمعيات والأسماء المستعارة"
في علامة التبويب هذه، يمكنك تعيين أسماء مستعارة للحقول، بالإضافة إلى إدارة الاستعلامات المرتبطة من خلال بنيات "UNITE" أو "UNITE ALL".

7. "النظام"
بأي ترتيب سيتم عرض نتائج الاستعلام؟

انتباه! في الجزء السفلي من الإشارة المرجعية، يمكنك رؤية علامة اختيار "الطلب التلقائي"- في الإصدار الحالي من 1C 8.1 في ACS، لا فائدة منه؛ علاوة على ذلك، عند تحديد مربع الاختيار، ينتج ACS خطأً عند التسجيل، لذا لا يجب استخدامه.

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

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

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

9. "الخصائص"
إشارة مرجعية ليس لها مثيل في مُنشئ نموذج الإخراج المعتاد.

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

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

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

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

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

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

ونتيجة لهذا الارتباط نحصل على نص الطلب التالي:

حدد VT_Product.رمز المنتج، VT_Product.Name، VT_Country.Country من VT_Product AS VT_Product LEFT JOIN VT_Country AS VT_Country BY VT_Product.رمز المنتج = VT_Country.رمز المنتج

الآن دعونا نلقي نظرة فاحصة على بعض النقاط.
دعونا نحاول تبديل مربع الاختيار الجميع.


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

حدد VT_Product.رمز المنتج، VT_Product.Name، VT_Country.Country من VT_Country AS VT_Country LEFT JOIN VT_Product AS VT_Product BY VT_Product.رمز المنتج = VT_Country.رمز المنتج

دعونا نرى ما سيحدث إذا قمنا بإلغاء تحديد كلا المربعين

ونتيجة لذلك، نحصل على اتصال داخلي.

حدد VT_Product.رمز المنتج، VT_Product.Name، VT_Country.Country من VT_Product AS VT_Product AS INTERNAL JOIN VT_Country AS VT_Country BY VT_Product.رمز المنتج = VT_Country.رمز المنتج

أخيرًا، إذا تم تحديد خانتي الاختيار


نحصل على اتصال كامل

حدد VT_Product.رمز المنتج، VT_Product.Name، VT_Country.Country من VT_Product AS VT_Product FULL CONNECTION VT_Country AS VT_Country BY VT_Product.رمز المنتج = VT_Country.رمز المنتج

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


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

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

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

وصف مصمم الاستعلام على موقع 1C 8 الرسمي: v8.1c.ru

الجداول والحقول. ; ; ; ; ; الاستعلامات المتداخلة (قيد التطوير).

من أجل الاتصال بمصمم الاستعلام 1s 8 في كود البرنامج، يجب عليك:

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

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

الدرس 1. منشئ الاستعلام هو أبسط حالة استخدام.

المهمة: اكتب طلبًا إلى دليل التسميات، وحدد تسميات الدليل بالكامل.

علامات تبويب جديدة: الجداول والحقول.

آليات جديدة: عرض نص الطلب وتحريره باستخدام زر "طلب".

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

الجزء النظري من الدرس رقم 1

فاتورة غير مدفوعة الجداول والحقوليتكون من ثلاثة أقسام:

قاعدة البيانات. يعرض هذا القسم جميع جداول قاعدة البيانات التي يمكن استخدامها لبناء استعلام؛

الجداول. في هذا القسم تم تحديد الجداول اللازمة لهذا الاستعلام. ثم نقلهم من القسم قاعدة البياناتبحاجة ل:

  • أو انقر نقرًا مزدوجًا على الجدول؛
  • أو استخدم الزرين ">" أو ">>".

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

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

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

  • أو انقر نقرًا مزدوجًا فوق الحقل؛
  • أو استخدم الزرين ">" أو ">>"؛
  • يمكنك أيضًا إضافة حقل جديد بنفسك، باستخدام تعبير عشوائي من حقول الجداول المحددة ووظائف لغة الاستعلام.

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

  • يضيف(الخط الأخضر). مصمم لإضافة حقل جديد باستخدام محرر التعبير الحر؛
  • تغيير العنصر الحالي(خط أحمر). يسمح لك بتغيير الحقل المحدد باستخدام المحرر؛
  • حذف الحالي(خط أزرق). إزالة الحقل المحدد من القائمة.

الجزء العملي من الدرس رقم 1

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

لنبدأ في إنشاء طلب للعناصر:

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

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

لنفترض أن لدينا هذا السجل البسيط للمعلومات، حيث يتم تخزين الأسعار بواسطة السلع والموردين:

نريد أن نطلب استلام جميع المنتجات التي لديها أكثر من مورد. ويمكن تنفيذ ذلك باستخدام الاستعلام التالي:

حدد عدد الموردين.المنتج كمنتج من (اختر السعر.المنتج كمنتج، الكمية (سعر مختلف.المورد) كموردين من معلومات التسجيل.السعر كمجموعة السعر حسب السعر.المنتج) كعدد الموردين حيث عدد الموردين.الموردون > 1

تشكيل استعلام متداخل في المنشئ

لنقم بإنشاء الطلب أعلاه باستخدام المُنشئ.

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


وبعد ذلك سيتم فتح نافذة تحتوي على مثيل آخر لمنشئ الاستعلام:


وفي هذه النافذة الجديدة نقوم بإنشاء استعلام متداخل:




النقر على الزر طلبفي الزاوية اليسرى السفلية يمكننا رؤية نص الاستعلام الفرعي:


بعد الضغط على زر موافق في المنشئ المساعد، نحصل على الصورة التالية في النافذة الرئيسية:


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




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

كيفية عمل استعلام متداخل من استعلام عادي في المُنشئ

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

لذا، لنبدأ بشيء بسيط: قم بإنشاء معالجة جديدة في أداة التهيئة، وقم بتسميتها Query Console أو Query Builder، كما تريد.

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

لإنشاء جدول المعلمات الخاص بنا، في علامة التبويب "البيانات" في "الجزء الجدولي" الخاص به، سنضيف جدولًا جديدًا، لنسميه معلمات الاستعلام، وهنا سنضيف أعمدة هذا الجدول: 1) اسم المعلمة، اكتب سلسلة = 25 حرفًا ; ParameterValue، هنا نوع بيانات مركب، انظر الشكل:

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

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

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

في خصائص سمة "جدول الاستعلام"، يمكنك اختياريًا تحديد "شبكة العرض" و"رؤوس العرض".

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

سيتم فتح وحدة النموذج بإجراء فارغ جاهز "منشئ استعلام الإجراء (الأمر)". داخل هذا الإجراء، سنصف الاتصال بمنشئ الاستعلام القياسي 1c8. فمن السهل جدا: منشئ = منشئ طلب جديد؛ولكن هناك عيوب هنا - يعمل مُنشئ الاستعلام المضمن في النظام الأساسي في وضع المستخدم فقط ضمن عميل كثيف! لذلك، سنقوم بإدراج شرط تعليمات المعالج المسبق #إذا، ولكن هنا تقرر بنفسك، بناءً على النظام الأساسي الخاص بك، أو لديك نماذج عادية، ثم حدد " FatClientRegularApp" أو لديك منصة تعتمد على النماذج المُدارة، ثم " تطبيق سميك من إدارة العميل“.انظر الشكل.

يبقى الآن أن نضيف إلى هذا الإجراء شرطًا لتسجيل نص الطلب، والذي سينشئه لنا منشئ الاستعلام في تفاصيل نموذج "نص الطلب":

إذا كان Constructor.OpenModal()=True ثم Object.RequestText=Constructor.Text; إنهاء إذا؛

ولكن يمكننا تغيير شيء ما يدويًا في نص الطلب (في وضع المستخدم - في نافذة سمة "نص الطلب") بحيث تدخل تغييراتنا إلى مُنشئ الاستعلام عند استدعائه مرة أخرى - سنضيف شرطًا بسيطًا هنا:

إذا لم يكن EmptyString(Object.QueryText) ثم Constructor.Text = Object.QueryText؛ إنهاء إذا؛

هذا كل شيء، لقد قمنا بتوصيل منشئ الاستعلام المدمج في النظام الأساسي 1c8، فلنلقِ نظرة على عملنا. للقيام بذلك، قم بتشغيل 1C:Enterprise في وضع العميل الكثيف باستخدام إحدى الطرق التالية: 1) القائمة الرئيسية لـ Configurator – Debugging – Start Debugging – سميكة Client؛ 2) أو إذا كانت لديك هذه المفاتيح على لوحة التحكم في أداة التهيئة - فقط اضغط على الزر ذو الدائرة الصفراء ذات النقطة السميكة، انظر الشكل:

يبدأ وضع المستخدم لـ 1cEnterprise8، ونبحث عن معالجتنا، ونشغلها، ثم ننقر على زر "مصمم الاستعلام" الخاص بنا ونرى كيف يتم فتح المصمم المدمج في النظام الأساسي. انظر الشكل.

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

في إجراء Execute Query()، الذي لدينا على العميل، سنكتب شرطًا إذا لم يُدخل المستخدم نص الاستعلام، ولكنه يطلب تنفيذه:

إذا كان EmptyString(Object.QueryText) ثم تقرير("أدخل نص الاستعلام!"); إنهاء إذا؛

لقد قام النظام تلقائيًا بإنشاء رابط لإجراء Execute RequestOnServer(); - هذا جيد، فلننتقل إلى هذا الإجراء الذي يتم تنفيذه على الخادم، ونكتب هنا رمز تنفيذ الطلب الذي أدخلناه.

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

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

بعد ذلك، سيظهر القالب الجاهز التالي داخل إجراء ExecuteRequestOnServer() الخاص بنا:

دعنا ننتقل إلى التعبير الذي أنشأه المنشئ:

Request.Text = "";

Request.Text = Object.RequestText;

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

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

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

وإذا كتبنا الآن بعد التعبير Query Result = Query.Execute(); (الذي أنشأه المُنشئ)، فإليك دورة بسيطة للمجموعات:

لكل اسم عمود من نتيجة الاستعلام. تقرير حلقة الأعمدة (ColumnName.Name)؛ EndCycle;

بعد هذه الدورة، قم بتدوين جميع التعبيرات التي تم إنشاؤها تلقائيًا بواسطة المنشئ. وقم بتشغيل 1C:Enterprise8 ضمن العميل الكثيف. أنشئ أي استعلام بسيط (يمكنك استخدام Query Builder - إنه يعمل بالفعل بالنسبة لنا) وانقر على زر "تشغيل الاستعلام":

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

والآن دعونا نعرض هذه الأسماء لمجالات معاناتنا في وثيقة جدولية:

لكل عمود من نتيجة الاستعلام.Columns Loop Cell=Object.QueryTable.Area(1,QueryResult.Columns.Index(ColumnName)+1); Cell.Text=ColumnName.Name; EndCycle;

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

SelectionDetailRecords = QueryResult.Select(); أثناء حلقة SelectionDetailedRecords.Next() // في السطر الأول لدينا بالفعل أسماء أعمدة الجدول مكتوبة، لذلك نقوم بتحميل البيانات أسفل السطر الأولDocRowNumber=Object.QueryTable.TableHeight+1; لكل ColumnName من نتيجة الاستعلام.Columns Cycle Cell=Object.QueryTable.Area(DocRowNumber,QueryResult.Columns.Index(ColumnName)+1); Cell.Text = SelectionDetailedRecords[ColumnName.Name]; EndCycle; EndCycle;

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

مرحى، كل شيء يعمل!!!

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

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

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

وحدة تحكم الاستعلام الخاصة بنا جاهزة للاستخدام، أتمنى لك حلولًا إبداعية ناجحة باستخدام أداة بسيطة وقوية مثل وحدة تحكم الاستعلام!

تتم كتابة هذه المعالجة على النظام الأساسي 1c8.3 (النماذج المُدارة) ويتم تشغيلها ضمن عميل كثيف. ويمكن أيضًا كتابتها على منصة 1c8.2، سواء ضمن النماذج العادية أو ضمن النماذج المُدارة.

يحتوي التنزيل على عينة من وحدة تحكم الاستعلام التي أنشأناها للتو.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

ترقية وحدة تحكم الاستعلام:

1) الآن سيتم تشغيل وحدة تحكم الاستعلام محلية الصنع الخاصة بنا والمزودة بمنشئ استعلام مدمج تحت أي عميل: ضمن عميل كثيف للنماذج العادية والمدارة وتحت عميل رفيع وويب.

ملاحظة: يختلف شكل ومظهر Query Builder المدمج - اعتمادًا على العميل الذي أطلقنا عليه وحدة التحكم الخاصة بنا (أنا شخصياً أكثر دراية وملاءمة لشكل Query Builder ضمن عميل كثيف).

&في مُنشئ استعلام إجراء العميل (الأمر) // لا يكون استدعاء مُنشئ الاستعلام القياسي ممكنًا إلا في ظل عميل سميك #If سميكةClientManagedApplication أو سميكةClientNormalApplication ثم Constructor=New Query Constructor; إذا لم يكن EmptyString(Object.QueryText) ثم Constructor.Text = Object.QueryText؛ إنهاء إذا؛ إذا كان Constructor.OpenModal()=True ثم Object.RequestText=Constructor.Text; إنهاء إذا؛ // #Else // Report("استدعاء منشئ الاستعلام ممكن فقط في ظل عميل كثيف"); // يعود؛ //# EndIf #Else Report("أنت تقوم بتشغيل Query Builder ضمن عميل رفيع - يختلف قليلاً في الشكل وسرعة الأداء!"); Constructor = New QueryConstructor(); إذا لم يكن EmptyString(Object.QueryText) ثم Constructor.Text = Object.QueryText؛ إنهاء إذا؛ Constructor Alert = New AlertDescription("RunAfterClosingConstructor", ThisForm); Constructor.Show(تنبيه المنشئ); # EndIf نهاية الإجراء &عند تنفيذ إجراء العميلAfterClosingConstructor(Result, ConstructorParameters) تصدير //Result=text، إذا تم إغلاق Constructor باستخدام زر موافق Object.RequestText = AbbreviatedLP(Result); // يعمل !!! نهاية الإجراء

2) تمت إضافة القدرة إلى وحدة تحكم الاستعلام البسيطة الخاصة بنا لإدخال استعلامات معقدة باستخدام جدول مؤقت تم تمريره إلى المعلمات !!! تبين أن الآلية بسيطة للغاية وأنيقة - دون استخدام كود XML، كما هو الحال في وحدات التحكم الاحترافية.

يمكنك الاطلاع على الكود نفسه وإجراءات آلية النقل إلى معلمات الجداول المؤقتة في الملف الثاني المرفق. كيف بدأت في تطوير نسختي الخاصة من الجداول المؤقتة في المعلمات يمكن العثور عليها على هذا الرابط https://forum.infostart.ru/forum9/topic183700/

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

حدد ExternalData.Product، ExternalData.Quantity، ضع ExternalData من &ExternalData AS ExternalData؛ ////////////////////////////////////////////////////////////////////// /////////////////////////// SELECT ExternalData.Product, ExternalData.Quantity, ISNULL(RemainingProductRemaining.QuantityRemaining, 0) AS Field1, ISNULL(Remaining ProductsRemainings.QuantityRemaining, 0) - ExternalData.Quantity AS المتبقية من ExternalData AS ExternalData LEFT JOIN تسجيل التراكمات. المنتجات المتبقية.Remainings(&التاريخ، المنتج IN (SELECT ExternalData.Product FROM ExternalData AS ExternalData)) AS المنتجات المتبقية Remaining ki برامج ExternalData.Product = المنتج المتبقي المنتج المتبقي

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

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

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

لاحظ هنا أنه في هذه الحالة، في صفحة "الجداول الزمنية" في الأسفل في حقل "اسم الجدول المؤقت في المعلمات"، سيظهر اسم جدولنا المؤقت (يتم نسخه من جدول المعلمات).

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

الآن نضغط على زر "تحديث الجدول المؤقت" - وسيكون لدينا هنا جدول ثانٍ - وسنملأه مباشرة ببيانات الجدول المؤقت من خلال زر "إضافة".

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

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

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

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