1C نوع مركب الاستعلام السريع

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

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

أين المدينة = VALUE(Directory.Cities.Moscow)

أين المدينة = VALUE(Directory.Cities.EmptyLink)

WHEREProductType = VALUE(Enumeration.ProductTypes.Service)

WHEREMovementType = VALUE (AccumulationMovementType.Incoming)

أين تقع نقطة الطريق =

VALUE(BusinessProcess.Agreement.RoutePoint.Agreement)

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

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

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

مثال لطلب يحتوي على حقل غامض:

يختار

البضائع المتبقية المتبقية.الكمية المتبقية

Directory.Nomenclature AS التسميات

الاتصال الأيسر تسجيل التراكمات المتبقية البضائع

المنتجات المتبقية من البرنامج Remaining.Nomenclature = Nomenclature.Link

من الضروري تصحيح الاسم المستعار للجدول، على سبيل المثال، مثل هذا: يجب تصحيح "Directory.Nomenclature AS Nomenclature1" و"Nomenclature.Link" وفقًا لـ "Nomenclature1.Link".

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

يختار

التمثيل (المستند.الطرف المقابل) كمستلم،

العرض التقديمي (Document.Base)

Document.Invoice كمستند

5. استخدم في الطلب EXPRESS (نوع الحقل AS)يسمح لك بإزالة الجداول غير الضرورية من اتصال بحقل من نوع بيانات معقد. وبالتالي تسريع تنفيذ الطلب.

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

اختر مختلفًا
EXPRESS(البضائع المتبقية. المسجل كمستند.استلام البضائع).الرقم كرقم الإيصال،

EXPRESS (البضائع المتبقية. المسجل كمستند. استلام البضائع). التاريخ كتاريخ الاستلام

من
سجل تراكمات البضائع المتبقية
أين
(EXPRESS (البضائع المتبقية. المسجل كمستند. استلام البضائع) ليس فارغًا)

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

7. عند دمج الجداول التي تحتوي على جداول متداخلة (على سبيل المثال، مستند يحتوي على جزء جدولي)، يمكن أن تكون الكلمة الأساسية مفيدة فارغعلى سبيل المثال، عندما لا تحتوي إحدى المستندات على جزء جدولي.

الجمع بين كل شيء

من الوثيقة.الفاتورة

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

مثال (مفتعل بشكل معترف به، للانضمام الكامل):

يختار

ك. الطرف المقابل

التعداد

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

تشغيل (صحيح)

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

مثال ل أولاً:

اختر أول 5

Directory.Nomenclature.Name،

Directory.Nomenclature.PurchasingPrice

ترتيب حسب

Directory.Nomenclature.PurchasingPrice تنازلي

مثال ل متنوع:

حدد مختلف

Document.Consumable.Counterparty

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

يختار

المبلغ(الفاتورة.المبلغ) كمبلغ

Document.Invoice.Composition كفاتورة

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

يختار


استلام البضائع والسلع الخدمات الكمية AS الكمية،
استلام البضائع والخدماتGoods.Link.Counterparty
من

أين
استلام البضائع والخدماتGoods.Link = &Link

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

يختار

استلام البضائع والسلع الخدمية.

استلام السلع والخدمات رمز التسمية.

SUM (استلام السلع والخدمات. الكمية) AS الكمية،

وثيقة استلام البضائع والخدمات. كيفية استلام البضائع والخدمات

مجموعة من

استلام البضائع والسلع الخدمية.

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

يختار

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

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

وثيقة استلام البضائع والخدمات كيفية استلام البضائع والخدمات

مجموعة من

استلام البضائع والخدمات (التسميات).

12. في بعض الأحيان، بدلاً من تحديد أي حقل في التجميع، من المفيد تضمين المعلمة التالية في حقول تحديد الاستعلام:

يختار
DocProducts.Nomenclature،
&الطرف المقابل،
&فترة،
SUM(DocProducts.Quantity * DocProducts.K) ككمية،
SUM(DocProducts.Amount) كمبلغ
من
Document.Admission.Products AS DocProducts
أين
DocProducts.Link = &Link

مجموعة من
DocProducts.Nomenclature

ثم قم بتعيين المعلمة في نص الطلب:

Request.SetParameter("&Account"، SelectAccount);

Query.SetParameter("&Period", Date);

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

أ) باستخدام آلية تسلسل السلسلة، وإضافة متغيرات إلى نص الطلب؛

OrderingType = ?(SOME VARIABLE,""DESC");

Query.Text = "حدد... الترتيب حسب الحقل1" + OrderType + "...";

Query.Text = "اختر الحقل1...";

إذا كان بعض المتغير = 1 ثم

Request.Text = Request.Text + ",Field2 ...";

إنهاء إذا؛

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

يختار

DocTch.التسميات،

&بعض DocTC AS DocTC

ثم قم بتعيين المعلمة في نص الطلب

Request.Text = StrReplace(Request.Text, "&SomeDocTCH", "Document."+Link.Metadata().Name+".Products");

يمكن استخدام المعلمات في شروط الاستعلام لتمكين شرط اختياري &المعلمة أو ليست بعض الخصائص:

Request.SetParameter("&Parameter", "Counterparty.Name=""Ivanov""");

باستخدام الحرفي حقيقييمكنك إزالة عوامل تصفية معينة في الطلب

Query.SetParameter("&Parameter"، True);

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

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

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

المنتج ب (حدد المنتج...)

16. عند تصميم تقارير ACS في الاستعلامات لموازنة السجلات، يكون من المناسب والأصح استخدام التعبير كمعلمة الفترة AddToDate(EndPeriod(Period,DAY),SECOND,1)حيث يتم الحصول على الأرصدة الافتراضية في بداية الفترة ولا تشمل الثانية الأخيرة. لا يمكن استخدام تقنية +1 ثانية مع المستندات: وفقًا للطريقة الجديدة لترحيل المستندات، يجب استلام أرصدة التسجيل للفترة المحددة بواسطة كائن الحدود مع اللحظة الزمنية للمستند بما في ذلك (وليس في تاريخ مستند +1 ثانية!)، ووفقًا لطريقة الترحيل القديمة - في وقت المستند (وليس في تاريخ المستند!). عند تحليل معدل الدوران أو البيانات لفترة ما، يكون من المناسب إضافة معلمة مع النوع فترة قياسية(في هذه الحالة ليست هناك حاجة لتقديم التاريخ الأخير للفاصل الزمني في نهاية اليوم). بالنسبة للحقل القياسي "بداية الفترة"، يجب عليك إدخال حقل "التعبير". "&الفترة.تاريخ البدء" وبالنسبة للمجال القياسي "نهاية الفترة" في حقل "التعبير" اكتب " &الفترة.تاريخ الانتهاء".يمكن العثور على الكثير من المعلومات المفيدة حول لغة الاستعلام ليس في مساعد بناء الجملة، ولكن في المساعدة الكاملة لمكون 1C 8.2 (زر F1)

17. وظيفة الاستعلام باطل(إنها أكثر ملاءمة لكتابة النسخة الإنجليزية باطل) يُستخدم عادةً للتخلص من القيم الخالية لحقول الاستعلام الرقمية. في بعض الحالات، على سبيل المثال، يتم الربط الكامل بين جدولين، الوظيفة IsNull (المعلمة 1، المعلمة 2)يمكن أن يحل محل التصميم بنجاح الاختيار متى...ثم..آخر....النهاية، عندما تكون القيم NULL لأي حقل في الجدول الأول وفي الجدول الثاني (يسمح لك هذا البناء بالحصول على قيمة غير فارغة للحقل). لكن يجب أن نتذكر ذلك، على عكس العامل الشرطي خياروظيفة باطليحول نوع الوسيطة الثانية إلى نوع الوسيطة الأولى، والتي يجب أخذها في الاعتبار إذا كانت أنواع الوسيطات مختلفة!

IsNull(Reg.Remaining,0)

IsNull(Doc.Product,Doc1.Item)

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

اختيار التعبير عندما 1 ثم "عالي" عندما 2 ثم "متوسط" آخر "منخفض" النهاية

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

20. في بعض الأحيان يكون نموذج المشغل مفيدًا فيللتحقق من التطابق مع إحدى القيم المدرجة.

...أين المنتج.الاسم ب ("الأجهزة المنزلية"، "أجهزة الكمبيوتر")

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

...أين التسمية في التسلسل الهرمي (&المجموعة)

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

في الاستعلام الفرعي، يمكنك الوصول إلى حقول الاستعلام الخارجي في شرط ما.

// حدد أسماء المنتجات التي كانت موجودة

// في الفواتير

يختار

اسم المنتجات

Directory.Nomenclature كيف المنتجات

(يختار

InvoiceComposition.Nomenclature

Document.Invoice.Composition AS InvoiceComposition

InvoiceContent.Nomenclature = Products.Link)

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

بناء الجملة لاستعلام فرعي

(التعبير1، التعبير2،...،التعبيرN) في (اختر التعبير1، التعبير2،...،التعبيرN...)

بناء الجملة لجدول القيمة

(expression1, Expression2,...,expressionN) في (&TK)، حيث يتم استخدام الأعمدة N الأولى في جدول قيم TK

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

1C: المؤسسة تحب "اليسار".

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

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

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

مثال على طلب به خلل يتلقى آخر مستند منشور للطرف المقابل المحدد (أو بالأحرى الجزء الجدولي من المستند):

يختار

المنتجات الاستهلاكية. رقم السطر،

المنتجات الاستهلاكية.المنتج،

المواد الاستهلاكية.الكمية،

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

ConsumableItems.Amount

Document.Consumable AS D

الحلول الممكنة:

أ) استبدل بـ ترتيب حسبعلى

الطلب حسب D.Date DESC.

ب) يمكنك نقل الاستعلام المتداخل إلى جدول مؤقت:

Document.Consumable AS D

وD.Counterparty = &Counterparty

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

يختار

المنتجات الاستهلاكية. رقم السطر،

المنتجات الاستهلاكية.المنتج،

المواد الاستهلاكية.الكمية،

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

ConsumableItems.Amount

Document.Consumables.Goods AS ConsumablesGoods

ج) يمكنك الرجوع إلى الجدول الرئيسي للمستند، وبعد ذلك فقط إلى الجزء الجدولي

اختر أعلى 1

رقم السطر،

منتج،

كمية،

سعر،

مجموع

Document.Consumables كما المواد الاستهلاكية

Expense.Counterparty = &Counterparty

والمواد الاستهلاكية.أجريت

ترتيب حسب

المستهلكة. لحظة انخفاض الوقت

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

تتمثل ميزة هذا الاستعلام عن الاستعلام الموجود في الجدول المتداخل Receipt.Goods في أنه في حالة وجود نسخ مكررة في المستندات، فإن نتيجة الاستعلام ستعرض مستندات فريدة فقط دون استخدام الكلمة الأساسية متنوع.

يقارن:

ربما هذا هو كل ما في الأمر. من الواضح أنه لا تزال هناك أسئلة كثيرة في لغة الاستعلام لم أقم بتغطيتها. لكتابة هذه المقالة، استخدمت المعلومات التي تلقيتها بعد إكمال الدورة الأساسية 1C 8.2 spec8.ru، وكذلك من كتاب "1C 8.2 Developer's Guide" والإنترنت.

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

إضافة سلسلة

لإضافة صفوف في استعلام، يتم استخدام العملية "+". يمكنك فقط إضافة سلاسل ذات طول محدود.

حدد "الاسم:" + اسم الأطراف المقابلة في العمود 1 من الدليل الأطراف المقابلة حيث الارتباط = &الارتباط

وظيفة السلسلة الفرعية

سلسلة فرعية(<Строка>, <НачальнаяПозиция>, <Длина>)

تناظري للدالة Environment() من نموذج الكائن. يمكن تطبيق وظيفة Substring() على بيانات السلسلة وتسمح لك بتحديد جزء <Строки> ، بدءًا من رقم الحرف <НачальнаяПозиция> (يتم ترقيم الأحرف الموجودة في السطر بدءًا من 1) والطول <Длина> الشخصيات. تحتوي نتيجة حساب الدالة على نوع سلسلة متغيرة الطول، وسيتم اعتبار الطول غير محدود إذا <Строка> له طول ومعلمة غير محدودة <Длина> ليس ثابتًا أو أكبر من 1024.

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

انتباه!لا ينصح باستخدام الدالة SUBSTRING() لتحويل سلاسل ذات طول غير محدود إلى سلاسل ذات طول محدود. بدلاً من ذلك، من الأفضل استخدام عامل الإرسال EXPRESS().

وظيفة مماثلة

إذا أردنا التأكد من أن سمة السلسلة تلبي معايير معينة، فإننا نقارنها:

حدد اسم الأطراف المقابلة في العمود 1 من الدليل الأطراف المقابلة حيث الاسم = "غازبروم".

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

LIKE - عامل التحقق من سلسلة ما للتأكد من تشابهها مع النمط. التناظرية مثل في SQL.

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

الأحرف التالية في سلسلة القالب هي أحرف خدمة ولها معنى مختلف عن حرف السلسلة:

  • % (نسبة مئوية): تسلسل يحتوي على أي عدد من الأحرف العشوائية؛
  • _ (شرطة سفلية): حرف واحد عشوائي؛
  • […] (حرف واحد أو أكثر بين قوسين مربعين): أي حرف واحد مدرج بين قوسين مربعين. قد يحتوي التعداد على نطاقات، على سبيل المثال a-z، مما يعني حرفًا عشوائيًا مدرجًا في النطاق، بما في ذلك نهايات النطاق؛
  • [^...] (بين قوسين مربعين علامة النفي متبوعة بحرف واحد أو أكثر): أي حرف واحد غير تلك المدرجة بعد علامة النفي.

أي رمز آخر يعني نفسه ولا يحمل أي حمولة إضافية. إذا كان أحد الأحرف المدرجة يحتاج إلى الكتابة بنفسه، فيجب أن يسبقه<Спецсимвол>. نفسي<Спецсимвол>(أي حرف مناسب) يتم تعريفه في نفس العبارة بعد الكلمة الأساسية SPECIAL CHARACTER.

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

للقيام بذلك، تحتاج إلى استخدام الدالة Express بالتنسيق التالي:

يعبر(<Число>كرقم(<ДлинаЧисла>,<Точность>))

أين:
رقم— الحقل الذي يحتاج إلى تقريبه
أرقام الطول- الحد الأقصى لطول الرقم
دقة- دقة تقريب الأرقام

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

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

لكي تعمل، من الضروري تحويل حقل ذو طول غير محدود إلى سلسلة بطول معين؛ ويتم ذلك باستخدام الدالة Express بالتنسيق التالي:

يعبر(<Строка>كسلسلة(<ДлинаСтроки>)

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

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

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

يعبر(<Документ>كوثيقة.<ИмяТаблицы>)
يعبر(<Справочник>كدليل.< ИмяТаблицы >)
.

أين
اسم الطاولة- اسم الكائن في .

استخدم دائمًا الدالة Express عند العمل مع الأنواع المركبة، فهي تعمل على تحسين الاستعلام بشكل كبير.

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

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

لقرائي قسيمة خصم 25%: hrW0rl9Nnx

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

يمكنك تحويل أي مبلغ مباشرة:
ياندكس موني - 410012882996301
أموال الويب - R955262494655

انضم إلى مجموعاتي.

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

لذلك، يعتقد الكثير من الأشخاص خطأً أنه يمكنهم تحويل الحقل بالنوع خطفي الميدان مع النوع رقمأو الارتباط في الخط. في الواقع، يمكن لمشغل EXPRESS تحويل:

  • إعدادات الكتابة البدائية؛
  • حقل من النوع المركب في حقل من نوع واحد؛

دعونا ننظر إلى هذه المواقف بمزيد من التفصيل ...

تحويل إعدادات النوع البدائي

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

يختار
EXPRESS(Admission.Comment AS LINE(300)) AS تعليق،
الكمية (الواردة. الرابط) كرابط
من
وثيقة مدخل القاعة

مجموعة من
EXPRESS(القبول.التعليق كصف (300))

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

يختار
مبيعات.المنتج،
EXPRESS(المبيعات.الكمية * المبيعات.السعر كرقم(15, 2)) كالمبلغ
من

تحويل النوع المركب إلى نوع واحد

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

لنفترض أنك شرعت في الحصول على رقم كل مسجل من RN Sales. اكتب طلبًا:

اختر مختلفًا
المبيعات.المسجل.الرقم
من
سجل التراكمات.المبيعات كيف المبيعات

في الواقع، لا شيء يمكن أن يكون أسهل. لكن 1C، في مرحلة التنفيذ، يحول هذا الطلب دون أي اتصالات إلى طلب بأكبر عدد ممكن من المسجلين لدينا. أولئك. إذا تمت كتابة 20 مستندًا في هذا السجل، فسنحصل على استعلام SQL مع 20 صلة متبقية. لماذا يحدث هذا؟ نظرًا لأن مُحسِّن 1C المدمج لا يعالج الحقول المستلمة من خلال نقطة بشكل جيد جدًا، فهو في هذه الحالة هو سمة الرقم. هذه هي الفطائر، إذا أردنا غالبًا الحصول على رقم المستند، فمن المعقول إدراجه في تفاصيل السجل أو استخدام عامل التشغيل EXPRESS، ولكن على حساب الإيجاز:

اختر مختلفًا
المبيعات.المسجل.رقم،
خيار
عندما يكون Sales.Registrar LINK Document.Consumable
ثم EXPRESS (المبيعات. المسجل كمستند. مستهلك)
اختيار آخر
عندما يكون Sales.Registrar LINK Document.Implementation
ثم EXPRESS (المبيعات. المسجل كمستند. التنفيذ)
نهاية
...
نهاية كرقم
من
سجل التراكمات.المبيعات كيف المبيعات

الآن سوف تتضمن الصلة اليسرى جدولًا واحدًا محددًا.

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

دعونا ننظر إلى الباقي الآن.

وظائف للعمل مع السلاسل في استعلامات 1C

هناك عدد قليل من الوظائف وعوامل التشغيل للعمل مع بيانات السلسلة في استعلامات 1C.

أولاً، يمكن إضافة سلاسل في الاستعلامات. للقيام بذلك، استخدم عامل التشغيل "+":

طلب. النص = "حدد
" "خط: " " + اسم المصدر
;

ثانيا، يمكنك تحديد جزء من الخط. للقيام بذلك، استخدم الوظيفة البناء.الوظيفة مشابهة للغة 1C المدمجة. لديها ثلاث معلمات:

  1. سلسلة المصدر.
  2. رقم الحرف الذي يجب أن يبدأ به السطر المحدد.
  3. الشخصيات.

طلب. نص= "يختار
سلسلة فرعية("
"خط: " "، 4، 3) كنتيجة"; // النتيجة: حسنًا

وظيفة باطل

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

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

لديها معلمتين:

  1. القيمة التي يتم فحصها.
  2. القيمة التي سيتم استبدال المعلمة الأولى بها إذا تبين أنها NULL.

طلب. نص= "يختار
ISNULL(Source.Remainder, 0) AS Remainder"
; // إذا كانت نتيجة الطلب هي الحقل المتبقي = NULL،
// ثم سيتم استبداله بالصفر، ويمكنك إجراء العمليات الحسابية به

المهام أداءو روابط مقدمة

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

طلب. نص= "يختار
التمثيل (صحيح) كمنطقي،
التمثيل (4) كرقم،
التمثيل (Source.Link) كرابط،
التمثيل (DATETIME(2016,10,07)) كتاريخ"
;
// Boolean = "Yes"، Number = "4"، Link = "رقم أمر استلام النقد المستندي.... من..."
// التاريخ = "07.10.2016 0:00:00"

طلب. نص= "يختار
مرجع التمثيل (صحيح) AS منطقي،
مرجع التمثيل (4) كرقم
PRESENTINGLINK(Source.Link) كرابط،
مرجع التمثيل (DATETIME(2016,10,07)) كتاريخ"
;
// Boolean = TRUE, Number = 4, Link = "رقم أمر استلام النقد المستندي.... من..."
// التاريخ=07.10.2016 0:00:00

المهام يكتبو قيم النوع

وظيفة يكتبتقوم بإرجاع نوع بيانات النظام الأساسي 1C:Enterprise.

طلب. نص= "يختار
نوع الرقم)
النوع (سلسلة)،
النوع (المستند. أمر الإنفاق النقدي)"
;

وظيفة قيم النوعإرجاع نوع القيمة التي تم تمريرها إليها.

طلب. نص= "يختار
نوع القيم (5) كرقم،
يكتب ("
"خط" ") كسلسلة،
اكتب (Source.Link) كمرجع
من Directory.Source AS المصدر "
;
// رقم = رقم، سلسلة = سلسلة، الدليل = DirectoryLink.Source

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

طلب. نص= "يختار

من

أين
نوع القيم (ContactInformation.Object) = TYPE (Directory.Counterparties)"
;

وظيفة معنى

وظيفة معنىيسمح لك باستخدام كائنات تكوين 1C مباشرة في الطلب، دون استخدام .

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

طلب. نص= "يختار
معلومات الاتصال.مقدمة
من
سجل المعلومات معلومات الاتصال كيف معلومات الاتصال
أين
نوع القيم (ContactInformation.Object) = TYPE (Directory.Counterparties)
AND ContactInfo.Type = VALUE(Enum.ContactInfoTypes.Phone)"
;

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

المشغل أو العامل وصلة

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

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

طلب. نص= "يختار
معلومات الاتصال.مقدمة
من
سجل المعلومات معلومات الاتصال كيف معلومات الاتصال
أين
ContactInformation.Object LINK Directory.Counterparties"
;

المشغل أو العامل يعبر

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

  • عندما تحتاج إلى تغيير خصائص النوع البدائي؛
  • عندما تحتاج إلى تحويل حقل بنوع بيانات مركب إلى حقل بنوع واحد.

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

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

طلب. نص= "يختار
الكمية (وصول مختلف للسلع والخدمات. الرابط) كرابط
من
وثيقة استلام البضائع والخدمات كيفية استلام البضائع والخدمات
مجموعة من
EXPRESS(استلام البضائع والخدمات. تعليق في الصف (200))"
;

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

طلب. نص= "يختار
EXPRESS(حركة دوران البضائع.الطلب كوثيقة.طلب العميل).التاريخ كتاريخ الطلب،
حركة دوران البضائع.التسميات
من
سجل التراكمات.حركة البضائع.الدوران AS حركة البضائع
أين
حركة دوران البضائع.رابط الطلب.وثيقة الطلب.طلب العميل"
;

العاملين خيارو باطل

المشغل أو العامل خيارمماثلة للمشغل لوفي لغة 1C المضمنة، ولكن لديها وظائف منخفضة إلى حد ما.

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

طلب. نص= "يختار
معلومات الاتصال.المقدمة،
خيار
عندما تكون القيم نوع (ContactInformation.Object) = TYPE (Directory.Counterparties)
ثم "
الطرف المقابل "
اختيار آخر
عندما تكون القيم TYPE(ContactInformation.Object) = TYPE(Directory.Individuals)
ثم "
فردي"
آخر "شخص آخر" "
نهاية
نهاية كمالك
من
سجل معلومات الاتصال كمعلومات الاتصال"
;

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

المشغل أو العامل باطلالمستخدمة في التصميم خيارلمقارنة حقل استعلام بالنوع NULL.

طلب. نص= "يختار
خيار
عندما تكون القيمة فارغة ثم 0
معنى آخر
نهاية"
;

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