طلب 1s لتحديد صف واحد يفي بالشرط. مخطط العمل مع الطلب

انتباه! هذه نسخة تجريبية من الدرس ، قد لا تكون موادها كاملة.

تسجيل الدخول كطالب

قم بتسجيل الدخول كطالب للوصول إلى محتوى المدرسة

لغة الاستعلام 1C 8.3 للمبرمجين المبتدئين: عامل شرطي

جملة شرطية في استعلام

دعنا نكتب استعلامًا يحصل على أسماء الطعام والسعرات الحرارية فيه:

والآن دعونا نضيف عمودًا إلى نتيجة الاستعلام ، حيث سنعرض محتوى الدهون في الطعام وفقًا للقواعد التالية:

  • إذا كان محتوى السعرات الحرارية أقل من 100 ، فإن محتوى الدهون يكون منخفضًا ؛
  • إذا كان محتوى السعرات الحرارية من 100 إلى 200 ، فإن محتوى الدهون طبيعي ؛
  • إذا كان محتوى السعرات الحرارية أكثر من 200 ، فإن نسبة الدهون تكون عالية.

كيف يمكن تحقيق ذلك ، لأنه في الجدول الدليللا يوجد عمود محتوى الدهون?

اتضح أنه يمكننا إضافة هذا العمود بأنفسنا باستخدام عامل شرطي داخل الاستعلام:

دعنا نلقي نظرة فاحصة على نص الطلب:

في قسم يختاريتم سرد حقول الاختيار: اسم, سعرات حراريه، ثم بدلاً من الحقل الثالث ، هناك بناء عامل شرطي ، نتيجته تقع في العمود الثالث.

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

لذلك سيعيد الاستعلام الجديد الجدول التالي:

تراجع

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

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

يمكن تعيين الأسماء المستعارة لأي حقل ، بما في ذلك تلك التي لها اسم بالفعل. لنصنع اسمًا مستعارًا غذاءللميدان اسم:

مثال على استخدام الوظيفة التضمين:

حدد الاسم ، حدد عندما SUBSTRING (الاسم ، 1 ، 3) = "حظر" ثم "هذا هو موزة" عندما SUBSTRING (الاسم ، 1 ، 2) = "تشي" ثم "هذه شرائح" أخرى "شيء آخر" نهاية الدليل. غذاء

نتائج شرطية أكثر تعقيدًا

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

فيما يلي مثال عام يوضح كل هذه الخيارات:

خذ الاختبار

ابدأ الاختبار

1. تتم معالجة شروط بيان التحديد (كما يطلق عليه أيضًا)

2. يعود العامل الشرطي دائمًا

3. إذا لم ينجح أي من الشروط ، فسيعيد بيان التحديد القيمة

4. قسم ELSE في البيان الشرطي

5. في شروط بيان الاختيار يمكن استخدامها

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

يتم تنفيذ الطلب حسب التعليمات المعطاة - طلب نص. يتكون نص الطلب وفقًا للصيغة والقواعد لغة الاستعلام. تعتمد لغة الاستعلام 1C: Enterprise 8 على المعيار SQL، ولكن لديها بعض الاختلافات والإضافات.

مخطط العمل مع الطلب

يتكون المخطط العام للعمل مع الطلب من عدة مراحل متتالية:

  1. إنشاء كائن طلب وتحديد نص الطلب ؛
  2. تحديد معلمات الطلب ؛
  3. تنفيذ الطلب والحصول على النتيجة ؛
  4. تجاوز نتيجة الاستعلام ومعالجة البيانات المستلمة.

1. الكائن طلبلديه الممتلكات نصالذي تريد تعيين نص الاستعلام إليه.

// الخيار 1
طلب = طلب جديد ؛
طلب . نص =
"يختار
| أسعار العملات.
| العملات.
| أسعار العملات
| من

| أين
;

// الخيار 2
طلب = طلب جديد("يختار
| أسعار العملات.
| العملات.
| أسعار العملات
| من
| سجل المعلومات. أسعار العملات AS أسعار العملات
| أين
| Currencies.Currency.Currency = & العملة »);

2. يتم تحديد قيم المعلمات بواسطة الطريقة setParameter (< Имя>, < Значение>) . يُشار إلى المعلمات في نص الطلب بالرمز " & وعادة ما تستخدم في شروط الاختيار (قسم WHERE) وفي معلمات الجدول الظاهري.

طلب)؛

3. بعد تعيين النص وتعيين المعلمات ، يجب تنفيذ الاستعلام والحصول على نتيجة التنفيذ. يتم تنفيذ التنفيذ بواسطة طريقة Execute () ، والتي تقوم بإرجاع كائن نتيجة الطلب. من نتيجة الاستعلام ، يمكنك:

  • الحصول على تحديد باستخدام طريقة التحديد (< ТипОбхода>, < Группировки>, < ГруппировкиДляЗначенийГруппировок>) ;
  • تفريغ القيم في جدول القيم أو شجرة القيم باستخدام طريقة Unload (< ТипОбхода>) .

// احصل على مجموعة مختارة

عينة = QueryResult. يختار();

// احصل على جدول القيم
RequestResult = طلب. نفذ - اعدم()؛
الطاولة = QueryResult. تفريغ();

4. يمكنك تجاوز جلب نتيجة الاستعلام باستخدام حلقة:

وداعا إحضار. الحلقة التالية ()
تقرير (اختيار. بالطبع) ؛
نهاية الدورة

قد يبدو مثال الاستعلام الكامل كما يلي:

// المرحلة 1. قم بإنشاء طلب وضبط نص الطلب
طلب = طلب جديد ؛
طلب . نص =
"يختار
| أسعار العملات.
| العملات.
| أسعار العملات
| من
| سجل المعلومات. أسعار العملات AS أسعار العملات
| أين
| Currencies.Currency.Currency = & العملة »;

// المرحلة 2. ضبط المعلمات
طلب . SetParameter ("العملة" ، العملة المختارة);

// المرحلة 3. قم بتنفيذ الاستعلام والحصول على التحديد
RequestResult = طلب. نفذ - اعدم()؛
عينة = QueryResult. يختار();

// اجتياز التحديد
وداعا إحضار. الحلقة التالية ()
تقرير (اختيار. بالطبع) ؛
نهاية الدورة

اطلب تكوين الجسم

يتكون نص الطلب من عدة أقسام:

  1. وصف الطلب- قائمة الحقول المختارة ومصادر البيانات ؛
  2. الجمع بين الاستعلامات- التعبيرات "JOIN" و "JOIN ALL" ؛
  3. ترتيب النتائج- التعبير "ORDER BY ..." ؛
  4. الترتيب التلقائي- التعبير "AUTOORDER" ؛
  5. وصف النتائج- عبارة "النتائج ... على ...".

مطلوب فقط القسم الأول.

الجداول المؤقتة والاستعلامات الدفعية

لغة الاستعلام 1C تدعم الاستخدام طاولات مؤقتة- الجداول التي تم الحصول عليها نتيجة تنفيذ الاستعلام وحفظها بشكل مؤقت.

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

VTManager = NewTempTableManager ،
طلب = طلب جديد ؛
طلب . مدير TempTable = مدير VT ؛

طلب . نص =
"يختار
| العملات.
| العملات
| ضع عملات WTC
| من
| كتيب. العملات AS العملات »;

RequestResult = طلب. يجري();

لاستخدام جدول VTCurrency المؤقت في الاستعلامات الأخرى ، يجب عليك تعيين مدير جدول مؤقت مشترك ، VT Manager ، لهذه الاستعلامات.

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

بالنسبة للاستعلامات الدفعية ، يتوفر أسلوب ExecuteBatch () ، والذي ينفذ جميع الاستعلامات ويعيد مجموعة من النتائج. سيتم تمثيل الجداول المؤقتة في الاستعلام الدفعي بجدول يحتوي على صف واحد وعمود "عدد" واحد يخزن عدد السجلات. لتصحيح أخطاء الطلبات المجمعة ، يمكنك استخدام الطريقة ExecutePacketWith IntermediateData(): تقوم بإرجاع المحتويات الفعلية للجداول المؤقتة ، وليس عدد السجلات.

// مثال على العمل مع طلب دفعي
طلب = طلب جديد ؛
طلب . نص =
"يختار
| العملات
| من
| كتيب عملات كعملات
|;
| اختر
| التسمية. الوصف
| من
| الدليل. التسمية AS التسمية »;

PacketResult = طلب. ExecutePackage () ،

عملات TZ = PackageResult [0]. تفريغ () ؛
TZNomenclature = نتيجة الحزمة [1]. تفريغ () ؛

// مثال على استخدام الجداول المؤقتة في استعلام دُفعي
طلب = طلب جديد ؛
طلب . نص =
"يختار
| Products.Reference AS Product
| PUT VTTProducts
| من
| الدليل التسمية AS البضائع
| أين
| Products.Manufacturer = والشركة المصنعة
|;
| اختر
| منتجات VTT.
| PTU. الكمية ،
| سعر PTU ،
| PTU.Reference AS DocumentReceipt
| من
| منتجات VTTProducts AS VTTProducts
| LEFT JOIN Document.GoodsServices.Goods AS PTU
| برنامج VTTproducts.Product = تسمية PTU "
;

طلب . setParameter ( "الصانع"، الصانع)؛

RequestResult = طلب. نفذ - اعدم()؛
عينة = QueryResult. يختار();

وداعا إحضار. الحلقة التالية ()

نهاية الدورة

الجداول الافتراضية

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

هناك الجداول الافتراضية التالية (ترد المعلمات الممكنة بين قوسين):

  • لسجلات المعلومات:
    • سلايس فيرست (<Период>, <Условие>) - أقدم السجلات للتاريخ المحدد ؛
    • سلايسرينت (<Период>, <Условие>) - أحدث السجلات للتاريخ المحدد ؛
  • لسجلات التراكم:
    • بقايا(<Период>, <Условие>) - أرصدة في التاريخ المحدد ؛
    • تحولات (<НачалоПериода>, <КонецПериода>, <Периодичность>, <Условие>) - معدل دوران الفترة ؛
    • بقايا وتحولات (<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <Условие>) - أرصدة ودوران الفترة ؛
  • لسجلات المحاسبة:
    • بقايا(<Период>, <УсловиеСчета>, <Субконто>, <Условие>) - أرصدة اعتبارًا من التاريخ المحدد في سياق الحساب والقياسات و subconto ؛
    • تحولات (<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчета>, <Субконто>, <Условие>, <УсловиеКорСчета>, <КорСубконто>) - تحولات الفترة في سياق الحسابات والقياسات ، كو. حسابات ، subconto ، cor. فرعي.
    • بقايا وتحولات (<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <УсловиеСчета>, <Субконто>, <Условие>) - الأرصدة والتحركات في سياق الحسابات والقياسات والحسابات الفرعية ؛
    • تحولات DtKt (<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчетаДт>, <СубконтоДт>, <УсловиеСчетаКт>, <СубконтоКт>, <Условие>) - معدل دوران الفترة في سياق الحساب Dt ، والحساب Kt ، و Subconto Dt ، و Subconto Kt ؛
    • الحركات<НачалоПериода>, <КонецПериода>, <Условие>, <Порядок>, <Первые>) - الحركات مع القيم الفرعية ؛
  • لسجلات الحساب:
    • قاعدة(<ИзмеренияОсновногоРегистра>, <ИзмеренияБазовогоРегистра>, <Разрезы>, <Условие>) - البيانات الأساسية لسجل الحساب ؛
    • داتاجرافيكس (<Условие>) - بيانات الرسم البياني ؛
    • ActualActionPeriod (<Условие>) هي فترة الصلاحية الفعلية.

عند العمل مع الجداول الافتراضية ، يجب عليك تطبيق عوامل التصفية في معلمات الجداول الافتراضية ، وليس في بند WHERE. هذا يؤثر بشكل كبير على وقت تنفيذ الاستعلام.

طلب منشئ

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

يمكنك أيضًا استدعاء المُنشئين من القائمة الرئيسية نص.

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

ينشئ مُنشئ الاستعلام مع معالجة النتائج ، بالإضافة إلى إنشاء نص الاستعلام ، جزءًا كود جاهزًا لاستلام البيانات ومعالجتها.

كائن QuerySchema

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

  • تعيين نص الطلب (< Текст>) - يملأ خاصية RequestBatch بناءً على نص الطلب الذي تم تمريره ؛
  • GetTextRequest() - إرجاع نص الطلب الذي تم إنشاؤه بناءً على خاصية RequestBag ؛
  • FindParameters () - إرجاع معلمات الاستعلام.

دعنا نفكر في مثال للعمل مع كائن QueryScheme. لإنشاء نص الطلب برمجيًا

صنف حسب
العملات

قد يبدو الرمز في اللغة المضمنة كما يلي:

RequestSchema = طلب جديد ؛
الحزمة 1 = QueryScheme. RequestBatch [0] ؛
المشغل 1 = الحزمة 1. عوامل التشغيل [0]؛
// إضافة مصدر
RegisterTable = عامل التشغيل 1. مصادر. يضيف( "كتيب. العملات"، "العملات") ؛
// إضافة الحقول
فيلدلينك = عامل التشغيل 1. الحقول القابلة للتحديد. إضافة ("Currencies.Link"، 0) ؛
FieldCode = عامل التشغيل 1. الحقول القابلة للتحديد. إضافة ("Currencies.Code"، 1) ؛
// تحديد أسماء الحقول المستعارة
الحزمة 1 . الأعمدة [0]. الاسم المستعار = "العملة" ؛
الحزمة 1 . الأعمدة [1]. الاسم المستعار = "كود" ؛
// إضافة شرط
المشغل 1 . اختيار. يضيف( "لم يتم وضع علامة للحذف");
// أضف الطلب
الحزمة 1 . ترتيب. إضافة (FieldCode) ؛
QueryText = QueryScheme. GetTextRequest();

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

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

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

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

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

ضع في اعتبارك البرنامج التعليمي الصغير الخاص بنا حول التركيبات الأساسية للغة الاستعلام 1C.

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

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

يختار
التسمية. الاسم AS الاسم التسمية
من
الدليل. التسمية AS التسمية

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

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

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

للتغيير

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

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

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

أين

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

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

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

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

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

يختار
القبول T & U.Link ،
خيار
متى
ثم "تم نشر المستند!"
ELSE "لم يتم نشر المستند ..."
إنهاء كـ حقل إضافي
من
الوثيقة.استلام خدمات البضائع كإيصالات T & C

انضم

يربط بين جدولين بشرط ارتباط معين.

انضمام يسار / يمين

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

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

يختار
استلام تسمية T&U.
الأسعار السعر
من
الوثيقة.استلام السلع والخدمات
صلة داخلية
في استلام الأسئلة والأجوبة والتسمية = الأسعار

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

اتصال كامل

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

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

صلة داخلية

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

مجموعة من

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

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

يختار
,
MAX (Price.Price) AS السعر
من

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

النتائج

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

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

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

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

نأخذ

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

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

يختار

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

صنف حسب

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

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

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

الإنشاءات الأخرى للغة الاستعلام 1C

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

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

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

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

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

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

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


وحدة تحكم الاستعلام

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

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

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

لغة الاستعلام 1 المؤسسة 8 - حدد هيكل المشغل

ضع في اعتبارك هيكل مشغل SELECT (يشار إلى الأجزاء الاختيارية للمشغل بين قوسين مربعين). توفر لغة الاستعلام 1C مجموعة واسعة من الأدوات لإنشاء عينات البيانات.

حدد [مسموح] [مختلف] [أول أ] [حقل 1] [AS Alias1] ، [حقل 2] [AS Alias2] ، ... [FieldM] [AS AliasB] [PUT TempTableName] [من Table1 AS TableAliasTable1 [[INTERJOIN] [LEFT JOIN] [FULL JOIN] Table2 AS Table2 Alias ​​[[INNER JOIN] [LEFT JOIN] [FULL JOIN] TableC AS TableC Alias ​​TO Expression1 [AND Expression2] ... [AND ExpressionD]] ... ... TO Expression1 [و Expression2] ... [و ExpressionE]] ... [TableF AS TableF Alias] ...] [GROUP BY GroupingField1 [،] ... [GroupingFieldG]] [WHERE Expression1 [AND Expression2 ] ... [والتعبير H]] [الجمع بين الكل ...] [؛ ...] [INDEX BY Alias1 ... AliasB] [TOTALS [AggregateFunction (Field1)] [،] [AggregateFunction (Field2)] [،] ... [AggregateFunction (FieldI)] BY [GENERAL] [،] [ GroupingField1] [،] ... [GroupingFieldj]]

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

  • يختار- كلمة أساسية تدل على بداية المشغل ؛
  • مسموحيشير إلى أن الاختيار يجب أن يشمل سجلات الجداول التي يُسمح بوصول قراءتها للمستخدم المحدد ؛
  • مختلفيشير إلى أن أحواض مختلفة فقط (لكل الحقول) يجب أن تقع ضمن التحديد. بمعنى آخر ، سيتم استبعاد الصفوف المكررة من التحديد ؛
  • اولاإذا حددت هذه الكلمة الأساسية ، فسيتم تضمين أول صفوف فقط من الصفوف المحددة بواسطة الاستعلام في التحديد ، حيث A هو رقم طبيعي ؛
  • كتلة المجال- في هذه الكتلة ، يشار إلى الحقول التي يجب تضمينها في التحديد. هذه الحقول ستكون أعمدة التحديد. في أبسط صوره ، يبدو الحقل كما يلي: TableAlias.TableFieldName AS FieldAlias

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

كلمات رئيسية وكتل للعمل مع الجداول

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

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

كتل الكلمات الأساسية وتحويل البيانات

  • كتلة التجمع- تستخدم هذه الكتلة لتجميع صفوف الجدول. يتم دمج الصفوف في صف واحد إذا تم تحديد قيم الحقول بعد الكلمة الأساسية مجموعة منتتحول إلى أن تكون هي نفسها. في هذه الحالة ، يتم تلخيص كافة الحقول الأخرى أو تحديد متوسطها أو تكبيرها أو تصغيرها باستخدام الدالات التجميعية. تُستخدم الدوال المُجمَّعة في كتلة من الحقول. مثال: Max (TableAlias.TableFieldName) AS FieldAlias
  • كتلة الشرط- في هذه الكتلة بعد الكلمة الأساسية أينيشار إلى التعبيرات الشرطية المفصولة بالعوامل المنطقية و ، أو، لكي يتم تضمين أي من الصفوف المحددة في التحديد ، من الضروري أن تحتوي جميع الشروط في الإجمالي على القيمة حقيقي.
  • اتحدوا الكل- تستخدم هذه الكلمة الأساسية في الجمع بين الاستعلامات (عوامل التشغيل يختار). تسمح لك لغة الاستعلام 1C بدمج استعلامات متعددة في واحد. لكي يتم دمج الطلبات ، يجب أن يكون لديهم نفس مجموعة الحقول ؛
  • «;» - تُستخدم الفاصلة المنقوطة لفصل العبارات المستقلة عن بعضها البعض يختار؛
  • فهرس حسب- يتم استخدام الكلمة الأساسية لفهرسة الحقول المحددة بعدها ؛
  • الكتلة الإجمالية- تستخدم لبناء اختيارات شبيهة بالأشجار. لكل من حقول التجميع المحددة بعد الكلمة الأساسية على،سيتم إنشاء صف منفصل في التحديد. في هذا السطر ، باستخدام الوظائف الإجمالية ، سيتم حساب القيم الإجمالية للحقول المحددة بعد الكلمة الأساسية النتائج.

هل تريد الاستمرار في تعلم لغة الاستعلام 1s 8؟ ثم اقرأ المقال التالي.

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

1. البناء "من".

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

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

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

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

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

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

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

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

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

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

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

4. شرط أخذ عينات البيانات حسب النموذج.

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

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

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

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


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

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

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

اختر الخدمات. المنظمة AS المنظمة ، الخدمات ، التسمية AS التسمية ، الخدمات ، مبلغ المستند AS مبلغ المستند من المستند.

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

6. الحقول المشتقة.

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

طلب:

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

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

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

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

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

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

حدد EXPRESS (المدفوعات غير المخصصة. المسجل كمستند. الدفع). التاريخ ، ..... من سجل التراكم. المدفوعات غير المخصصة كمدفوعات غير مخصصة

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

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

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

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

حدد Payment.Reference as payment. ////////////////////////////////////////////////////// / ////////////////////////////// SELECT Clients.Reference AS Client، ISNULL (topayments.Payment، "") AS Payment FROM الدليل. العملاء AS Clients LEFT JOIN

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

حدد Clients.Reference، Payment.Reference FROM Directory.US_Subscribers AS ST_Subscribers LEFT JOIN Document.Payment AS Payment SOFTWARE (Clients.Reference = Payment.Client AND Payment.Client.Name LIKE "Sugar Bag") GROUP by Clients.Reference، Payment. نهاية لهذه الغاية

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

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

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

حدد UnallocatedPayBalances.Customer، UnallocatedPaymentsRemains.AmountBalance FROM (حدد العملاء ، قم بالإشارة إليه كمرجع من الدليل.

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

حدد Clients.Link AS ارتباط وضع العملاء من الدليل. العملاء كعملاء حيث
Clients.Link B (العملاء) ؛ ////////////////////////////////////////////////////// / ////////////////////// SELECT tClients.Reference، UnallocatedPaymentsBalances.SumBalance، from tClients AS tClients LEFT JOIN Accumulation Register. tClients.Reference from tClients)) AS UnallocatedPaymentsBalances ON tClients.Reference = UnallocatedPaymentsBalances.Clients

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

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

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

حدد Clients.Link كربط وضع العملاء من الدليل. العملاء كعملاء فهرس حسب الارتباط حيث
Clients.Link B (العملاء) ؛ ////////////////////////////////////////////////////// / ////////////////////////////// SELECT UnallocatedPayments.AmountBalance، UnallocatedPayments.Customer as Customer PUT the Balance of Accumulation Register.UnallocatedPayments. أرصدة (، العميل في (حدد tClients.Reference من tClients)) AS UnallocatedPaymentsBalances ؛ ////////////////////////////////////////////////////// / ////////////////////////////// حدد tClients.Reference، thenRemains.SumRemainder AS SumRemainder FROM tClients AS tClients.Reference = tRemainders .عميل

9. التحقق من نتيجة الاستعلام.

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

RequestRes = Request.Execute () ، إذا reQuery.Empty () ثم إرجاع ؛ إنهاء إذا؛

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

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

طلب = طلب جديد ؛ Query.Text = "SELECT | Clients.Link، | Clients.Date of Birth | FROM | Directory.Clients AS Clients | WHERE | Clients.Link = & Client" ؛ لكل صف من TableClients Loop Query.SetParameter ("العميل" ، العميل) ؛ QueryResult = Query.Execute (). حدد () ، نهاية الدورة

سيوفر هذا النظام من تحليل الطلب في حلقة.

11. البناء "HAVING".

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

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

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


12. قيمة لاغية

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

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

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

حدد "لا مدفوعات" كسمة ، NULL AS المستند PUT للمدفوعات ؛ ////////////////////////////////////////////////////// / /////////////////////////////// SELECT Clients.Link AS Client، Payment.Link AS الدفع وضع tClientPayment من الدليل. العملاء AS LEFT LEFT JOIN Document.Payment AS عملاء برامج الدفع. Link = Payment.Shareholder؛ ////////////////////////////////////////////////////// / /////////////////////////////// SELECT tClientPayment.Customer FROM tClientPay AS tClientPayment INTERNAL JOIN topayments AS topayments بواسطة tClientPayment.Payment = topayments. وثيقة

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

لكي يعيد الاستعلام النتيجة المتوقعة إلينا ، نعيد كتابتها:

حدد "لا توجد مدفوعات" AS تسجيل ، VALUE (مستند. دفع. مرجع فارغ) كوثيقة PUT to Payments ؛ ////////////////////////////////////////////////////// / /////////////////////////////// SELECT Clients.Reference AS Client، ISNULL (Payment.Reference، VALUE (Document.Payment .EmptyReference)) كيفية وضع tClientPayment من Directory.Clients مثل Clients LEFT JOIN Document.Payment AS Payment ON Clients.Reference = Payment.Shareholder؛ ////////////////////////////////////////////////////// / /////////////////////////////// SELECT tClientPayment.Customer FROM tClientPay AS tClientPayment INTERNAL JOIN topayments AS topayments بواسطة tClientPayment.Payment = topayments. وثيقة

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

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

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

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

حدد الاختيار WHEN Users.Name = "Vasya Pupkin" ثم "موظفنا المفضل" ELSE "لا نعرف هذا" END AS Field1 من Directory.Users AS Users

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

حدد الشهر (US_Consumption Calculation_Turnover Schedule.Calculation Period) عند 1 ثم "يناير" عند 2 ثم "فبراير" عند 3 ثم "مارس" عند 4 ثم "أبريل" عند 5 ثم "مايو" عند 6 ثم "يونيو" عند 7 ثم " يوليو "عند 8 ثم" أغسطس "عند 9 ثم" سبتمبر "عند 10 ثم" أكتوبر "عند 11 ثم" نوفمبر "عندما ينتهي" ديسمبر "12 بعد ذلك بشهر

الآن لا يبدو التصميم مرهقًا ويمكن إدراكه بسهولة.

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


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

حدد Users.Link AS الاسم ، Users.Date الميلاد ، Users.Role أدخل المستخدمين من Directory.Users AS Users ؛ ////////////////////////////////////////////////////// / /////////////////////////////// SELECT tuUsers.Name، tuUsers. تاريخ الميلاد من tuUsers AS tuUsers GROUP BY tuUsers. الاسم ، المستخدم ، تاريخ الميلاد ، ////////////////////////////////////////////////////// / /////////////////////////////// حدد wUsers.Name ، wUsers.Role FROM wUsers AS wUsers GROUP BY wUsers.Name ، تاريخ الميلاد

tPackage = Request.ExecutePackage () ،

TP_BirthDate = tPackage.Unload () ،
TP_Roles = tPackage.Unload () ،

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

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

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

حدد Users.Individual.Name AS الاسم والمستخدمين. ////////////////////////////////////////////////////// / //////////////////////////////// حدد الأفراد.ربط كأفراد من الدليل. الأفراد كأفراد

يمكنك تطبيق شروط مثل هذا:

أين الأفراد. كود في (اختر TueUsers.Code من TuUsers) والأفراد. الاسم في (حدد TueUsers.Code من TuUsers) والأفراد. تاريخ الميلاد في (حدد TueUsers. تاريخ الميلاد من TuUs)

وهذا ممكن مثل هذا:

أين (الأفراد ، الكود ، الأفراد ، الاسم ، الأفراد ، تاريخ الميلاد) في (اختر TueUsers.Code ، TueUsers.Name ، TueUsers ، TueUsers ، the Birth from TueUsers)

وتأكد من اتباع القواعد.

16. Call Query Builder عن "الشرط" في استعلام الدُفعة

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

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

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

كنت أرغب في التفكير في استخدام الفهارس في الاستعلامات ، لكنه موضوع واسع بشكل مؤلم. سأضعه في مقال منفصل ، أو سأضيفه هنا لاحقًا.

محدث 1. الفقرات 11 ، 12
تحديث 2. البنود 13،14،15،16

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