إنشاء الطلبات والعمل معها (للمبتدئين). إنشاء الاستعلامات والعمل معها (للمبتدئين) الحالة في أمثلة استعلام 1C

تعد لغة الاستعلام إحدى الآليات الأساسية لـ 1C 8.3 للمطورين. باستخدام الاستعلامات، يمكنك استرداد أي بيانات مخزنة في قاعدة البيانات بسرعة. بناء الجملة الخاص به مشابه جدًا لـ SQL، ولكن هناك بعض الاختلافات.

المزايا الرئيسية للغة الاستعلام 1C 8.3 (8.2) مقارنة بـ SQL:

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

عيوب لغة الاستعلام في 1C:

  • على عكس SQL، في استعلامات 1C لا تسمح بتغيير البيانات؛
  • نقص الإجراءات المخزنة.
  • استحالة تحويل سلسلة إلى رقم.

دعونا نلقي نظرة على برنامجنا التعليمي المصغر حول التركيبات الأساسية للغة الاستعلام 1C.

نظرا لحقيقة أن الاستعلامات في 1C تسمح لك فقط بتلقي البيانات، يجب أن يبدأ أي استعلام بكلمة "SELECT". بعد هذا الأمر، تتم الإشارة إلى الحقول التي يجب الحصول على البيانات منها. إذا قمت بتحديد "*"، فسيتم تحديد جميع الحقول المتاحة. تتم الإشارة إلى المكان الذي سيتم اختيار البيانات منه (المستندات والسجلات والأدلة وما إلى ذلك) بعد كلمة "من".

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

يختار
Nomenclature.Name AS اسم التسمية
من
Directory.Nomenclature AS التسميات

بجانب الأمر "SELECT"، يمكنك تحديد الكلمات الرئيسية:

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

يمكن استخدام هذه الكلمات الرئيسية معًا أو بشكل منفصل.

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

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

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

يختار
التسويات المتبادلة.الموظف،
التسويات المتبادلة مبلغ التسويات المتبادلة الرصيد
من
سجل التراكمات التسويات المتبادلة مع الموظفين أرصدة AS التسويات المتبادلة
من أجل التغيير

أين

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

فيما يلي مثال لطلب الحصول على أشخاص يمكن الاتصال بهم لوظيفة معينة. تحتوي معلمة التحديد على التنسيق: &ParameterName (اسم المعلمة عشوائي).

الاختيار (الحالة)

يتيح لك التصميم تحديد الشروط مباشرة في نص الطلب.

في المثال أدناه، سيحتوي "الحقل الإضافي" على نص بناءً على ما إذا كان المستند قد تم ترحيله أم لا:

يختار
القبولT&U.Link،
خيار
عند إجراء القبول T&U
ثم "لقد تم تمرير الوثيقة!"
آخر "لم يتم نشر المستند..."
نهاية كحقل إضافي
من
الوثيقة استلام البضائع والخدمات كيفية الاستلام الشروط والأحكام

ينضم

تربط الصلات جدولين بناءً على حالة علاقة محددة.

اتصال يسار/يمين

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

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

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

في اليمين، كل شيء هو عكس ذلك تمامًا.

اتصال كامل

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

عند استخدام الاتصال الكامل في المثال السابق، سيتم تحديد جميع أصناف الأصناف من مستند "استلام البضائع والخدمات" وجميع الأسعار الأحدث من سجل "أسعار الأصناف". ستكون قيم السجلات غير الموجودة في الجدولين الأول والثاني مساوية لـ NULL.

صلة داخلية

الفرق بين INNER JOIN وFULL JOIN هو أنه إذا لم يتم العثور على سجل في أحد الجداول على الأقل، فلن يعرضه الاستعلام على الإطلاق. ونتيجة لذلك، سيتم فقط تحديد عناصر العناصر من المستند "استلام البضائع والخدمات" التي توجد لها سجلات في سجل المعلومات "أسعار العناصر"، إذا قمنا في المثال السابق باستبدال "كامل" بـ "داخلي".

مجموعة من

يتيح لك التجميع في استعلامات 1C طي صفوف الجدول (حقول التجميع) وفقًا لخاصية مشتركة معينة (حقول التجميع). لا يمكن عرض حقول التجميع إلا باستخدام الوظائف المجمعة.

ستكون نتيجة الاستعلام التالي قائمة بأنواع المنتجات مع الحد الأقصى لأسعارها.

يختار
,
الحد الأقصى (السعر.السعر) AS السعر
من

مجموعة من
الأسعار.التسميات.نوع التسميات

نتائج

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

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

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

يختار
الأسعار.التسميات.نوع التسميات AS نوع التسميات،
الأسعار.السعر AS السعر
من
سجل المعلومات أسعار التسميات لقطة لأحدث أسعار AS
نتائج
الحد الأقصى(السعر)
بواسطة
نوع التسمية

نأخذ

يشبه هذا العامل عامل التشغيل WHERE، ولكنه يُستخدم فقط للوظائف المجمعة. يجب تجميع الحقول المتبقية، باستثناء تلك التي يستخدمها عامل التشغيل هذا. لا ينطبق عامل التشغيل WHERE على الوظائف المجمعة.

في المثال أدناه، يتم تحديد الحد الأقصى لأسعار أحد العناصر إذا تجاوزت 1000، ويتم تجميعها حسب نوع العنصر.

يختار

الحد الأقصى (السعر.السعر) AS السعر
من
سجل المعلومات أسعار التسميات لقطة لأحدث أسعار AS
مجموعة من
الأسعار.التسميات.نوع التسميات
نأخذ
الحد الأقصى(الأسعار.السعر) > 1000

ترتيب حسب

يقوم عامل التشغيل ORDER BY بفرز نتيجة الاستعلام. لضمان عرض السجلات بترتيب متسق، يتم استخدام AUTO ORDER. يتم فرز الأنواع البدائية وفقًا للقواعد المعتادة. يتم فرز أنواع المراجع حسب GUID.

مثال للحصول على قائمة بالموظفين مرتبة حسب الاسم:

يختار
الموظفين.الاسم AS الاسم
من
Directory.Employees كيف الموظفين
ترتيب حسب
اسم
طلب تلقائي

بنيات لغة الاستعلام 1C الأخرى

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

ميزات لغة الاستعلام

  • سلسلة فرعيةيقتطع سلسلة من موضع محدد إلى عدد محدد من الأحرف.
  • السنة...الثانيةتسمح لك بالحصول على القيمة المحددة لنوع رقمي. معلمة الإدخال هي التاريخ.
  • بداية الفترة ونهاية الفترةتستخدم عند العمل مع التواريخ. تتم الإشارة إلى نوع الفترة (يوم، شهر، سنة، وما إلى ذلك) كمعلمة إضافية.
  • تاريخ الإضافةيسمح لك بإضافة أو طرح وقت محدد من نوع معين من تاريخ (SECOND، MINUTE، DAY، إلخ).
  • الفرقيحدد الفرق بين تاريخين، مع الإشارة إلى نوع قيمة الإخراج (يوم، سنة، شهر، إلخ.).
  • باطليستبدل القيمة المفقودة بالتعبير المحدد.
  • روابط التمثيل والتمثيلالحصول على تمثيل سلسلة للحقل المحدد. تنطبق على أي قيم والقيم المرجعية فقط، على التوالي.
  • النوع، نوع القيميتم استخدامها لتحديد نوع معلمة الإدخال.
  • وصلةهو عامل مقارنة منطقي لنوع قيمة السمة.
  • يعبريستخدم لتحويل القيمة إلى النوع المطلوب.
  • التاريخ والوقتيحصل على قيمة من النوع "التاريخ" من القيم الرقمية (السنة، الشهر، اليوم، الساعة، الدقيقة، الثانية).
  • معنىفي طلب 1C يتم استخدامه للإشارة إلى القيم المحددة مسبقًا - الدلائل والتعدادات وخطط أنواع الخصائص. مثال الاستخدام: " حيث الفرد القانوني = القيمة (التعداد. الفرد القانوني. الفرد)«.

منشئ الاستعلام

لإنشاء استعلامات باستخدام 1C، توجد آلية مدمجة مريحة للغاية - مصمم الاستعلام. ويحتوي على علامات التبويب الرئيسية التالية:

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

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


طلب وحدة التحكم

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

يمكنك تنزيل وحدة تحكم الاستعلام على قرص ITS أو عبر .

كليويف ف.

http://prof1c.kklab.ru

الخلق والعمل مع الطلبات. أبسط العملياتللمبتدئين(التطبيق العادي)

مساء الخير

أريد اليوم أن أخبرك عن كيفية البدء في العمل مع الاستعلامات والتعلم (بالتدريج بالطبع) كيفية التعامل مع الاستعلامات في 1C. لأولئك المطلعين على استعلامات MS
وبطبيعة الحال، سيكون SQL أبسط من ذلك بكثير.

لذلك دعونا نفتح أداة التهيئة وننشئ معالجة خارجية جديدة.

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

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

واكتب الكود التالي :

الإجراء ButtonExecutePress(Button) Request = New Request(); طلب. النص = "حدد | * | من| وثيقة . فاتورة الدفع للمشتري" ; النتيجة = استعلام. تنفيذ (). إلغاء التحميل ()؛ نهاية الإجراء

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

باستخدام الكلمة الرئيسية "حدد" نطلب منا تحديد جميع الحقول (*) (تفاصيل المستند) من مستند "فاتورة الدفع للمشتري".

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

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

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

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

لذلك، قمنا الآن بتعيين نقطة توقف على السطر مع النتيجة، فلنقم الآن بتشغيل التكوين لتصحيح الأخطاء بالضغط على المفتاح (F 5) أو الزر
على شريط الأدوات:

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

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

لتصور الطلب، قم بما يلي: في القائمة العلوية للمكون، ابحث عن قائمة التصحيح وحدد أمر Tableau.

سيتم فتح نافذة فارغة -> Tableau - في الجزء السفلي من نافذة المكوِّن. هناك خطوط فارغة في هذه النافذة. انقر نقرًا مزدوجًا فوق السطر المميز الفارغ واكتب كلمة النتيجة. يجب أن تحصل على ما يلي:

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

لنأخذ خطوة - لتنفيذ السطر المحدد من التعليمات البرمجية. للقيام بذلك، اضغط على المفتاح، أو في القائمة تصحيح->الخطوة خلال... (F 10).

وماذا نرى في لوحتنا:

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

نحصل على نافذة تحتوي على المستندات التي اخترناها والموجودة في متغير النتيجة

كي تختصر:

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

يعد الاستعلام أداة قوية تعمل على الحصول بسرعة (مقارنة بجميع الطرق الأخرى) على البيانات الموجودة في الكائنات المختلفة لقاعدة معلومات 1C ومعالجتها.

إنشاء طلب

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

// أنشئ طلبًا
طلب = طلب جديد؛

// املأ نص الطلب
طلب. نص= "هنا نكتب نص الطلب";

// تمرير المعلمات إلى الطلب
طلب. SetParameter("ParameterName" , ParameterValue) ;

// تنفيذ الطلب
النتيجة = الاستعلام. يجري() ؛

// قم بتحميل نتيجة الاستعلام إلى التحديد
العينة = النتيجة. يختار() ؛

// قم بتحميل نتيجة الاستعلام إلى جدول القيمة
الجدول = النتيجة. تفريغ () ؛

// يمكن دمج الإجراءات الأخيرة
جلب = الاستعلام يجري() . يختار() ؛
//أو
الجدول = الاستعلام. يجري() . تفريغ () ؛

أساسيات لغة الاستعلام 1C

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

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

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

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

طلب. النص = "يختار
| *
|من
| الدليل.الأطراف المقابلة"
;

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

طلب. النص = "يختار
| شفرة،
| اسم،
| الأبوين
|من
| الدليل.الأطراف المقابلة"
;

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

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

طلب. النص = "يختار
| العملاء.رمز AS رقم،

| 1000 AS FieldWithValue
|من
;

جلب = الاستعلام يجري() . يختار() ؛

وداعا الاختيار. التالي () حلقة
رقم العميل = عينة. رقم؛
اسم العميل = التحديد. اسم؛
القيمة = العينة. this.FieldWithValue;
دورة النهاية؛

استخدم علامة التبويب لتعيين الأسماء المستعارة النقابات / الأسماء المستعارةالخامس منشئ الاستعلام.

يتم إنشاء حقل بقيمة ثابتة أو محسوبة يدويًا في علامة التبويب الجداول والحقول، في عمود مجالات.

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

// اطلب العملاء حسب الاسم من الألف إلى الياء وحدد العشرة الأوائل
طلب. النص = "اختر أول 10
| العملاء.رمز AS رقم،
| العملاء.الاسم AS الاسم،
| 1000 AS FieldWithValue
|من

|الطلب حسب
| اسم"
;

// حدد أحدث عميل أبجدي
طلب. النص = "اختر أعلى 1
| العملاء.رمز AS رقم،
| العملاء.الاسم AS الاسم،
| 1000 AS FieldWithValue
|من
| الدليل.الأطراف المقابلة كعملاء
|الطلب حسب
| انخفاض الاسم"
;

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

// أخذ العينات من البيانات المسموح بها للمستخدم
طلب. النص = "حدد المسموح به
| العملاء.رمز AS رقم،
| العملاء.الاسم AS الاسم،
| 1000 AS FieldWithValue
|من
| الدليل. الأطراف المقابلة كعملاء"
;

// اختيار العناصر غير المتكررة
طلب. النص = "اختر مختلفًا
| العملاء.رمز AS رقم،
| العملاء.الاسم AS الاسم،
| 1000 AS FieldWithValue
|من
| الدليل. الأطراف المقابلة كعملاء"
;

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

يتبع…

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

1. تصميم "IZ".

من أجل الحصول على البيانات من قاعدة البيانات، ليس من الضروري على الإطلاق استخدام البناء "من".
مثال: نحتاج إلى تحديد جميع المعلومات الخاصة بالبنوك من دليل البنوك.
طلب:

اختر الدليل.البنوك.*

تحديد كافة الحقول من دليل البنوك. و يشبه الطلب:

حدد البنوك.* من Directory.Banks AS البنوك

2. ترتيب البيانات حسب الحقل المرجعي

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

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

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

3.الحصول على تمثيل نصي لنوع مرجعي. تصميم "العرض التقديمي".

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

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

4. شروط أخذ العينات وفقا للنموذج.

على سبيل المثال، تحتاج إلى الحصول على الهواتف المحمولة للموظفين من النموذج (8 -123- 456-78-912). للقيام بذلك، تحتاج إلى تعيين الشرط التالي في الطلب:

حدد اسم الموظف، الموظف. الهاتف كهاتف من الدليل. الموظفون كموظفين حيث الهاتف مثل "_-___-___-__-__"

الحرف "_" هو حرف خدمة ويحل محل أي حرف.

5. الاستخدام المتزامن للمجاميع والتجمعات.


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

حدد توفير الخدمات.المنظمة AS المنظمة، تقديم الخدمات.التسميات AS التسميات، SUM(تقديم الخدمات.كمية المستند) AS مجموع المستند من المستند.تقديم الخدمات AS تقديم الخدمات GROUP BY توفير الخدمات.المنظمة، التقديم of Services.Nomenclature RESULTS BY GENERAL, Organization, Nomen klatura

في هذه الحالة، سيعود الاستعلام تقريبًا نفس الاستعلام التالي:

حدد توفير الخدمات.المنظمة AS المنظمة، تقديم الخدمات.التسميات AS التسميات، تقديم الخدمات. مقدار المستند AS مبلغ المستند من المستند. تقديم الخدمات مثل تقديم الخدمات النتائج المبلغ (كمية المستند) حسب العام، المنظمة، التسميات

الاستعلام الأول فقط هو الذي سيعمل على طي السجلات التي لها نفس التسمية.

6. إلغاء الإشارة إلى الحقول.

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

طلب:

يمكن تمثيلها على النحو التالي:

حدد Payment.Link، Payment.Organization، Payment.Organization، المنظمات. الوحدة الإدارية من Document.Payment AS Payment LEFT JOIN Directory.Organizations AS Software Organizations Payment.Organization = Organizations.Link

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

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

حدد UnallocatedPayments.Register.Date، ..... من RegisterAccumulation.UnallocatedPayments AS UnallocatedPayments

يجب عليك تقييد نوع الحقل المركب للمسجل:

حدد EXPRESS(UnallocatedPayments.Register AS Document.Payment).التاريخ، ..... من RegisterAccumulation.UnallocatedPayments AS UnallocatedPayments

7. البناء "أين"

من خلال الربط الأيسر لجدولين، عندما تفرض شرط "أين" على الجدول الأيمن، سنحصل على نتيجة مشابهة للنتيجة مع الربط الداخلي للجداول.

مثال. من الضروري تحديد كافة العملاء من دليل العملاء، وبالنسبة للعملاء الذين لديهم مستند دفع بقيمة السمة "Organization" = &Organization، قم بعرض المستند "Payment"، أما أولئك الذين ليس لديهم، فلا يعرضوه.

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

حدد Payment.Link AS الدفع، Payment.Shareholder كعميل ضع المدفوعات من Document.Payment AS الدفع حيث Payment.Branch = &Branch; ////////////////////////////////////////////////////////////////////// /////////////////////////// SELECT Clients.Link AS Client, ISNULL(tPayment.Payment, "") AS الدفع من الدليل .Clients AS العملاء يسارون الاتصال بالمدفوعات كعملاء برامج المدفوعات. الرابط = إلى المدفوعات. العميل

يمكنك التغلب على هذا الشرط بطريقة أخرى. من الضروري فرض شرط "أين" مباشرة على العلاقة بين الجدولين. مثال:

حدد Clients.Link، Payment.Link من Directory.US_Subscribers AS US_Subscribers LEFT CONNECTION Document.Payment AS برنامج الدفع (Clients.Link = Payment.Client AND Payment.Client.Name LIKE "Sugar Packet") المجموعة حسب Clients.Link، الدفع. وصلة

8. ينضم مع الجداول المتداخلة والظاهرية

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

على سبيل المثال، نحتاج إلى الحصول على مبلغ الرصيد اعتبارًا من التاريخ الحالي لبعض العملاء.

حدد UnallocatedPaymentsRemains.Customer، UnallocatedPaymentsRemains.AmountRemaining FROM (SELECT Clients.Link AS Link FROM Directory.Clients AS عملاء حيث Clients.Link IN(&Clients)) AS NestedQuery LEFT JOIN RegisterAccumulations.UnallocatedPayments.Balances AS UnallocatedPayments BY Nested Request.Link = UnallocatedPaymentsBalance ق. عميل

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

حدد Clients.Link AS Link PLACE tClients من Directory.Clients AS عملاء أين
Clients.Link B (&العملاء) ؛ ////////////////////////////////////////////////////////////////////// /////////////////////////// SELECT tClients.Link, UnallocatedPaymentsRemains.AmountRemaining, FROM tClients AS tClients LEFT JOIN RegisterAccumulations.UnallocatedPayments.Balances (, Client IN (اختر tClients.Link من tClients)) AS UnallocatedPaymentsBalances tClients.Link = UnallocatedPaymentsBalances.Clients

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

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

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

حدد Clients.Link AS Link PLACE tClients من Directory.Clients AS Clients INDEX حسب الرابط حيث
Clients.Link B (&العملاء) ؛ ////////////////////////////////////////////////////////////////////// /////////////////////////// SELECT UnallocatedPayments.AmountBalance, UnallocatedPayments.Client AS أرصدة Client PLACE من RegisterAccumulations.UnallocatedPayments.Balances(), Client B ( SELECT tClients.Link FROM tClients)) AS UnallocatedPaymentsBalances; ////////////////////////////////////////////////////////////////////// /////////////////////////// SELECT tClients.Link, toRemainders.AmountRemaining AS AmountRemaining FROM tClients AS tClients LEFT JOIN toRemainders AS Remainders BY tClients.Link = tRemainings.Client

9.التحقق من نتيجة الطلب.

قد تكون نتيجة الاستعلام فارغة؛ للتحقق من القيم الفارغة، استخدم البنية التالية:

ResRequest = Request.Execute(); إذا resQuery.Empty() ثم العودة؛ إنهاء إذا؛

طريقة فارغ()يجب أن تستخدم قبل الأساليب يختار()أو تفريغ ()، حيث أن استرداد المجموعة يستغرق وقتًا.

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

طلب = طلب جديد؛ Query.Text = "SELECT | Clients.Link, | Clients.Birthdate |FROM | Directory.Clients AS Clients |WHERE | Clients.Link = &Client"; لكل صف من TableClients Loop Query.SetParameter("Client"، Client); QueryResult = Query.Execute().Select(); EndCycle;

سيؤدي هذا إلى حفظ النظام من التحقق من بناء الجملة للطلب في حلقة.

11. البناء "وجود".

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

حدد الدفع. العميل، المبلغ (الدفع. المبلغ) كمبلغ من المستند. الدفع كدفعة حيث الشهر (تاريخ الدفع) = 9 مجموعة حسب الدفع. العميل لديه المبلغ (الدفع. المبلغ) > 13000

في المُنشئ، للقيام بذلك، ما عليك سوى الانتقال إلى علامة التبويب "الشروط"، وإضافة شرط جديد وتحديد مربع الاختيار "مخصص". ثم اكتب فقط المبلغ(الدفع.المبلغ) > 13000


12. قيمة فارغة

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

لنلقي نظرة على مثال.

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

حدد "لا توجد مدفوعات" كسمة، وNULL AS مستند مكان للمدفوعات؛ ////////////////////////////////////////////////////////////////////// ////////////////////////// SELECT Clients.Link AS Client، Payment.Link كيفية الدفع، ضع tClientPayment من Directory.Clients AS العملاء، مستند الاتصال الأيسر. Payment AS برامج الدفع Clients.Link = Payment.Shareholder; ////////////////////////////////////////////////////////////////////// /////////////////////////// SELECT tClientPayment.Client FROM tClientPayment AS tClientPayment INTERNAL JOIN tPayment AS tTopay BY tClientPayment.Payment = tPayment.Document

انتبه إلى الجدول المؤقت الثاني tClientPayment. باستخدام الرابط الأيسر، أقوم بتحديد كافة العملاء وجميع المدفوعات لهؤلاء العملاء. بالنسبة للعملاء الذين ليس لديهم مدفوعات، سيكون حقل "الدفع" فارغًا. باتباع المنطق، في الجدول المؤقت الأول "tPayments" قمت بتعيين حقلين، أحدهما NULL، والسطر الثاني "ليس لديه مدفوعات". في الجدول الثالث، أقوم بتوصيل الجدولين "tClientPayment" و"tPayment" باستخدام الحقلين "Payment" و"Document" بربط داخلي. نحن نعلم أن حقل "المستند" في الجدول الأول هو NULL، وفي الجدول الثاني، أولئك الذين ليس لديهم مدفوعات في حقل "الدفع" هم أيضًا NULL. ماذا سيعود هذا الاتصال إلينا؟ لكنها لن تعيد شيئا. لأن المقارنة NULL = NULL لا يتم تقييمها إلى True.

لكي يُرجع الطلب النتيجة المتوقعة، فلنعيد كتابتها:

حدد "لا توجد مدفوعات" كسمة، VALUE(Document.Payment.EmptyLink) AS Document PLACE toPayments؛ ////////////////////////////////////////////////////////////////////// /////////////////////////// SELECT Clients.Link AS Client, ISNULL(Payment.Link, VALUE(Document.Payment.EmptyLink )) كيف الدفع ضع tClientPayment من Directory.Clients كعملاء LEFT CONNECTION Document.Payment AS الدفع بواسطة Clients.Link = Payment.Shareholder; ////////////////////////////////////////////////////////////////////// /////////////////////////// SELECT tClientPayment.Client FROM tClientPayment AS tClientPayment INTERNAL JOIN tPayment AS tTopay BY tClientPayment.Payment = tPayment.Document

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

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

13. ميزة غير موثقة لتصميم "الاختيار متى...ثم...النهاية".

في الحالة عندما يكون من الضروري وصف بناء "الشروط" في الطلب، نستخدم الصيغة القياسية:

حدد التحديد عندما Users.Name = "Vasya Pupkin" ثم "موظفنا المفضل" آخر "نحن لا نعرف هذا" ينتهي كحقل 1 من Directory.Users كمستخدمين

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

حدد الشهر (US_CalculationConsumption_ScheduleTurnover.CalculationPeriod) متى 1 ثم "يناير" متى 2 ثم "فبراير" متى 3 ثم "مارس" متى 4 ثم "أبريل" متى 5 ثم "مايو" متى 6 ثم "يونيو" متى 7 ثم "يوليو" K متى 8 ثم "أغسطس" متى 9 ثم "سبتمبر" متى 10 ثم "أكتوبر" متى 11 ثم "نوفمبر" متى 12 ثم "ديسمبر" ينتهي كشهر

الآن يبدو التصميم أقل تعقيدًا وسهل الفهم.

14. تنفيذ الاستعلام الدفعي.


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

حدد Users.Link AS الاسم الكامل، Users.Date of Birth، Users.Role PUT vtUsers FROM Directory.Users AS Users؛ ////////////////////////////////////////////////////////////////////// /////////////////////////// SELECT tueUsers.Full name, tueUsers.Date of Birth FROM tueUsers AS tueUsers GROUP BY tueUsers.full name, tueUsers . تاريخ الميلاد؛ ////////////////////////////////////////////////////////////////////// ////////////////////////// حدد wUsers.Full الاسم، wUsers.Role FROM wUsers AS wUsers GROUP BY wUsers.Full Name، wUsers. تاريخ ولادة

tPackage = Request.ExecutePackage();

TP_BirthDate = tPackage.Upload();
TP_Roles = tPackage.Unload();

كما نرى، يمكن تنفيذ الاستعلام دفعة واحدة ويمكن معالجة النتيجة كمصفوفة. في بعض الحالات يكون الأمر مريحًا للغاية.

15. الشروط في طلب الدفعة

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

حدد Users.Individual.Name AS الاسم، Users.Individual.Date of Birth AS تاريخ الميلاد، Users.Individual.Code AS Code PLACE vtUsers FROM Directory.Users AS Users؛ ////////////////////////////////////////////////////////////////////// //////////////////// اختيار الأفراد. ربط كفرد من الدليل. الأفراد كأفراد

يمكنك فرض شروط مثل هذا:

حيث الأفراد. أدخل الرمز (حدد vtUsers.Code من vtUsers) والأفراد. الاسم IN (حدد vtUsers.Code من vtUsers) والأفراد. تاريخ الميلاد في (حدد vtUsers.DateBirth من tvUsers)

ويمكنك القيام بذلك على النحو التالي:

أين (رمز الأفراد، اسم الأفراد، تاريخ الميلاد) في (اختر tueUsers.Code، tueUsers.Name، tueUsers.تاريخ الميلاد من tueUsers)

وعلاوة على ذلك، فمن الضروري الحفاظ على النظام.

16. استدعاء منشئ الاستعلام عن "الحالة" في طلب دفعة

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

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

غالبًا ما يتم إنشاء الاستفسارات بشكل سريع وهي تعمل ببساطة على توضيح "التقنيات" التي كنت أفكر فيها.

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

تحديث1. النقاط 11،12
تحديث2. النقاط 13،14،15،16

كتب مستخدمة:
لغة الاستعلام "1C:Enterprise 8" - E.Yu. خروستاليفا
التطوير المهني في نظام 1C:Enterprise 8."

هل أعجبك المقال؟ شارك الموضوع مع أصدقائك!