نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی
  • خانه
  • اهن
  • نحوه ترکیب 2 دایرکتوری درخواست 1C. نتایج پرس و جو را ادغام کنید

نحوه ترکیب 2 دایرکتوری درخواست 1C. نتایج پرس و جو را ادغام کنید

; پرس و جوهای تودرتو (در حال توسعه).

دریافت کالا و خدماتو بازگرداندن کالا به تامین کنندهبرای مدت زمان مشخص شده

برگه های جدید: اتحادیه ها / نام مستعار.

قسمت تئوری درس شماره 4

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

در طراح، به برگه بروید اتحادیه ها / نام مستعار. برای ایجاد پیوندهای پرس و جو و تنظیم نام مستعار برای فیلدهای پرس و جو طراحی شده است. اگر از نام فیلدهای پایگاه داده استاندارد راضی نیستید، مستعارهای فیلد مورد نیاز است. اگر یک فیلد پرس و جو فقط از یک فیلد جدول پایگاه داده تشکیل شده باشد، نام مستعار برای آن لازم نیست. اگر هنگام ایجاد یک فیلد از توابع زبان پرس و جو استفاده کرده اید، نام مستعار برای چنین فیلدی لازم است. طراح پرس و جو نام مستعار استاندارد برای چنین فیلدهایی ایجاد می کند Field1…FieldN، این نام مستعار را می توان با مواردی که برای شما مناسب است جایگزین کرد.

بیایید به بخش های برگه نگاه کنیم اتحادیه ها / نام مستعار:

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

  • در جدول درخواست هادو ستون:
    • نام. به صورت خودکار در قالب تنظیم کنید درخواست 1… درخواست N;
    • بدون تکرار. زمانی را تنظیم کنید که هنگام ادغام با یک پرس و جو قبلی، ردیف های تکراری حذف شوند. شایان ذکر است که این پرچم فقط در مورد ادغام درخواستی که در آن تنظیم شده است با درخواست قبلی عمل می کند.

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

قسمت عملی درس شماره 4

بیایید به راه حل مسئله ای که در ابتدای درس ارائه شده است نگاه کنیم. شرایط را به شما یادآوری کنم:

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

  1. بیایید یک درخواست جدید ایجاد کنیم.
  2. بیایید طراح پرس و جو را راه اندازی کنیم.
  3. بیایید یک جدول را انتخاب کنیم دریافت کالا و خدماتاز نخ مستندات;
  4. از روی میز دریافت کالا و خدماتیک فیلد را انتخاب کنید ارتباط دادن؛
  5. بیایید به برگه برویم شرایط;
  6. در فصل زمینه های، بیایید تاپیک را باز کنیم دریافت کالا و خدماتبا استفاده از دکمه "+"؛
  7. بیایید وسایل را پیدا کنیم تاریخو آن را به قسمت شرایط بکشید، عملگر مقایسه را انتخاب کنید بینو مثلاً پارامترهای شروع و پایان دوره را مشخص کنید شروع دورهو پایان دوره;
  8. بیایید به برگه برویم اتحادیه ها / نام مستعار.
  9. یک درخواست جدید اضافه کنید، پرچم کنید بدون تکرارنیازی به مطرح کردن آن نیست، زیرا ما از انواع مختلفی از اسناد استفاده می کنیم.

  10. 1C Query Builder به طور خودکار به برگه می رود جداول و فیلدها. در سمت راست پنجره خواهید دید که دومین درخواست عضویت فعال است.


  11. بیایید نقاط 1 - 7 را برای جدول تکرار کنیم بازگرداندن کالا به تامین کننده;
  12. بیایید دوباره به برگه برویم اتحادیه ها / نام مستعار. در جدول نام مستعار می توانید فیلدها را ببینید ارتباط دادنهر دو جدول در یک ردیف قرار دارند، به این معنی که پیوندهای هر دو سند در نتیجه پرس و جو در یک ستون پیدا می شوند.
  13. بیایید نام ستون را تغییر دهیم ارتباط دادنبر سند(نام مستعار فیلد را تنظیم کنید). برای انجام این کار، روی دکمه سمت چپ ماوس روی نام فیلد دوبار کلیک کنید. پس از آن می توانید نام خود را تنظیم کنید، آن را در آنجا بنویسید سند;

  14. درخواست آماده است، روی دکمه "OK" در پایین پنجره طراح کلیک کنید.

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

روز بخیر، خوانندگان عزیز سایت وبلاگ. امروز به تفصیل بحث خواهیم کرد ترکیب درخواست ها در 1C. همچنین می‌توانید برای پیکربندی استاندارد Trade Enterprise Management برای قزاقستان، نسخه 1.0 دانلود کنید.

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

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

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

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

مورد، مقدار، مقدار را انتخاب کنید ترکیب کنیدانتخاب مورد، مقدار، مقدار از سند.مواد مصرفی.کالا

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

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

نامگذاری انتخاب کنید، مقدار چگونه شماره محله، مبلغ AS سوم پریخود, 0 چگونه مقدار مصرف, 0 چگونه مجموع هزینهاز سند. پذیرش. محصولات ترکیب کنید شماره محله, 0 چگونه سوم پریخود, مقدار AS مقدار مصرف، مبلغ AS مجموع هزینهاز سند.مواد مصرفی.کالا

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

نامگذاری شماره محله سوم پریخود مقدار مصرف مجموع هزینه
کاغذ A4 25 14 500
استیکر 500 لیتری 8 4 880
فایل شفاف 5 4 100
ست اداری 8 8 840
ست اداری 1 1 105
فایل شفاف 1 820
استیکر 500 لیتری 1 610

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

انتخاب کنید
نامگذاری،
AMOUNT (تعداد درآمد) به عنوان تعداد درآمد،
SUM(SumPrikhod) AS SumPrikhod,
AMOUNT (تعداد هزینه) به عنوان مقدار هزینه،
SUM(SumExpense) AS SumExpense
از جانب
(
نامگذاری انتخاب کنید، مقدار چگونه شماره محله، مبلغ AS سوم پریخود, 0 چگونه مقدار مصرف, 0 چگونه مجموع هزینهاز سند. پذیرش. محصولات ترکیب کنید SELECT مورد، 0 HOW شماره محله, 0 چگونه سوم پریخود, مقدار AS مقدار مصرف، مبلغ AS مجموع هزینهاز سند.مواد مصرفی.کالا ) AS NestedQuery
گروه بر اساس نامگذاری

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

نامگذاری شماره محله سوم پریخود مقدار مصرف مجموع هزینه
کاغذ A4 25 14 500
استیکر 500 لیتری 8 4 880 1 610
ست اداری 5 4 100 1 1 105
فایل شفاف 8 8 840 1 820

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

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

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

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

درخواست.متن =
"
//مبلغی را که برای پیمانکاران ارسال کردیم محاسبه کنید
|انتخاب کنید
| هزینه. طرف مقابل،
|از
| Document.Expense AS Expense
|گروه توسط
| هزینه.طرف مقابل
|. همه را ترکیب کنید
//مبلغ طرفین را محاسبه کنید
//کالا را به ما تحویل داد
|انتخاب کنید
| طرف مقابل،
//مقدار را با علامت منفی بگیرید،
//که هنگام ترکیب از مبلغ هزینه کسر می شود
| SUM(-دریافت.مبلغ)
|از
| سند ورود به عنوان ورود
|گروه توسط
| ورود. طرف مقابل"؛

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

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

درخواست = درخواست جدید;
درخواست.متن =
"انتخاب کنید
| هزینه. طرف مقابل،
| AMOUNT (هزینه. مبلغ) به عنوان بدهی
| محل VT_هزینه ورودی
|از
| Document.Expense AS Expense
|گروه توسط
| هزینه.طرف مقابل
|. همه را ترکیب کنید
|انتخاب کنید
| طرف مقابل،
| SUM(-دریافت.مبلغ)
|از
| سند ورود به عنوان ورود
|گروه توسط
| پاریش.طرف حزب
|;
|////////////////////////////////////////////////////////////////////////////////
|انتخاب کنید
| VT_هزینه ورودی،
| SUM(VT_IncomeExpenditure.Debt) AS Debt
|از
| VT_IncomingConsumption AS VT_IncomingConsumption
|گروه توسط
| VT_هزینه ورودی"؛

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

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

درخواست = درخواست جدید;
درخواست.متن =
"انتخاب کنید
| هزینه. طرف مقابل،

|از
| Document.Expense AS Expense
|گروه توسط
| هزینه.طرف مقابل
|. همه را ترکیب کنید
|انتخاب کنید
| طرف مقابل،
| SUM(-دریافت.مبلغ)،
//افزودن تخفیف فیلد تهی
| 0
|از
| سند ورود به عنوان ورود
|گروه توسط
| ورود. طرف مقابل"؛

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

ترتیب آن نیز مهم است. فیلدها دقیقاً به ترتیبی که در بخش SELECT هر دو کوئری مشخص شده اند ادغام می شوند. در رابطه با مثال قبلی، بیایید فیلدهای تخفیف و مبلغ را در نمونه رسید عوض کنیم:

درخواست = درخواست جدید;
درخواست.متن =
"انتخاب کنید
| هزینه. طرف مقابل،
| AMOUNT (هزینه. مبلغ) به عنوان بدهی،
| AMOUNT (هزینه. تخفیف) به عنوان تخفیف
|از
| Document.Expense AS Expense
|گروه توسط
| هزینه.طرف مقابل
|. همه را ترکیب کنید
|انتخاب کنید
| طرف مقابل،
//تغییر مکان ها
| 0,
| SUM(-دریافت.مبلغ)
|از
| سند ورود به عنوان ورود
|گروه توسط
| ورود. طرف مقابل"؛

اگر با یک جدول کار می کنید، پس نیازی به استفاده از join ندارید. وقتی با چندین جدول کار می‌کنید و مثلاً باید داده‌هایی در مورد خرید و فروش کالا به دست آورید، کاملاً متفاوت است.

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

هنگام ادغام پرس و جوها، "چسباندن عمودی" نتایج رخ می دهد، یعنی خطوط نتیجه پرس و جو اول اول، سپس دوم می شوند.

بیایید به تمرین ادامه دهیم:
کد 1C v 8.x SELECT
نامگذاری،
تعداد،
مجموع
از جانب
سند.پذیرش.کالا

ترکیب کنید

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

نتیجه این پرس و جو به شرح زیر است:
نامگذاری مقدار مقدار
کاغذ A4 25 14 500
برچسب 500l 8 4 880
فایل شفاف 5 4 100
مجموعه آفیس 8 8 840

در نتیجه دو جدول به دست خواهیم آورد که به یکدیگر متصل خواهند شد. به سختی می توان دید که سند رسید به کجا ختم می شود و سند هزینه شروع می شود. اما ما کاری انجام می دهیم تا آن را بفهمیم:
کد 1C v 8.x
انتخاب کنید
نامگذاری،
مقدار AS کلپریخود،
مبلغ AS SumIncoming،
0 هزینه AS،
0 AS AmountExpense
از جانب
سند.پذیرش.کالا

ترکیب کنید

انتخاب کنید
نامگذاری،
0 اس کلپریخود،
0 AS SumPrikhod,
مقدار به عنوان مقدار مصرف،
مبلغ به عنوان AmountExpense
از جانب
اسناد.مواد مصرفی.کالا

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

کاغذ A4 25 14 500
برچسب 500l 8 4 880
فایل شفاف 5 4 100
مجموعه آفیس 8 8 840
مجموعه اداری 1 1 105
فایل شفاف 1820
برچسب 500l 1 610

اکنون باید عناصر تکراری را از نتیجه پرس و جو حذف کنیم. ما دو پرس و جو داریم و اگر هر کدام را به طور جداگانه جمع کنیم تا عناصر تکراری حذف شوند، هیچ چیز کار نخواهد کرد. بنابراین، ما درخواست را به فرم زیر کاهش می دهیم:
کد 1C v 8.x
انتخاب کنید
نامگذاری،
AMOUNT (تعداد درآمد) به عنوان تعداد درآمد،
SUM(SumPrikhod) AS SumPrikhod,
AMOUNT (تعداد هزینه) به عنوان مقدار هزینه،
SUM (SumExpend) به عنوان SumExpense
از جانب

(انتخاب کنید
نامگذاری،
مقدار AS کلپریخود،
مبلغ AS SumIncoming،
0 هزینه AS،
0 AS AmountExpense
از جانب
سند.پذیرش.کالا

ترکیب کنید

انتخاب کنید
نامگذاری،
0 اس کلپریخود،
0 AS SumPrikhod,
مقدار به عنوان مقدار مصرف،
مبلغ به عنوان AmountExpense
از جانب
اسناد.مواد مصرفی.کالاها) AS AttachedRequest

گروه بر اساس نامگذاری

بنابراین، می بینیم که کل پرس و جو ما در داخل پرانتز قرار دارد و به نام NestedQuery نامگذاری شده است. این کار به این دلیل انجام می شود که بتوانیم رکوردها را از هر دو پرس و جو گروه بندی کنیم و عناصر تکراری را حذف کنیم. به این طرح پرس و جوی تودرتو می گویند. نتیجه این پرس و جو به شرح زیر است:
نامگذاری KolIncoming SumIncoming KolExpenditure SumExpenditure
کاغذ A4 25 14 500
برچسب 500l 8 4 880 1 610
مجموعه اداری 5 4 100 1 1 105
فایل شفاف 8 8 840 1 820

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

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

اطلاعات برگرفته از سایت

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

مزایای اصلی زبان پرس و جو 1C 8.3 (8.2) نسبت به SQL:

  • عدم ارجاع فیلدهای مرجع (ارجاع یک یا چند نقطه به جزئیات شی).
  • کار با نتایج بسیار راحت است.
  • امکان ایجاد جداول مجازی؛
  • درخواست را می توان به دو زبان انگلیسی و روسی نوشت.
  • توانایی مسدود کردن داده ها برای جلوگیری از بن بست.

معایب زبان پرس و جو در 1C:

  • برخلاف SQL، در پرس و جوهای 1C اجازه تغییر داده ها را نمی دهند.
  • عدم وجود رویه های ذخیره شده؛
  • عدم امکان تبدیل رشته به عدد

بیایید نگاهی به آموزش کوچک خود در مورد ساختارهای اساسی زبان پرس و جو 1C بیندازیم.

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

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

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

در کنار دستور "SELECT" می توانید کلمات کلیدی را مشخص کنید:

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

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

برای تغییر

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

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

انتخاب کنید
تسویه حساب های متقابل،
تسویه حساب های متقابل
از جانب
ثبت نام تسویه حساب های متقابل با کارکنان
برای تغییر

جایی که

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

در زیر نمونه ای از درخواست برای به دست آوردن افراد تماس برای یک موقعیت خاص است. پارامتر انتخاب دارای قالب است: &ParameterName (نام پارامتر دلخواه است).

انتخاب (مورد)

طراحی به شما امکان می دهد شرایط را مستقیماً در بدنه درخواست مشخص کنید.

در مثال زیر، "AdditionalField" بسته به اینکه سند پست شده باشد یا نه حاوی متن خواهد بود:

انتخاب کنید
AdmissionT&U.Link،
انتخاب
WHEN AdmissionT&U.Performed
سپس "سند تصویب شد!"
در غیر این صورت "سند ارسال نشد..."
END AS AdditionalField
از جانب
سند دریافت کالا و خدمات نحوه دریافت T&C

پیوستن

Joins دو جدول را بر اساس یک شرط رابطه خاص پیوند می دهد.

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

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

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

انتخاب کنید
رسید و نامگذاری U.
قیمت ها.قیمت
از جانب
سند دریافت کالا و خدمات
INTERNAL JOIN RegisterInformation.PricesNomenclature.SliceLast AS Prices
نرم افزار Receipt&U.Nomenclature = Prices.Nomenclature

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

اتصال کامل

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

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

پیوستن داخلی

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

دسته بندی بر اساس

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

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

انتخاب کنید
,
MAX (Price.Price) به عنوان قیمت
از جانب

دسته بندی بر اساس
قیمتها.نامگذاری.نوع نامگذاری

نتایج

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

نتایج را می توان برای کل جدول (با استفاده از کلمه کلیدی "GENERAL")، برای چندین فیلد، برای فیلدهایی با ساختار سلسله مراتبی (کلمات کلیدی "HIERARCHY"، "ONLY HIERARCHY") خلاصه کرد. هنگام خلاصه کردن نتایج، استفاده از توابع جمع ضروری نیست.

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

انتخاب کنید
قیمتها.نامگذاری.نوع نامگذاری AS نوع نامگذاری،
Prices.Price AS Price
از جانب
ثبت اطلاعات قیمت ها از آخرین قیمت های AS
نتایج
MAXIMUM (قیمت)
توسط
نوع نام

داشتن

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

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

انتخاب کنید

MAX (Price.Price) به عنوان قیمت
از جانب
ثبت اطلاعات قیمت ها از آخرین قیمت های AS
دسته بندی بر اساس
قیمتها.نامگذاری.نوع نامگذاری
داشتن
MAXIMUM (قیمتها. قیمت) > 1000

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

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

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

انتخاب کنید
Employees.Name AS نام
از جانب
Directory.Employees چگونه کارمندان
مرتب سازی بر اساس
نام
سفارش خودکار

سایر ساختارهای زبان پرس و جو 1C

  • ترکیب کنید- نتایج دو پرس و جو در یک.
  • همه چیز را با هم ترکیب کنید- شبیه به COMBINE، اما بدون گروه بندی ردیف های یکسان.
  • میز خالی- گاهی اوقات هنگام پیوستن به پرس و جوها برای تعیین یک جدول تودرتو خالی استفاده می شود.
  • محل- یک جدول موقت برای بهینه سازی پرس و جوهای پیچیده 1C ایجاد می کند. به این گونه درخواست ها، درخواست های دسته ای می گویند.

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

  • SUBSTRINGیک رشته را از یک موقعیت مشخص به تعداد مشخصی کاراکتر کوتاه می کند.
  • سال...دومبه شما امکان می دهد مقدار انتخابی یک نوع عددی را بدست آورید. پارامتر ورودی تاریخ است.
  • شروع دوره و پایان دورههنگام کار با خرما استفاده می شود. نوع دوره (DAY، MONTH، YEAR، و غیره) به عنوان یک پارامتر اضافی نشان داده شده است.
  • ADDKDATEبه شما امکان می دهد زمان مشخصی از یک نوع خاص را از یک تاریخ اضافه یا کم کنید (SECOND، MINUTE، DAY، و غیره).
  • تفاوتتفاوت بین دو تاریخ را تعیین می کند و نوع مقدار خروجی را نشان می دهد (DAY، YEAR، MONTH، و غیره).
  • ISNULLمقدار از دست رفته را با عبارت مشخص شده جایگزین می کند.
  • پیوندهای نمایندگی و نمایندگییک نمایش رشته ای از فیلد مشخص شده دریافت کنید. به ترتیب برای هر مقدار و فقط مقادیر مرجع اعمال شود.
  • TYPE، TYPE VALUESبرای تعیین نوع پارامتر ورودی استفاده می شود.
  • ارتباط دادنیک عملگر مقایسه منطقی برای نوع مقدار ویژگی است.
  • بیانبرای تبدیل یک مقدار به نوع مورد نظر استفاده می شود.
  • زمان قرارمقداری از نوع "تاریخ" را از مقادیر عددی (سال، ماه، روز، ساعت، دقیقه، ثانیه) دریافت می کند.
  • معنیدر یک درخواست 1C برای نشان دادن مقادیر از پیش تعریف شده - دایرکتوری ها، شمارش ها، طرح هایی برای انواع ویژگی ها استفاده می شود. مثال استفاده: " جایی که شخص حقوقی = ارزش (شمارش. فرد حقوقی. فردی)«.

Query Builder

برای ایجاد پرس و جو با 1C یک مکانیسم داخلی بسیار راحت وجود دارد - طراح پرس و جو. این شامل برگه های اصلی زیر است:

  • "جدول و فیلدها" - شامل فیلدهایی است که باید انتخاب شوند و منابع آنها.
  • "اتصالات" - شرایط ساختار CONNECTION را توصیف می کند.
  • "گروه بندی" - شامل توصیفی از ساختارهای گروه بندی و فیلدهای خلاصه شده بر اساس آنها است.
  • "شرایط" - مسئول انتخاب داده ها در درخواست است.
  • "پیشرفته" - پارامترهای جستجوی اضافی، مانند کلمات کلیدی برای دستور "SELECT" و غیره.
  • "Joins/Aliases" - امکان پیوستن به جداول نشان داده شده است و نام مستعار مشخص شده است (ساخت "HOW").
  • «Order» مسئول مرتب‌سازی نتایج پرس‌و‌جوها است.
  • "Totals" - شبیه به برگه "گروه بندی"، اما برای ساختار "TOTALS" استفاده می شود.

متن درخواست را می توان با کلیک بر روی دکمه "درخواست" در گوشه سمت چپ پایین مشاهده کرد. در این فرم می توان آن را به صورت دستی تصحیح یا کپی کرد.


درخواست کنسول

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

می توانید کنسول پرس و جو را روی دیسک ITS یا از طریق دانلود کنید.

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