نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی
  • خانه
  • ایمنی
  • قرار گرفتن در یک گروه بر اساس سلسله مراتب 1s 8. عملگر "in hierarchy" در یک درخواست

قرار گرفتن در یک گروه بر اساس سلسله مراتب 1s 8. عملگر "in hierarchy" در یک درخواست

طراحی "IN HIERARCHY" در جستارهای 1C:Enterprise 8.x به شما امکان می دهد عناصر فرعی یک شی پیکربندی سلسله مراتبی را با توجه به یک انتخاب معین بدست آورید. امروز در مقاله به نمونه ای از استفاده از آن و همچنین اقدامات پلت فرم در سمت DBMS و تأثیر آن بر عملکرد نگاه خواهیم کرد.

استفاده

بیایید به یک مثال ساده از استفاده از ساختار "IN HIERARCHY" نگاه کنیم. هنگام اجرای درخواست زیر، عناصر زیرمجموعه دایرکتوری سلسله مراتبی "محصولات" برای مقدار پاس شده از متغیر "Link" به دست می آید.

متن درخواست = "انتخاب | محصولات . ارتباط دادن،| کالاها . کد فروشنده |از جانب| فهرست راهنما . محصولات AS محصولات| کجا | کالاها . پیوند در سلسله مراتب (& پیوند)"

در پایگاه داده آزمایشی، دایرکتوری "محصولات" داده های آزمایشی زیر را دارد:

البته تصویر تمام ورودی های دایرکتوری را نشان نمی دهد. اسکرین شات فقط ساختار ذخیره سازی داده ها را در فهرست سلسله مراتبی نشان می دهد. جدول دایرکتوری 10 گروه سطح بالا را ذخیره می کند که هر کدام شامل 5 گروه تو در تو با 200 عنصر است.

به درخواست تست برگردیم. بیایید پیوند گروه "Group - 1" را به پارامتر "&Link" منتقل کنیم (نگاه کنید به تصویر بالا). سپس نتیجه پرس و جو به صورت زیر خواهد بود:

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

نحو زبان پرس و جو 1C: Enterprise SQL کلاسیکاز برخی جهات بسیار شبیه اما برای عبارت "IN HIERARCHY" هیچ آنالوگ در زبان پرس و جوی SQL وجود ندارد، به عنوان مثال، برای بیان زبان پرس و جوی پلت فرم "B" یک عملگر SQL مشابه "IN" وجود دارد. بنابراین، کار پلت فرم با DBMS هنگام استفاده از این اپراتور جالب است.

پشت صحنه

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

  1. ما گروه سطح بالا "گروه 1" را به عنوان پارامتر "&Link" ارسال می کنیم (همانطور که قبلا انجام دادیم).
  2. در پارامتر، پیوندی را به گروه "گروه 1 - 1" که در گروه سطح بالا "گروه 1" تودرتو است ارسال می کنیم.

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

1. ابتدا یک پرس و جوی SQL برای به دست آوردن پیوندی به گروه دایرکتوری ارسال شده به عنوان پارامتر و همه گروه های تابع اجرا می شود. نتیجه در جدول موقت "#tt1" قرار می گیرد.

2. در مرحله دوم، همان پرس و جو دو بار اجرا می شود:

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

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

3. برای به دست آوردن نتیجه نهایی پرس و جو، پلتفرم پرس و جوی SQL زیر را تولید می کند:

نتیجه این درخواست خاص می‌تواند توسط الگوریتم‌هایی در زبان داخلی پلتفرم پردازش شود. بنابراین، ورودی های جدول موقت "#tt1" برای تنظیم شرایط نمونه گیری از جدول مرجع "_Reference41" استفاده می شود.

4. در آخرین مرحله، پلت فرم 1C: Enterprise 8.x جدول موقت "#tt1" را حذف می کند، زیرا دیگر در آینده استفاده نخواهد شد.

این فرآیند اجرای عملگر "IN HIERARCHY" را کامل می کند.اجازه دهید به شما یادآوری کنم که توالی اقدامات در نظر گرفته شده در سرور SQL زمانی انجام شد که ما پیوندی را به گروه سطح بالا "Group - 1" به درخواستی در سمت پلت فرم ارسال کردیم. اما اگر پیوندی را به گروه سطح دوم "گروه - 1 - 1" به عنوان پارامتر "&Link" ارسال کنیم، پلتفرم چگونه رفتار خواهد کرد؟ همه چیز به همین ترتیب اتفاق می افتد، به جز نکته زیر: در بالا، در مرحله دوم اجرای کوئری های SQL توسط پلتفرم، نوشته شده بود که پرس و جو برای به دست آوردن عناصر فرعی دو بار اجرا شده است - در مورد به دست آوردن عناصر فرعی برای گروه "گروه - 1 - 1" اینطور نیست. درخواست فقط یک بار اجرا می شود.

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

تاثیر عملکرد

استفاده نادرست از هر اپراتور در یک پرس و جو ممکن است منجر به عملکرد ضعیف سیستم شود. اپراتور تحت بررسی "IN HEERARCHY" نیز از این قاعده مستثنی نیست. باید با احتیاط استفاده شود، زیرا الگوریتم اجرای پرس و جوهای SQL در پایگاه داده را بسیار پیچیده می کند و در نتیجه بار روی سرور DBMS را افزایش می دهد.

اجازه دهید مثالی از یک پرس و جوی غیربهینه برای شما ارائه کنم که می تواند منجر به عواقب غم انگیز ذکر شده در بالا شود:

محصولات را انتخاب کنید. پیوند از دایرکتوری. محصولات به عنوان محصولات WHERE (محصولات. پیوند در سلسله مراتب (& پیوند) یا محصولات. پیوند در سلسله مراتب (& Link1) یا محصولات. پیوند در سلسله مراتب (& Link2) )

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

نتیجه گیری خود را انجام دهید!

نتیجه گیری به عهده شماست. اجازه دهید فقط بگویم که عملگر "IN HIERARCHY" توسط پلت فرم برای سیستم ترکیب داده ها استفاده می شود که شرایط انتخاب شامل "IN GROUP"، "IN GROUP FROM THE LIST" و موارد دیگر باشد. من فکر می کنم نیازی به توضیح نیست که با دستکاری های نادرست، کاربران می توانند انتخاب های بسیار پیچیده را تنظیم کنند و بار روی سرور 1C و DBMS را چندین بار افزایش دهند. بیایید تنظیمات را فقط برای کاربران با تجربه تغییر دهیم.

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

زبان پرس و جو در 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 یک شی درخت فوق داده تخصصی هستند که برای ذخیره اطلاعات مرجع استاتیک عمل می کنند. به عنوان مثال، در پیکربندی‌های معمولی می‌توانید نماهای زیر را مشاهده کنید: , نام‌گذاری, کارمندان, دارایی‌های ثابت و غیره. اطلاعات موجود در دایرکتوری ها معمولاً تغییر نمی کند. دایرکتوری ها متعاقباً تقریباً در تمام اشیاء حسابداری به عنوان بخش حسابداری یا اطلاعات مرجع استفاده می شوند.

در زیر به راه اندازی و طراحی دایرکتوری از پیکربندی کننده با استفاده از دایرکتوری "Nomenclature" به عنوان مثال نگاه خواهیم کرد.

برگه پایه

برگه "Basic" نام، مترادف، نمایش شی و شرح هدف را مشخص می کند.

برگه "دایرکتوری سلسله مراتب".

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

سلسله مراتب در 1C 8.3 دو نوع است - " گروه ها و عناصر"و" عناصر". تفاوت آن این است که در حالت اول فقط یک پوشه (گروه) می تواند والد (پوشه) باشد و در حالت دوم یک عنصر نیز می تواند والد باشد.

"قرار دادن گروه ها در بالا" - پرچم مسئول نمایش گروه ها در فرم لیست است.

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

برگه مالکان

یک دایرکتوری را می توان به دایرکتوری دیگری وابسته کرد. از نقطه نظر پیکربندی 1C 8.3، این بدان معنی است که ویژگی "مالک" برای عنصر فرعی اجباری می شود. نمونه ای از چنین ارتباطی بین دایرکتوری ها در تنظیمات استاندارد "نامگذاری - واحدهای اندازه گیری"، "طرفداران - قراردادهای پیمانکاران".

مالک دایرکتوری همچنین می تواند اشیاء فوق داده زیر باشد: , .

برگه داده

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

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

فهرست دارای مجموعه‌ای از جزئیات استاندارد است که توسط برنامه‌نویس 1C 8.2 ویرایش نشده‌اند؛ فهرستی از آنها را می‌توان با کلیک کردن روی دکمه «جزئیات استاندارد» مشاهده کرد:

من در مورد هر یک با جزئیات بیشتر صحبت خواهم کرد:

  • این گروه- یک ویژگی با نوع بولی که نشان می دهد یک گروه یا یک عنصر است. فقط در فهرست سلسله مراتبی موجود است. توجه داشته باشید، مقدار این ویژگی را نمی توان در حالت 1C: Enterprise تغییر داد.
  • کد- props، عدد یا رشته را تایپ کنید (معمولاً یک رشته). شماره ای که به طور خودکار توسط سیستم اختصاص داده می شود. به طور معمول به عنوان (کد قبلی + 1) محاسبه می شود. توصیه می کنم از نوع رشته استفاده کنید، زیرا مرتب سازی مقادیر عددی آنطور که انتظار می رود کار نمی کند. می تواند به عنوان ارائه دایرکتوری در یک لیست و در فیلدهای ورودی استفاده شود. معمولاً برای جستجوی یک عنصر هنگام وارد کردن یک رشته استفاده می شود. اگر باید فیلد Code را حذف کنید، صفر را در طول خط وارد کنید.
  • نام- جزئیات اجباری، نوع رشته. حداکثر طول خط 150 کاراکتر است. می تواند به عنوان ارائه دایرکتوری در یک لیست و در فیلدهای ورودی استفاده شود. معمولاً برای جستجوی یک عنصر هنگام وارد کردن یک رشته استفاده می شود. اگر باید فیلد Name را حذف کنید، صفر را در طول خط وارد کنید.
  • والدین- یک ویژگی از نوع DirectoryLink.<ИмяТекущегоСправочника>. فقط در فهرست سلسله مراتبی موجود است. به والد برتر در سلسله مراتب اشاره می کند. اگر عنصر یا گروه در ریشه دایرکتوری باشد، مقدار Directory مشخص می شود.<ИмяТекущегоСправочника>.EmptyLink.
  • مالک- پیوند به عنصر مالک عنصر دایرکتوری فعلی (گروه). در دسترس فقط در دایرکتوری 1C فرعی.
  • حذف پرچم- لوازم با نوع Boolean. مسئول نمایش "علامت حذف" در سیستم. عنصری که برای حذف علامت گذاری شده است غیرقابل استفاده در نظر گرفته می شود، اما ممکن است حرکات سند قدیمی روی آن باقی بماند.
  • ارتباط دادن- فیلد نوع رشته این ویژگی یک شناسه شی منحصر به فرد - GUID را ذخیره می کند. آنچه ما در سیستم در یک صفحه نمایش بصری به نام "پیوند" می بینیم فقط نمایش یک شی است. قابل تغییر نیست.
  • از پیش تعریف شده- نوع بولی، نشان می دهد که آیا عنصر از پیش تعریف شده است یا خیر، در ادامه بیشتر در مورد آن. قابل تغییر نیست.

برگه "داده" همچنین نشان دهنده نمایش دایرکتوری در سیستم است؛ قبل از نسخه 8.2.16، نمایش فقط می توانست کد یا نام باشد. در نسخه های اخیر پلتفرم (شروع از 8.3)، نمای را می توان به طور مستقل در ماژول مدیر با استفاده از کنترلر "ViewReceivingProcessing" توصیف کرد.

برگه شماره گذاری

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

سری کد - نحوه شماره گذاری دایرکتوری را تعیین می کند؛ می توانید شماره گذاری دایرکتوری را توسط مالک وارد کنید. به عنوان مثال، طرف مقابل "Horns and Hooves" شماره قراردادهای خاص خود را خواهد داشت - "1، 2، 3" و غیره.

برگه فرم ها

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

این صفحه دارای یک ویژگی مهم دایرکتوری است - "". این یک عملکرد بسیار راحت 1C 8 است که به شما امکان می دهد هنگام پر کردن داده ها در قسمت ورودی، به دایرکتوری نروید، بلکه نام، کد و غیره آن را تایپ کنید. و عنصر مورد نظر را از لیست کشویی انتخاب کنید. به نظر می رسد این است:

برگه دیگر

در برگه می توانید به ماژول های اصلی دایرکتوری - ماژول شی و ماژول مدیر دسترسی سریع داشته باشید.

همچنین می توانید لیستی از عناصر دایرکتوری از پیش تعریف شده را در صفحه تعریف کنید. اینها مواردی هستند که در حالت Enterprise قابل حذف نیستند. عناصر از پیش تعریف شده را می توان مستقیماً با نام در پیکربندی کننده مشاهده کرد، به عنوان مثال: Directories.Nomenclature.Service.

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

این بخش نمونه هایی از حل مسائل معمولی را هنگام کار با دایرکتوری های سلسله مراتبی نشان می دهد.

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

برای به دست آوردن عناصر فرعی یک فهرست سلسله مراتبی، زبان پرس و جو ساختار IN HIERARCHY را ارائه می دهد. مثال استفاده در سلسله مراتب:


انتخاب کنید
نامگذاری.کد،
نامگذاری.قیمت خرید
از جانب

در این مثال، تمام رکوردهای فهرست نامگذاری که در گروه &گروه قرار دارد، شامل خود، گروه های تابع و عناصر متعلق به گروه های فرعی به دست می آید.

اگر ما فقط به عناصر و گروه هایی که مستقیماً در یک گروه معین قرار دارند علاقه مند هستیم، می توانیم با تنظیم یک شرط در قسمت Parent چنین عناصری را بدست آوریم. مثال:


انتخاب کنید
نامگذاری.کد،
نامگذاری نام AS نام،
نامگذاری.قیمت خرید
از جانب
Directory.Nomenclature AS Nomenclature

جایی که
Nomenclature.Parent = &Group

این پرس و جو گروه ها و عناصر وابسته به گروه را با پیوند &گروه انتخاب می کند.

بررسی وجود عناصر فرعی یک عنصر دایرکتوری

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

در این مثال، ارجاع به عنصری که می‌خواهید فرزندان آن را بررسی کنید، در پارامتر Query Parent نوشته می‌شود. پس از اجرای چنین کوئری، باید نتیجه را از نظر خالی بودن بررسی کنید. اگر نتیجه خالی نباشد، رکوردهای فرعی وجود دارد. در غیر این صورت - نه. مثال:


اگر Request.Execute().Empty() سپس
گزارش ("بدون ورودی")؛
در غیر این صورت
گزارش ("سوابق موجود")؛
endIf;

گرفتن همه والدین یک عنصر

زبان پرس و جو هیچ وسیله خاصی برای بازیابی همه والدین یک عنصر ارائه نمی دهد. می توانید از مجموع سلسله مراتبی برای تکمیل کار استفاده کنید، اما به دست آوردن مجموع سلسله مراتبی برای ساخت مجموع برای تعداد زیادی رکورد بهینه شده است و برای به دست آوردن والدین یک عنصر به طور کامل مؤثر نیست. برای بازیابی کارآمدتر تمام رکوردهای والد یک عنصر، توصیه می‌شود در بخش‌های کوچکی از طریق والدین آن حلقه بزنید. مثال:


CurrentItemItem = ItemItem;

Query = New Query ("SELECT
| نامگذاری.والدین،
| نامگذاری.والدین.والد،
| نامگذاری.والدین.والد.والد،
| نامگذاری. والد. والد. پدر و مادر.
| نامگذاری.والدین.والد.والد.والدین.والد
|از
| Directory.Nomenclature AS Nomenclature
| کجا
| Nomenclature.Link = &CurrentNomenclatureElement";

در حالی که چرخه حقیقت
Request.SetParameter("CurrentItemItem", CurrentItemItem);
نتیجه = Query.Run();
If Result.Empty() سپس
سقط
endIf;
Selection = Result.Select();
Selection.Next();
برای ColumnNumber = 0 توسط Result.Columns.Quantity() - 1 حلقه
CurrentItemItem = Selection[ColumnNumber];
سقط
در غیر این صورت
گزارش (CurrentItemItem)؛
endIf;
چرخه پایان

اگر CurrentItemItem = Directories.Nomenclature.EmptyLink() سپس
سقط
endIf;
چرخه پایان

در این مثال، تمام والدین برای پیوند ثبت شده در متغیر ElementNomenclature در پنجره پیام سرویس نمایش داده می شوند. در چرخه، 5 والدین پیوند انتخاب می شوند.

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

نمایش دایرکتوری سلسله مراتبی در گزارش

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


انتخاب کنید
نامگذاری.کد،
نامگذاری نام AS نام،
نامگذاری.قیمت خرید
از جانب
Directory.Nomenclature AS Nomenclature
مرتب سازی بر اساس
نام سلسله مراتب

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

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


مرتب سازی بر اساس
نامگذاری. این سلسله مراتب گروه است،
نام

نتیجه همچنان به صورت سلسله مراتبی مرتب می شود، اما گروه ها در بالای عناصر ظاهر می شوند.

همچنین امکان جایگزینی پیشنهاد ORDER BY با گزینه AUTO ORDER وجود دارد. در این صورت، نتیجه مطابق با تنظیمات دایرکتوری، یعنی. اگر دایرکتوری بیان می کند که گروه ها باید بالای عناصر قرار گیرند، آنگاه در بالا قرار خواهند گرفت.

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


انتخاب کنید
نامگذاری.کد،
نامگذاری نام AS نام،
نامگذاری.قیمت خرید

FROM Directory.Nomenclature AS Nomenclature

جایی که
(Nomenclature.ThisGroup = FALSE)

سفارش بر اساس نام

گرفتن مجموع بر اساس سلسله مراتب

برای بدست آوردن مجموع بر اساس سلسله مراتب در یک پرس و جو، باید پس از تعیین فیلدی که مجموع ها توسط آن محاسبه می شود، کلمه کلیدی HIERARCHY را در عبارت SOFTWARE TOTAL مشخص کنید. نمونه‌ای از گزارش "گردش کالا" با به دست آوردن مجموع بر اساس سلسله مراتب:


انتخاب کنید

از جانب

سلسله مراتب نامگذاری

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

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


انتخاب کنید
حسابداری برای NomenclatureTurnover.Nomenclature AS Nomenclature,
حسابداری برای نامگذاری گردش مالی. نامگذاری. ارائه،
حسابداری برای NomenclatureTurnover.QuantityTurnover AS QuantityTurnover
از جانب
انباشت ثبت نام. نامگذاری حسابداری. گردش مالی چگونه نامگذاری حسابداری گردش مالی
مقدار نتایج (تعداد گردش مالی) PO
نامگذاری فقط سلسله مراتب

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

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

اگر جنسیت یک فرد را برای مقایسه در نظر بگیریم، لیست محدود است و تغییری نکرده است، بنابراین یک شمارش برای آن مناسب تر است.

پس از ایجاد یک دایرکتوری جدید، تصویر زیر را مشاهده خواهیم کرد.

بیایید به تمام نشانک های او نگاه کنیم.

پایه ای

در اینجا نام (شناسه در پایگاه داده) و مترادف (نام کاربری دایرکتوری) نشان داده شده است. نظر اختیاری، نظری است که بتواند هدف دایرکتوری را توضیح دهد یا ویژگی های آن را شرح دهد.

سلسله مراتب

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

نوع سلسله مراتب:

سلسله مراتب گروه ها و عناصر

با این تنظیم، عناصر فقط می توانند در گروه ها (پوشه ها) تودرتو شوند.

در اینجا، همانطور که می بینید، همه عناصر و گروه ها دارای نمادهای یکسان هستند و هر عنصری را می توان تو در تو قرار داد.

گروه ها را در بالا قرار دهید

وقتی این چک باکس علامت زده می شود، گروه ها همیشه در بالا خواهند بود، در غیر این صورت آنها به ترتیب مرتب می شوند، به عنوان مثال، به این صورت:

محدود کردن تعداد سطوح سلسله مراتبی

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

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

صاحبان

روی نشانک صاحبان دایرکتوری های دیگری ممکن است در رابطه با آنها نشان داده شود که این یکی از آنها تابع است. نمودار رابطه دایرکتوری های فرعی شبیه به نمودار رابطه دایرکتوری سلسله مراتبی است، فقط در اینجا دایرکتوری دیگری به عنوان والد عمل می کند و مالک نامیده می شود. در پیکربندی‌های معمولی، یک مثال خوب، تبعیت دایرکتوری "Agreements" به فهرست "Counterparties" است، زیرا نمی تواند توافقی وجود داشته باشد که متعلق به هیچ طرف مقابل نباشد.

فیلد "List of Directory Owners" فهرست دایرکتوری هایی را که دارای عناصر این فهرست هستند مشخص می کند.

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

چگونه می توان به صورت برنامه نویسی متوجه شد که آیا یک دایرکتوری سلسله مراتبی است یا خیر

برای این کار باید به ابرداده مراجعه کنید

این HierarchicalDirectory = Metadata.Directories.Counterparties.Hierarchical است.

ادامه دارد...

بهترین مقالات در این زمینه