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

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

سننظر أدناه في إعداد وتصميم دليل من أداة التهيئة باستخدام دليل "Nomenclature" كمثال.

علامة التبويب الأساسية

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

علامة التبويب "التسلسل الهرمي للدليل".

هنا يتم إنشاء التسلسل الهرمي للدليل.

التسلسل الهرمي في 1C 8.3 هو من نوعين - " المجموعات والعناصر" و " عناصر". ويختلف أنه في الحالة الأولى، يمكن أن يكون المجلد (المجموعة) فقط أصلًا (مجلدًا)، وفي الحالة الثانية، يمكن أن يكون العنصر أيضًا أصلًا.

"وضع المجموعات في الأعلى" - العلم مسؤول عن عرض المجموعات في شكل قائمة.

يمكنك أيضًا في الإعدادات تحديد عدد المجموعات في التسلسل الهرمي للدليل باستخدام الإعداد المناسب.

علامة التبويب أصحاب

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

يمكن أن يكون مالك الدليل أيضًا كائنات بيانات التعريف التالية: , .

علامة تبويب البيانات

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

علامة التبويب الأكثر أهمية من وجهة نظر المبرمج. أنه يحتوي على تفاصيل الدليل.

يحتوي الدليل على مجموعة من التفاصيل القياسية التي لم يتم تحريرها بواسطة مبرمج 1C 8.2؛ ويمكن الاطلاع على قائمة بها من خلال النقر على زر "التفاصيل القياسية":

وسوف أتناول كل منها بمزيد من التفصيل:

  • هذه المجموعة— سمة ذات نوع منطقي، تشير إلى ما إذا كانت مجموعة أم عنصرًا. متوفر فقط في الدليل الهرمي. ملحوظة، لا يمكن تغيير قيمة هذه السمة في 1C: وضع المؤسسة.
  • شفرة- الدعائم، اكتب رقمًا أو سلسلة (عادةً سلسلة). رقم يتم تعيينه تلقائيًا بواسطة النظام. يتم حسابه عادةً كـ (الكود السابق + 1). أوصي باستخدام نوع السلسلة، لأن فرز القيم الرقمية لا يعمل كما هو متوقع. يمكن استخدامه كعرض تقديمي للدليل في القائمة وفي حقول الإدخال. يُستخدم عادةً للبحث عن عنصر عند إدخال سلسلة. إذا كنت بحاجة إلى إزالة حقل الرمز، فأدخل صفرًا في طول السطر.
  • اسم- تفاصيل إلزامية، نوع السلسلة. الحد الأقصى لطول السطر هو 150 حرفًا. يمكن استخدامه كعرض تقديمي للدليل في القائمة وفي حقول الإدخال. يُستخدم عادةً للبحث عن عنصر عند إدخال سلسلة. إذا كنت بحاجة إلى إزالة حقل الاسم، فأدخل صفرًا في طول السطر.
  • الأبوين- سمة من نوع DirectoryLink.<ИмяТекущегоСправочника>. متوفر فقط في الدليل الهرمي. يشير إلى الوالد الأعلى في التسلسل الهرمي. إذا كان العنصر أو المجموعة في جذر الدليل، فسيتم تحديد قيمة الدليل.<ИмяТекущегоСправочника>رابط فارغ.
  • مالك— رابط إلى عنصر المالك لعنصر الدليل الحالي (المجموعة). متاح فقط في الدليل 1C الثانوي.
  • حذف العلم- الدعائم من النوع المنطقي. - مسؤول عن ظهور "علامة الحذف" في النظام. يعتبر العنصر الذي تم وضع علامة عليه للحذف غير قابل للاستخدام، ولكن قد تظل عليه حركات المستندات القديمة.
  • وصلة- مجال نوع السلسلة. تقوم هذه السمة بتخزين معرف كائن فريد - GUID. ما نراه في النظام في عرض مرئي يسمى "الرابط" هو مجرد تمثيل للكائن. لا يمكن تغييرها.
  • محددة مسبقا— النوع المنطقي، يعرض ما إذا كان العنصر محددًا مسبقًا أم لا، المزيد عن ذلك لاحقًا. لا يمكن تغييرها.

تشير علامة التبويب "البيانات" أيضًا إلى تمثيل الدليل في النظام؛ قبل الإصدار 8.2.16، كان التمثيل يمكن أن يكون رمزًا أو اسمًا فقط. في الإصدارات الأخيرة من النظام الأساسي (بدءًا من 8.3)، يمكن وصف العرض بشكل مستقل في وحدة المدير باستخدام معالج "ViewReceivingProcessing".

علامة تبويب الترقيم

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

سلسلة الرموز - تحدد كيفية ترقيم الدليل، حيث يمكنك إدخال ترقيم الدليل حسب المالك. على سبيل المثال، سيكون للطرف المقابل "Horns and Hooves" ترقيم العقود الخاص به - "1، 2، 3"، وما إلى ذلك.

علامة تبويب النماذج

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

تحتوي هذه الصفحة على ميزة مهمة للدليل - "". هذه وظيفة مريحة للغاية لـ 1C 8، والتي تتيح لك، عند ملء البيانات في حقل الإدخال، عدم الدخول إلى الدليل، ولكن كتابة اسمه ورمزه وما إلى ذلك. وحدد العنصر المطلوب من القائمة المنسدلة. تبدو هكذا:

علامة تبويب أخرى

في علامة التبويب، يمكنك الوصول بسرعة إلى الوحدات الرئيسية للدليل - وحدة الكائن ووحدة المدير.

يمكنك أيضًا تحديد قائمة بعناصر الدليل المحددة مسبقًا على الصفحة. هذه هي العناصر التي لا يمكن حذفها في وضع المؤسسة. يمكن الوصول إلى العناصر المحددة مسبقًا مباشرة في أداة التهيئة بالاسم، على سبيل المثال: Directory.Nomenclature.Service.

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

يعرض هذا القسم أمثلة لحل المشكلات النموذجية عند العمل مع الدلائل الهرمية.

الحصول على عناصر الدليل الهرمي التابعة لمجموعة معينة

للحصول على العناصر الثانوية للدليل الهرمي، توفر لغة الاستعلام البنية IN HIERARCHY. مثال للاستخدام في التسلسل الهرمي:


يختار
كود التسمية،
التسمية.سعر الشراء
من

في هذا المثال، سيتم الحصول على كافة سجلات دليل Nomenclature الموجود في المجموعة &Group، بما في ذلك نفسه والمجموعات التابعة له والعناصر التي تنتمي إلى المجموعات الثانوية.

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


يختار
كود التسمية،
Nomenclature.Name AS الاسم،
التسمية.سعر الشراء
من
Directory.Nomenclature AS التسميات

أين
Nomenclature.Parent = &Group

سيحدد هذا الاستعلام المجموعات والعناصر التابعة للمجموعة باستخدام رابط &المجموعة.

التحقق من وجود العناصر الثانوية لعنصر الدليل

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

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


إذا Request.Execute().Empty() ثم
تقرير("لا يوجد إدخالات");
خلاف ذلك
تقرير("السجلات المتاحة");
إنهاء إذا؛

الحصول على جميع آباء العنصر

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


CurrentItemItem = ItemItem;

الاستعلام = استعلام جديد ("SELECT
| التسمية. الأصل،
| التسمية.الوالد.الوالد،
| التسمية.Parent.Parent.Parent،
| Nomenclature.Parent.Parent.Parent.Parent،
| Nomenclature.Parent.Parent.Parent.Parent.Parent
|من
| Directory.Nomenclature AS التسميات
|أين
| Nomenclature.Link = &CurrentNomenclatureElement";

بينما دورة الحقيقة
Request.SetParameter("CurrentItemItem", CurrentItemItem);
النتيجة = Query.Run();
إذا Result.Empty() ثم
إحباط؛
إنهاء إذا؛
Selection = Result.Select();
Selection.Next();
بالنسبة إلى ColumnNumber = 0 بواسطة Result.Columns.Quantity() - حلقة واحدة
CurrentItemItem = Selection[ColumnNumber];
إحباط؛
خلاف ذلك
تقرير(CurrentItemItem);
إنهاء إذا؛
EndCycle;

إذا CurrentItemItem = Directory.Nomenclature.EmptyLink() ثم
إحباط؛
إنهاء إذا؛
EndCycle;

في هذا المثال، يتم عرض جميع العناصر الأصلية للارتباط المسجل في متغير ElementNomenclature في نافذة رسالة الخدمة. في الدورة، يتم اختيار 5 آباء رابطين.

إذا كان عدد المستويات في الدليل محدودًا وصغيرًا، فمن الممكن الحصول على جميع الآباء بطلب واحد دون تكرار.

عرض الدليل الهرمي في التقرير

لعرض دليل هرمي في تقرير مع الحفاظ على التسلسل الهرمي، يجب عليك استخدام استعلام مشابه لما يلي:


يختار
كود التسمية،
Nomenclature.Name AS الاسم،
التسمية.سعر الشراء
من
Directory.Nomenclature AS التسميات
ترتيب حسب
التسلسل الهرمي للاسم

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

لكي يتم وضع مجموعات الدليل فوق العناصر، من الضروري استبدال عبارة ORDER BY في هذا الطلب بما يلي:


ترتيب حسب
التسمية. هذا هو التسلسل الهرمي للمجموعة،
اسم

ستظل النتيجة مرتبة بشكل هرمي، لكن المجموعات ستظهر أعلى العناصر.

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

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


يختار
كود التسمية،
Nomenclature.Name AS الاسم،
التسمية.سعر الشراء

من Directory.Nomenclature AS Nomenclature

أين
(التسمية. هذه المجموعة = خطأ)

الطلب حسب الاسم

الحصول على الإجماليات عن طريق التسلسل الهرمي

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


يختار

من

التسلسل الهرمي للتسميات

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

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


يختار
المحاسبة عن NomenclatureTurnover.Nomenclature AS Nomenclature،
المحاسبة عن NomenclatureTurnover.Nomenclature.Presentation،
المحاسبة عن NomenclatureTurnover.QuantityTurnover ASquantityTurnover
من
تراكم السجل.التسمية المحاسبة.الدوران كيف التسميات المحاسبةالدوران
النتائج المبلغ (الكمية دوران) ص
التسلسل الهرمي للتسميات فقط

ستكون نتيجة هذا الاستعلام إجمالي السجلات لمجموعات العناصر فقط.

تعد لغة الاستعلام في 1C 8 نظيرًا مبسطًا لـ "لغة البرمجة المنظمة" المعروفة (كما يطلق عليها غالبًا SQL). ولكن في 1C يتم استخدامه فقط لقراءة البيانات؛ ويستخدم نموذج بيانات الكائن لتغيير البيانات.

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

طلب مثال:

يختار
البنوك. الاسم،
البنوك.حساب المراسلات
من
Directory.Banks كيف البنوك

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

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

وصف بنيات لغة الاستعلام

هيكل الاستعلام

للحصول على البيانات، يكفي استخدام الإنشاءات "SELECT" و"FROM". أبسط طلب يبدو كالتالي:

اختر * من الدلائل.التسميات

حيث تعني "*" تحديد كافة حقول الجدول، و Directorys.Nomenclature - اسم الجدول في قاعدة البيانات.

دعونا نلقي نظرة على مثال أكثر تعقيدًا وعامة:

يختار
<ИмяПоля1>كيف<ПредставлениеПоля1>,
مجموع(<ИмяПоля2>) كيف<ПредставлениеПоля2>
من
<ИмяТаблицы1>كيف<ПредставлениеТаблицы1>
<ТипСоединения>مُجَمَّع<ИмяТаблицы2>كيف<ПредставлениеТаблицы2>
بواسطة<УсловиеСоединениеТаблиц>

أين
<УсловиеОтбораДанных>

مجموعة من
<ИмяПоля1>

ترتيب حسب
<ИмяПоля1>

نتائج
<ИмяПоля2>
بواسطة
<ИмяПоля1>

في هذا الاستعلام، نختار بيانات الحقلين "FieldName1" و"FieldName1" من الجدولين "TableName1" و"TableName"، ونخصص مرادفات للحقول باستخدام عامل التشغيل "HOW"، ونربطها باستخدام شرط معين "TableConnectionCondition" ".

من البيانات المستلمة، نختار فقط البيانات التي تفي بالشرط من "أين" "شرط اختيار البيانات". بعد ذلك، نقوم بتجميع الطلب حسب الحقل "اسم الحقل 1"، بينما نقوم بجمع "اسم الحقل 2". "اسم الحقل 1" والحقل الأخير "اسم الحقل 2".

الخطوة الأخيرة هي فرز الطلب باستخدام بنية ORDER BY.

تصاميم عامة

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

أولاًن

باستخدام هذا العامل، يمكنك الحصول على عدد n من السجلات الأولى. يتم تحديد ترتيب السجلات حسب الترتيب الموجود في الاستعلام.

اختر أول 100
البنوك. الاسم،
البنوك رمز AS BIC
من
Directory.Banks كيف البنوك
ترتيب حسب
البنوك.الاسم

سيتلقى الطلب أول 100 إدخال من دليل "البنوك"، مرتبة أبجديًا.

مسموح

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

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

اختر المسموح به
رابط مستودع المعلومات الإضافية
من
Directory.Repository للمعلومات الإضافية

متنوع

سيؤدي استخدام "مختلف" إلى منع الأسطر المكررة من إدخال نتيجة استعلام 1C. التكرار يعني أن جميع حقول الطلب متطابقة.

اختر أول 100
البنوك. الاسم،
البنوك رمز AS BIC
من
Directory.Banks كيف البنوك

جدول فارغ

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

مثال من مساعدة 1C 8:

حدد رقم الرابط، الجدول الفارغ. (الرقم، العنصر، الكمية) كتكوين
من المستند. فاتورة النفقات
الجمع بين كل شيء
حدد رقم الرابط، المحتويات (رقم السطر، المنتج، الكمية)
من Document.Invoice Document.Invoice.Composition.*

باطل

ميزة مفيدة للغاية تتيح لك تجنب العديد من الأخطاء. YesNULL() يسمح لك باستبدال القيمة NULL بالقيمة المطلوبة. يُستخدم كثيرًا في التحقق من وجود قيمة في الجداول المرتبطة، على سبيل المثال:

يختار
رابط التسمية،
IsNULL(العنصر المتبقي.الكمية المتبقية,0) AS الكمية المتبقية
من


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

ISNULL(InvoiceReceived.Date، InvoiceIssued.Date)

HOW هو عامل يسمح لنا بتعيين اسم (مرادف) لجدول أو حقل. لقد رأينا مثالاً للاستخدام أعلاه.

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

يختار
عرض(رابط)، //سلسلة، على سبيل المثال "تقرير مسبق رقم 123 بتاريخ 2015/10/10"
عرض (DeletionMark) AS RemoveMarkText، // سلسلة، "نعم" أو "لا"
ViewReferences(DeletionMark) AS RemoveMarkBoolean //منطقي، صحيح أو خطأ
من
وثيقة. تقرير مسبق

يعبر

يتيح لك Express تحويل قيم الحقول إلى نوع البيانات المطلوب. يمكنك تحويل قيمة إلى نوع بدائي أو نوع مرجعي.

يتم استخدام Express لنوع مرجعي لتقييد أنواع البيانات المطلوبة في الحقول ذات النوع المعقد، وغالبًا ما يستخدم لتحسين أداء النظام. مثال:

EXPRESS(TableCost.Subconto1 AS Directory.Cost Items).نوع النشاطForTaxAccountingCosts

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

صريحة (تعليق كخط (150))

الفرق

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

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

اختر من
المرجع
الاتصال الأيسر تسجيل التراكمات.المنتجات الموجودة في المستودعات.المنتج المتبقي
Software NomenclatureRef.Link = البضائع المباعةCommitteesRemains.Nomenclature
عندما لا تكون الكمية المتبقية من المنتجات فارغة

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

القيم المحددة مسبقًا

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

مثال الاستخدام:

حيث Nomenclature.Type of Nomenclature = القيمة (Directory.Types of Nomenclature.Product)

أين الأطراف المقابلة. نوع معلومات الاتصال = القيمة (التعداد. أنواع معلومات الاتصال. الهاتف)

أين أرصدة الحسابات.حساب المحاسبة = القيمة (مخطط الحسابات.الربح.ProfitsLoss)

روابط

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

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

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

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

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

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

اتصال كامل

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

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

من

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

بواسطة

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

صلة داخلية

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

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

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

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

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

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

ذات الصلة

تجمع بنيات JOIN وJOIN ALL بين نتيجتين في نتيجة واحدة. أولئك. سيتم "دمج" نتيجة أداء اثنين في نتيجة واحدة مشتركة.

أي أن النظام يعمل تمامًا مثل الأنظمة العادية، فقط لجدول مؤقت.

كيفية استخدام INDEX BY

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

يختار
أسعار العملات أحدث مقطع عرضي للعملة AS العملة،
أسعار العملات أحدث المقطع العرضي.
وضع أسعار العملات
من
سجل المعلومات.أسعار العملات.الشريحة الأخيرة(والفترة) AS أسعار العملاتالشريحة الأخيرة
فهرس بواسطة
عملة
;
يختار
تسميات الأسعار.التسميات،
الأسعارالتسميات.السعر،
الأسعارالتسميات.العملة،
أسعار العملات.Rate
من
سجل المعلومات.أسعار التسميات.الشريحة الأخيرة(&الفترة،
التسمية B (&التسمية) وPriceType = &PriceType) AS PriceNomenclature
LEFT JOIN أسعار العملات AS أسعار العملات
أسعار البرمجيات Nomenclatures.Currency = أسعار العملات.Currency

التجميع

تتيح لك لغة الاستعلام 1C استخدام وظائف تجميعية خاصة عند تجميع نتائج الاستعلام. يمكن أيضًا استخدام التجميع بدون وظائف تجميعية "لإزالة" التكرارات.

الوظائف التالية موجودة:

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

مثال 1:

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

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

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

المثال رقم 2

يختار
رمز البنوك،
الكمية (رابط البنوك المختلفة) كعدد التكرارات
من
Directory.Banks كيف البنوك
مجموعة من
البنوك.كود

سيعرض هذا المثال قائمة برموز BIC في دليل "البنوك" ويوضح عدد التكرارات الموجودة لكل منها.

نتائج

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

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

يختار




من
وثيقة مبيعات السلع والخدمات كيفية بيع السلع والخدمات
ترتيب حسب

نتائج
مجموع (الكمية)،
مجموع(مجموع)
بواسطة
التسميات

ستكون نتيجة الاستعلام هي التسلسل الهرمي التالي:

النتائج العامة

إذا كنت تريد الحصول على إجماليات لجميع "الإجماليات"، فاستخدم عامل التشغيل "عام".

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

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

في أي مستوى تجميع واحد يتم تجميع كافة الحقول الضرورية.

تنظيم

يتم استخدام عامل التشغيل ORDER BY لفرز نتيجة الاستعلام.

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

يختار

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

سيعرض الطلب قائمة بالأسماء في دليل التسميات، مرتبة أبجديًا.

الطلب التلقائي

نتيجة الاستعلام بدون فرز هي مجموعة من الصفوف معروضة بطريقة عشوائية. لا يضمن مطورو النظام الأساسي 1C إخراج الصفوف بنفس التسلسل عند تنفيذ استعلامات متطابقة.

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

يختار
Nomenclature.Name AS الاسم
من
Directory.Nomenclature AS التسميات
طلب تلقائي

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

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

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

  • قطع الأول؛
  • قطع من الأخير.
  • بقايا الطعام.
  • الثورات.
  • الأرصدة والتداول.
  • الحركات من subconto.
  • الثورات.
  • سرعة دتا كيلوطن.
  • بقايا الطعام.
  • الأرصدة والتداول
  • com.subconto.
  • قاعدة؛
  • بيانات الرسم البياني؛
  • مدة الصلاحية الفعلية.

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

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

يتيح لك هذا الاستعلام استرداد كمية كبيرة من البيانات بسرعة.

خيارات الجدول الظاهري

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

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

مثال على استخدام هذه المعلمات:

سجل تراكمات البضائع في المستودعات. الأرصدة والحركة (وبداية الفترة ونهاية الفترة والشهر والحركات وحدود الفترة والمسميات = والمسميات المطلوبة).

خوارزمية الجداول الافتراضية

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

عند استخدام جدول افتراضي، يقوم النظام بالمعالجة التالية:

  1. نحصل على أقرب قيمة محسوبة من حيث التاريخ والقياسات في جدول الإجماليات.
  2. "إضافة" المبلغ من جدول الحركة إلى المبلغ من جدول الإجماليات.


يمكن لمثل هذه الإجراءات البسيطة أن تحسن بشكل كبير أداء النظام ككل.

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

منشئ الاستعلام– أداة مدمجة في نظام 1C Enterprise تسهل بشكل كبير تطوير استعلامات قاعدة البيانات.

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

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

وصف منشئ الطلب 1C

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

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

تحدد علامة التبويب هذه مصدر البيانات والحقول التي يجب عرضها في التقرير. في جوهرها، الإنشاءات SELECT.. من موصوفة هنا.

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

في قائمة سياق الجداول الافتراضية، يمكنك تعيين معلمات الجدول الافتراضي:

علامة تبويب الاتصالات

يتم استخدام علامة التبويب لوصف اتصالات عدة جداول وإنشاء إنشاءات باستخدام كلمة CONNECTION.

علامة تبويب التجميع

في علامة التبويب هذه، يسمح لك النظام بتجميع وتلخيص الحقول المطلوبة لنتيجة الجدول. يصف استخدام الإنشاءات GROUP BY، SUM، MINIMUM، AVERAGE، MAXIMUM، QUANTITY، NUMBER OF DIFFERENT.

علامة تبويب الشروط

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

علامة التبويب المتقدمة

فاتورة غير مدفوعة بالإضافة إلى ذلكمليئة بجميع أنواع المعلمات التي تعتبر مهمة جدًا. دعونا نلقي نظرة على كل من الخصائص.

التجميع اختيار السجلات:

  • أول ن- معلمة تقوم بإرجاع سجلات N فقط إلى الاستعلام (عامل التشغيل FIRST)
  • لا التكرارات- يضمن تفرد السجلات المستلمة (مشغل مختلف)
  • مسموح– يسمح لك باختيار تلك السجلات التي يسمح لك النظام بتحديدها فقط مع الأخذ في الاعتبار (الإنشاء المسموح به)

التجميع نوع الطلبيحدد نوع الطلب: استرجاع البيانات، أو إنشاء جدول مؤقت، أو تدمير جدول مؤقت.

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

علامة التبويب الانضمامات/الأسماء المستعارة

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

علامة تبويب الطلب

يحدد هذا الترتيب الذي يتم به فرز القيم (ORDER BY) - تنازلي (DESC) أو تصاعدي (ASC).

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

علامة تبويب دفعة الاستعلام

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

زر "الاستعلام" في مصمم الاستعلام

يوجد في الركن الأيسر السفلي من مصمم الطلب زر طلب، والذي يمكنك من خلاله عرض نص الطلب في أي وقت:

في هذه النافذة يمكنك إجراء التعديلات على الطلب وتنفيذه.


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

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

دعونا نلقي نظرة فاحصة على هذه الأداة.

قم بتنزيل وحدة تحكم الاستعلام 1C

بادئ ذي بدء، لبدء العمل مع وحدة التحكم في الاستعلام، تحتاج إلى تنزيله من مكان ما. تنقسم العلاجات عادةً إلى نوعين - الأشكال الخاضعة للرقابة والعلاجات التقليدية (أو تسمى أحيانًا 8.1 و8.2/8.3).

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

وصف وحدة تحكم الاستعلام 1C

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

في رأس وحدة تحكم الاستعلام، يمكنك رؤية وقت تنفيذ الاستعلام الأخير بدقة ميلي ثانية، مما يسمح لك بمقارنة التصميمات المختلفة من حيث الأداء.

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

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

  • ينفذطلب- التنفيذ والنتائج البسيطة
  • تنفيذ الحزمة- يسمح لك بعرض كافة الاستعلامات المتوسطة في مجموعة من الاستعلامات
  • عرض الجداول المؤقتة- يسمح لك برؤية النتائج التي ترجعها الاستعلامات المؤقتة على الجدول

معلمات الطلب:

يسمح لك بتعيين المعلمات الحالية للطلب.

في نافذة معلمات الاستعلام، ما يلي مثير للاهتمام:

  • زر الحصول على من الطلبيجد تلقائيًا جميع المعلمات في الطلب لراحة المطور.
  • علَم المعلمات المشتركة لجميع الطلبات– عند التثبيت، لا تؤدي معالجته إلى مسح المعلمات عند الانتقال من طلب إلى آخر في قائمة الطلبات العامة.

قم بتعيين معلمة مع قائمة القيمالأمر بسيط للغاية، فقط عند اختيار قيمة المعلمة، انقر فوق زر مسح القيمة (التقاطع)، وسيطالبك النظام بتحديد نوع البيانات، حيث تحتاج إلى تحديد "قائمة القيم":

يوجد أيضًا في اللوحة العلوية زر لاستدعاء إعدادات وحدة التحكم في الاستعلام:

هنا يمكنك تحديد معلمات لاستعلامات الحفظ التلقائي ومعلمات تنفيذ الاستعلام.

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

يتم استدعاء مصمم الاستعلام 1C 8 من قائمة السياق (زر الفأرة الأيمن) عند النقر فوق حقل الإدخال:

توجد أيضًا في هذه القائمة وظائف مفيدة مثل مسح أو إضافة فواصل أسطر ("|") إلى الطلب، أو تلقي رمز الطلب بهذا النموذج المناسب:

طلب = طلب جديد؛
طلب.نص = ”
|اختر
| العملات. الرابط
|من
| Directory.Curreency AS العملات "؛
RequestResult = Request.Execute();

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



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

تحسين الاستعلام

من أهم النقاط في زيادة إنتاجية 1C Enterprise 8.3 تحسينطلبات. هذه النقطة مهمة جدًا أيضًا عندما اجتياز الشهادة. سنتحدث أدناه عن الأسباب النموذجية لأداء الاستعلام غير الأمثل وطرق التحسين.

التحديدات في جدول افتراضي باستخدام بنية WHERE

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

يمين:

يختار

من
سجل التراكمات التسويات المتبادلة مع المشاركين في المنظمات (.
,
المنظمة = &التنظيم
والفرد = &الفرد) كيفية التسويات المتبادلة مع المشاركين في أرصدة المنظمات

خطأ:

يختار
التسويات المتبادلة مع المشاركين في أرصدة المنظمات
من
سجل التراكمات التسويات المتبادلة مع المشاركين في المنظمات الأرصدة (،) كيف التسويات المتبادلة مع المشاركين في المنظمات الأرصدة
أين
التسويات المتبادلة مع المشاركين في أرصدة المنظمات المنظمة = والمنظمة
والتسويات المتبادلة مع المشاركين في أرصدة المنظمات فرد = &فرد

الحصول على قيمة حقل من النوع المعقد باستخدام نقطة

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

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

خطأ:

يختار
سجل Set.Recorder.Date،
مجموعة السجلات.الكمية
من
سجل التراكمات. المنتجات المنظمات AS SetRecords

وهذا يعني، في الواقع، أن مثل هذا الاستعلام لن يصل إلى جدول واحد، بل إلى 22 جدول قاعدة بيانات (يحتوي هذا السجل على 21 نوعًا من المسجلين).

يمين:

يختار
خيار
متى ProductsOrg.Registrar LINK Document.مبيعات المنتجات والخدمات
ثم EXPRESS (ProductsOrganization.Registrar AS Document.Sales of GoodsServices).التاريخ
عندما GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
ثم EXPRESS (GoodsOrg.Registrar AS Document.Receipt of GoodsServices).التاريخ
نهاية كتاريخ،
ProductsOrg.Quantity
من
تسجيل التراكمات.المنتجاتالمنظمات AS المنتجاتالمنظمة

أو الخيار الثاني هو إضافة هذه المعلومات إلى التفاصيل، على سبيل المثال، في حالتنا، إضافة تاريخ.

يمين:

يختار
المنتجاتالمنظمات.التاريخ،
المنتجاتالمنظمات.الكمية
من
سجل التراكمات لسلع المنظمات

الاستعلامات الفرعية في حالة الانضمام

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

خطأ:

يختار …

الانضمام الأيسر (
اختر من RegisterInformation.Limits
أين …
مجموعة من...
) بواسطة …

يمين:

يختار …
وضع حدود
من سجل المعلومات. الحدود
أين …
مجموعة من...
الفهرس حسب...;

يختار …
من وثيقة مبيعات السلع والخدمات
حدود الانضمام اليسرى
بواسطة …؛

ربط السجلات باستخدام الجداول الافتراضية

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

استخدام التحديدات بناءً على الحقول غير المفهرسة

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

ويجب أن يكون هناك فهرس مناسب لكل حالة. الفهرس المناسب هو الذي يلبي المتطلبات التالية:

  1. يحتوي الفهرس على كافة الحقول المدرجة في الشرط.
  2. هذه الحقول موجودة في بداية الفهرس.
  3. تكون هذه التحديدات متتالية، أي أن القيم غير المتضمنة في شرط الاستعلام لا يتم "دمجها" بينها.

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

استخدام المنطق OR في الشروط

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

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

يتيح لك تصميم "IN HIERARCHY" في استعلامات 1C:Enterprise 8.x الحصول على عناصر ثانوية لكائن تكوين هرمي وفقًا لتحديد محدد. سنلقي اليوم في المقالة نظرة على مثال لاستخدامه، بالإضافة إلى إجراءات النظام الأساسي من جانب نظام إدارة قواعد البيانات (DBMS) وتأثيره على الأداء.

الاستخدام

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

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

في قاعدة بيانات الاختبار، يحتوي دليل "المنتجات" على بيانات الاختبار التالية:

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

دعنا نعود إلى طلب الاختبار. لنمرر رابط المجموعة "Group - 1" إلى المعلمة "&Link" (انظر لقطة الشاشة أعلاه). بعد ذلك ستكون نتيجة الاستعلام بالشكل التالي:

كما نرى، أعاد الطلب رابطًا إلى المجموعة العليا نفسها (تم تمريرها كمعلمة)، بالإضافة إلى المجموعات المتداخلة التي تحتوي على العناصر الموجودة فيها. وبالتالي، فإن استخدام بنية "IN HIERARCHY" يسمح لك بالحصول بسهولة على البيانات الثانوية الهرمية.

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

خلف الكواليس

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

  1. سنقوم بتمرير مجموعة المستوى الأعلى "المجموعة 1" كمعلمة "&Link" (كما فعلنا سابقًا).
  2. في المعلمة، سنمرر رابطًا إلى المجموعة "المجموعة 1 - 1"، المتداخلة في مجموعة المستوى الأعلى "المجموعة 1".

الآن بالترتيب. في الحالة الأولى، ستقوم المنصة بتنفيذ الإجراءات التالية على خادم SQL:

1. أولاً، يتم تنفيذ استعلام SQL للحصول على رابط لمجموعة الدليل التي تم تمريرها كمعلمة وجميع المجموعات الثانوية. يتم وضع النتيجة في الجدول المؤقت "#tt1".

2. في المرحلة الثانية يتم تنفيذ نفس الاستعلام مرتين:

تحتوي لقطة الشاشة على تعليقات تفصيلية حول نص استعلام SQL. باختصار، يسمح لك الاستعلام بتحديد العناصر الثانوية للمجموعات التي يتم الرجوع إليها في جدول مؤقت. ويبقى السؤال: "لماذا يتم تنفيذ الاستعلام مرتين؟" الإجابة هنا بسيطة: أولاً، يتلقى الاستعلام عناصر ثانوية لمجموعات المستوى الأول الموجودة بالفعل في الجدول المؤقت (انظر النقطة 1). يقوم الاستعلام الثاني بعد ذلك باسترداد العناصر الفرعية للمجموعات الفرعية من المستوى الثاني. نظرًا لعدم وجود مجموعة دليل في المستوى الثالث من التسلسل الهرمي، لم يعد يتم تنفيذ هذا الاستعلام.

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

3. للحصول على النتيجة النهائية للاستعلام، تقوم المنصة بإنشاء استعلام SQL التالي:

يمكن معالجة نتيجة هذا الطلب بشكل أكبر من خلال الخوارزميات باللغة المدمجة في النظام الأساسي. وبالتالي، يتم استخدام الإدخالات في الجدول المؤقت "#tt1" لتعيين شرط أخذ العينات من الجدول المرجعي "_Reference41".

4. في الخطوة الأخيرة، تقوم منصة 1C:Enterprise 8.x بحذف الجدول المؤقت "#tt1"، لأنه لن يتم استخدامه في المستقبل.

هذا يكمل عملية تنفيذ عامل التشغيل "IN HIERARCHY".اسمحوا لي أن أذكرك أنه تم تنفيذ تسلسل الإجراءات المدروس على خادم SQL عندما مررنا رابطًا إلى مجموعة المستوى الأعلى "Group - 1" لطلب على جانب النظام الأساسي. ولكن كيف ستتصرف المنصة إذا مررنا رابطًا إلى مجموعة المستوى الثاني "Group - 1 - 1" كمعلمة "&Link"؟ كل شيء سيحدث بنفس الطريقة، باستثناء النقطة التالية: أعلاه، في المرحلة الثانية من تنفيذ استعلامات SQL بواسطة النظام الأساسي، تمت كتابة أن الاستعلام للحصول على العناصر الثانوية تم تنفيذه مرتين - في حالة الحصول على العناصر الثانوية لـ مجموعة "المجموعة - 1 - 1" ليس هذا هو الحال. سيتم تنفيذ الطلب مرة واحدة فقط.

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

تأثير الأداء

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

اسمحوا لي أن أقدم لكم مثالاً على استعلام دون المستوى الأمثل يمكن أن يؤدي إلى العواقب المحزنة المذكورة أعلاه:

اختر المنتجات. رابط من الدليل. المنتجات كمنتجات حيث (المنتجات. الرابط في التسلسل الهرمي (& الرابط) أو المنتجات. الرابط في التسلسل الهرمي (& الرابط 1) أو المنتجات. الرابط في التسلسل الهرمي (& الرابط 2))

كما قد تتخيل، سيؤدي الطلب إلى إنشاء العديد من استعلامات SQL، مما سيؤدي إلى انخفاض في أداء نظام المعلومات.

استخلص استنتاجاتك!

الأمر متروك لك لاستخلاص النتائج. اسمحوا لي فقط أن أقول إن النظام الأساسي يستخدم عامل التشغيل "IN HIERARCHY" لنظام تكوين البيانات عندما تتضمن شروط الاختيار "IN GROUP" و"IN GROUP FROM THE LIST" وغيرها. أعتقد أنه ليست هناك حاجة لشرح أنه من خلال التلاعب غير الصحيح، يمكن للمستخدمين إعداد تحديدات معقدة للغاية وزيادة الحمل على خادم 1C ونظام إدارة قواعد البيانات عدة مرات. دعونا نغير الإعدادات للمستخدمين ذوي الخبرة فقط.

وبالطبع، عند كتابة الآليات الخاصة بك، انتبه إلى عامل التشغيل "IN HIERARCHY". مريحة للغاية من ناحية وخطيرة من ناحية أخرى.

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

قم بالدخول إلى الموقع كطالب

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

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

العامل المنطقي بين

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

لذلك بدلا من

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

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

العامل المنطقي ب

التحقق من وجود تطابق مع أحد المدرجة

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

لذلك بدلا من

هل يمكنك كتابة شيء أكثر إيجازا؟

وستكون النتيجة هي نفسها:

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

التحقق مما إذا كانت القيمة تطابق إحدى نتائج الاستعلام

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

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

حدد الاسم من الدليل. الألوان الموجودة بالاسم (اختر اللون. الاسم من الدليل. الطعام)

جانبًا، سأذكر أنه من خلال الطلب الداخلي من الممكن الوصول إلى حقول الطلب الخارجي.

مرة أخرى، لهذا الشكل من المشغل في، استخدام الجسيمات متاح أيضًا لاأمامه.

التحقق من عضوية التسلسل الهرمي للدلائل

بالنسبة للأدلة، يمكن أيضًا إجراء التحقق من عضوية التسلسل الهرمي.

أولاً، دعونا نلقي نظرة على مثال للدليل الهرمي. افتح دليل "المدن" في قاعدة البيانات الخاصة بنا:

يرجى ملاحظة أن عناصره تختلف عن الدلائل الأخرى ( طعام, الألوان, النكهات) وجود المجلدات الصفراء. هذا مجموعات الدليل.

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

لعرض محتويات المجموعة، انقر عليها نقرًا مزدوجًا:

للانتقال إلى مستوى أعلى، انقر نقرًا مزدوجًا على المجموعة مرة أخرى:

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

يمكن أن يكون لكل عنصر (سواء كان مجموعة أو عنصرًا عاديًا) أحد الوالدين. على سبيل المثال، أصل عنصر ريو دي جانيرو هو مجموعة البرازيل:

وهذا صحيح لأن ريو دي جانيرو جزء من مجموعة البرازيل في التسلسل الهرمي للدليل:

لنكتب الآن استعلامًا يطلب مجموعة البلدان المحددة وجميع عناصر المدينة المضمنة فيها.

يرجى ملاحظة أنه يوجد في نص الطلب علامة العطف (&) قبل اسم GroupCountry. يتعرف النظام تلقائيًا على الأسماء التي تحتوي على علامة العطف كمعلمات يجب تعيين قيمتها قبل تنفيذ الاستعلام.

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

حدد مجموعة "روسيا" كقيمة لها (زر تحديد):

إذا قمنا الآن بالنقر على زر "تشغيل"، فستكون نتيجة الاستعلام كما يلي:

وكانت نتيجة الطلب هي المجموعة نفسها (روسيا) وجميع العناصر التي تشكل جزءًا منها (بيرم وكراسنويارسك وفورونيج).

إذا قمت باختيار "البرازيل" بدلاً من روسيا، ستكون النتيجة كما يلي:

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

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

للمشغل في التسلسل الهرمياستخدام الجسيمات متاح أيضًا لاأمامه.

خذ الاختبار

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

1. يقوم العامل المنطقي BETWEEN بالتحقق من القيمة

2. التعبير المنطقي 1 بين 1 و 1

3. التعبير المنطقي 1 ليس بين 2 و 2

4. الشيكات المنطقية B

5. العامل المنطقي B يسمح لك بالتحقق