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


زبان پرس و جو 1C یکی از تفاوت های اصلی بین نسخه های 7.7 و 8 است. یکی از مهمترین نکات در یادگیری برنامه نویسی 1C زبان پرس و جو است. در 1C 8.3، پرس و جوها قدرتمندترین و مؤثرترین ابزار برای به دست آوردن داده ها هستند. زبان پرس و جو به شما امکان می دهد اطلاعات را از پایگاه داده به روشی راحت به دست آورید.

سینتکس به خودی خود بسیار یادآور T-SQL کلاسیک است، با این تفاوت که در 1C، با استفاده از زبان پرس و جو، فقط می توانید داده ها را با استفاده از ساختار Select دریافت کنید. این زبان همچنین از ساختارهای پیچیده تری پشتیبانی می کند، به عنوان مثال، (درخواست در یک درخواست). پرس و جوها در 1C 8 را می توان به دو زبان سیریلیک و لاتین نوشت.

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

  • انتخاب کنید
  • مجاز
  • مختلف
  • بیان
  • اولین
  • برای تغییر
  • معنی
  • نوع مقدار (و عملگر REFERENCE)
  • انتخاب
  • دسته بندی بر اساس
  • داشتن
  • ISNULL
  • بله NULL
  • اتصالات - راست، چپ، داخلی، کامل.

و همچنین برخی از ترفندهای کوچک زبان 1C که با استفاده از آنها می توانید متن درخواست را بهینه بسازید.

برای اشکال زدایی پرس و جوها در سیستم 1C 8.2، یک ابزار ویژه ارائه شده است - کنسول پرس و جو. با استفاده از لینک - می توانید توضیحات را مشاهده و دانلود کنید.

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

انتخاب کنید

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

مثلا:

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

پرس و جو جدولی را با نام آیتم ها برمی گرداند.

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

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

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

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

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

فهرست راهنمای فعلی، نام،

WHEN Current Directory.Service THEN

"سرویس"

پایان نحوه مشاهده نامگذاری

Directory.Nomenclature AS فهرست فعلی

مثال یک مقدار متنی را در قسمت "نوع مورد" - "محصول" یا "سرویس" برمی گرداند.

جایی که

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

انتخاب کنید
فهرست نام
از جانب
Current Directory.Nomenclature AS فهرست فعلی
WHERE CurrentDirectory.Service = TRUE

در مثال، ما رکوردهایی را انتخاب می کنیم که برای آنها مقدار ویژگی "Service" روی "True" تنظیم شده است. در این مثال می‌توانیم با شرط زیر به نتیجه برسیم:

"خدمات کجاست"

در اصل، ما ردیف هایی را انتخاب می کنیم که عبارت بعد از کلمه کلیدی برابر با "True" باشد.

می توانید از شرایط مستقیم در عبارات استفاده کنید:

کد WHERE = "005215"

با استفاده از عملگر "VALUE()" در شرایط، از دسترسی به عناصر و شمارش های از پیش تعریف شده در یک درخواست 1C استفاده کنید:

WHERE نوع مورد = مقدار (Enumeration.Item Types.Product)

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

WHERE تاریخ دریافت > DATETIME(2012,01,01):

اغلب، شرایط به عنوان پارامترهای ارسال شده به درخواست مشخص می شود:

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

WHERE NomenclatureGroup= &NomenclatureGroup

اگر از نوع ترکیبی باشد، می توان یک شرط را بر روی نوع ویژگی اعمال کرد:

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

WHERE ثبت نام تجمعی B (&فهرست اسناد برای انتخاب) است.

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

WHERE تاریخ دریافت > DATETIME(2012,01,01) AND NomenclatureGroup= &NomenclatureGroup AND NOT Service

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

طراحی زبان پرس و جو 1C 8.2 مورد استفاده برای گروه بندی نتایج.

مثلا:

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

دسته بندی بر اساس
رسید کالاخدمات کالاها.کالا

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

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

داشتن

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

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

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

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

SUM (دریافت کالا خدمات کالاها. مقدار) > 5

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

معنی ()

مثلا:

WHERE Bank = Value (Directory.Banks.EmptyLink)

WHERE نوع نامگذاری = ارزش (Directory.Numenclature Types.Product)

WHERE نوع مورد = ارزش (Enumeration.Item Types.Service)

در درخواست تایپ کنید

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

بیان()

عملگر Express در پرس و جوهای 1C برای تبدیل انواع داده استفاده می شود.

نحو: بیان(<Выражение>چگونه<Тип значения>)

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

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

انتخاب کنید
ContactInformation.Object،
EXPRESS(ContactInfo.View AS ROW(150)) AS View
از جانب
ثبت اطلاعات اطلاعات تماس چگونه اطلاعات تماس

دسته بندی بر اساس
EXPRESS(ContactInfo.Representation AS ROW(150))،
ContactInformation.Object

ISNULL (ISNULL)

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

ISNULL (مالیات قبل از ماه. مزیت AppliedFSS، 0)

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

پیوستن

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

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

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

نمونه ای از پیوستن چپ در یک درخواست 1C:

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

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

اتصال کامل

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

مثلا:

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

توسط

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

پیوستن داخلی

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

مثلا:

از جانب
فهرست مشتریان AS

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

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

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

نتیجه

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

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

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

توضیح: تنظیمات حسابداری 2.0 / 3.0پیاده سازی پیوندی به فاکتور صادر شده ذخیره نمی کند. ارتباط بین این اسناد معکوس است: در فاکتور (در جزئیات یک پایه سند) یک مرجع به پیاده سازی که به آن مربوط می شود ذخیره می شود. بنابراین، برای درک اینکه کدام پیاده سازی فاکتور ندارند، باید از دو جدول در پرس و جو استفاده کنید: فروش کالا و خدماتو فاکتور صادر شد.

وظیفه شماره 2: فرض کنید در پایگاه داده دایرکتوری قراردادهای طرف مقابلاطلاعات اضافی ایجاد شده است به تعویق انداختن(ثبت محل ذخیره سازی اطلاعات اضافی). از یک پرس و جو برای انتخاب همه قراردادهای طرف مقابل مشخص شده با تاخیر 0 تا 10 روز استفاده کنید.

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

برگه های جدید: اتصالات

مکانیسم های جدید: بررسی تهی بودن در درخواست 1C.

قسمت نظری درس شماره 3

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

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

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

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

تب Relationships در Query Designer

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

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

  • میز 1. جدول ارتباط سمت چپ در این ستون انتخاب شده است. شما فقط می توانید از جداول انتخاب شده در برگه استفاده کنید جداول و فیلدها;
  • همه. پرچم در این ستون قرار می گیرد اگر شما نیاز به انتخاب همه داده ها برای جدول سمت چپ (برای ترک کردیا پر شدهاتصالات)؛
  • جدول 2. جدول اتصال سمت راست در این ستون انتخاب شده است.
  • همه. پرچم در این ستون قرار می گیرد اگر شما نیاز به انتخاب همه داده ها برای جدول مناسب (برای درستیا پر شدهاتصالات)؛
  • رایگان. پرچمی که با آن می توانید به حالت ویرایش دستی وضعیت اتصال بروید.
  • شرایط اتصال.یک شرط در یک زبان پرس و جو، مشابه شرایط مورد بحث در . این عبارتی است که همیشه باید یکی از دو مقدار را برگرداند: درست است، واقعییا دروغ.به طور معمول، یک شرط پیوند از سه بخش تشکیل شده است:
    • سمت چپ. معمولاً یک فیلد در جدول سمت چپ است، اما همچنین می تواند یک فیلد در جدول سمت راست یا یک پارامتر باشد (فقط در حالت ویرایش شرایط سفارشی).
    • عملگر مقایسه به طور پیش فرض، "="، "<>», «<«, «>», «>=», «<=». Но в произвольном режиме редактирования можно использовать и некоторые другие, например «Между»;
    • قسمت راست معمولاً یک فیلد در جدول سمت راست است، اما همچنین می تواند یک فیلد در جدول سمت چپ یا یک پارامتر باشد (فقط در حالت ویرایش شرایط سفارشی).

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

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

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

وظیفه شماره 1

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

  • بیایید یک درخواست جدید ایجاد کنیم.
  • بیایید جداول را انتخاب کنیم فروش کالا و خدماتو فاکتور صادر شداز نخ مستندات;
  • از روی میز فروش کالا و خدماتیک فیلد را انتخاب کنید ارتباط دادن؛
  • بیایید به برگه برویم شرایط;
  • در فصل زمینه های، بیایید تاپیک را باز کنیم فروش کالا و خدماتبا استفاده از دکمه "+"؛
  • بیایید وسایل را پیدا کنیم تاریخو آن را به قسمت شرایط بکشید، عملگر مقایسه را انتخاب کنید بینو پارامترهای شروع و پایان دوره را برای مثال نشان دهید شروع دورهو پایان دوره;
  • از بخش زمینه هایبیایید وسایل را بکشیم انجام شده، یک پرچم در خط با شرط قرار دهید رایگانو قسمت اضافی شرط "= &Passed" را پاک کنید.
  • بیایید به برگه برویم ارتباطات؛
  • بیایید با استفاده از دکمه "افزودن" یک اتصال جدید ایجاد کنیم.
  • در زمینه میز 1یک جدول را انتخاب کنید فروش کالا و خدمات(این جدول سمت چپ خواهد بود) ;
  • برای حل صحیح مشکل باید تمامی پیاده سازی ها را دریافت کنیم، فاکتورها را به آن ها پیوست کنیم و اگر فاکتور پیدا نشد، اجرا را به عنوان نتیجه درخواست نمایش دهیم. بیایید این کار را به دو کار فرعی تقسیم کنیم:
    • بیایید همه فروش ها را انتخاب کنیم و با استفاده از اتصال، سعی کنیم فاکتور آنها را پیدا کنیم.
    • با استفاده از شرط، فقط خطوطی را انتخاب می کنیم که فاکتوری وجود ندارد.
  • از پاراگراف قبلی چنین بر می آید که باید استفاده کنیم اتصال سمت چپ، به منظور انتخاب همه پیاده سازی ها. بنابراین، بیایید یک پرچم در ستون قرار دهیم همه
  • در زمینه جدول 2یک جدول را انتخاب کنید فاکتور صادر شد(این جدول مناسب خواهد بود)؛
  • از آنجایی که پیوند پیاده سازی در جزئیات فاکتور ذخیره می شود پایگاه اسناد،در شرایط اتصال انتخاب می کنیم:
    • در سمت چپ زمین لینک فروش کالا و خدمات;
    • در سمت راست زمین: InvoiceInvoiceIssued.DocumentBase.
  • راه اندازی اتصال کامل شده است.

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

زبان پرس و جو 1C دارای یک عملگر منطقی خاص است که به شما امکان می دهد بررسی کنید که آیا یک فیلد حاوی مقدار است یا خیر خالی، نحو آن <Поле>تهی است. یک مقدار برمی گرداند درست است، واقعیاگر فیلد دارای مقدار باشد خالیو دروغ- در صورت مخالف

توجه داشته باشید که مقدار فیلد توسط را بررسی کنید خالیفقط با استفاده از تابع مشخص شده، ساخت و ساز امکان پذیر است <Поле>= NULLاین بررسی امکان پذیر نخواهد بود.

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

درخواست = درخواست جدید; Request.SetParameter("StartPerid" , StartPerid); Request.SetParameter("پایان دوره"، پایان دوره); درخواستی = فاکتور صادر شده |. فروش کالاها و خدمات بین المللی |

وظیفه شماره 2

  • بیایید یک درخواست جدید ایجاد کنیم.
  • بیایید طراح پرس و جو را راه اندازی کنیم.
  • روی زبانه جداول و فیلدهابیایید دو جدول را انتخاب کنیم: قراردادهای طرفیناز نخ دایرکتوری هاو اطلاعات تکمیلیاز نخ ثبت اطلاعات;
  • از روی میز قراردادهای طرفینیک فیلد را انتخاب کنید ارتباط دادن;

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

  • بیایید به برگه برویم شرایط. از روی میز قراردادهای طرفینفیلد را به بخش شرایط انتقال دهید مالک. در سمت راست شرط، نام پارامتری را تعیین می کنیم که طرف مقابل مورد نیاز خود را به آن منتقل می کنیم، بیایید آن را صدا کنیم. طرف مقابل;
  • همچنین وظیفه انتخاب قراردادهای با تاخیر از 0 تا 10 را به دو کار فرعی تقسیم می کنیم:
    • بیایید همه قراردادها را انتخاب کنیم و با استفاده از اتصالات، سعی کنیم تعویق آنها را پیدا کنیم.
    • با استفاده از شرط، ما فقط قراردادهایی را با تعویق هایی که نیاز داریم انتخاب می کنیم.
  • بیایید بین قراردادها و اطلاعات اضافی ارتباط برقرار کنیم. بیایید به تب Connections برویم و یک اتصال جدید اضافه کنیم.
  • در زمینه میز 1یک جدول را انتخاب کنید قراردادهای طرفین(این جدول سمت چپ خواهد بود)؛
  • از آنجایی که ما به همه قراردادها نیاز داریم، استفاده خواهیم کرد اتصال سمت چپ.بیایید یک پرچم در ستون All، که متعلق به جدول سمت چپ است، قرار دهیم.
  • در زمینه جدول 2یک جدول را انتخاب کنید اطلاعات تکمیلی(این جدول مناسب خواهد بود)؛
  • از آنجایی که ارجاع به قرارداد در بعد ذخیره می شود یک شیثبت اطلاعات اطلاعات تکمیلی،در شرایط اتصال انتخاب می کنیم:
    • در سمت چپ زمین پیوند قراردادهای پیمانکاران;
    • اجازه دهید عملگر مقایسه استاندارد "=";
    • در سمت راست زمین: AdditionalInfo.Object.

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

  • بیایید یک اتصال جدید اضافه کنیم.
  • در زمینه میز 1یک جدول را انتخاب کنید قراردادهای طرفین;
  • مهم است بدانید که اگر چندین رابطه در یک جفت جداول دارید، باید از یک نوع اتصال برای آنها استفاده کنید. در مورد ما، این است اتصال سمت چپ.بنابراین، بیایید یک پرچم در ستون قرار دهیم همهمربوط به جدول سمت چپ؛
  • در زمینه جدول 2یک جدول را انتخاب کنید اطلاعات تکمیلی;
  • در شرط رابطه، نیازی به استفاده از فیلد جدول سمت چپ نخواهیم داشت، در عوض یک شرط بر روی بعد اعمال می کنیم ویژگی، معادل سازی آن با اضافی. ویژگی به تعویق انداختن، که با استفاده از پارامتر به درخواست ارسال می شود;
  • بیایید پرچم را تنظیم کنیم رایگاندر معنا درست است، واقعیو به صورت دستی متن شرط زیر را بنویسید: “Additional Information.Property = &PropertyDelay”;

  • راه اندازی اتصال کامل شده است.

حالا فقط شرط گذاشتن میزان تعویق باقی مانده است. از آنجایی که از بازه 0 تا 10 استفاده می کنیم، لازم است از عملگر مقایسه Between استفاده کنیم. از آنجایی که صفر پشتیبان در اطلاعات اضافی ذخیره نمی شود، در این حالت، هنگام اتصال، تمام فیلدهای ثبت مقدار را برمی گرداند. خالی. به منظور جایگزینی مقدار در یک شرایط خالیتا 0، از تابع زبان پرس و جو استفاده خواهیم کرد ISNULL(<Выражение1>, <Выражение2>) . تابع برمی گردد بیان 1، اگر مساوی نباشد خالیو بیان 2در غیر این صورت.

  • بیایید به برگه برویم شرایططراح پرس و جو و اضافه کردن یک شرط جدید.
  • بیایید یک پرچم در آن قرار دهیم رایگانو به ویرایشگر بیان آزاد بروید.
  • در بخش توابع زبان پرس و جو، شاخه را گسترش خواهیم داد توابع -> توابع دیگر;
  • بیایید یک تابع را به قسمت عبارات بکشیم ISNULL;
  • پس از ساخت به دست آمده، عملگر مقایسه Between را وارد کرده و فاصله را 0 و 10 تنظیم می کنیم.
  • روی OK کلیک کنید، شرط آماده است.

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

  • بیایید به برگه برویم جداول و فیلدهاو یک فیلد جدید اضافه کنید.
  • در ویرایشگر عبارت آزاد که باز می شود، تابع را انتخاب کنید ISNULL;
  • به جای عبارت 1، فیلد AdditionalInformation.Value و به جای عبارت 2، 0 را وارد کنید.
  • روی OK کلیک کنید، فیلد آماده است.

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

درخواست = درخواست جدید; Query.SetParameter("PropertyDelay", PropertyProperty); Request.SetParameter ("حساب"، حساب); Query.Text = "انتخاب | قراردادهای طرف قرارداد. پیوند، | ISNULL(اطلاعات تکمیلی. مقدار، 0) فیلد 1 پیوند = شیء اضافی | AND (اطلاعات اضافی)

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

وقتی می خواهیم داده های چند جدول را همزمان ببینیم، i.e. برای جمع آوری چندین جدول در یک جدول، مفهوم اتصال جداول و روابط بین آنها بوجود می آید. چهار نوع اتصال وجود دارد:

  • ترک کرد؛
  • درست،
  • درونی؛ داخلی؛
  • کامل.

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

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

اتصال سمت چپ

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

درخواست.متن =
"انتخاب کنید
| نامگذاری.محصول،
| Nomenclature.Color AS ColorNomenclature,
| Remains.Color AS Color Remains,
| تعادل. کمیت
|از

";

هیچ منطبقی برای صندلی از جدول باقیمانده ها وجود نداشت، بنابراین فیلدها با مقادیر NULL پر شدند، که باید توسط تابع ISNULL پردازش شوند، به 1C 8 توابع زبان پرس و جو مراجعه کنید.

اتصال سمت چپ تقریباً مانند یک حلقه در یک حلقه کار می کند - اولین رکورد را از جدول سمت چپ می گیرد و از تمام رکوردهای جدول سمت راست عبور می کند تا اطمینان حاصل شود که شرایط اتصال برقرار است. سپس رکورد دوم از جدول سمت چپ گرفته می شود و به همین ترتیب. اگر به طور ناگهانی چندین رکورد از جدول سمت راست شرایط اتصال را برآورده کند، سپس چندین ردیف به جدول حاصل اضافه می شود (با توجه به تعداد اتصالات موفق، جدول به دست آمده آموزنده نیست، داده ها منعکس نمی شوند). ماهیت واقعی است، بنابراین بهتر است این جداول را با دو فیلد به هم متصل کنید: Product و Color، فقط این بار NULL ها را مدیریت می کنیم:

درخواست.متن =
"انتخاب کنید
| نامگذاری.محصول،
| نامگذاری. رنگ،
| ISNULL(Remaining.Quantity, 0) AS Quantity
|از
| نامگذاری AS نامگذاری
| چپ پیوستن به باقی مانده به عنوان باقی مانده
| نرم افزار Nomenclature.Product = Remaining.Product

اتصال درست

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

پیوستن داخلی

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

درخواست.متن =
"انتخاب کنید
| نامگذاری.محصول،
| نامگذاری. رنگ،
| Remainings.Quantity AS مقدار
|از
| نامگذاری AS نامگذاری
| INNER JOIN Remainders AS Remainders
| نرم افزار Nomenclature.Product = Remaining.Product
| و Nomenclature.Color = Remaining.Color";

اتصال کامل

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

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

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

درخواست.متن =
"انتخاب کنید
| نامگذاری Zarya.Product AS ProductZarya,
| نامگذاریZarya.قیمت به عنوان قیمت Zarya,
| نامگذاری Rassvet محصول AS محصول Rassvet،
| نامگذاریRassvet.Price AS PriceRassvet
|از

این دقیقاً همان چیزی نیست که ما به آن نیاز داریم، بیایید زمینه محصول را با هم ترکیب کنیم و NULL ها را پردازش کنیم:

درخواست.متن =
"انتخاب کنید
//ساخت ISNULL در بخش توابع زبان پرس و جو مورد بحث قرار گرفت
//اگر قیمت تعریف نشده است، آن را مقداردهی اولیه کنید
//چرا 1000000 توضیح زیر را ببینید
| ISNULL(NomenclatureZarya.Price, 1000000) AS PriceZarya,
| ISNULL(NomenclatureRassvet.Price, 1000000) AS PriceRassvet
|از
| نامگذاریZarya AS NomenclatureZarya
| FULL CONNECTION NomenclatureDawn AS NomenclatureDawn
| نرم افزار NomenclatureZarya.Product = NomenclatureDawn.Product";

تنها چیزی که باقی می ماند انتخاب حداقل قیمت است. متن درخواست نهایی به صورت زیر خواهد بود:

درخواست.متن =
"انتخاب کنید
| ISNULL(NomenclatureZarya.Product، NomenclatureDawn.Product) AS محصول،
| انتخاب
| WHEN THERE ISNULL(NomenclatureZarya.Price, 1000000) > ISNULL(NomenclatureRassvet.Price, 1000000)
| THEN ISNULL (NomenclatureRassvet.Price, 1000000)
| ELSE ISNULL (نامگذاری Zarya.Price, 1000000)
| پایان به عنوان قیمت
|از
| نامگذاریZarya AS NomenclatureZarya
| FULL CONNECTION NomenclatureDawn AS NomenclatureDawn
| نرم افزار NomenclatureZarya.Product = NomenclatureDawn.Product";

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

← توابع زبان پرس و جو 1C 8 | به پرس و جوهای 1C 8 می پیوندد →

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

گزارش کالا در حسابداری 1C 8.3 گزارش کالا در برنامه حسابداری 1C 8.3 یک فرم یکپارچه TORG-29،...

در این مقاله می خواهم جنبه هایی از محاسبه و کسر مالیات بر درآمد شخصی در 1C 8.3 و همچنین تهیه گزارش در فرم های 2-NDFL و ... را در نظر بگیرم.

در صورت ثبت اشتباه در حسابداری چه باید کرد؟ برای این کار می توانید از تکنیک های خاصی برای تصحیح این گونه رکوردها استفاده کنید.
حداقل 5 دلیل برای امتناع از خرید و استفاده از نرم افزارهای تقلبی برای تجارت وجود دارد. اینها عبارتند از: خطرات غیراقتصادی:...
چگونه می توان با استفاده از مثال مدیریت تجارت کالاها را در برنامه مونتاژ و جدا کرد؟ این اتفاق می افتد که نیاز ...
در این مقاله می خواهم جنبه هایی از محاسبه و کسر مالیات بر درآمد شخصی در 1C 8.3 و همچنین تهیه گزارش در فرم های 2-NDFL و ... را در نظر بگیرم.
زبان پرس و جو 1C یکی از تفاوت های اصلی نسخه های 7.7 و 8 است. یکی از مهمترین نکات در یادگیری برنامه نویسی 1C این است که ...
KUDIR یک کتاب درآمد و هزینه است که باید توسط همه سازمان ها و کارآفرینان فردی نگهداری شود (ماده 346.24 قانون مالیات فدراسیون روسیه). تصدیق کتاب با مالیات ...