اتصال اليسار واليمين 1S


تعد لغة الاستعلام 1C أحد الاختلافات الرئيسية بين الإصدارين 7.7 و8. ومن أهم النقاط في تعلم برمجة 1C هي لغة الاستعلام. في 1C 8.3، تعد الاستعلامات الأداة الأقوى والأكثر فعالية للحصول على البيانات. تتيح لك لغة الاستعلام الحصول على المعلومات من قاعدة البيانات بطريقة مناسبة.

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

سأحاول في هذه المقالة التحدث عن الكلمات الرئيسية الرئيسية في لغة الاستعلام 1C:

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

بالإضافة إلى بعض الحيل الصغيرة للغة 1C، والتي يمكنك من خلالها إنشاء نص الطلب على النحو الأمثل.

لتصحيح الاستعلامات في نظام 1C 8.2، يتم توفير أداة خاصة - وحدة التحكم في الاستعلام. يمكنك مشاهدة الوصف وتنزيله باستخدام الرابط -.

دعونا نلقي نظرة على العوامل الأكثر أهمية وإثارة للاهتمام في لغة الاستعلام 1C.

يختار

في لغة الاستعلام 1C Enterprise 8، يبدأ أي استعلام بكلمة رئيسية يختار. في لغة 1C لا توجد بنيات UPDATE، DELETE، CREATE TABLE، INSERT؛ والغرض منه هو قراءة البيانات فقط.

على سبيل المثال:

يختار
الدليل الحالي.الاسم
من
Directory.Nomenclature AS الدليل الحالي

سيرجع الاستعلام جدولاً بأسماء العناصر.

بالقرب من الهيكل يختاريمكنك العثور على الكلمات الرئيسية من أجل التغيير, مسموح, متنوع, أولاً

مسموح- تحديد السجلات من الجدول التي يتمتع المستخدم الحالي بحقوقها فقط.

متنوع- يعني أن النتيجة لن تحتوي على أسطر مكررة.

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

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

الدليل الحالي. الاسم،

عندما يكون Directory.Service الحالي بعد ذلك

"خدمة"

إنهاء كيفية عرض التسمية

Directory.Nomenclature AS الدليل الحالي

سيُرجع المثال قيمة نصية في حقل "نوع العنصر" - "المنتج" أو "الخدمة".

أين

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

يختار
اسم الدليل
من
الدليل الحالي.التسميات AS الدليل الحالي
حيث CurrentDirectory.Service = TRUE

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

"أين الخدمة"

بشكل أساسي، نحن نختار الصفوف التي يكون فيها التعبير بعد الكلمة الأساسية مساويًا لـ "True".

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

حيث الرمز = "005215"

باستخدام عامل التشغيل "VALUE()" في الشروط، استخدم الوصول إلى العناصر والتعدادات المحددة مسبقًا في طلب 1C:

حيث نوع العنصر = القيمة (Enumeration.Item Types.Product)

ويمكن تحديد القيم الزمنية على النحو التالي:

أين تاريخ الاستلام > DATETIME(2012,01,01):

في أغلب الأحيان، يتم تحديد الشروط كمعلمات تم تمريرها إلى الطلب:

احصل على 267 درس فيديو على 1C مجانًا:

حيث NomenclatureGroup= &NomenclatureGroup

يمكن فرض شرط على نوع السمة إذا كان من النوع المركب:

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

أين يوجد سجل التراكم ب (&قائمة المستندات للاختيار)

يمكن أن تكون الحالة أيضًا معقدة، وتتكون من عدة شروط:

حيث تاريخ الاستلام > DATETIME(2012,01,01) وNomenclatureGroup= &NomenclatureGroup وليس الخدمة

مجموعة من

تصميم لغة الاستعلام 1C 8.2 المستخدمة لتجميع النتيجة.

على سبيل المثال:

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

مجموعة من
استلام البضائعServicesGoods.Goods

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

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

نأخذ

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

مثال على استخدام HAVING في طلب 1C:

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

مجموعة من
استلام البضائع والسلع الخدمات

SUM(استلام البضائع، الخدمات، السلع، الكمية) > 5

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

معنى()

على سبيل المثال:

أين البنك = القيمة (Directory.Banks.EmptyLink)

حيث نوع التسمية = القيمة (الدليل.أنواع التسمية.المنتج)

حيث نوع العنصر = القيمة (Enumeration.Item Types.Service)

اكتب في الطلب

يمكن التحقق من نوع البيانات باستخدام الدالتين TYPE() وVALUETYPE() أو باستخدام عامل التشغيل المرجعي المنطقي.

يعبر()

يتم استخدام عامل التشغيل Express في استعلامات 1C لتحويل أنواع البيانات.

بناء الجملة: يعبر(<Выражение>كيف<Тип значения>)

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

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

يختار
معلومات الاتصال. الكائن،
EXPRESS(ContactInfo.View AS ROW(150)) AS View
من
سجل المعلومات معلومات الاتصال كيف معلومات الاتصال

مجموعة من
EXPRESS(ContactInfo.Representation AS ROW(150))،
معلومات الاتصال.Object

إسنول (إسنول)

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

ISNULL(ضرائب ما قبل الشهر. فائدة FSS المطبقة، 0)

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

ينضم

هناك 4 أنواع من الاتصالات: غادر, يمين, كامل، داخلي.

الاتصال الأيسر والأيمن

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

مثال على الانضمام الأيسر في طلب 1C:

سيعيد الجدول بأكمله ويملأ حقل "البنك" فقط في الأماكن التي يتم فيها استيفاء شرط "Counterparties.Name = Banks.Name". إذا لم يتم استيفاء الشرط، فسيتم تعيين حقل البنك على باطل.

الانضمام الصحيح بلغة 1C 8.3مماثلة تماما الاتصال الأيسر، باستثناء اختلاف واحد: في حق الاتصالالجدول "الرئيسي" هو الثاني وليس الأول.

اتصال كامل

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

على سبيل المثال:

اتصال كامل
Directory.Banks كيف البنوك

بواسطة

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

صلة داخلية

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

على سبيل المثال:

من
الدليل. الأطراف المقابلة كعملاء

صلة داخلية
Directory.Banks كيف البنوك

بواسطة
اسم العملاء = اسم البنوك

سيُرجع هذا الاستعلام فقط الصفوف التي يحمل فيها البنك والطرف المقابل نفس الاسم.

خاتمة

هذا ليس سوى جزء صغير من بناء الجملة من لغة الاستعلام 1C 8؛ سأحاول في المستقبل النظر في بعض النقاط بمزيد من التفصيل والعرض وغير ذلك الكثير!

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

المهمة رقم 1: استخدم استعلامًا لتحديد جميع المستندات التي تم ترحيلها مبيعات السلع والخدمات،

التفسير: التكوينات المحاسبة 2.0 / 3.0لا يقوم التنفيذ بتخزين رابط للفاتورة الصادرة. العلاقة بين هذه المستندات عكسية: في الفاتورة (في التفاصيل قاعدة وثيقة) يتم تخزين إشارة إلى التنفيذ الذي يتعلق به. وبالتالي، لفهم التطبيقات التي لا تحتوي على فواتير، ستحتاج إلى استخدام جدولين في الاستعلام: مبيعات السلع والخدماتو الفاتورة الصادرة.

المهمة رقم 2: لنفترض في قاعدة بيانات الدليل عقود الأطراف المقابلةتم إنشاء معلومات إضافية تأجيل(سجل موقع التخزين معلومات إضافية). استخدم استعلامًا لتحديد كافة الاتفاقيات الخاصة بالطرف المقابل المحدد مع تأخير من 0 إلى 10 أيام.

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

علامات تبويب جديدة: روابط

آليات جديدة: التحقق من وجود قيمة فارغة في طلب 1C.

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

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

يتم تكوين كل علاقة محددة بين جدولين، ويتم استدعاء أحدهما غادر، آخر يمين. هناك ثلاثة أنواع من الاتصالات:

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

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

علامة التبويب "العلاقات" في مصمم الاستعلام

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

بعد إضافة اتصال جديد، يجب عليك ملء جميع أعمدة الجدول. دعونا نلقي نظرة على كل عمود من جدول الاتصال:

  • الجدول 1. تم تحديد جدول الاتصال الأيسر في هذا العمود. يمكنك فقط استخدام الجداول المحددة في علامة التبويب الجداول والحقول;
  • الجميع. يتم وضع العلامة في هذا العمود إذا كنت بحاجة إلى تحديد جميع البيانات للجدول الأيسر (for غادرأو ممتلىءروابط)؛
  • الجدول 2. تم تحديد جدول الاتصال الصحيح في هذا العمود؛
  • الجميع. يتم وضع العلامة في هذا العمود إذا كنت بحاجة إلى تحديد جميع البيانات للجدول الصحيح (for يمينأو ممتلىءروابط)؛
  • حر. العلامة التي يمكنك من خلالها التبديل إلى وضع التحرير اليدوي لحالة الاتصال؛
  • حالة الاتصال.شرط في لغة الاستعلام، مشابه للشروط التي تمت مناقشتها في . إنه تعبير يجب أن يُرجع دائمًا إحدى القيمتين: حقيقيأو كذب.عادةً ما تتكون حالة الارتباط من ثلاثة أجزاء:
    • الجهه اليسرى. عادةً ما يكون حقلاً في الجدول الأيسر، ولكن يمكن أن يكون أيضًا حقلاً في الجدول الأيمن أو معلمة (فقط في وضع تحرير الشرط المخصص)؛
    • عامل المقارنة. بشكل افتراضي، "="، "<>», «<«, «>», «>=», «<=». Но в произвольном режиме редактирования можно использовать и некоторые другие, например «Между»;
    • الجزء الأيمن. عادةً ما يكون حقلاً في الجدول الأيمن، ولكن يمكن أن يكون أيضًا حقلاً في الجدول الأيسر أو معلمة (فقط في وضع تحرير الشرط المخصص)؛

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

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

دعونا نلقي نظرة على حل المشكلات المقدمة في بداية الدرس.

المهمة رقم 1

حدد جميع المستندات المنشورة التي تحتوي على استعلام مبيعات السلع والخدمات،للفترة المحددة، والتي لم يتم إنشاء فاتورة لها.

  • لنقم بإنشاء طلب جديد؛
  • دعونا نختار الجداول مبيعات السلع والخدماتو الفاتورة الصادرةمن الخيط توثيق;
  • من الطاولة مبيعات السلع والخدماتحدد حقلاً وصلة؛
  • دعنا نذهب إلى علامة التبويب شروط;
  • في الفصل مجالات، لنفتح الموضوع مبيعات السلع والخدماتباستخدام الزر "+"؛
  • دعونا نجد الدعائم تاريخواسحبه إلى قسم الشروط، وحدد عامل المقارنة بينوالإشارة إلى معلمات بداية ونهاية الفترة، على سبيل المثال بداية الفترةو نهاية الفترة;
  • من القسم مجالاتدعونا اسحب الدعائم أُجرِي، ضع علامة في السطر مع الشرط حرومسح الجزء الزائد من الشرط “= &Passed”;
  • دعنا نذهب إلى علامة التبويب مجال الاتصالات؛
  • لنقم بإنشاء اتصال جديد باستخدام زر "إضافة"؛
  • في الميدان الجدول 1حدد جدولاً مبيعات السلع والخدمات(سيكون هذا هو الجدول الأيسر) ;
  • لحل المشكلة بشكل صحيح، نحتاج إلى الحصول على كافة التنفيذات، وإرفاق الفواتير بها، وإذا لم يتم العثور على الفاتورة، يتم عرض التنفيذ كنتيجة الطلب. دعونا نقسم هذه المهمة إلى مهمتين فرعيتين:
    • دعونا نختار جميع المبيعات، وباستخدام الاتصال، نحاول العثور على فاتورتها؛
    • باستخدام الشرط، سنختار فقط تلك السطور التي لا توجد بها فاتورة؛
  • من الفقرة السابقة يتبع أننا بحاجة إلى استخدام اتصال اليسار، لتحديد كافة التطبيقات. لذلك، دعونا نضع العلم في العمود الجميع
  • في الميدان الجدول 2حدد جدولاً الفاتورة الصادرة(سيكون هذا هو الجدول الصحيح)؛
  • حيث أن رابط التنفيذ مخزن في تفاصيل الفاتورة د قاعدة المستندات,في حالة الاتصال نختار:
    • على الجانب الأيسر من الميدان رابط مبيعات السلع والخدمات;
    • على الجانب الأيمن من الملعب: InvoiceInvoiceIssued.DocumentBase.
  • اكتمل إعداد الاتصال؛

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

تحتوي لغة الاستعلام 1C على عامل منطقي خاص يسمح لك بالتحقق مما إذا كان الحقل يحتوي على قيمة باطل، بناء الجملة <Поле>باطل. تقوم بإرجاع قيمة حقيقيإذا كان الحقل له قيمة باطلو كذب- في الحالة المعاكسة.

لاحظ أن التحقق من قيمة الحقل بواسطة باطلممكن فقط باستخدام الوظيفة المحددة، والبناء <Поле>= فارغةلن يكون هذا الفحص ممكنا.

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

طلب = طلب جديد؛ Request.SetParameter("StartPerid" , StartPerid); Request.SetParameter("نهاية الفترة"، نهاية الفترة)؛ Request.Text = "SELECT | مبيعات السلع والخدمات. الرابط | من | المستند. مبيعات السلع والخدمات مثل مبيعات السلع والخدمات | مستند الاتصال الأيسر. تم إصدار الفاتورة كفاتورة تم إصدار الفاتورة | مبيعات البرامج للسلع والخدمات. الرابط = تم إصدار الفاتورة. أساس المستند |. مبيعات السلع والخدمات دوليًا في بداية الفترة وفي نهايتها |. وتم إصدار الفاتورة.

المهمة رقم 2

  • لنقم بإنشاء طلب جديد؛
  • لنقم بتشغيل منشئ الاستعلامات؛
  • على علامة التبويب الجداول والحقوللنختار جدولين: عقود الأطراف المقابلةمن الخيط الدلائلو معلومات إضافيةمن الخيط سجلات المعلومات;
  • من الطاولة عقود الأطراف المقابلةحدد حقلاً وصلة;

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

  • دعنا نذهب إلى علامة التبويب شروط. من الطاولة عقود الأطراف المقابلةانقل الحقل إلى قسم الشروط مالك. على الجانب الأيمن من الشرط، سنقوم بتعيين اسم المعلمة التي سنمرر إليها الطرف المقابل الذي نحتاجه، فلنسميه الطرف المقابل;
  • كما سنقسم مهمة اختيار العقود ذات التأخير من 0 إلى 10 إلى مهمتين فرعيتين:
    • دعونا نختار جميع العقود ونحاول، باستخدام الاتصالات، العثور على تأجيلاتها؛
    • وباستخدام الشرط، سنختار فقط العقود التي تحتوي على التأجيلات التي نحتاجها؛
  • لنقم بإعداد اتصالات بين العقود والمعلومات الإضافية. دعنا نذهب إلى علامة التبويب "الاتصالات" ونضيف اتصالاً جديدًا؛
  • في الميدان الجدول 1حدد جدولاً عقود الأطراف المقابلة(سيكون هذا هو الجدول الأيسر)؛
  • وبما أننا بحاجة إلى جميع العقود، سوف نستخدمها اتصال اليسار.لنضع علامة في عمود الكل، الذي ينتمي إلى الجدول الأيسر؛
  • في الميدان الجدول 2حدد جدولاً معلومات إضافية(سيكون هذا هو الجدول الصحيح)؛
  • حيث يتم تخزين الإشارة إلى العقد في البعد شيءسجل المعلومات معلومات إضافية،في حالة الاتصال نختار:
    • على الجانب الأيسر من الميدان رابط عقود المقاولين;
    • لنترك عامل المقارنة القياسي "=";
    • على الجانب الأيمن من الملعب: معلومات إضافية.Object.

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

  • دعونا نضيف اتصال جديد؛
  • في الميدان الجدول 1حدد جدولاً عقود الأطراف المقابلة;
  • من المهم معرفة أنه إذا كانت لديك علاقات متعددة على نفس زوج الجداول، فيجب عليك استخدام نفس نوع الصلة لها. في حالتنا، هذا هو اتصال اليسار.لذلك، دعونا نضع العلم في العمود الجميع، المتعلقة بالجدول الأيسر؛
  • في الميدان الجدول 2حدد جدولاً معلومات إضافية;
  • في حالة العلاقة، لن نحتاج إلى استخدام حقل الجدول الأيسر، وبدلاً من ذلك سنفرض شرطًا على البعد ملكية، معادلة ذلك بالإضافي. ملكية تأجيلوالتي سيتم تمريرها إلى الطلب باستخدام المعلمة؛
  • دعونا نضع العلم حرفي المعنى حقيقيواكتب نص الشرط التالي يدويًا: “Additional Information.Property = &PropertyDelay”;

  • اكتمل إعداد الاتصال؛

الآن كل ما تبقى هو فرض شرط على مقدار التأجيل. وبما أننا نستخدم الفترة من 0 إلى 10، سيكون من الضروري استخدام عامل المقارنة بين. وبما أن التراجع الصفري لا يتم تخزينه في معلومات إضافية، فعند الاتصال في هذه الحالة، ستعيد جميع حقول التسجيل القيمة باطل. من أجل استبدال القيمة في الشرط باطلإلى 0، سوف نستخدم وظيفة لغة الاستعلام باطل(<Выражение1>, <Выражение2>) . ترجع الدالة التعبير1، إذا لم يكن متساويا باطلو التعبير2خلاف ذلك.

  • دعنا نذهب إلى علامة التبويب شروطمصمم الاستعلام وإضافة شرط جديد؛
  • دعونا نضع العلم فيه حروانتقل إلى محرر حرية التعبير؛
  • في قسم وظائف لغة الاستعلام سنقوم بتوسيع الفرع الوظائف -> وظائف أخرى;
  • لنقم بسحب دالة إلى قسم التعبيرات باطل؛
  • بعد البناء الناتج، سوف نقوم بإدخال عامل المقارنة بين وتعيين الفاصل الزمني: 0 و 10؛
  • انقر فوق موافق، الشرط جاهز؛

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

  • دعنا نذهب إلى علامة التبويب الجداول والحقولوإضافة حقل جديد؛
  • في محرر التعبير الحر الذي يفتح، حدد الوظيفة باطل;
  • بدلاً من التعبير 1، أدخل الحقل معلومات إضافية. القيمة، وبدلاً من التعبير 2، أدخل 0؛
  • انقر فوق موافق، الحقل جاهز؛

ونتيجة لذلك، سوف نحصل على طلب بالنص التالي:

طلب = طلب جديد؛ Query.SetParameter("PropertyDelay"، PropertyProperty); Request.SetParameter("الحساب"، الحساب)؛ Query.Text = "SELECT | اتفاقيات الطرف المقابل. الرابط، | ISNULL(معلومات إضافية. القيمة، 0) AS Field1 | من | الدليل. اتفاقيات الطرف المقابل كاتفاقيات الطرف المقابل | معلومات الانضمام اليسرى التسجيل. معلومات إضافية | كمعلومات إضافية | حول اتفاقيات الطرف المقابل الرابط = معلومات إضافية. AND (تفاصيل إضافية. الملكية = &PropertyDelay) | حيث | عقود المقاولين. المالك = & الطرف المقابل |.

اقرأ أيضًا مقالات حول لغة الاستعلام 1C 8.

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

  • غادر؛
  • يمين،
  • داخلي؛
  • مكتمل.

سننظر في كل نوع باستخدام مثال مجرد. يوجد جدولين، في الأول نقوم بتخزين معلومات وصفية عن الصنف، وفي الثاني عن أرصدته:

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

اتصال اليسار

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

طلب.نص =
"يختار
| التسمية.المنتج،
| Nomenclature.Color AS ColorNomenclature،
| بقايا.اللون AS ColorRemains،
| الأرصدة.الكمية
|من

";

لم تكن هناك تطابقات للكرسي من جدول الباقي، لذلك تم ملء الحقول بقيم NULL، والتي يجب معالجتها بواسطة وظيفة ISNULL، راجع 1C 8 وظائف لغة الاستعلام.

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

طلب.نص =
"يختار
| التسمية.المنتج،
| التسمية.اللون،
| ISNULL(Remaining.Quantity, 0) AS الكمية
|من
| التسميات AS التسميات
| LEFT JOIN البقايا كما البقايا
| تسمية البرنامج. المنتج = المنتج المتبقي

الاتصال الصحيح

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

صلة داخلية

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

طلب.نص =
"يختار
| التسمية.المنتج،
| التسمية.اللون،
| البقايا.الكمية AS الكمية
|من
| التسميات AS التسميات
| INNER JOIN البقايا مثل البقايا
| تسمية البرنامج. المنتج = المنتج المتبقي
| وNomenclature.Color = Remaining.Color";

اتصال كامل

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

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

لنطبق ربطًا كاملاً مع مجموعة مختارة من جميع الحقول، وسنقوم بالاتصال حسب المنتج:

طلب.نص =
"يختار
| التسميةZarya.Product AS ProductZarya،
| التسميةZarya.Price AS PriceZarya،
| التسمية Rassvet المنتج AS المنتج Rassvet،
| التسميةRassvet.Price AS PriceRassvet
|من

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

طلب.نص =
"يختار
// تمت مناقشة بناء ISNULL في قسم وظائف لغة الاستعلام
// إذا لم يتم تحديد السعر، فقم بتهيئته
// لماذا 1000000 انظر الشرح أدناه
| ISNULL(NomenclatureZarya.Price, 1000000) AS PriceZarya,
| ISNULL(NomenclatureRassvet.السعر، 1000000) AS PriceRassvet
|من
| التسمياتZarya AS التسمياتZarya
| اتصال كامل NomenclatureDawn AS NomenclatureDawn
| Software NomenclatureZarya.Product = NomenclatureDawn.Product";

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

طلب.نص =
"يختار
| ISNULL(NomenclatureZarya.Product, NomenclatureDawn.Product) كمنتج،
| خيار
| عندما يكون هناك ISNULL(NomenclatureZarya.Price, 1000000) > ISNULL(NomenclatureRassvet.Price, 1000000)
| ثم ISNULL(NomenclatureRassvet.السعر، 1000000)
| ELSE ISNULL(NomenclatureZarya.السعر، 1000000)
| انتهى بالسعر
|من
| التسمياتZarya AS التسمياتZarya
| اتصال كامل NomenclatureDawn AS NomenclatureDawn
| Software NomenclatureZarya.Product = NomenclatureDawn.Product";

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

← وظائف لغة الاستعلام 1C 8 | ينضم إلى 1C 8 استعلامات →

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

تقرير السلع في 1C Accounting 8.3 تقرير السلع في برنامج 1C Accounting 8.3 هو نموذج موحد TORG-29،...

في هذه المقالة أريد النظر في جوانب حساب وحجب ضريبة الدخل الشخصي في 1C 8.3، بالإضافة إلى إعداد التقارير عن النماذج 2-NDFL و...

ماذا تفعل إذا تم إدخال خطأ في المحاسبة؟ للقيام بذلك، يمكنك استخدام تقنيات خاصة لتصحيح هذه السجلات إذا حدث خطأ...
هناك ما لا يقل عن 5 أسباب لرفض شراء واستخدام البرامج المزيفة للأعمال. وهي: المخاطر غير الاقتصادية:...
كيفية تجميع وتفكيك البضائع في البرنامج باستخدام مثال إدارة التجارة؟ ويحدث أن هناك حاجة...
في هذه المقالة أريد النظر في جوانب حساب وحجب ضريبة الدخل الشخصي في 1C 8.3، بالإضافة إلى إعداد التقارير عن النماذج 2-NDFL و...
تعد لغة الاستعلام 1C أحد الاختلافات الرئيسية بين الإصدارين 7.7 و8. ومن أهم النقاط في تعلم برمجة 1C...
KUDIR هو كتاب الدخل والنفقات الذي يجب أن تحتفظ به جميع المنظمات وأصحاب المشاريع الفردية (المادة 346.24 من قانون الضرائب في الاتحاد الروسي). التصديق على الكتاب مع الضريبة...