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

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

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

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

انتخاب نوع. DVR AS نام ، زیر رشته(معمولی. ضبط. نام متناظر ، 1 ، 6) به عنوان هزینه هزینه حساب ، زیر رشته(Typical.Recorder.CorrespondingName، 8، 11) AS Department، SUM (انتخاب کنید چه زمانی در ماه (Typical.Period) \u003d 3 THEN EXPRESS) (Typical.Sum as Number (15، 2)) ELSE 0 END) در مارس از ثبت نام حسابداری. معمولی به عنوان نمونه در هرجایی که معمولی است. حساب \u003d & AccountCt و معمولی. دوره در بین و شروع دوره و & دوره با گروه زیر رشته(معمولی. ثبت نام. نام متناظر ، 1 ، 6) ، زیر رشته(معمولی. ضبط. نام متناظر ، 8 ، 11) ، معمولی. ثبت نام سفارش توسط بخش ، حساب هزینه

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

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

بنابراین ، اگر خط 779000/004599 را در نظر بگیریم ، پس SUBSTRING (معمولی ثبت نام کننده. مربوط به نام ، 1 ، 6) خط "779000" را برجسته می کند. SUBSTRING (Typical.Regist.Related.Name ، 8 ، 11) "004599" را تولید می کند.

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

SUM (انتخاب ماه کی (معمولی)) \u003d 3 بیان آنگاه (معمولی. جمع به تعداد (15 ، 2)) دیگر 0 پایان) مارس

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

SUM (انتخاب ماه کی) (دوره معمولی) \u003d 1 THEN EXPRESS (معمولی. جمعاً به عنوان شماره (15 ، 2)) دیگر 0 پایان) AS ژانویه

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

متن درخواست \u003d \u003d "| SELECT | Typical.Registrator AS Name ، | SUBSTRATE (Typical.Registrator. طبق نام ، 1 ، 6) AS هزینه حساب ، | SUBSTRING (Typical.Registrator. با توجه به نام ، 8 ، 11) گروه AS ، "؛ برای اواسط \u003d 1 در 12 چرخه اگر متوسط \u200b\u200bباشد< 11 Тогда Мес = Сч + 2; Иначе Мес = Сч - 10; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " |СУММА(ВЫБОР | КОГДА МЕСЯЦ(Типовой.Период) = " + Мес + " | ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2)) | ИНАЧЕ 0 |КОНЕЦ) КАК Поле" + Мес + ?(Сч=12,"",","); КонецЦикла; درخواست متن \u003d متن درخواست + "| از | ثبت نام حسابداری." + AccountRegisterName + ".MovementsSubconto (| & StartPeriod، | & ConPeriod،"؛ StringDefinitionsBy Attributes \u003d "(Activity \u003d TRUE) AND (Account IN HIERARCHY (& Analysis Account))" "؛ پرسش متن \u003d QueryText" QueryQuery "| QueryText \u003d QueryText + "| WHERE | Typical.CountCt \u003d & حساب تجزیه و تحلیل | AND Typical.Period BETWEEN & StartPeriod AND & EndPeriod | LOAD BY | SUBSTRING (Typical.Regist.Related.Name، 1، 6)، | زیر مجموعه 8 ، 11) ، | معمولی. ثبت نام کننده | سفارش توسط | بخش ، | حساب هزینه "؛

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

نوع "رشته" در همه زبانهای برنامه نویسی یافت می شود. ابتدایی است و در 1C توابع زیادی برای کار با آن وجود دارد. در این مقاله ، با استفاده از مثالهایی ، روشهای مختلف کار با انواع رشته ها را در 1C 8.3 و 8.2 از نزدیک بررسی خواهیم کرد.

خط

به منظور تبدیل یک متغیر از هر نوع به یک رشته ، تابعی با همان نام "String ()" وجود دارد. پارامتر ورودی متغیر خواهد بود که نمایش رشته آن باید بدست آید.

رشته (نادرست) // "خیر" را برمی گرداند
رشته (12345) // "12 345" را برمی گرداند
رشته (CurrentDate ()) // 07/21/2017 11:55:36

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

SocrLP ، SocrL ، SocrP

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

اختصار ("فضاهای هر دو طرف حذف خواهد شد") // "فضاهای هر دو طرف حذف خواهند شد"
خلاصه شده ("فضاهای هر دو طرف حذف خواهد شد") // "فضاهای سمت چپ حذف خواهد شد"
اختصار ("فضاهای هر دو طرف حذف خواهد شد") // "فضاهای سمت راست حذف خواهد شد"

لئو ، راست ، چهارشنبه

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

شیر ("متغیر رشته" ، 4) // "Stro" را برمی گرداند
راست ("متغیر رشته" ، 7) // "متغیر" را برمی گرداند
Wed ("متغیر رشته" ، 2 ، 5) // "troco" را برمی گرداند

طول Str

این تابع تعداد کاراکترهایی را که در متغیر رشته وجود دارند تعیین می کند.

StrLength ("Word") // نتیجه اجرا شماره 5 خواهد بود

برای پیدا کردن

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

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

("یک ، دو ، یک ، دو ، سه" ، "دو") را پیدا کنید // تابع عدد 6 را برمی گرداند

خط خالی

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

EmptyString ("Pupkin Vasily Ivanovich") // تابع مقدار False را برمی گرداند
EmptyString ("") // تابع True را برمی گرداند

VReg ، NReg ، Treg

این توابع برای مقایسه و تبدیل متغیرهای رشته بسیار مفید هستند. Breg () رشته اصلی را با بزرگ ، HPreg () را با حروف کوچک برمی گرداند و TPreg () آن را قالب بندی می کند تا اولین کاراکتر هر کلمه بزرگ با حروف بزرگ و همه حروف بعدی کوچک باشد.

Vreg ("مدیر کل") // مقدار برگشتی - "مدیر کل"
NReg ("مدیر کل") // مقدار برگشتی - "مدیر کل"
TREG ("مدیر کل") // مقدار برگشتی - "مدیر کل"

جایگزین صفحه

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

StrReplace ("قرمز ، سفید ، زرد" ، "،" ، "؛") // "قرمز برمی گردد؛ سفید؛ زرد"

رشته های StrNumberStrings

این تابع به شما امکان می دهد تعداد متغیرهای جداشده از طریق حمل کالا را در یک متغیر متنی تعیین کنید.

حلقه در مثال زیر از سه دایره عبور می کند زیرا عملکرد RowNumber به 3 باز می گردد:

برای ind \u003d 1 توسط StrNumber of Lines ("String1" + Symbols.PS + "String2" + Symbols.PS + "String3") حلقه
<тело цикла>
پایان چرخه ؛

StrGetString

این عملکرد با متن چند خطی به همان روش قبلی کار می کند. به شما امکان می دهد یک رشته خاص را از متغیر متن دریافت کنید.

StrGetString ("String1" + Symbols.PS + "String2" + Symbols.PS + "String3"، 2) // "String2" را برمی گرداند

تعداد وقایع

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

Row of Attachments ("a؛ b؛ c؛ d؛"، "؛") // تابع عدد 4 را برمی گرداند

نماد و رمز نماد

این توابع به شما امکان می دهد یک شخصیت را با کد Unicode آن بدست آورید و همچنین این کد را توسط خود کاراکتر تعیین کنید.

SymbolCode ("A") // تابع شماره 1 040 را برمی گرداند
SymbolCode (1040) // عملکرد "A" را برمی گرداند

کارهای مکرر هنگام کار با رشته ها

رشته های متصل کننده

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

"Line 1 ″ +" Line 2 ″ // نتیجه افزودن دو رشته "Line 1 Line 2" خواهد بود

تبدیل نوع

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

رشته (1000) // "1000" را برمی گرداند

لطفا توجه داشته باشید که هنگام تبدیل یک عدد به یک رشته ، برنامه به طور خودکار یک فضای جدا کننده هزار را اضافه می کند. به منظور جلوگیری از این ، می توانید از ساختارهای زیر استفاده کنید:

StrReplace (رشته (1000) ، نویسه ها. NPP ، "") // "1000" را برمی گرداند

رشته (قالب (1000 ، "ChG \u003d")) // "1000" را برمی گرداند

نقل قول ها در یک رشته

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

عنوان \u003d رشته ("Horns and Hooves LLC" - این ما هستیم!) // "Horns and Hoofs LLC - همان ما هستیم" را برمی گرداند.

چند خط ، قطع خط

برای ایجاد یک متن چند خطی ، کافی است شخصیت های خط شکسته (Symbols.PS) را به آن اضافه کنید.

MultilineText \u003d "خط اول" + Symbols.PS + "خط دوم"

نحوه حذف فضاها

برای حذف فضاهای سمت راست یا چپ ، می توانید از تابع "اختصار ()" (و همچنین "اختصار ()" و "اختصار ()") استفاده کنید:

StringNoSpaces \u003d اختصار LP ("بسیاری از حروف") // تابع مقدار "بسیاری از حروف" را برمی گرداند

اگر پس از تبدیل یک عدد به یک رشته ، باید فضاهای بدون شکست را حذف کنید ، از ساختار زیر استفاده کنید:

StringNoSpaces \u003d StrReplace (رشته (99999) ، کاراکترها. NPP ، "") // "99999" را برمی گرداند

همچنین ، برنامه نویسان اغلب از ساختار زیر استفاده می کنند ، که به شما امکان می دهد تمام فضاهای متغیر متن را با یک کاراکتر دیگر حذف یا جایگزین کنید:

StringNoSpaces \u003d StrReplace ("خوش آمدید" ، "" ، "") // "سلام" را برمی گرداند

مقایسه رشته ها با یکدیگر

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

"Hello" \u003d "سلام" // False را برمی گرداند
"Hello" \u003d "سلام" // درست باز خواهد گشت
"سلام" \u003d "خداحافظ" // False برمی گردد

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

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

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

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

NULL دیگر
مانند نمایش ،
انتخاب کنید
WHEN View \u003d & LegalAddressPhysPersons
THEN SUBSTRING (نمایش ، 0 ، 200)
NULL دیگر
پایان دادن به نمای 1
از

مرتب سازی بر اساس
نمایندگی،
عملکرد 1
با پیام خطای DBMS به طور غیر عادی خاتمه می یابد:
Microsoft OLE DB Provider for SQL Server: هشدار: پردازشگر پرس و جو نمی تواند یک برنامه پرس و جو از بهینه ساز ایجاد کند زیرا طول کل ستون های بند GROUP BY یا ORDER BY از 8000 بایت بیشتر است.
HRESULT \u003d 80040E14 ، SQLSTATE \u003d 42000 ، بومی \u003d 8618

دلیل این است که Microsoft SQL Server حداکثر طول رشته را که حاصل عبارت است محاسبه می کند:
Code 1C v 8.x CHOICE
WHEN View \u003d & LegalAddressPhysPersons
THEN SUBSTRING (نمایش ، 0 ، 200)
NULL دیگر
مانند نمایش پایان دهید ،
برابر با 4000 کاراکتر است. بنابراین ، طول یک رکورد متشکل از دو فیلد از این دست بیش از 8000 بایت مجاز برای عملیات مرتب سازی است.

با توجه به ویژگی توصیف شده اجرای تابع SUBSTRING () در SQL Server ، استفاده از تابع SUBSTRING () برای تبدیل رشته هایی با طول نامحدود به رشته هایی با طول محدود توصیه نمی شود. بهتر است به جای آن از عملیات ریخته گری EXPRESS () استفاده کنید. به طور خاص ، مثال فوق می تواند به صورت زیر بازنویسی شود:
Code 1C v 8.x SELECT
انتخاب کنید
WHEN View \u003d & LegalAddressPhysPersons
NULL دیگر
مانند نمایش ،
انتخاب کنید
WHEN View \u003d & LegalAddressPhysPersons
THEN EXPRESS (نمایندگی AS String (200))
NULL دیگر
پایان دادن به نمای 1
از
ثبت نام اطلاعات. اطلاعات تماس با ما اطلاعات تماس
مرتب سازی بر اساس
نمایندگی،
عملکرد 1

یک رشته یکی از انواع داده های ابتدایی در سیستم های 1C است: Enterprise 8. متغیرها با نوع خط حاوی متن است.

مقادیر متغیرهای نوع خطدر دو نقل قول محصور شده اند. متغیرهای مختلفی از این نوع می توانند اضافه شوند.

Per1 \u003d "Word 1" ؛
Per2 \u003d "Word 2" ؛
Per3 \u003d Per1 + "" + Per2؛

در نهایت Per3 به معنای " Word 1 Word 2.

علاوه بر این ، سیستم های 1C: Enterprise 8 توابع کار با رشته ها را ارائه می دهند. بیایید موارد اصلی را در نظر بگیریم:

معرفی رشته (<Строка>, <Подсказка>, <Длина>, <Многострочность>) — این تابع برای نمایش یک جعبه محاوره ای طراحی شده است که در آن کاربر می تواند مقدار یک متغیر از نوع را مشخص کند خط... پارامتر <Строка> الزامی است و شامل نام متغیری است که رشته وارد شده به آن نوشته خواهد شد. پارامتر <Подсказка> اختیاری عنوان کادر محاوره ای است. پارامتر <Длина> اختیاری ، حداکثر طول رشته ورودی را نشان می دهد. پیش فرض صفر است ، که به معنی طول نامحدود است. پارامتر <Многострочность> اختیاری. حالت ورودی متن چند خطی را تعیین می کند: درست - ورودی متن چند خطی با جداکننده های خط ؛ False - ورودی رشته ای ساده.

رشته را می توان وارد کرد و کد نویسه Unicode را داد:

سمبل(<КодСимвола>) — کد به عنوان یک عدد وارد می شود.

نامه \u003d نماد (1103) ؛ // من

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

SymbolCode (<Строка>, <НомерСимвола>) — تعداد کاراکتر Unicode مشخص شده را به عنوان یک عدد برمی گرداند.

توابع تبدیل مورد:

BReg (<Строка>) - همه کاراکترهای رشته را به بزرگ تبدیل می کند.

HPreg (<Строка>) - همه کاراکترهای رشته را به حروف کوچک تبدیل می کند.

Treg (<Строка>) - همه کاراکترهای رشته را به بزرگ تبدیل می کند. یعنی اولین حرفهای همه کلمات به حروف بزرگ تبدیل می شوند و بقیه حروف به حروف کوچک تبدیل می شوند.

توابع جستجو و جایگزینی نویسه ها در یک رشته:

برای پیدا کردن (<Строка>, <ПодстрокаПоиска>) - شماره کاراکتر وقوع زیر رشته جستجو را پیدا می کند. مثلا:

Find ("String" ، "Oka") ؛ // 4

جستجو کردن (<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) - تعداد کاراکتر وقوع زیرشاخه جستجو را پیدا می کند ، تعداد وقوع در پارامتر مربوطه نشان داده شده است. در این حالت ، جستجو با کاراکتری شروع می شود که شماره آن در پارامتر مشخص شده است موقعیت اولیهجستجو از ابتدا یا از انتهای رشته امکان پذیر است. مثلا:

تعداد 4 \u003d StrFind ( "توان دفاعی"، "o" ، جهت جستجو. از ابتدا ، 1 ، 4) ؛ // 7

جایگزین (<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) - تمام موارد زیر رشته جستجو را در رشته اصلی پیدا می کند و آن را با زیر رشته جایگزین می کند.

StrReplace ("رشته" ، "اوکا" ، "") ؛ // صفحه

خط خالی (<Строка>) - رشته را برای شخصیت های قابل توجه بررسی می کند. اگر هیچ شخصیت قابل توجهی وجود نداشته باشد ، یا هیچ کاراکتر وجود نداشته باشد ، مقدار بازگردانده می شود درست است، واقعی... در غیر این صورت - دروغ گویی.

تعداد وقایع (<Строка>, <ПодстрокаПоиска>) - تعداد وقایع رشته فرعی جستجو را در رشته اصلی محاسبه می کند.

تعداد وقایع ( "مطالعه ، مطالعه و مطالعه مجدد"، "مطالعه" ، "" ) ؛ // 3

صفحه صفحه (<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — پارامترها را به تعداد رشته جایگزین می کند. خط باید حاوی نشانگرهای جایگزینی فرم باشد: "٪ 1 ..٪ N". نشانگرها با شروع از 1 شماره گذاری می شوند. اگر مقدار پارامتر باشد تعریف نشده، یک رشته خالی جایگزین می شود.

صفحه صفحه ( "پارامتر 1 \u003d٪ 1 ، پارامتر 2 \u003d٪ 2", "1" , "2" ) ; // پارامتر 1 \u003d 1 ، پارامتر 2 \u003d 2

توابع تبدیل رشته:

یک شیر(<Строка>, <ЧислоСимволов>) - اول شخصیت های اول رشته را برمی گرداند.

درست (<Строка>, <ЧислоСимволов>) - آخرین کاراکترهای رشته را برمی گرداند.

چهار شنبه (<Строка>, <НачальныйНомер>, <ЧислоСимволов>) - یک رشته طول را برمی گرداند<ЧислоСимволов>با شخصیت شروع می شود<НачальныйНомер>.

AbbrL (<Строка>) نویسه های ناچیز را در سمت چپ اولین کاراکتر قابل توجه در رشته کوتاه می کند.

مخفف (<Строка>) - نویسه های ناچیز را در سمت راست آخرین کاراکتر قابل توجه در رشته کاهش می دهد.

SocrLP (<Строка>) - نویسه های ناچیز را در سمت چپ اولین شخصیت قابل توجه در خط و در سمت راست آخرین شخصیت قابل توجه در خط قطع می کند.

StrGetString (<Строка>, <НомерСтроки>) - یک رشته از یک رشته چند خطی را با تعداد دریافت می کند.

توابع دیگر:

StrLength (<Строка>) - تعداد کاراکترهای یک رشته را برمی گرداند.

شماره ردیف (<Строка>) - تعداد خطوط یک رشته چند خطی را برمی گرداند. اگر یک خط با یک کاراکتر فید خط از خط قبلی جدا شود ، جدید محسوب می شود.

مقایسه کنید (<Строка1>, <Строка2> ) - دو رشته را مقایسه می کند ، به حروف بزرگ حساس نیست. عملکرد به همان صورت یک شی works کار می کند مقایسه ارزشها... بازده:

  • 1 - اگر خط اول بیشتر از خط دوم باشد
  • -1 - اگر خط دوم بیشتر از خط اول باشد
  • 0 - اگر رشته ها برابر باشند

Str مقایسه ("خط اول" ، "خط دوم") ؛ // یکی

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

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

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

انتخاب کنید
بانک ها
بانک ها. CorrAccount
از
فهرست

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

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

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

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

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

SELECT * FROM Directories.Nomenclature

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

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

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

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

بارگذاری توسط
<ИмяПоля1>

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

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

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

از داده های دریافتی ، ما فقط داده هایی را انتخاب می کنیم که با شرایط مطابقت داشته باشد از "WHERE" "DataFeedback Condition". در مرحله بعدی ، ما پرس و جو را بر اساس قسمت "FieldName1" جمع می کنیم ، در حالی که "FieldName2" را جمع می کنیم. برای فیلد "FieldNameField1" جمع ایجاد می کنیم قسمت نهایی "FieldName2".

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

ساخت و سازهای عمومی

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

اولینn

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

FIRST 100 را انتخاب کنید
بانک ها
بانکها کد AS BIC
از
فهرست
مرتب سازی بر اساس
بانک ها.

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

مجاز

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

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

انتخاب مجاز است
ذخیره اطلاعات اضافی. پیوند
از
مرجع ذخیره سازی اطلاعات اضافی

مختلف

استفاده از "DIFFERENT" به شما این امکان را می دهد که رشته های تکراری را از ورود به نتیجه جستجو 1C حذف کنید. تکثیر به این معنی است که تمام قسمتهای درخواست مطابقت دارند.

FIRST 100 را انتخاب کنید
بانک ها
بانکها کد AS BIC
از
فهرست

جدول خالی

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

مثال از راهنما 1C 8:

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

NULL است

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

انتخاب کنید
نامگذاری Ref. Ref.
تعادل مقدار NULL (موجودی مورد. تعادل مقدار ، 0) وجود دارد
از


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

IS NULL (InvoiceReceived.Date، InvoiceEdited.Date)

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

این سازه ها بسیار شبیه به هم هستند - به شما اجازه می دهند نمایشی از رشته را از مقدار دلخواه دریافت کنید. تنها تفاوت این است که REPRESENTATION هر مقداری را به نوع رشته تبدیل می کند و REFERENCE REPESENTATION فقط مقادیر مرجع را تبدیل می کند. ارائه مرجع توصیه می شود در پرس و جوهای سیستم ترکیب داده برای بهینه سازی استفاده شود ، مگر اینکه ، البته ، قسمت داده های مرجع برای استفاده در فیلترها برنامه ریزی شده است.

انتخاب کنید
مشاهده (پیوند) ، // خط ، به عنوان مثال "گزارش پیشرفت شماره 123 مورخ 10/10/2015
نمایندگی (علامت حذف) به عنوان علامت حذف متن ، // رشته ، "بله" یا "نه"
نمای مرجع (علامت حذف) به عنوان علامت حذف Boolean // بولی ، درست یا نادرست
از
سند. گزارش پیشرفت

عنوان کردن

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

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

EXPRESS (جدول Cost. Subconto1 به عنوان مرجع. مقالات هزینه). نوع فعالیت برای حسابداری هزینه مالیات

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

EXPRESS (نظر AS Line (150))

تفاوت

267 آموزش ویدیویی 1C را به صورت رایگان دریافت کنید:

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

از انتخاب کنید
اسپرینگ
LEFT JOIN ثبت نام در انباشت. محصولات در انبارها. مانده مانده است
Nomenclature SoftwareRef.Ref \u003d اجرا شدهCommentsComponentsRemains.Nomenclature
تراز محصول در کجاست. تعادل مقدار آن صفر است

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

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

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

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

WHERE Nomenclature.NomenclatureType \u003d مقدار (Directory.NomenclatureTypes.Product)

WHERE Contractors. نوع اطلاعات تماس \u003d مقدار (مقدار (اطلاعات) شماره تماس. نوع تلفن)

WHERE Account Balances.Account \u003d Value (برنامه حساب ها. خود پشتیبانی. سودهای از دست رفته)

اتصالات

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

چپ و راست بپیوندید

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

مثلا:

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

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

اتصال کامل

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

مثلا:

از

اتصال کامل
فهرست

توسط

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

اتصال داخلی

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

مثلا:

از
دایرکتوری. پیمانکاران AS مشتریان

اتصال داخلی
فهرست

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

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

انجمن ها

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

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

نحوه استفاده از نرم افزار INDEX

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

انتخاب کنید
نرخ ارز SliceLast. ارز AS ارز ،
نرخ ارز SliceLast.Course
نرخ ارز POST
از
ثبت اطلاعات. نرخ ارز. آخرین نرخ ارز (و دوره) ، نرخ ارز اسلایس آخرین
INDEX توسط
واحد پول
;
انتخاب کنید
قیمتها نامگذاری.
قیمتها اسامی. قیمت
قیمت ها
نرخ ارز.
از
ثبت اطلاعات. نامگذاری قیمت ها. تکه آخر (و دوره ،
نامگذاری B (و نامگذاری) و قیمت نوع \u003d و نوع قیمت) از نظر قیمت
LEFT UNION نرخ ارز به عنوان نرخ ارز
BY RatesNomenclature.Currency \u003d RatesCurrency.Currency

گروه بندی

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

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

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

مثال شماره 1:

انتخاب کنید
فروش کالا ، خدمات ، کالاها ، نامگذاری ،
SUM (فروش کالاها ، خدمات ، کالاها. مقدار) به عنوان مقدار ،
AMOUNT (فروش کالاهای خدمات خوبها. مقدار) به عنوان مبلغ
از

بارگذاری توسط
تحقق کالاهایخدمات کالا.نام تجاری

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

مثال شماره 2

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

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

نتیجه

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

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

انتخاب کنید




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

نتایج
SUM (مقدار) ،
SUM (مبلغ)
توسط
نامگذاری

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

خلاصه کلی

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

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

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

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

مرتب سازی

از اپراتور ORDER BY برای مرتب سازی نتیجه پرس و جو استفاده می شود.

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

انتخاب کنید

از
مرجع. نامگذاری AS نامگذاری
مرتب سازی بر اساس
نام

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

سفارش خودکار

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

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

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

جداول مجازی

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

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

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

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

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

چنین پرسشی به شما امکان می دهد به سرعت مقدار زیادی داده بدست آورید.

پارامترهای جدول مجازی

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

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

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

ثبت انباشت. محصولات در انبارها

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

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

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

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


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

با استفاده از طراح پرس و جو

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

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

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

شرح سازنده پرس و جو 1C

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

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

این برگه منبع داده و زمینه هایی را که می خواهید در گزارش نمایش داده شوند مشخص می کند. به عنوان یک ماده در واقع ساخت و سازها را انتخاب کنید.

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

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

برگه پیوندها

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

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

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

برگه شرایط

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

تب پیشرفته

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

گروه بندی واکشی رکوردها:

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

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

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

برگه اتحادیه ها / مستعارها

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

برگه سفارش

در اینجا می توانید ترتیب مرتب سازی مقادیر (ORDER BY) - نزولی (DESCENT) یا صعودی (RETURN) را تعیین کنید.

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

برگه بسته پرس و جو

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

دکمه پرس و جو در Query Builder

در گوشه پایین سمت چپ سازنده درخواست ، یک دکمه Query وجود دارد که با استفاده از آن می توانید متن پرس و جو را در هر زمان مشاهده کنید:

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


با استفاده از کنسول Query

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

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

بارگیری کنسول 1C Query

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

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

شرح کنسول جستجوگر 1C

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

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

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

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

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

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

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

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

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

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

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

در اینجا می توانید گزینه هایی را برای ذخیره خودکار جستجوها و گزینه هایی برای اجرای یک جستجو را تعیین کنید.

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

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

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

درخواست \u003d درخواست جدید؛
Request.Text \u003d "
| انتخاب کنید
| ارزها
| از
| دایرکتوری. ارزها به عنوان ارز "؛
QueryResult \u003d Query.Run ()؛

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



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

بهینه سازی نمایش داده شد

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

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

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

درست:

انتخاب کنید

از
ثبت تجمع. تسویه حساب های متقابل با Deponents سازمان ها. باقیمانده (
,
سازمان \u003d & سازمان
و فردی \u003d و فردی) چگونه تسویه حساب های متقابل با Deponents سازمان ها

اشتباه:

انتخاب کنید
تسویه حساب های متقابل با تعلیق ها سازمانها تعادل. مبلغ تعادل
از
ثبت تجمع. تسویه حسابهای متقابل با Deponents سازمانها. تعادل (،) AS تسویه حسابهای متقابل با Deponents سازمانها تعادل
جایی که
تسویه حساب با DeponentsOrganizationsBalances.Organization \u003d & سازمان
و تسویه حساب های متقابل با DeponentsOrganizationsBalances. شخصی \u003d و فردی

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

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

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

اشتباه:

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

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

درست:

انتخاب کنید
انتخاب کنید
WHEN GoodsOrg.Registrar LINK سند. واقعی سازی خدمات خدمات
THEN EXPRESS (سند GoodsOrg.Registrar AS. واقعی سازی خدمات کالا). تاریخ
WHEN GoodsOrg.Registrar LINK سند. ورود کالا خدمات
THEN EXPRESS (GoodsOrg.Registrar AS Document.Arival of GoodsService). تاریخ
پایان به عنوان تاریخ ،
محصولات تولیدی تعداد
از
ثبت انباشت. GoodsOrg

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

درست:

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

زیرمجموعه ها در شرایط پیوستن هستند

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

اشتباه:

انتخاب کنید …

LEFT JOINT (
از صفحه داده انتخاب کنید محدودیت ها
جایی که ...
بارگیری توسط ...
) توسط …

درست:

انتخاب کنید …
محدودیت های ارسال
از ثبت اطلاعات. محدودیت ها
جایی که ...
بارگیری توسط ...
INDEX توسط…؛

انتخاب کنید …
از سند. واقعی سازی خدمات کالا
به چپ بپیوندید محدودیت ها
توسط …؛

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

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

با استفاده از انتخاب در زمینه های بدون فهرست

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

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

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

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

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

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

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