ویژگی تابع substring(). ویژگی اجرای تابع substring() توابع رشته 1c در یک درخواست


با سلام خدمت خوانندگان محترم سایت وبلاگ! امروز با کمک مثال هایی به نحوه استفاده از تابع query 1C در عمل خواهیم پرداخت SUBSTRING. استفاده از این تابع نه تنها در پرس و جوهای ساده که در اینجا به آنها خواهیم پرداخت، بلکه در پرس و جوها و پرس و جوها نیز مفید است.

وظیفه همان چیزی بود که از جزئیات سند لازم بود انطباقدو خط را انتخاب کنید و بر اساس آنها مرتب کنید. مطابقت با حسابی از این نوع: 779000/004599. چگونه می توانم این مقدار را به دو قسمت تقسیم کنم؟

تابع SUBSTRING سه پارامتر دارد. اولی رشته منبعی است که می خواهید بخشی از کاراکترها را از آن استخراج کنید - یک رشته فرعی. واضح است که نوع مقدار این پارامتر است خط. توجه، این نکته بسیار مهمی است، اگر از نوع پارامتر اول غیر از رشته استفاده کنید، تابع کار نمی کند، درخواست خطا ایجاد می کند! پارامتر دوم موقعیت کاراکتر در رشته منبع را تعیین می کند که انتخاب بخشی از رشته از آن شروع می شود و سومین پارامتر طول رشته فرعی انتخاب شده است. نوع مقدار برای پارامترهای دوم و سوم عدد است.

بیایید به تمرین ادامه دهیم:

نام Typical.Recorder AS را انتخاب کنید، SUBSTRING(Typical.Registrar.According.Name, 1, 6) AS Cost Account, SUBSTRING(Typical.Registrar.According.Name, 8, 11) AS Department, AMOUNT(انتخاب WHEN MONTH(Typical.Period) = 3 THEN EXPRESS(Typical.Amount AS NUMBER(15,2)) ELSE 0 END) ثبت نام در ماه مارس FROM .Typical AS Typical WHERE Typical.AccountKt = &AccountKt AND Typical. Period BETWEEN &PeriodStart AND &PeriodEnGROUP BY SUBSTRING(Typical.Recorder.According.Name, 1, 6), SUBSTRING(Typical.Registrar.According.Name, 8, 11), Typical.Registrar ORDER BY، حساب هزینه

نتیجه این پرس و جو به شرح زیر است:

نام حساب هزینه بخش مارس
دستور پرداخت خروجی 00000000319 از تاریخ 1389/03/01 14:42:54 779000 004599 9 000
دستور پرداخت خروجی 00000000320 از 03/02/2010 12:07:34 779000 004599 4 721,6
دستور پرداخت خروجی 00000000203 از 03/01/2010 12:28:52 786500 004599 987 614,51
دستور پرداخت خروجی 00000000227 از تاریخ 1389/03/03 ساعت 14:16:00 786500 004599 400 000
دستور پرداخت خروجی 00000000238 از 03/05/2010 12:37:57 732000 004600 5 400
دستور پرداخت خروجی 00000000197 از تاریخ 1389/03/01 11:53:11 732500 004600 12 100
دستور پرداخت خروجی 00000000198 از 03/01/2010 11:55:39 732500 004600 12 100
دستور پرداخت خروجی 00000000279 از تاریخ 1389/03/26 0:00:00 734100 004600 19 609
دستور پرداخت خروجی 00000000287 از تاریخ 1389/03/29 14:15:36 734100 004600 55 300
دستور پرداخت خروجی 00000000291 از تاریخ 2010/03/30 11:01:10 734100 004600 18 090
دستور پرداخت خروجی 00000000268 از تاریخ 1389/03/18 10:34:25 738000 004600 10 050
دستور پرداخت خروجی 00000000276 از تاریخ 1389/03/18 ساعت 12:20:20 750400 004600 13 060,98
دستور پرداخت خروجی 00000000281 از تاریخ 1389/03/29 12:33:46 750400 004600 555 645,41
دستور پرداخت خروجی 00000000234 از 03/04/2010 12:21:55 754450 004600 24 120
دستور پرداخت خروجی 00000000290 از تاریخ 1389/03/30 10:44:39 754450 004600 100 000
دستور پرداخت خروجی 00000000240 از 03/09/2010 10:53:24 786300 004600 20 800
دستور پرداخت خروجی 00000000269 از تاریخ 1389/03/18 10:58:04 786300 004600 61 012
دستور پرداخت خروجی 00000000289 از تاریخ 2010/03/30 9:27:14 786300 004600 6 000
دستور پرداخت خروجی 00000000223 از 03/03/2010 12:13:38 786500 004600 36 000
دستور پرداخت خروجی 00000000228 از 03/04/2010 9:52:35 786500 004600 378 138,85
دستور پرداخت خروجی 00000000229 از 03/04/2010 9:57:50 786503 004600 126 117,75
دستور پرداخت خروجی 00000000200 از 03/01/2010 11:58:06 754422 004762 63 000
دستور پرداخت خروجی 00000000286 از تاریخ 1389/03/29 14:10:18 764422 004762 10 000
دستور پرداخت خروجی 00000000267 از تاریخ 1389/03/17 0:00:00 764423 004762 464 370
دستور پرداخت خروجی 00000000261 از تاریخ 1389/03/15 11:16:28 764522 004762 81 357

بنابراین، اگر خط 779000/004599 را بگیریم، SUBSTRING(Typical.Recorder.Respective.Name, 1, 6) خط "779000" را برجسته می کند. یک SUBSTRING (Typical.Recorder.Respective.Name، 8، 11) "004599" را خروجی خواهد کرد.

در همان پرس و جو از عبارت زیر استفاده می شود:

SUM(CHOICE WHEN MONTH(Typical. Period) = 3 سپس EXPRESS(Typical.Sum AS NUMBER(15, 2)) ELSE 0 END) AS مارس

در همین کار لازم بود ستون های جدیدی با نام ماه ها و با مبالغ برای آنها اضافه شود. این عبارت این مشکل را حل می کند. اگر نیاز به استفاده از ماه های دیگر دارید، برای مثال ژانویه، عبارت را جایگزین کنید:

AMOUNT(انتخاب WHEN MONTH(Typical.Period) = 1 سپس EXPRESS(Typical.Sum AS NUMBER(15, 2)) ELSE 0 END) AS ژانویه

من نمونه ای از یک متن درخواستی را ارائه می کنم که در آن فیلدهای ماه (به صورت پررنگ) با استفاده از یک چرخه، از مارس تا فوریه تشکیل می شوند.

Query Text = " |انتخاب |Typical.Registrar AS Name, |SUB-STRING(Typical.Registrar.Respective.Name, 1, 6) AS Cost Account, |SUB-STRING(Typical.Registrar.Respective.Name, 8, 11 ) بخش AS,"; برای Sch = 1 تا 12 چرخه اگر Sch< 11 Тогда Мес = Сч + 2; Иначе Мес = Сч - 10; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " |СУММА(ВЫБОР | КОГДА МЕСЯЦ(Типовой.Период) = " + Мес + " | ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2)) | ИНАЧЕ 0 |КОНЕЦ) КАК Поле" + Мес + ?(Сч=12,"",","); КонецЦикла; Query Text = Query Text + " | FROM | ثبت حسابداری." + نام - ثبت -ingarter + ". Moviationsubacontos (| & nucleus, | & gunsiod,"; strokararini -generations of prospects = "(فعالیت = حقیقت) و (حساب در سلسله مراتب (& شمارش))"؛ متن بررسی = متن بررسی + strocation نسل ها + "|) به عنوان یک | معمولی؛ متن درخواست = متن درخواست + " | WHERE | Typical.AccountCt = &AnalysisAccount | AND Typical. Period BETWEEN &StartPeriod AND & EndPeriod |GROUP BY | SUBSTRING(Typical.Recorder.Resp.Name. نام، 8، 11)، | معمولی. ثبت کننده | سفارش توسط | بخش، | حساب هزینه"؛

بنابراین با استفاده از کد بالا (به صورت پررنگ) قسمت هایی از درخواست با ماه نمایش داده می شود. بنابراین، ستون های جدید با نام ماه ها و با مبالغ مربوط به آنها اضافه می شود.

مکانیسم های کمی برای کار با رشته ها در جستارهای 1C وجود دارد. ابتدا خطوط را می توان اضافه کرد. در مرحله دوم، شما می توانید یک رشته فرعی از یک رشته بگیرید. ثالثاً، رشته ها را می توان با هم مقایسه کرد، از جمله با الگو. این احتمالاً تنها کاری است که می توان با رشته ها انجام داد.

اضافه کردن رشته

برای افزودن ردیف در یک پرس و جو، از عملیات "+" استفاده می شود. شما فقط می توانید رشته هایی با طول محدود اضافه کنید.

"Name: " + Counterparties. Name AS ستون 1 FROM Directory. Counterparties AS Counterparties WHERE Counterparties. پیوند = &پیوند

تابع رشته فرعی

SUBSTRING(<Строка>, <НачальнаяПозиция>, <Длина>)

آنالوگ تابع Environment() از مدل شی. تابع Substring() می تواند روی داده های رشته اعمال شود و به شما امکان می دهد یک قطعه را انتخاب کنید <Строки> ، با شماره کاراکتر شروع می شود <НачальнаяПозиция> (نویسه های یک خط از 1 شماره گذاری می شوند) و طول <Длина> شخصیت ها. نتیجه محاسبه تابع دارای یک نوع رشته با طول متغیر است و اگر طول آن نامحدود در نظر گرفته شود <Строка> دارای طول و پارامتر نامحدود است <Длина> ثابت یا بزرگتر از 1024 نیست.

اگر طول رشته کمتر از مقدار مشخص شده در پارامتر دوم باشد، تابع یک رشته خالی برمی گرداند.

توجه!استفاده از تابع ()SUBSTRING برای تبدیل رشته هایی با طول نامحدود به رشته هایی با طول محدود توصیه نمی شود. در عوض، بهتر است از عملگر cast () EXPRESS استفاده کنید.

تابع مشابه

اگر لازم باشد مطمئن شویم که یک ویژگی رشته دارای معیارهای خاصی است، آن را با هم مقایسه می کنیم:

طرفین را انتخاب کنید. نام به‌عنوان ستون 1 از فهرست راهنمای طرفین.

اما اگر نیاز به مقایسه ظریف تری داشته باشید چه؟ نه فقط برابری یا نابرابری، بلکه شباهت به یک الگوی خاص؟ این دقیقاً همان چیزی است که تابع SIMILAR برای آن ایجاد شده است.

LIKE - عملگر برای بررسی شباهت یک رشته به یک الگو. آنالوگ LIKE در SQL.

عملگر SIMILAR به شما امکان می دهد مقدار عبارت مشخص شده در سمت چپ آن را با رشته الگوی مشخص شده در سمت راست مقایسه کنید. مقدار عبارت باید از نوع رشته باشد. اگر مقدار عبارت با الگو مطابقت داشته باشد، نتیجه عملگر TRUE و در غیر این صورت FALSE خواهد بود.

کاراکترهای زیر در رشته الگو کاراکترهای سرویس هستند و معنایی متفاوت از کاراکتر رشته دارند:

  • % (درصد): دنباله ای حاوی هر تعداد کاراکتر دلخواه.
  • _ (تاکید): یک کاراکتر دلخواه.
  • […] (یک یا چند کاراکتر در براکت مربع): هر کاراکتر منفرد که در داخل کروشه ذکر شده است. شمارش ممکن است شامل محدوده هایی باشد، به عنوان مثال a-z، به این معنی که یک کاراکتر دلخواه در محدوده، از جمله انتهای محدوده، گنجانده شده است.
  • [^...] (در پرانتز یک علامت نفی به دنبال یک یا چند کاراکتر): هر کاراکتر منفرد غیر از آنهایی که در زیر علامت نفی فهرست شده اند.

هر علامت دیگری به معنای خودش است و بار اضافی را حمل نمی کند. اگر یکی از کاراکترهای فهرست شده باید به عنوان خودش نوشته شود، باید قبل از آن نوشته شود<Спецсимвол>. خودم<Спецсимвол>(هر کاراکتر مناسب) در همان عبارت بعد از کلمه کلیدی SPECIAL CHARACTER تعریف می شود.

در زبان پرس و جو 1C: Enterprise، تابع SUBSTRING() V قالب SUBSTRING(<Исходная строка>, <Начало>, <Длина>) می تواند روی داده های رشته ای اعمال شود و به شما امکان می دهد یک قطعه را انتخاب کنید<Исходной строки>، با شماره کاراکتر شروع می شود<Начало>(نویسه های یک خط از 1 شماره گذاری می شوند) و طول<Длина>شخصیت ها. نتیجه محاسبه تابع SUBSTRING() دارای یک نوع رشته از طول متغیر است و اگر طول آن نامحدود در نظر گرفته شود<Исходная строка>دارای طول و پارامتر نامحدود است<Длина>ثابت یا بزرگتر از 1024 نیست.

محاسبه تابع SUBSTRING() در سرور SQL:
در نسخه کلاینت-سرور کار، تابع SUBSTRING() با استفاده از تابع SUBSTRING از دستور SQL مربوطه، به سرور پایگاه داده SQL Server ارسال می شود، که نوع نتیجه تابع SUBSTRING() را محاسبه می کند. با استفاده از قوانین پیچیده بسته به نوع و مقادیر پارامترهای آن و همچنین بسته به زمینه ای که در آن استفاده می شود.

در بیشتر موارد، این قوانین بر اجرای پرس و جوی 1C:Enterprise تأثیر نمی گذارد، با این حال، مواردی وجود دارد که حداکثر طول رشته نتیجه محاسبه شده توسط SQL Server برای اجرای پرس و جو ضروری است. مهم است که در نظر داشته باشید که در برخی زمینه ها هنگام استفاده از تابع SUBSTRING، حداکثر طول نتیجه آن ممکن است برابر با حداکثر طول یک رشته با طول محدود باشد که در SQL Server 4000 کاراکتر است. این ممکن است باعث شود درخواست به طور غیرمنتظره ای خاتمه یابد.

به عنوان مثال، درخواست:
کد 1C v 8.x SELECT
انتخاب

ELSE NULL
پایان به عنوان یک ارائه،
انتخاب
WHEN نوع = &LegalAddressIndividual
سپس SUBSTRING (نمایش، 0، 200)
ELSE NULL
پایان به عنوان ارائه 1
از جانب
مرتب سازی بر اساس
کارایی،
عملکرد 1
به طور غیر عادی با پیام خطای DBMS خاتمه می یابد:
ارائه دهنده Microsoft OLE DB برای SQL Server: هشدار: پردازشگر پرس و جو نمی تواند طرح پرس و جو را از بهینه ساز تولید کند زیرا طول کل ستون ها در بند GROUP BY یا ORDER BY بیش از 8000 بایت است.
HRESULT=80040E14، SQLSTATE=42000، native=8618

این به این دلیل رخ می دهد که مایکروسافت SQL Server حداکثر طول رشته را محاسبه می کند که از عبارت:
کد 1C v 8.x SELECTION
WHEN نوع = &LegalAddressIndividual
سپس SUBSTRING (نمایش، 0، 200)
ELSE NULL
پایان به عنوان یک ارائه،
برابر با 4000 کاراکتر بنابراین، طول یک رکورد متشکل از دو چنین فیلد از 8000 بایت مجاز برای عملیات مرتب سازی بیشتر است.

با توجه به ویژگی توصیف شده اجرای تابع SUBSTRING() در SQL Server، استفاده از تابع SUBSTRING() برای تبدیل رشته هایی با طول نامحدود به رشته هایی با طول محدود توصیه نمی شود. در عوض، بهتر است از عملگر cast () EXPRESS استفاده کنید. به طور خاص، مثال بالا را می توان به صورت زیر بازنویسی کرد:
کد 1C v 8.x SELECT
انتخاب
WHEN نوع = &LegalAddressIndividual
ELSE NULL
پایان به عنوان یک ارائه،
انتخاب
WHEN نوع = &LegalAddressIndividual
سپس EXPRESS (بازنمایی به عنوان رشته (200))
ELSE NULL
پایان به عنوان ارائه 1
از جانب
ثبت اطلاعات اطلاعات تماس چگونه اطلاعات تماس
مرتب سازی بر اساس
کارایی،
عملکرد 1

زبان پرس و جو در 1C 8 یک آنالوگ ساده شده از معروف "زبان برنامه نویسی ساختاریافته" است (همانطور که اغلب SQL نامیده می شود). اما در 1C فقط برای خواندن داده ها استفاده می شود؛ یک مدل داده شی برای تغییر داده ها استفاده می شود.

تفاوت جالب دیگر نحو روسی است. اگرچه در واقع می توانید از ساخت های انگلیسی زبان استفاده کنید.

درخواست نمونه:

انتخاب کنید
بانک ها، نام،
Banks.CorrAccount
از جانب
فهرست.بانک ها چگونه بانک ها

این درخواست به ما امکان می دهد اطلاعاتی درباره نام و حساب خبرنگار همه بانک های موجود در پایگاه داده را مشاهده کنیم.

زبان پرس و جو ساده ترین و موثرترین راه برای به دست آوردن اطلاعات است. همانطور که از مثال بالا مشاهده می شود، در زبان پرس و جو باید از نام های ابرداده استفاده کنید (این لیستی از اشیاء سیستم است که پیکربندی را تشکیل می دهند، به عنوان مثال دایرکتوری ها، اسناد، رجیسترها و غیره).

شرح ساختارهای زبان پرس و جو

ساختار پرس و جو

برای به دست آوردن داده ها، کافی است از ساختارهای "SELECT" و "FROM" استفاده کنید. ساده ترین درخواست به این صورت است:

SELECT * FROM Directories.Nomenclature

جایی که "*" به معنای انتخاب تمام فیلدهای جدول است و Directories.Nomenclature - نام جدول در پایگاه داده.

بیایید به یک مثال پیچیده تر و کلی تر نگاه کنیم:

انتخاب کنید
<ИмяПоля1>چگونه<ПредставлениеПоля1>,
جمع(<ИмяПоля2>) چگونه<ПредставлениеПоля2>
از جانب
<ИмяТаблицы1>چگونه<ПредставлениеТаблицы1>
<ТипСоединения>ترکیب<ИмяТаблицы2>چگونه<ПредставлениеТаблицы2>
توسط<УсловиеСоединениеТаблиц>

جایی که
<УсловиеОтбораДанных>

دسته بندی بر اساس
<ИмяПоля1>

مرتب سازی بر اساس
<ИмяПоля1>

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

در این پرس و جو، داده های فیلدهای "FieldName1" و "FieldName1" را از جداول "TableName1" و "TableName" انتخاب می کنیم، با استفاده از عملگر "HOW" به فیلدها مترادف اختصاص می دهیم و با استفاده از یک شرط خاص "TableConnectionCondition" آنها را به هم متصل می کنیم. ".

از بین داده‌های دریافتی، ما فقط داده‌هایی را انتخاب می‌کنیم که شرایط را از "WHERE" "شرط انتخاب داده‌ها" داشته باشند. سپس درخواست را بر اساس فیلد "Field Name1" گروه‌بندی می‌کنیم، در حالی که "Field Name2" را جمع می‌کنیم. مجموع برای فیلد ایجاد می‌کنیم. "Field Name1" و فیلد نهایی "Field Name2".

آخرین مرحله مرتب سازی درخواست با استفاده از ساختار ORDER BY است.

طرح های کلی

بیایید ساختارهای کلی زبان پرس و جو 1C 8.2 را بررسی کنیم.

اولینn

با استفاده از این عملگر می توانید تعداد n رکوردهای اولیه را بدست آورید. ترتیب رکوردها با ترتیب در پرس و جو تعیین می شود.

100 مورد اول را انتخاب کنید
بانک ها، نام،
بانک ها کد AS BIC
از جانب
فهرست.بانک ها چگونه بانک ها
مرتب سازی بر اساس
بانک ها. نام

درخواست 100 ورودی اول دایرکتوری "بانک ها" را دریافت می کند که بر اساس حروف الفبا مرتب شده اند.

مجاز

این طراحی برای کار با مکانیسم مرتبط است. ماهیت مکانیسم محدود کردن خواندن (و سایر اقدامات) به کاربران برای رکوردهای خاص در جدول پایگاه داده است و نه جدول به عنوان یک کل.

اگر کاربر سعی کند از یک پرس و جو برای خواندن سوابق غیرقابل دسترسی استفاده کند، یک پیام خطا دریافت می کند. برای جلوگیری از این امر، باید از ساختار "ALLOWED" استفاده کنید، یعنی درخواست فقط رکوردهایی را می خواند که مجاز به آن هستند.

انتخاب مجاز
مخزن اطلاعات تکمیلی لینک
از جانب
Directory.Repository of Additional Information

مختلف

استفاده از "DIFFERENT" از ورود خطوط تکراری به نتیجه پرس و جو 1C جلوگیری می کند. تکرار به این معنی است که همه فیلدهای درخواست مطابقت دارند.

100 مورد اول را انتخاب کنید
بانک ها، نام،
بانک ها کد AS BIC
از جانب
فهرست.بانک ها چگونه بانک ها

جدول خالی

این ساختار به ندرت برای ترکیب پرس و جوها استفاده می شود. هنگام پیوستن، ممکن است لازم باشد یک جدول تودرتو خالی در یکی از جداول مشخص کنید. عملگر "EmptyTable" برای این کار مناسب است.

مثالی از کمک 1C 8:

پیوند.تعداد، جدول خالی. (شماره، مورد، مقدار) را به عنوان ترکیب انتخاب کنید
از سند. فاکتور هزینه
همه چیز را با هم ترکیب کنید
لینک را انتخاب کنید. تعداد، محتویات. (شماره خط، محصول، کمیت)
FROM Document.Invoice Document.Invoice.Composition.*

ISNULL

یک ویژگی بسیار مفید که به شما امکان می دهد از بسیاری از اشتباهات جلوگیری کنید. YesNULL() به شما امکان می دهد مقدار NULL را با مقدار دلخواه جایگزین کنید. اغلب برای بررسی وجود یک مقدار در جداول متصل استفاده می شود، به عنوان مثال:

انتخاب کنید
پیوند مرجع نامگذاری،
IsNULL(Item Remaining.QuantityRemaining,0) AS QuantityRemaining
از جانب


می توان از روش های دیگر استفاده کرد. به عنوان مثال، اگر برای هر ردیف مشخص نباشد که در کدام جدول مقدار وجود دارد:

ISNULL(InvoiceReceived.Date، InvoiceIssued.Date)

HOW عملگری است که به ما اجازه می دهد یک نام (مترادف) به یک جدول یا فیلد اختصاص دهیم. نمونه ای از استفاده را در بالا دیدیم.

این ساختارها بسیار شبیه هستند - آنها به شما امکان می دهند یک نمایش رشته ای از مقدار مورد نظر را دریافت کنید. تنها تفاوت این است که REPRESENTATION هر مقدار را به یک نوع رشته تبدیل می کند، در حالی که REPRESENTATIONREF فقط مقادیر مرجع را تبدیل می کند. توصیه می شود که از FERENCE PRESENTATION در پرس و جوهای سیستم ترکیب داده برای بهینه سازی استفاده شود، مگر اینکه، البته، فیلد داده مرجع برای استفاده در انتخاب ها برنامه ریزی شده باشد.

انتخاب کنید
مشاهده (پیوند)، //string، به عنوان مثال "گزارش پیشبرد شماره 123 مورخ 10/10/2015
مشاهده (DeletionMark) به عنوان DeleteMarkText، //string، "Yes" یا "No"
مشاهده مراجع (DeletionMark) به عنوان DeleteMarkBoolean //بولی، درست یا نادرست
از جانب
سند.گزارش پیشرفته

بیان

Express به شما امکان می دهد مقادیر فیلد را به نوع داده مورد نظر تبدیل کنید. شما می توانید یک مقدار را به یک نوع اولیه یا یک نوع مرجع تبدیل کنید.

Express برای یک نوع مرجع برای محدود کردن انواع داده های درخواستی در فیلدهایی از نوع پیچیده استفاده می شود که اغلب برای بهینه سازی عملکرد سیستم استفاده می شود. مثال:

EXPRESS(TableCost.Subconto1 AS Directory.Cost Items).نوع ActivityForTaxAccountingCosts

برای انواع ابتدایی، این تابع اغلب برای محدود کردن تعداد کاراکترها در فیلدهای با طول نامحدود استفاده می شود (این گونه فیلدها قابل مقایسه نیستند). برای جلوگیری از خطا" پارامترهای نامعتبر در عملیات مقایسه. شما نمی توانید فیلدها را با هم مقایسه کنید
طول نامحدود و زمینه هایی از انواع ناسازگار
"، باید چنین فیلدهایی را به صورت زیر بیان کنید:

EXPRESS (نظر به عنوان خط (150))

تفاوت

267 درس ویدیویی را در 1C به صورت رایگان دریافت کنید:

مثالی از استفاده از IS NULL در درخواست 1C:

انتخاب از
مرجع
اتصال سمت چپ RegisterAccumulations.ProductsIn Warehouses.Remaining AS محصول باقیمانده
نرم افزار NomenclatureRef.Link = کالاهای فروخته شده کمیته های Remains.Nomenclature
WHERE NOT Remaining Products. QuantityRemaining NULL است

نوع داده در یک کوئری را می توان با استفاده از توابع TYPE() و VALUETYPE() یا با استفاده از عملگر REFERENCE منطقی تعیین کرد. این دو عملکرد مشابه هستند.

مقادیر از پیش تعریف شده

علاوه بر استفاده از پارامترهای ارسال شده در کوئری ها در زبان پرس و جو 1C، می توانید از مقادیر از پیش تعریف شده یا . به عنوان مثال، نقل و انتقالات، دایرکتوری های از پیش تعریف شده، نمودار حساب ها، و غیره.برای این، از ساختار "Value()" استفاده می شود.

مثال استفاده:

WHERE Nomenclature.Type of Nomenclature = Value(Directory.Types of Nomenclature.Product)

WHERE Counterparties. نوع اطلاعات تماس = ارزش (شمارش. انواع اطلاعات تماس. تلفن)

WHERE موجودی حساب. حساب حسابداری = ارزش (نمودار حساب ها. سود. سود زیان)

اتصالات

4 نوع اتصال وجود دارد: ترک کرد, درست, کامل، داخلی.

اتصال چپ و راست

Joins برای پیوند دادن دو جدول بر اساس یک شرایط خاص استفاده می شود. ویژگی زمانی چپ پیوستناین است که جدول مشخص شده اول را به طور کامل می گیریم و جدول دوم را به صورت مشروط متصل می کنیم. فیلدهای جدول دوم که نمی توانند با شرط محدود شوند با مقدار پر می شوند خالی.

مثلا:

کل جدول Counterparties را برمی گرداند و فیلد "بانک" را فقط در مکان هایی پر می کند که شرط "Counterparties.Name = Banks.Name" وجود دارد. در صورت عدم رعایت شرایط، فیلد بانک به صورت تنظیم می شود خالی.

RIGHT JOIN در زبان 1Cکاملا مشابه اتصال چپ، به استثنای یک تفاوت - در حق اتصالجدول "اصلی" دومی است، نه اولی.

اتصال کامل

اتصال کاملبا چپ و راست تفاوت دارد زیرا همه رکوردها را از دو جدول نمایش می دهد و فقط آنهایی را که می تواند بر اساس شرایط به هم متصل شود به هم وصل می کند.

مثلا:

از جانب

اتصال کامل
فهرست.بانک ها چگونه بانک ها

توسط

زبان پرس و جو هر دو جدول را به طور کامل تنها در صورتی برمی گرداند که شرط پیوستن به رکوردها برآورده شود. برخلاف اتصال چپ/راست، امکان دارد NULL در دو فیلد ظاهر شود.

پیوستن داخلی

پیوستن داخلیبا کامل تفاوت دارد زیرا فقط آن دسته از رکوردهایی را نشان می دهد که می توانند مطابق با یک شرایط خاص متصل شوند.

مثلا:

از جانب
دایرکتوری. مشتریان AS طرف مقابل

پیوستن داخلی
فهرست.بانک ها چگونه بانک ها

توسط
مشتریان.نام = بانک ها.نام

این پرس و جو فقط ردیف هایی را برمی گرداند که بانک و طرف مقابل در آنها نام یکسان دارند.

انجمن ها

ساختارهای JOIN و JOIN ALL دو نتیجه را در یک نتیجه ترکیب می کنند. آن ها نتیجه اجرای دو "ادغام" در یک، مشترک خواهد شد.

یعنی سیستم دقیقاً مانند نمونه های معمولی فقط برای یک جدول موقت کار می کند.

نحوه استفاده از INDEX BY

با این حال یک نکته را باید در نظر گرفت. ساخت ایندکس روی یک جدول موقت نیز به زمان نیاز دارد تا تکمیل شود. بنابراین، استفاده از ساختار " " توصیه می شود فقط در صورتی که مطمئن باشید که بیش از 1-2 رکورد در جدول موقت وجود دارد. در غیر این صورت، اثر ممکن است برعکس باشد - عملکرد فیلدهای نمایه شده زمان لازم برای ساخت این شاخص را جبران نمی کند.

انتخاب کنید
نرخ ارز آخرین مقطع.
نرخ ارز آخرین مقطع.
قرار دادن نرخ ارز
از جانب
ثبت اطلاعات. نرخ ارز. آخرین تکه (& دوره،) به عنوان نرخ ارز آخرین تکه
شاخص بر اساس
واحد پول
;
انتخاب کنید
قیمتها نامگذاری.نامگذاری،
قیمتها نامگذاری.قیمت،
قیمتها نامها. ارز،
نرخ ارز. نرخ
از جانب
ثبت اطلاعات. قیمت های نامگذاری. آخرین برش (& دوره
نامگذاری B (&نامگذاری) و نوع قیمت = &نوع قیمت) AS PriceNomenclature
LEFT JOIN نرخ ارز به عنوان نرخ ارز
نرم افزار PricesNomenclatures.Currency = نرخ ارز.Currency

گروه بندی

زبان پرس و جو 1C به شما امکان می دهد هنگام گروه بندی نتایج پرس و جو از توابع انبوه خاصی استفاده کنید. گروه بندی همچنین می تواند بدون توابع انبوه برای "حذف" تکراری استفاده شود.

توابع زیر وجود دارد:

مقدار، مقدار، تعداد مختلف، حداکثر، حداقل، متوسط.

مثال شماره 1:

انتخاب کنید
فروش کالاها و خدمات کالاها.
SUM (فروش کالا خدمات خدمات کالاها. مقدار) مقدار،
SUM(فروش کالا خدمات خدمات کالاها.مبلغ) AS Amount
از جانب

دسته بندی بر اساس
فروش کالا و خدمات کالا

درخواست تمام خطوط با کالا را دریافت می کند و آنها را بر اساس کمیت و مقادیر بر اساس کالا خلاصه می کند.

مثال شماره 2

انتخاب کنید
بانک ها. کد،
مقدار (بانک های مختلف. پیوند) به عنوان تعداد موارد تکراری
از جانب
فهرست.بانک ها چگونه بانک ها
دسته بندی بر اساس
بانک ها.کد

این مثال فهرستی از BIC ها را در فهرست "بانک ها" نمایش می دهد و نشان می دهد که چه تعداد تکراری برای هر یک از آنها وجود دارد.

نتایج

نتایج راهی برای به دست آوردن داده از یک سیستم با ساختار سلسله مراتبی است. توابع انبوه را می توان برای فیلدهای خلاصه، درست مانند گروه بندی، استفاده کرد.

یکی از محبوب ترین روش ها برای استفاده از نتایج در عمل، حذف دسته ای کالا است.

انتخاب کنید




از جانب
سند فروش کالا و خدمات کالا نحوه فروش کالا و خدمات کالا
مرتب سازی بر اساس

نتایج
SUM (تعداد)،
SUM (جمع)
توسط
نامگذاری

نتیجه پرس و جو به صورت سلسله مراتبی زیر خواهد بود:

نتایج کلی

اگر نیاز به دریافت مجموع برای همه "مجموعه ها" دارید، از عملگر "GENERAL" استفاده کنید.

انتخاب کنید
فروش کالاها و خدمات کالاها نامگذاری AS Nomenclature,
فروش کالا و خدمات کالا لینک سند AS,
فروش کالا و خدمات کالا.
فروش کالا و خدمات کالا.مبلغ به عنوان مبلغ
از جانب
سند فروش کالا و خدمات کالا نحوه فروش کالا و خدمات کالا
مرتب سازی بر اساس
فروش کالا و خدمات کالا لینک تاریخ
نتایج
SUM (تعداد)،
SUM (جمع)
توسط
معمول هستند،
نامگذاری

در نتیجه اجرای درخواست، نتیجه زیر را دریافت می کنیم:

که در آن 1 سطح گروه بندی، تجمیع تمام فیلدهای لازم است.

سامان دادن

عملگر ORDER BY برای مرتب کردن نتیجه یک پرس و جو استفاده می شود.

مرتب سازی برای انواع اولیه (رشته، عدد، بولی) از قوانین معمول پیروی می کند. برای فیلدهای نوع مرجع، مرتب‌سازی با نمایش داخلی پیوند (شناسه منحصربه‌فرد) به جای کد یا نمایش مرجع انجام می‌شود.

انتخاب کنید

از جانب
Directory.Nomenclature AS Nomenclature
مرتب سازی بر اساس
نام

این درخواست فهرستی از نام‌ها را در فهرست نام‌گذاری به ترتیب حروف الفبا نمایش می‌دهد.

سفارش خودکار

نتیجه یک پرس و جو بدون مرتب‌سازی، مجموعه‌ای از ردیف‌ها به‌طور آشفته ارائه شده است. توسعه‌دهندگان پلتفرم 1C تضمین نمی‌کنند که ردیف‌ها در هنگام اجرای پرس‌و‌جوهای یکسان به یک ترتیب خروجی شوند.

اگر نیاز به نمایش رکوردهای جدول به ترتیب ثابت دارید، باید از ساختار Auto-Order استفاده کنید.

انتخاب کنید
نامگذاری.نام به عنوان نام
از جانب
Directory.Nomenclature AS Nomenclature
سفارش خودکار

جداول مجازی

جداول مجازی در 1C یکی از ویژگی های منحصر به فرد زبان پرس و جوی 1C است که در سایر دستورات مشابه یافت نمی شود. جدول مجازی راهی سریع برای به دست آوردن اطلاعات پروفایل از رجیسترها است.

هر نوع ثبات مجموعه جداول مجازی مخصوص به خود را دارد که ممکن است بسته به تنظیمات رجیستر متفاوت باشد.

  • برش اولی؛
  • برش دومی
  • باقی مانده ها؛
  • انقلاب؛
  • موجودی و گردش مالی
  • حرکات از subconto؛
  • انقلاب؛
  • سرعت Dt Kt;
  • باقی مانده ها؛
  • موجودی و گردش مالی
  • زیرمجموعه
  • پایه؛
  • داده های نموداری؛
  • مدت اعتبار واقعی

برای توسعه‌دهنده راه‌حل، داده‌ها از یک جدول (مجازی) گرفته می‌شود، اما در واقع پلتفرم 1C آن‌ها را از بسیاری از جداول می‌گیرد و آنها را به شکل مورد نیاز تبدیل می‌کند.

انتخاب کنید
محصولات موجود در انبارها باقیمانده و گردش مالی. نامگذاری،
محصولات در انبارها باقی مانده و گردش مالی. مقدار اولیه باقی مانده،
محصولات در انبارها باقی مانده و گردش مالی.
کالاها در انبارها باقی مانده و گردش مالی. مقدار ورودی،
کالاها در انبارها باقی مانده و گردش مالی. مقدار مصرف،
محصولات در انبارها باقی مانده و گردش مالی. مقدار نهایی باقی مانده
از جانب
RegisterAccumulations.GoodsIn Warehouses.RemainsAndTurnover به عنوان کالا در انبارهاRemainsAndTurnover

این پرس و جو به شما امکان می دهد تا به سرعت حجم زیادی از داده ها را بازیابی کنید.

گزینه های جدول مجازی

یکی از جنبه های بسیار مهم کار با جداول مجازی استفاده از پارامترها است. پارامترهای جدول مجازی پارامترهای تخصصی برای انتخاب و پیکربندی هستند.

برای چنین جداول، استفاده از انتخاب در ساختار "WHERE" نادرست در نظر گرفته می شود. علاوه بر این که پرس و جو کمتر از حد مطلوب می شود، امکان دریافت داده های نادرست نیز وجود دارد.

نمونه ای از استفاده از این پارامترها:

ثبت انباشت کالاها در انبارها ترازها و گردش مالی (و ابتدای دوره و پایان دوره، ماه، حرکات و مرزهای دوره، نامگذاری = و نامگذاری مورد نیاز)

الگوریتم جداول مجازی

به عنوان مثال، پر استفاده ترین جدول مجازی از نوع "Remains" داده ها را از دو جدول فیزیکی - تعادل و حرکات ذخیره می کند.

هنگام استفاده از جدول مجازی، سیستم دستکاری های زیر را انجام می دهد:

  1. ما نزدیکترین مقدار محاسبه شده را از نظر تاریخ و اندازه گیری در جدول کل بدست می آوریم.
  2. ما مقدار را از جدول حرکت به مقدار جدول کل اضافه می کنیم.


چنین اقدامات ساده ای می تواند عملکرد سیستم را به طور قابل توجهی بهبود بخشد.

با استفاده از Query Builder

Query Builder- ابزاری که در سیستم 1C Enterprise تعبیه شده است که توسعه پرس و جوهای پایگاه داده را تا حد زیادی تسهیل می کند.

سازنده پرس و جو دارای یک رابط نسبتا ساده و بصری است. با این وجود، اجازه دهید استفاده از سازنده query را با جزئیات بیشتری بررسی کنیم.

سازنده متن پرس و جو از منوی زمینه (دکمه سمت راست ماوس) در محل مورد نظر در کد برنامه راه اندازی می شود.

شرح سازنده درخواست 1C

بیایید هر برگه طراح را با جزئیات بیشتری بررسی کنیم. استثنا تب Builder است که موضوعی برای بحث دیگری است.

تب جداول و فیلدها

این تب منبع داده و فیلدهایی را که باید در گزارش نمایش داده شوند را مشخص می کند. در اصل، ساختارهای SELECT.. FROM در اینجا توضیح داده شده است.

منبع می تواند یک جدول پایگاه داده فیزیکی، یک جدول ثبت مجازی، جداول موقت، پرس و جوهای تو در تو و غیره باشد.

در منوی زمینه جداول مجازی، می توانید پارامترهای جدول مجازی را تنظیم کنید:

برگه اتصالات

زبانه برای توصیف اتصالات چندین جدول استفاده می شود و ساختارهایی با کلمه CONNECTION ایجاد می کند.

برگه گروه بندی

در این تب، سیستم به شما اجازه می دهد تا فیلدهای مورد نیاز نتیجه جدول را گروه بندی و خلاصه کنید. استفاده از ساختارها GROUP BY، SUM، MINIMUM، AVERAGE، MAXIMUM، QUANTITY، NUMBER OF DIFFERENT را شرح می دهد.

برگه شرایط

مسئول هر چیزی که پس از ساخت WHERE در متن درخواست می آید، یعنی برای تمام شرایط اعمال شده بر داده های دریافتی.

تب پیشرفته

Tab علاوه بر اینمملو از انواع پارامترهایی است که بسیار مهم هستند. بیایید به هر یک از خواص نگاه کنیم.

گروه بندی انتخاب رکوردها:

  • اول N- پارامتری که فقط N رکورد را به پرس و جو برمی گرداند (اپراتور FIRST)
  • بدون تکرار- منحصر به فرد بودن رکوردهای دریافتی را تضمین می کند (اپراتور متفاوت)
  • مجاز- به شما امکان می دهد تنها رکوردهایی را انتخاب کنید که سیستم به شما اجازه می دهد با در نظر گرفتن آنها انتخاب کنید (ساخت مجاز)

گروه بندی نوع درخواستتعیین می کند که چه نوع درخواستی باشد: بازیابی داده ها، ایجاد یک جدول موقت، یا تخریب یک جدول موقت.

در زیر یک پرچم وجود دارد داده های دریافتی را برای اصلاحات بعدی قفل کنید. این به شما امکان می دهد قابلیت تنظیم قفل داده را فعال کنید، که ایمنی داده ها را از لحظه خواندن تا تغییر آن تضمین می کند (فقط مربوط به حالت قفل خودکار، طراحی FOR CHANGE).

برگه پیوستن/ مستعار

در این برگه از طراح پرس و جو، می توانید قابلیت اتصال جداول و نام های مستعار مختلف (ساختار HOW) را تنظیم کنید. جداول در سمت چپ نشان داده شده است. اگر پرچم ها را در مقابل جدول قرار دهید، ساختار UNITE استفاده می شود، در غیر این صورت - UNITE ALL (تفاوت بین دو روش). در سمت راست، مطابقت فیلدها در جداول مختلف نشان داده شده است؛ اگر مطابقت مشخص نشده باشد، پرس و جو NULL را برمی گرداند.

برگه سفارش

این ترتیب مرتب‌سازی مقادیر (ORDER BY) - نزولی (DESC) یا صعودی (ASC) را مشخص می‌کند.

یک پرچم جالب نیز وجود دارد - سفارش خودکار(در درخواست - سفارش خودکار). به طور پیش فرض، سیستم 1C داده ها را به ترتیب "آشوب" نمایش می دهد. اگر این پرچم را تنظیم کنید، سیستم داده ها را بر اساس داده های داخلی مرتب می کند.

برگه Query Batch

در برگه طراح پرس و جو، می توانید موارد جدید ایجاد کنید، و همچنین از آن به عنوان پیمایش استفاده کنید. در متن درخواست، بسته ها با علامت ";" (کاما) از هم جدا می شوند.

دکمه "پرس و جو" در طراح پرس و جو

در گوشه سمت چپ پایین طراح درخواست دکمه Request وجود دارد که با آن می توانید متن درخواست را در هر زمان مشاهده کنید:

در این پنجره می توانید تنظیمات مربوط به درخواست را انجام داده و آن را اجرا کنید.


با استفاده از Query Console

Query Console یک راه ساده و راحت برای اشکال زدایی پرس و جوهای پیچیده و به دست آوردن سریع اطلاعات است. در این مقاله سعی می کنم نحوه استفاده از Query Console را شرح دهم و لینک دانلود Query Console را ارائه کنم.

بیایید نگاهی دقیق تر به این ابزار بیندازیم.

کنسول پرس و جو 1C را دانلود کنید

اول از همه، برای شروع کار با کنسول پرس و جو، باید آن را از جایی دانلود کنید. درمان ها معمولاً به دو نوع تقسیم می شوند - فرم های کنترل شده و معمولی (یا گاهی اوقات به آنها 8.1 و 8.2/8.3 می گویند).

من سعی کردم این دو نما را در یک پردازش ترکیب کنم - فرم مورد نظر در حالت عملیاتی مورد نظر باز می شود (در حالت مدیریت شده، کنسول فقط در حالت ضخیم کار می کند).

توضیحات کنسول پرس و جو 1C

بیایید با توضیح پانل پردازش اصلی شروع به بررسی کنسول پرس و جو کنیم:

در هدر کنسول پرس و جو می توانید زمان اجرای آخرین پرس و جو را با دقت میلی ثانیه مشاهده کنید، این امکان را به شما می دهد تا طرح های مختلف را از نظر کارایی با هم مقایسه کنید.

اولین گروه از دکمه ها در نوار فرمان وظیفه ذخیره پرس و جوهای فعلی را در یک فایل خارجی دارند. این بسیار راحت است؛ همیشه می توانید به نوشتن یک درخواست پیچیده بازگردید. یا، برای مثال، فهرستی از نمونه های معمولی از طرح های خاص را ذخیره کنید.

در سمت چپ، در قسمت «درخواست»، می‌توانید درخواست‌های جدیدی ایجاد کنید و آنها را در ساختار درختی ذخیره کنید. دسته دوم دکمه ها وظیفه مدیریت لیست درخواست ها را بر عهده دارند. با استفاده از آن می توانید درخواستی را ایجاد، کپی، حذف، انتقال دهید.

  • اجرا کردندرخواست- اجرای ساده و نتایج
  • بسته را اجرا کنید- به شما امکان می دهد تمام پرس و جوهای میانی را در دسته ای از پرس و جوها مشاهده کنید
  • مشاهده جداول موقت– به شما امکان می دهد نتایجی را که پرس و جوهای موقت بر روی یک جدول باز می گرداند، مشاهده کنید

پارامترهای درخواستی:

به شما امکان می دهد پارامترهای فعلی را برای درخواست تنظیم کنید.

در پنجره پارامترهای پرس و جو، موارد زیر جالب است:

  • دکمه از درخواست دریافت کنیدبه طور خودکار تمام پارامترها را در درخواست برای راحتی توسعه دهنده پیدا می کند.
  • پرچم پارامترهای مشترک برای همه درخواست ها- هنگام نصب، پردازش آن هنگام حرکت از یک درخواست به درخواست در لیست کلی درخواست ها، پارامترها را پاک نمی کند.

یک پارامتر را با لیستی از مقادیر تنظیم کنیدبسیار ساده است، فقط هنگام انتخاب یک مقدار پارامتر، روی دکمه پاک کردن مقدار (متقاطع) کلیک کنید، سیستم از شما می خواهد که نوع داده را انتخاب کنید، جایی که باید "Value List" را انتخاب کنید:

همچنین در پنل بالایی دکمه ای برای فراخوانی تنظیمات کنسول پرس و جو وجود دارد:

در اینجا می توانید پارامترهایی را برای ذخیره خودکار پرس و جوها و پارامترهای اجرای پرس و جو مشخص کنید.

متن درخواست در قسمت درخواست کنسول وارد می شود. این کار را می توان با تایپ کردن یک تست پرس و جو یا با فراخوانی یک ابزار ویژه - طراح پرس و جو انجام داد.

وقتی روی فیلد ورودی کلیک می کنید، طراح پرس و جو 1C 8 از منوی زمینه (دکمه سمت راست ماوس) فراخوانی می شود:

همچنین در این منو عملکردهای مفیدی مانند پاک کردن یا اضافه کردن خطوط شکست ("|") به درخواست یا دریافت کد درخواست در این فرم مناسب وجود دارد:

درخواست = درخواست جدید;
Request.Text = ”
|انتخاب کنید
| ارزها.لینک
|از
| Directory.Currencies AS Currency”;
RequestResult = Request.Execute();

قسمت پایینی کنسول پرس و جو فیلد نتیجه پرس و جو را نمایش می دهد، به همین دلیل این پردازش ایجاد شده است:



همچنین، کنسول پرس و جو، علاوه بر لیست، می تواند داده ها را در قالب یک درخت - برای پرس و جوهای حاوی کل نمایش دهد.

بهینه سازی پرس و جو

یکی از مهمترین نکات در افزایش بهره وری 1C enterprise 8.3 می باشد بهينه سازيدرخواست ها. این نکته نیز زمانی بسیار مهم است گذراندن گواهینامه. در زیر در مورد دلایل معمولی برای عملکرد غیربهینه پرس و جو و روش های بهینه سازی صحبت خواهیم کرد.

انتخاب ها در یک جدول مجازی با استفاده از ساختار WHERE

اعمال فیلترها روی جزئیات جدول مجازی فقط از طریق پارامترهای VT ضروری است. تحت هیچ شرایطی نباید از ساختار WHERE برای انتخاب در جدول مجازی استفاده کنید؛ این یک اشتباه جدی از نقطه نظر بهینه سازی است. در صورت انتخاب با استفاده از WHERE، در واقع سیستم تمام رکوردها را دریافت می کند و تنها پس از آن موارد لازم را انتخاب می کند.

درست:

انتخاب کنید

از جانب
ثبت انباشت، تسویه حساب های متقابل با شرکت کنندگان سازمان ها، مانده ها (
,
سازمان = &سازمان
و فردی = و فردی

اشتباه:

انتخاب کنید
تسویه حساب متقابل با شرکت کنندگان موجودی سازمان ها. مانده مبلغ
از جانب
ثبت تجمعات تسویه حساب متقابل با شرکت کنندگان سازمان ها موجودی (,) چگونه تسویه حساب متقابل با شرکت کنندگان سازمان ها موجودی
جایی که
تسویه حساب متقابل با شرکت کنندگان موجودی سازمان ها سازمان = و سازمان
و تسویه حساب متقابل با شرکت کنندگان موجودی سازمان ها.

بدست آوردن مقدار یک فیلد از نوع پیچیده با استفاده از یک نقطه

هنگام دریافت داده های یک نوع پیچیده در یک پرس و جو از طریق یک نقطه، سیستم با یک پیوست سمت چپ دقیقاً به تعداد جدول هایی که ممکن است در زمینه نوع پیچیده وجود دارد متصل می شود.

به عنوان مثال، دسترسی به فیلد رکورد ثبت - ثبت کننده برای بهینه سازی بسیار نامطلوب است. ثبت کننده یک نوع داده ترکیبی دارد که در میان آنها همه انواع اسناد ممکن است که می توانند داده ها را در رجیستر بنویسند.

اشتباه:

انتخاب کنید
تنظیم رکورد. ضبط کننده. تاریخ،
RecordSet.Quantity
از جانب
RegisterAccumulations.ProductsOrganizations AS SetRecords

یعنی در واقع، چنین پرس و جوی نه یک جدول، بلکه به 22 جدول پایگاه داده دسترسی خواهد داشت (این ثبات دارای 21 نوع ثبت کننده است).

درست:

انتخاب کنید
انتخاب
WHEN ProductsOrg.Registrar LINK Document.Sales of Products and Services
سپس EXPRESS (محصولات سازمان. سند ثبت به عنوان. فروش کالا خدمات). تاریخ
WHEN GoodsOrg.Registrar LINK Document. Receipt of Goods Services
سپس EXPRESS (GoodsOrg.Registrar AS Document. Receipt of GoodsServices).تاریخ
پایان به عنوان تاریخ،
محصولات سازمان
از جانب
RegisterAccumulations.ProductsOrganizations AS ProductsOrganization

یا گزینه دوم این است که چنین اطلاعاتی را به جزئیات اضافه کنید، مثلاً در مورد ما، تاریخ را اضافه کنید.

درست:

انتخاب کنید
محصولات سازمان ها. تاریخ،
محصولات سازمان ها. کمیت
از جانب
ثبت انباشت کالاهای سازمانها به عنوان کالاهای سازمانها

سوالات فرعی در شرایط پیوستن

برای بهینه سازی، استفاده از پرس و جوهای فرعی در شرایط اتصال غیرقابل قبول است؛ این به طور قابل توجهی سرعت پرس و جو را کند می کند. استفاده از VT در چنین مواردی توصیه می شود. برای اتصال، فقط باید از ابرداده ها و اشیاء VT استفاده کنید، که قبلاً آنها را با فیلدهای اتصال ایندکس کرده باشید.

اشتباه:

انتخاب کنید …

چپ پیوستن (
از RegisterInformation.Limits انتخاب کنید
جایی که …
دسته بندی بر اساس...
) توسط …

درست:

انتخاب کنید …
محدودیت ها را قرار دهید
FROM Information Register.Limits
جایی که …
دسته بندی بر اساس...
شاخص بر اساس...;

انتخاب کنید …
FROM Document.فروش کالا و خدمات
LEFT JOIN محدودیت ها
توسط …؛

پیوستن به رکوردها با جداول مجازی

شرایطی وجود دارد که هنگام اتصال یک جدول مجازی به دیگران، سیستم به طور مطلوب کار نمی کند. در این مورد، برای بهینه سازی عملکرد پرس و جو، می توانید سعی کنید جدول مجازی را در یک جدول موقت قرار دهید و فراموش نکنید که فیلدهای به هم پیوسته را در کوئری جدول موقت فهرست کنید. این به دلیل این واقعیت است که VT ها اغلب در چندین جداول فیزیکی DBMS وجود دارند؛ در نتیجه یک پرسش فرعی برای انتخاب آنها کامپایل می شود و مشکل مشابه نقطه قبلی است.

استفاده از انتخاب های مبتنی بر فیلدهای غیر نمایه شده

یکی از رایج ترین اشتباهات هنگام نوشتن پرس و جو، استفاده از شرایط در فیلدهای غیر نمایه شده است، این در تضاد است. قوانین بهینه سازی پرس و جواگر پرس و جو شامل انتخاب فیلدهای غیر قابل نمایه سازی باشد، DBMS نمی تواند یک پرس و جو را به طور بهینه اجرا کند. اگر یک جدول موقت بگیرید، باید فیلدهای اتصال را نیز فهرست کنید.

برای هر شرایط باید یک شاخص مناسب وجود داشته باشد. شاخص مناسب شاخصی است که شرایط زیر را برآورده کند:

  1. فهرست شامل تمام فیلدهای فهرست شده در شرط است.
  2. این فیلدها در همان ابتدای شاخص قرار دارند.
  3. این انتخاب ها متوالی هستند، یعنی مقادیری که در شرایط پرس و جو دخیل نیستند، بین آنها "قابلیت" ندارند.

اگر DBMS شاخص های صحیح را انتخاب نکند، کل جدول اسکن می شود - این تأثیر بسیار منفی بر عملکرد خواهد داشت و می تواند منجر به مسدود شدن طولانی مدت کل مجموعه رکوردها شود.

استفاده از OR منطقی در شرایط

این همه چیز است، این مقاله جنبه های اساسی بهینه سازی پرس و جو را که هر متخصص 1C باید بداند را پوشش می دهد.

یک دوره ویدیویی رایگان بسیار مفید در مورد توسعه و بهینه سازی پرس و جو، من به شدت توصیه می کنمبرای مبتدیان و بیشتر!

حالا به بقیه نگاه کنیم.

توابع کار با رشته ها در جستارهای 1C

توابع و عملگرهای کمی برای کار با داده های رشته ای در جستارهای 1C وجود دارد.

در مرحله اول، رشته ها در پرس و جوها را می توان اضافه کرد. برای انجام این کار، از عملگر "+" استفاده کنید:

درخواست. متن = "انتخاب کنید
""خط:" " + منبع.نام
;

در مرحله دوم، می توانید بخشی از خط را انتخاب کنید. برای این کار از تابع استفاده کنید زیر ساخت.عملکرد مشابه زبان داخلی 1C است. دارای سه پارامتر است:

  1. رشته منبع
  2. تعداد کاراکتری که خط انتخاب شده باید با آن شروع شود.
  3. شخصیت ها.

درخواست. متن = "انتخاب کنید
SUBSTRING("
"خط:" "، 4، 3) به عنوان یک نتیجه"; // نتیجه: باشه

تابع ISNULL

NULL یک نوع داده خاص در پلت فرم 1C: Enterprise است. همچنین تنها مقدار ممکن از این نوع است. NULL می تواند در چند مورد در پرس و جو ظاهر شود: هنگام اتصال منابع پرس و جو، اگر مقدار مربوطه در یکی از جداول یافت نشد. هنگام دسترسی به جزئیات یک شی غیر موجود؛ اگر NULL در لیست فیلدهای پرس و جو مشخص شده باشد (مثلاً هنگام ترکیب نتایج انتخاب از چندین جدول) و غیره.

زیرا NULL نه null است، نه رشته خالی و نه حتی یک مقدار تعریف نشده،اغلب مفید است که آن را با برخی از انواع داده های مفیدتر جایگزین کنید. این همان چیزی است که عملکرد برای آن طراحی شده است. ISNULL.

دو پارامتر دارد:

  1. مقدار در حال بررسی
  2. مقداری که اگر پارامتر اول NULL بود جایگزین شود.

درخواست. متن = "انتخاب کنید
ISNULL(Source.Remainder, 0) AS Remainder"
; // اگر نتیجه درخواست باقیمانده فیلد = NULL باشد،
// سپس با 0 جایگزین می شود و می توانید عملیات ریاضی را با آن انجام دهید

کارکرد کاراییو لینک های مقدمه

این توابع برای به دست آوردن نمایش رشته ای از مقادیر مختلف طراحی شده اند. یعنی مراجع، اعداد، بولی ها و غیره را تبدیل می کنند. به متن ساده تفاوت بین آنها در عملکرد است کاراییهر نوع داده ای را به متن (رشته) و تابع تبدیل می کند لینک های مقدمه- فقط پیوند می دهد و مقادیر باقی مانده را همانطور که هست برمی گرداند، تبدیل نشده است.

درخواست. متن = "انتخاب کنید
بازنمایی (درست) به عنوان بولی،
نمایندگی (4) به عنوان یک عدد،
نمایندگی (Source.Link) به عنوان پیوند،
نمایندگی (DATETIME(2016,10,07)) به عنوان تاریخ"
;
// Boolean = "بله"، شماره = "4"، لینک = "سفارش رسید نقدی سند شماره .... از..."
// Date="07.10.2016 0:00:00"

درخواست. متن = "انتخاب کنید
RERESENTATIONREFERENCE (درست) به عنوان بولی،
RERESENTATIONREFERENCE(4) به عنوان شماره
PRESENTINGLINK(Source.Link) به عنوان پیوند،
RERESENTATIONREFERENCE(DATETIME(2016,10,07)) به عنوان تاریخ"
;
// Boolean = TRUE, Number = 4, Link = "سفارش رسید نقدی سند شماره .... از..."
// تاریخ=07.10.2016 0:00:00

کارکرد تایپ کنیدو TYPE VALUES

تابع تایپ کنیدنوع داده پلتفرم 1C: Enterprise را برمی گرداند.

درخواست. متن = "انتخاب کنید
TYPE (شماره)
TYPE (رشته)،
TYPE (سند. سفارش نقدی مخارج)"
;

تابع TYPE VALUESنوع مقدار ارسال شده به آن را برمی گرداند.

درخواست. متن = "انتخاب کنید
VALUES TYPE (5) به عنوان شماره،
TYPE ("
"خط" ") رشته AS،
TYPE (Source.Link) AS مرجع
از منبع Directory.Source AS"
;
//Number=Number، String=String، Directory = DirectoryLink.Source

استفاده از این توابع راحت است، به عنوان مثال، زمانی که باید دریابید که آیا یک فیلد دریافت شده در یک درخواست، مقداری از نوع است یا خیر. به عنوان مثال، بیایید اطلاعات تماس طرف مقابل را از ثبت اطلاعات ContactInformation دریافت کنیم (مخاطبین نه تنها طرف مقابل، بلکه سازمان ها، افراد و غیره نیز در آنجا ذخیره می شوند):

درخواست. متن = "انتخاب کنید

از جانب

جایی که
VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)"
;

تابع معنی

تابع معنیبه شما امکان می دهد از اشیاء پیکربندی 1C به طور مستقیم در یک درخواست استفاده کنید، بدون استفاده از .

بیایید یک شرط دیگر را به مثال قبلی اضافه کنیم. فقط باید شماره تلفن طرف مقابل خود را دریافت کنید.

درخواست. متن = "انتخاب کنید
اطلاعات تماس. مقدمه
از جانب
ثبت اطلاعات اطلاعات تماس چگونه اطلاعات تماس
جایی که
VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)
و ContactInfo.Type = VALUE(Enum.ContactInfoTypes.Phone)"
;

لازم به ذکر است که این تابع فقط با مقادیر از پیش تعریف شده قابل استفاده است. با مقادیری که مستقیماً از پیکربندی کننده قابل دسترسی هستند. یعنی تابع معنینمی تواند با عناصر دایرکتوری ایجاد شده توسط کاربران استفاده شود، اما می تواند با شمارش ها، با عناصر دایرکتوری از پیش تعریف شده، با مقادیر کار کند. EmptyLink.

اپراتور ارتباط دادن

اپراتور ارتباط دادنطراحی شده است تا مقادیر بازگردانده شده توسط یک درخواست را بررسی کند تا ببیند آیا آنها به یک نوع مرجع خاص تعلق دارند یا خیر. همین کار را می توان با استفاده از توابع انجام داد تایپ کنیدو TYPE VALUES(که دامنه وسیع تری دارند و در بالا مورد بحث قرار گرفتند).

به عنوان مثال، وظیفه انتخاب اطلاعات تماس برای طرفین می تواند به این ترتیب حل شود:

درخواست. متن = "انتخاب کنید
اطلاعات تماس. مقدمه
از جانب
ثبت اطلاعات اطلاعات تماس چگونه اطلاعات تماس
جایی که
ContactInformation.Object LINK Directory.Counterparties"
;

اپراتور بیان

اپراتور بیاندر پرس و جوهای 1C در دو مورد استفاده می شود:

  • هنگامی که شما نیاز به تغییر ویژگی های یک نوع اولیه دارید.
  • زمانی که باید یک فیلد با نوع داده مرکب را به یک فیلد با یک نوع تبدیل کنید.

انواع داده های اولیه عبارتند از: عدد، رشته، تاریخ، بولی.برخی از این نوع داده ها دارای ویژگی های اضافی هستند. تایپ کنید عدددارای طول و دقت، نوع خط -طول یا نامحدود

اپراتور بیانبه شما امکان می دهد نه نوع داده، بلکه ویژگی های اضافی را تغییر دهید. به عنوان مثال، او می تواند یک رشته با طول نامحدود را به رشته ای با طول محدود تبدیل کند. اگر بخواهید نتایج پرس و جو را بر اساس چنین فیلدی گروه بندی کنید، می تواند مفید باشد. شما نمی توانید بر اساس فیلدهایی با طول نامحدود گروه بندی کنید، بنابراین ما آن را به رشته ای با طول 200 کاراکتر تبدیل می کنیم.

درخواست. متن = "انتخاب کنید
مقدار (ورود کالاها و خدمات مختلف. پیوند) به عنوان پیوند
از جانب
دریافت کالا و خدمات نحوه دریافت کالا و خدمات
دسته بندی بر اساس
EXPRESS(دریافت کالا و خدمات. نظر در ردیف (200))"
;

در برخی موارد، پرس و جوهای فیلدهایی با نوع داده ترکیبی ممکن است توسط پلتفرم 1C به طور بهینه پردازش نشوند. این منجر به زمان‌های جستجو طولانی‌تر می‌شود، بنابراین می‌توان از قبل یک نوع ترکیبی را به یک نوع واحد تبدیل کرد.

درخواست. متن = "انتخاب کنید
EXPRESS (حرکت گردش کالا. سفارش به عنوان سند. سفارش مشتری). تاریخ به عنوان تاریخ سفارش،
حرکت گردش کالا. نامگذاری
از جانب
RegisterAcumulations.Movement of Goods.Turnover AS Movement of GoodsTurnover
جایی که
جابجایی کالاها. لینک سفارش سند. سفارش مشتری"
;

اپراتورها انتخابو تهی است

اپراتور انتخابمشابه اپراتور اگردر زبان داخلی 1C، اما تا حدودی عملکرد آن کاهش یافته است.

فرض کنید می خواهیم اطلاعات تماس را از ثبت اطلاعات ContactInformation دریافت کنیم و در همان زمان در یک قسمت درخواست جداگانه مشخص کنیم که متعلق به طرف مقابل است یا یک فرد.

درخواست. متن = "انتخاب کنید
ContactInformation. مقدمه،
انتخاب
WHEN VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)
سپس "
طرف مقابل "
انتخاب دیگر
WHEN VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Individuals)
سپس "
شخصی"
ELSE "یک نفر دیگر" "
پایان
پایان به عنوان مالک
از جانب
ثبت اطلاعات. اطلاعات تماس به عنوان اطلاعات تماس"
;

همانطور که از مثال مشخص است، در طراحی انتخابهمیشه بعد از کلمه یک شرط وجود دارد چه زمانی؛اگر شرط بعد از کلمه درست باشد، مقدار اعمال می شود سپسو مقدار اعمال شده در صورت عدم رعایت شرط، بعد از کلمه در غیر این صورت.هر سه عنصر طراحی انتخاباجباری هستند. حذف عنصر در غیر این صورت، مانند هنگام استفاده از اپراتور اگردر زبان داخلی 1C غیرممکن است. همچنین از اپراتور انتخابهیچ آنالوگ از طراحی وجود ندارد السیف، اما شما می توانید یک سرمایه گذاری کنید انتخابدر دیگری، همانطور که در مثال ما انجام شد.

اپراتور تهی استدر طراحی استفاده می شود انتخاببرای مقایسه یک فیلد پرس و جو با نوع NULL.

درخواست. متن = "انتخاب کنید
انتخاب
وقتی مقدار NULL است، 0 است
معنی ELSE
پایان"
;

علاوه بر این، اپراتور تهی استمی تواند در شرایط پرس و جو استفاده شود، مانند یک جمله جایی که.

انتخاب سردبیر
سیاره ای که در آن حیات می تواند سرچشمه بگیرد باید چندین معیار خاص را داشته باشد. برای نام بردن از چند مورد: او باید ...

سیاره ای که در آن حیات می تواند سرچشمه بگیرد باید چندین معیار خاص را داشته باشد. برای نام بردن از چند مورد: او باید ...

امکان انتقال از راه دور یکی از داغ ترین موضوعات ماوراء الطبیعه و فراعلمی است. علاوه بر این، متکی است ...

غلبه روش های مدیریتی اقتدارگرایانه- بوروکراتیک (نظام فرماندهی-اداری)، تقویت بیش از حد کارکردهای سرکوبگر...
عناصر و آب و هوا علم و فناوری پدیده های غیرمعمول نظارت بر طبیعت بخش های نویسنده کشف تاریخ...
مورخان در سراسر جهان هنوز در مورد اینکه جنگ های صلیبی چه بود و شرکت کنندگان در آن به چه نتایجی دست یافتند، بحث می کنند. با اينكه...
مشخص است که در بسیاری از مبارزات و نبردهای بوگدان خملنیتسکی علیه لهستانی ها، ارتش تاتار به عنوان متحد عمل می کرد. از تاتار...
حادثه نیروگاه هسته ای چرنوبیل بزرگترین حادثه در کل صنعت انرژی هسته ای است. منجر به یک فاجعه زیست محیطی جدی شد و تبدیل به...
علیرغم اینکه در طول شش سال جنگ جهانی دوم داستان های زیادی از برخورد با بشقاب پرنده ها وجود داشت، علاوه بر گزارش های هیجان انگیز...