1c در درخواست مرتب سازی بر اساس 2 فیلد. سفارش نتایج پرس و جو

/// فیلدهای خاص در 1s 8.3، 8.2&روی رویه سرور نحوه مرتب کردن نتیجه پرس و جو بر اساس فیلدهای روی سرور() // برای مرتب سازی ردیف ها در نتیجه پرس و جو // از بخش ORDER BY استفاده می شود. // برای نمایش محصولات سفارش داده شده الزامی است // ابتدا به ترتیب رنگی صعودی و سپس // به ترتیب نزولی کالری.درخواست = درخواست جدید( "انتخاب | نام، | رنگ، | کالری | از | فهرست. نامگذاری | سفارش بر اساس | سن رنگ، | کالری DESC"/// نحوه سفارش نتیجه پرس و جو توسط /// عبارت در 1s 8.3، 8.2رویه &روی سرور نحوه مرتب کردن نتیجه یک پرس و جو بر اساس عبارت در سرور() // در قسمت ORDER BY می توانید استفاده کنید// اصطلاحات. // برای مثال، بیایید محصولات را بر اساس سفارش دهیم // حداکثر محتوای پروتئین و کربوهیدرات// با یکدیگر. درخواست = درخواست جدید( "انتخاب | نام، | پروتئین ها، | کربوهیدرات ها، | چربی ها، | آب | از | دایرکتوری. نامگذاری | ORDER BY | (پروتئین + کربوهیدرات) نزولی") ؛ ExecuteRequestAndOutputToForm(Request) ; پایان رویه /// نحوه سفارش نتیجه پرس و جو توسط /// سلسله مراتب در 1s 8.3، 8.2رویه &در سرور نحوه مرتب کردن نتیجه یک پرس و جو بر اساس سلسله مراتب در سرور() // برای جداولی که ویژگی سلسله مراتبی برای آنها تنظیم شده است // امکان ترتیب بر اساس سلسله مراتب. // برای مثال، اجازه دهید عناصر خروجی را از // کتاب مرجع «نامگذاری» به ترتیب است // دنباله آنها در سلسله مراتب دایرکتوری.درخواست = درخواست جدید( "انتخاب | نام | از | دایرکتوری. طعم ها به عنوان سلیقه | ترتیب بر اساس | سلسله مراتب نام") ؛ ExecuteRequestAndOutputToForm(Request) ; پایان رویه /// نحوه سفارش نتیجه پرس و جو توسط /// تابع گروه بندی انبوه در 1s 8.3، 8.2&روی رویه سرور نحوه مرتب کردن نتیجه یک پرس و جو بر اساس تابع مجموع در سرور() // در قسمت ORDER BY نیز امکان استفاده وجود دارد // توابع انبوهی که برای آنها استفاده شد // گروه بندی نتیجه پرس و جو. // برای هر رنگ - حداقل محتوای کالری را انتخاب کنید // محصول دارای این رنگ. و سپس مرتب می کنیم // منجر به افزایش ترتیب این حداقل کالری می شود.درخواست = درخواست جدید( "انتخاب | رنگ، | MINIMUM(محتوای کالری) | FROM | فهرست. نامگذاری | گروه بر اساس | رنگ | سفارش بر اساس | MINIMUM(محتوای کالری) سن") ؛ ExecuteRequestAndOutputToForm(Request) ; پایان رویه /// ترتیب خودکار نتایج چگونه کار می کند/// در 1s 8.3، 8.2 &روی رویه سرور چگونه Auto-OrderingOn the Server() کار می کند // عبارت AUTO ORDER به شما امکان می دهد حالت را فعال کنید // تولید خودکار فیلدها برای سفارش // درخواست نتیجه. // سفارش خودکار طبق اصول زیر عمل می کند: // اگر درخواست شامل بند ORDER BY بود، // سپس هر مرجع جدولی که در این بند یافت می شود // با فیلدهایی که جدول به طور پیش فرض مرتب شده است جایگزین می شود // (برای دایرکتوری ها این یک کد یا نام است، برای اسناد - یک تاریخ // سند). اگر قسمت سفارش به دایرکتوری سلسله مراتبی اشاره دارد، // سپس مرتب سازی سلسله مراتبی بر اساس این دایرکتوری اعمال خواهد شد. // اگر درخواست شامل بند ORDER BY نباشد، // اما یک بند RESULTS وجود دارد، سپس نتیجه پرس و جو خواهد بود // به ترتیب فیلدهای موجود در جمله // نتایج بعد از کلمه کلیدی نرم افزار، به همان ترتیب و، // اگر کل با استفاده از فیلدها - پیوندها محاسبه شده باشد، // سپس به صورت پیش‌فرض فیلدهای جداولی را که به آنها ارجاع داده شده است مرتب می‌کند. // اگر پرس و جو شامل بند ORDER BY و TOTAL نباشد، // اما یک پیشنهاد به GROUP BY، سپس نتیجه پرس و جو وجود دارد // با فیلدهای موجود در جمله مرتب می شود، // به همان ترتیب و اگر گروه بندی انجام شد // توسط فیلدها - پیوندها، سپس به طور پیش فرض مرتب سازی فیلدهای جداول، // که پیوندهایی به آن وجود داشت. // در صورت عدم وجود جمله در درخواست و // ORDER BY، TOTAL و GROUP BY، نتیجه خواهد بود // مرتب شده توسط فیلدهای مرتب سازی پیش فرض برای جداول، // که داده ها از آن انتخاب می شوند، به ترتیبی که در درخواست ظاهر می شوند. // اگر درخواست شامل بند RESULTS باشد، هر سطح // مجموع به طور جداگانه سفارش داده می شود. // در مثال زیر بر اساس فیلد Link مرتب می کنیم و استفاده می کنیم // کلمه کلیدی سفارش خودکار. سیستم // فیلد پیوند در بخش ORDER BY را با تاریخ سند جایگزین می کند.درخواست = درخواست جدید( "انتخاب | پیوند | از | سند. فروش مواد غذایی | سفارش بر اساس | سن پیوند | سفارش خودکار") ؛ ExecuteRequestAndOutputToForm(Request) ; پایان رویه /// این نمونه ها را در رایانه خود دانلود و اجرا کنید

این لیست یک ویژگی جدایی ناپذیر از نمایش اطلاعات در هر پیکربندی ایجاد شده در پلت فرم 1C:Enterprise 8.1 است. برای کار موثر با لیست‌هایی که حاوی انواع داده‌ها هستند، برنامه‌های روی پلتفرم 1C:Enterprise 8.1 مکانیسم‌های انتخاب و مرتب‌سازی راحت و قدرتمند را اجرا می‌کنند. V.V در مورد ویژگی های استفاده از آنها صحبت می کند. ماهیگیری، شرکت "1C".


برنج. 1

لیست ها

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

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

برنج. 1

مکانیسم مرتب سازی

چرا به مکانیزم مرتب سازی نیاز داریم؟ در مرحله اول، همانطور که از نام آن پیداست، به شما این امکان را می دهد که لیست را بر اساس معیار مورد نظر مرتب کنید.

در مرحله دوم، پلت فرم 1C: Enterprise 8.1 به طور فعال از مکانیسم جستجوی سریع استفاده می کند. این مکانیسم به شما امکان می دهد تا با تایپ اولین کاراکترها به سرعت عنصر مورد نظر را در هر لیست پیدا کنید (شکل 2). اما در فهرست‌های پویا (مثلاً فهرستی از آیتم‌های دایرکتوری یا فهرستی از اسناد)، جستجوی سریع فقط بر اساس جزئیاتی که مرتب‌سازی در دسترس است، کار می‌کند.

برنج. 2

با باز کردن پنجره "انتخاب و مرتب سازی" می توانید تمام جزئیات لیست موجود برای مرتب سازی را مشاهده کنید. این پنجره معمولاً در نوار عمل (شکل 3) یا در منوی زمینه فهرست که با دکمه سمت راست ماوس باز می شود (شکل 4) موجود است. در پنجره «انتخاب و مرتب‌سازی»، باید به برگه «مرتب‌سازی» بروید، که تمام جزئیات موجود را نشان می‌دهد که امکان مرتب‌سازی وجود دارد.

برنج. 3

برنج. 4

شکل 3 نشان می دهد که برای لیست اسناد "فروش کالا و خدمات" مرتب سازی بر اساس دو جزئیات موجود است: "تاریخ" و "شماره". با این حال، محتوای اطلاعاتی پنجره مرتب سازی به این محدود نمی شود. در اینجا می توانید ببینید کدام مرتب سازی در حال حاضر فعال است (سمت چپ پنجره) و لیستی از تمام جزئیات موجود برای مرتب سازی (سمت راست). همچنین می توانید مرتب سازی مورد نظر و ترتیب آن را پیکربندی کنید. لطفاً توجه داشته باشید: ویژگی مرتب سازی فعلی در لیست با یک نماد خاص مشخص می شود - فلشی که جهت مرتب سازی را نشان می دهد. سه نمونه از مرتب سازی مختلف (از جمله ترکیبی) و روش های نمایش آن در لیست در شکل 5 نشان داده شده است.

برنج. 5

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

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

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

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

مکانیسم انتخاب

انتخاب یک مکانیسم قدرتمند پلت فرم 1C:Enterprise 8.1 است که به شما امکان می دهد به طور مؤثر با لیست ها کار کنید، حتی اگر حاوی ده ها یا صدها هزار عنصر باشند. ابتدا، بیایید به نحوه عملکرد مکانیسم انتخاب در حالت کلی نگاه کنیم.

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

فهرست شرایط ممکن برای نوع خاصی از انتخاب بستگی به نوع عناصر استفاده شده در آن دارد. برای مثال، محدوده‌ها برای اعداد و تاریخ‌ها، جستجوی رشته‌های فرعی برای رشته‌ها (شرایط "Contains"/"Does not") و پر کردن لیست و تجزیه و تحلیل سلسله مراتبی برای عناصر دایرکتوری در دسترس خواهد بود.

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

مکانیسم های انتخاب و مرتب سازی با مثال

بیایید سعی کنیم چندین مشکل را در پایگاه داده آزمایشی حل کنیم ("حسابداری سازمانی"، ویرایش 1.6). به عنوان مثال، اجازه دهید اسناد تولید شده برای طرف مقابل "Simon and Schuster LLC" را در مجله "Customer Documents" نمایش دهیم. بیایید فوراً رزرو کنیم که قوانین و استاندارد منطق انتخاب را برای پلت فرم 1C:Enterprise 8.1، بدون اشاره به پیکربندی خاص و قابلیت‌های خدمات اضافی پیاده‌سازی شده در آن، شرح می‌دهیم.

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

ما باید به سرعت به تمام اسناد طرف مقابل Simon and Schuster LLC نگاه کنیم. این کار به شرح زیر است: یک پنجره انتخاب باز می شود، در عنصر "Counterparty"، طرف مقابل "Simon and Schuster LLC" را از فهرست انتخاب کنید (شکل 6) و روی "OK" کلیک کنید. مشکل حل شده است (شکل 7).

برنج. 6

برنج. 7

برای استفاده سریع از انتخاب مورد نظر، کافی است بلافاصله شروع به انتخاب معیار مورد نظر کنید. نیازی به علامت زدن کادر کنار انتخاب مورد استفاده نیست. پس از مشخص شدن معیار لازم، برنامه خودش این کار را انجام می دهد. با فشار دادن کلیدهای ترکیبی Ctrl+Enter* می توانید به سرعت معیارهای انتخاب پیکربندی شده را اعمال کنید.

لطفاً همچنین توجه داشته باشید که هنگام تعیین مقادیر در عناصر انتخاب (در مثال ما، طرف مقابل "Simon and Schuster LLC")، در بیشتر موارد مکانیسم انتخاب سریع، که به طور گسترده در پلت فرم 1C: Enterprise 8.1 استفاده می شود، کار خواهد کرد. در مثال ما، کافی بود اولین کاراکترهای نام طرف مقابل یا کد آن را مستقیماً در قسمت مقدار انتخاب تایپ کنیم، Enter یا Tab را فشار دهیم و سیستم به طور خودکار عنصر دایرکتوری مورد نیاز ما را حدس بزند.

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

اکنون لیستی از اقلامی که نام آنها حاوی کلمه "قوری" است را نمایش می دهیم. برای انجام این کار، دایرکتوری "Nomenclature" را باز کنید، پنجره انتخاب را فراخوانی کنید، در عنصر "Name" شرط مقایسه "Contains" را انتخاب کنید و کلمه مورد نیاز را نشان دهید (شکل 8).

برنج. 8

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

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

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

برنج. 9

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

برنج. 10

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

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

برنج. یازده

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

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

راه های مختلفی برای اجرای کار وجود دارد. بیایید به مؤثرترین آنها نگاه کنیم. مجله "اسناد خریداران" را باز کنید و در عنصر انتخاب "نوع سند" سند "فاکتور صادر شده" را نشان دهید. پس از آن، در عنصر انتخاب "Counterparty" نوع مقایسه "در گروه" را نشان می دهیم. نوع مقدار "Counterparties" را انتخاب کنید و فرم انتخاب طرف مقابل را باز کنید. در آن، گروه "خریداران" را انتخاب کنید (شکل 12).

برنج. 12

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

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

به زبان انسان، کار به این صورت فرموله شده است: "نمایش تمام اسناد لازم برای همه پیمانکاران واقع در گروه دایرکتوری خریداران، تامین کنندگان، تامین کنندگان برای فروش." اجرای این کار آسان است - در شرایط انتخاب "Counterparty"، "In a group from list" را انتخاب کنید (شکل 13). پس از این، مکانیزمی برای پر کردن لیست در دسترس می شود که می توانید گروه ها (یا عناصر) لازم دایرکتوری را به آن اضافه کنید. علاوه بر این، لیست را می توان به صورت دستی پر کرد. با قیاس با حل مسئله قبلی، گروه مورد نظر را پیدا کرده و انتخاب کنید و این کار را برای هر عنصر جدید لیست تکرار کنید. با این حال، بهتر است از یک مکانیسم انتخاب راحت استفاده کنید که به طور خودکار توسط برنامه اجرا می شود. با کمک انتخاب، پر کردن لیست با اجزای لازم بسیار ساده تر و سریعتر است. پس از تکمیل لیست، روی "OK" کلیک کنید و معیارهای انتخاب پیکربندی شده را فعال کنید. مشکل حل شده است.

برنج. 13

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

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

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

در مرحله بعد، ما معیارهای انتخاب را در زمینه نامگذاری تحمیل می کنیم. بلافاصله یک سوال دیگر مطرح می شود - اگر شرایط انتخاب نامگذاری کاملاً محدود است ("برابر" ، "نه برابر" ، "در لیست" و "در لیست نیست") چگونه "STINOL" را انتخاب کنید. در چنین شرایطی می توان مشکل را حل کرد. ما شرط "در لیست" را انتخاب می کنیم، پنجره آشنا را برای پر کردن لیست باز می کنیم و از انتخاب موارد استفاده می کنیم (شکل 14، 1). ممکن است تعداد زیادی عنصر در لیست نام‌گذاری وجود داشته باشد، بنابراین ما به دنبال موارد مورد نیاز نمی‌گردیم. بیایید از انتخاب در لیست اقلام استفاده کنیم و شرایط انتخاب "Contains" را برای نام مورد مشخص کنیم (شکل 14، 2).

برنج. 14

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

ویژگی های مفید مکانیسم انتخاب

بیایید چند نکته دیگر را در نظر بگیریم که به هر طریقی به انتخاب ها در سیستم 1C: Enterprise 8.1 مربوط می شود.

در فهرست‌های اشیاء پیکربندی که از اتصال تاریخ استفاده می‌کنند (مثلاً فهرست اسناد)، و در گزارش‌های اسناد، می‌توانید از فیلتر کردن سریع بر اساس محدوده تاریخ استفاده کنید. برای انجام این کار، فقط روی دکمه مربوط به "تنظیم دوره" در نوار عمل کلیک کنید (یا آن را در منوی زمینه انتخاب کنید) (شکل 15). به این ترتیب می توانید به صورت جداگانه معیار نمایش عناصر بر اساس تاریخ در هر لیست را تنظیم کنید.

برنج. 15

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

برنج. 16

یکی دیگر دارایی مفیدمکانیسم انتخاب - حفظ تاریخچه انتخاب (شکل 17). این برنامه به خاطر می آورد که کدام انتخاب ها تنظیم شده اند، بنابراین می توانید به سادگی با انتخاب آن از لیست کشویی به سرعت به هر یک از آنها بازگردید. به هر حال، در پنجره "Selection and Sorting" به دکمه "Selections" توجه کنید (شکل 6). با کلیک بر روی این دکمه، به یک رابط هدایت می شوید که در آن می توانید تنظیمات انتخاب را ذخیره و بازیابی کنید تا بتوانید بعداً به آنها بازگردید (شکل 18).

برنج. 17

برنج. 18

و آخرین عملکرد لغو تمام انتخاب ها است (شکل 19). با کلیک بر روی دکمه "غیرفعال کردن انتخاب"، همه انتخاب های نصب شده در لیست غیرفعال می شوند. با باز کردن پنجره «انتخاب و مرتب‌سازی» و برداشتن تیک تمام عناصر فعال، می‌توان به اقدام مشابهی دست یافت.

برنج. 19

این برنامه همچنین توانایی جستجوی سریع بر اساس شماره سند در لیست اسناد یا مجلات را دارد. این ویژگی با دکمه "جستجو بر اساس شماره" (شکل 20) فراخوانی می شود و به شما امکان می دهد پیدا کنید سند مورد نیاز، پیکربندی انعطاف پذیر پارامترهای جستجو. اسناد یافت شده بر اساس معیارهای مشخص شده در پایین پنجره این سرویس نمایش داده می شود و می توانید به سند مورد نظر بروید.

/
پیاده سازی پردازش داده ها

سفارش نتایج پرس و جو

1.1. اگر الگوریتم پردازش نتایج پرس و جو به ترتیب رکوردها در پرس و جو بستگی دارد یا اگر نتیجه پردازش پرس و جو به شکلی به کاربر ارائه شود، باید از جمله در متن پرس و جو استفاده شود. مرتب سازی بر اساس. در غیاب بیان مرتب سازی بر اساسهیچ فرضی در مورد ترتیب ظاهر شدن رکوردها در نتایج پرس و جو نمی توان داشت.

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

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

احتمال وقوع نتایج متفاوت هنگام انجام اقدامات مشابه افزایش می یابد

* توجه: سفارش نتایج جستجوهایی که حرکات ایجاد می کنند تنها در صورتی توجیه می شود که سفارش بخشی از الگوریتم ایجاد حرکات باشد (به عنوان مثال، حذف موجودی دسته ای از کالاها با استفاده از FIFO). در موارد دیگر، رکوردها نباید مرتب شوند، زیرا سفارش اضافی باعث ایجاد بار بیش از حد در DBMS می شود.

1.2. اگر نتایج یک پرس و جو باید به نحوی به کاربر نمایش داده شود، پس

  • سازماندهی نتایج چنین پرس و جوها بر اساس فیلدهای انواع اولیه ضروری است.
  • ترتیب بر اساس فیلدهای انواع مرجع باید با ترتیب با نمایش رشته ای این فیلدها جایگزین شود.

در غیر این صورت، ترتیب خطوط به صورت تصادفی (غیر قابل توضیح) برای کاربر ظاهر می شود.

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

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

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

استفاده مشترک با طراحی های مختلف

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

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

محدودیت در استفاده از ساخت و ساز AUTO ORDER

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

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

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

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

طرح کار با یک درخواست

طرح کلی کار با یک درخواست شامل چندین مرحله متوالی است:

  1. ایجاد یک شی Request و تنظیم متن درخواست.
  2. تنظیم پارامترهای درخواست؛
  3. اجرای یک درخواست و گرفتن نتیجه؛
  4. دور زدن نتیجه درخواست و پردازش داده های دریافتی.

1. شیء درخواستدارایی است متن، که باید متن درخواست را به آن اختصاص دهید.

// انتخاب 1
درخواست = درخواست جدید;
درخواست . متن =
"انتخاب کنید
| نرخ ارز. دوره،
| نرخ ارز. ارز،
| نرخ ارز. نرخ
|از

| کجا
;

// گزینه 2
درخواست = درخواست جدید("انتخاب کنید
| نرخ ارز. دوره،
| نرخ ارز. ارز،
| نرخ ارز. نرخ
|از
| ثبت اطلاعات. نرخ ارز به عنوان نرخ ارز
| کجا
| نرخ ارز. ارز = & ارز");

2. تنظیم مقادیر پارامتر با استفاده از روش انجام می شود SetParameter(< Имя>, < Значение>) . پارامترها در متن درخواست با علامت " نشان داده می شوند. & و معمولاً در شرایط انتخاب (بخش WHERE) و در پارامترهای جدول مجازی استفاده می شوند.

درخواست)؛

3. پس از تخصیص متن و تنظیم پارامترها باید درخواست اجرا شده و نتیجه اجرا به دست آید. اجرا توسط متد Execute() انجام می شود که یک شی را برمی گرداند نتیجه پرس و جو. از نتیجه پرس و جو می توانید:

  • انتخابی را با استفاده از روش Select دریافت کنید (< ТипОбхода>, < Группировки>, < ГруппировкиДляЗначенийГруппировок>) ;
  • با استفاده از روش آپلود، مقادیر را در جدول ارزش یا درخت ارزش آپلود کنید (< ТипОбхода>) .

// دریافت نمونه

نمونه = نتیجه پرس و جو انتخاب کنید();

// دریافت جدول مقادیر
RequestResult = درخواست. اجرا کن()؛
جدول = نتیجه پرس و جو تخلیه کنید();

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

خدا حافظ Sample.Next() حلقه
گزارش (انتخاب. دوره);
چرخه پایان

یک مثال کامل از کار با یک درخواست ممکن است به شکل زیر باشد:

// مرحله 1. ایجاد یک درخواست و تنظیم متن درخواست
درخواست = درخواست جدید;
درخواست . متن =
"انتخاب کنید
| نرخ ارز. دوره،
| نرخ ارز. ارز،
| نرخ ارز. نرخ
|از
| ثبت اطلاعات. نرخ ارز به عنوان نرخ ارز
| کجا
| نرخ ارز. ارز = & ارز";

// مرحله 2. تنظیم پارامترها
درخواست . SetParameter ("ارز" ، ارز انتخاب شده);

// مرحله 3. اجرای پرس و جو و گرفتن نمونه
RequestResult = درخواست. اجرا کن()؛
نمونه = نتیجه پرس و جو انتخاب کنید();

// عبور از انتخاب
خدا حافظ Sample.Next() حلقه
گزارش (انتخاب. دوره);
چرخه پایان

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

متن درخواست شامل چندین بخش است:

  1. توضیحات درخواست- فهرست زمینه های قابل انتخاب و منابع داده؛
  2. ادغام پرس و جوها- عبارات "UNITE" و "UNITE ALL"؛
  3. سازماندهی نتایج- عبارت "سفارش توسط ..."؛
  4. سفارش خودکار- عبارت "سفارش خودکار"؛
  5. شرح نتایج- عبارت "نتایج ... توسط ...".

فقط بخش اول اجباری است.

جداول موقت و پرس و جوهای دسته ای

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

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

ManagerVT = New TemporaryTablesManager;
درخواست = درخواست جدید;
درخواست . ManagerTemporaryTables = ManagerVT;

درخواست . متن =
"انتخاب کنید
| ارزها. کد،
| ارزها. نام
| مکان به واحد پول
|از
| Directory.Currencies AS Currency";

RequestResult = درخواست. اجرا کردن();

برای استفاده از جدول موقت VTVcurrency در سایر پرس و جوها، باید یک مدیر جدول موقت مشترک به این پرس و جوها اختصاص دهید - VT Manager.

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

برای پرس و جوهای دسته ای، متد ExecuteBatch() موجود است که تمام کوئری ها را اجرا می کند و آرایه ای از نتایج را برمی گرداند. جداول موقت در یک پرس و جو دسته ای با یک جدول با یک ردیف و یک ستون "Count" نشان داده می شود که تعداد رکوردها را ذخیره می کند. برای اشکال زدایی درخواست های دسته ای، می توانید از روش استفاده کنید دسته ای را با داده های متوسط ​​اجرا کنید() : محتویات واقعی جداول موقت را برمی گرداند نه تعداد رکوردها.

// نمونه کار با درخواست دسته ای
درخواست = درخواست جدید;
درخواست . متن =
"انتخاب کنید
| ارزها. نام
|از
| Directory.Currencies به عنوان ارز
|;
|انتخاب کنید
| نامگذاری.نام
|از
| فهرست نامگذاری AS Nomenclature";

نتیجه دسته ای = درخواست. ExecuteBatch();

ارزهای TZ =PacketResult[ 0]. Unload();
TZNomenclature = نتیجه بسته[ 1 ]. Unload();

// نمونه ای از استفاده از جداول موقت در درخواست دسته ای
درخواست = درخواست جدید;
درخواست . متن =
"انتخاب کنید
| محصولات پیوند چگونه به محصول
| PLACE VT Products
|از
| فهرست نامگذاری محصولات HOW
| کجا
| محصولات.سازنده = &سازنده
|;
|انتخاب کنید
| VTTProducts.Product,
| آموزشگاه حرفه ای، کمیت،
| مدرسه حرفه ای.قیمت
| آموزشگاه حرفه ای. پیوند AS DocumentReceipts
|از
| محصولات VT محصولات AS VT
| سند اتصال سمت چپ دریافت کالا و خدمات کالا به عنوان PTU
| نرم افزار VTProducts.Product = PTU.Nomenclature"
;

درخواست . SetParameter( "سازنده"، سازنده)؛

RequestResult = درخواست. اجرا کن()؛
نمونه = نتیجه پرس و جو انتخاب کنید();

خدا حافظ Sample.Next() حلقه

چرخه پایان

جداول مجازی

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

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

  • جهت اطلاعات ثبت نام:
    • SliceFirst(<Период>, <Условие>) - اولین رکوردها برای تاریخ مشخص شده؛
    • SliceLast(<Период>, <Условие>) - آخرین رکوردها برای تاریخ مشخص شده؛
  • برای ثبت انباشت:
    • باقیمانده (<Период>, <Условие>) - موجودی در تاریخ مشخص شده؛
    • انقلاب(<НачалоПериода>, <КонецПериода>, <Периодичность>, <Условие>) - معاملات دوره;
    • RemainsAndTurnover(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <Условие>) - مانده ها و گردش مالی دوره؛
  • برای ثبت حسابداری:
    • باقیمانده (<Период>, <УсловиеСчета>, <Субконто>, <Условие>) - موجودی در تاریخ مشخص شده توسط حساب، ابعاد و حساب های فرعی.
    • انقلاب(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчета>, <Субконто>, <Условие>, <УсловиеКорСчета>, <КорСубконто>) - گردش مالی برای دوره در زمینه حساب ها، اندازه گیری ها، corr. حساب‌ها، زیرمجموعه‌ها، کور. subconto;
    • RemainsAndTurnover(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <УсловиеСчета>, <Субконто>, <Условие>) - مانده ها و گردش مالی در زمینه حساب ها، اندازه گیری ها و حساب های فرعی.
    • TurnoverDtKt(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчетаДт>, <СубконтоДт>, <УсловиеСчетаКт>, <СубконтоКт>, <Условие>) — گردش مالی دوره با حساب Dt، حساب Kt، Subconto Dt، Subconto Kt؛
    • MovementsSubconto(<НачалоПериода>, <КонецПериода>, <Условие>, <Порядок>, <Первые>) - حرکات همراه با مقادیر زیرمجموعه.
  • برای ثبت محاسبات:
    • پایه(<ИзмеренияОсновногоРегистра>, <ИзмеренияБазовогоРегистра>, <Разрезы>, <Условие>) - داده های اساسی ثبت محاسبات؛
    • دیتاگرافیک(<Условие>)—داده های نمودار؛
    • ActualActionPeriod(<Условие>) مدت اعتبار واقعی است.

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

سازنده پرس و جو

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

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

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

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

شی RequestSchema

این پلتفرم به شما امکان می دهد تا متن درخواست را با استفاده از شیء به صورت برنامه نویسی ایجاد و ویرایش کنید درخواست طرحواره. یک شی دارای یک ویژگی واحد است دسته ای از درخواست ها، که در آن شی، ویژگی های تمام پرس و جوهایی را که در حال ویرایش هستند ذخیره می کند. شی RequestSchema از روش های زیر پشتیبانی می کند:

  • SetQueryText(< Текст>) - ویژگی Query Packet را بر اساس متن درخواست ارسال شده پر می کند.
  • GetQueryText() - متن درخواست تولید شده بر اساس ویژگی Request Packet را برمی گرداند.
  • FindParameters() - پارامترهای درخواست را برمی گرداند.

بیایید به مثالی از کار با شی RequestSchema نگاه کنیم. برای تولید متن درخواست به صورت برنامه ای

مرتب سازی بر اساس
ارزها.کد

کد زبان تعبیه شده ممکن است به شکل زیر باشد:

RequestScheme = New RequestScheme;
بسته 1 = RequestScheme. RequestBatch[ 0 ];
اپراتور 1 = بسته 1. اپراتورها[ 0 ];
// افزودن منبع
RegisterTable = Operator1. منابع. اضافه کردن( "دایرکتوری. ارزها", "ارز" );
// افزودن فیلدها
فیلد لینک = اپراتور 1. SelectableFields. Add("Currencies.Link" , 0 );
فیلد کد = اپراتور 1. SelectableFields. Add("Currencies.Code", 1);
// تعیین نام مستعار فیلد
بسته 1 . ستون ها [ 0 ]. مستعار = "ارز" ;
بسته 1 . ستون ها [ 1 ]. مستعار = "کد" ;
// افزودن یک شرط
اپراتور 1 . انتخاب. اضافه کردن( "NOT FlagDeletion");
// اضافه کردن سفارش
بسته 1 . سفارش. افزودن (FieldCode)؛
RequestText = RequestScheme. GetQueryText();

زبان پرس و جو در 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 باید بداند را پوشش می دهد.

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

اگر خطایی پیدا کردید، لطفاً یک متن را انتخاب کنید و Ctrl+Enter را فشار دهید.