چگونه می توان نوع (نوع) یک سند را در یک درخواست دریافت کرد؟ 1s 8 مقادیر در درخواست

در این مقاله به بررسی احتمالات تبدیل نوع در زبان پرس و جو 1C می پردازیم که توسط تابع "Express" ارائه شده است.
بیایید به چندین گزینه برای استفاده از این تابع نگاه کنیم.
و اولین گزینه گرد کردن اعداد است.

برای انجام این کار، باید از تابع Express در قالب زیر استفاده کنید:

بیان(<Число>به عنوان شماره(<ДлинаЧисла>,<Точность>))

جایی که:
عدد- زمینه ای که باید گرد شود
اعداد طولی- حداکثر طول عدد
دقت- دقت گرد کردن اعداد

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

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

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

بیان(<Строка>به عنوان رشته (<ДлинаСтроки>)

جایی که
طول خط- حداکثر طولی که رشته به آن کاهش می یابد.
بیایید پرس و جو را دوباره کار کنیم: در این شرط یک رشته نامحدود را به رشته ای با طول مشخص تبدیل می کنیم. سپس هیچ خطایی وجود نخواهد داشت.

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

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

بیان(<Документ>به عنوان سند<ИмяТаблицы>)
بیان(<Справочник>به عنوان یک دایرکتوری< ИмяТаблицы >)
.

جایی که
نام جدول- نام شی در .

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

اگر هنوز در ساخت‌های زبان پرس و جو «شنا» می‌کنید و حتی ساده‌ترین پرسش‌ها برای شما مشکل ایجاد می‌کنند، پس من دوره آموزشی «پرسش‌ها در 1C از مبتدی تا حرفه‌ای» را به شما توصیه می‌کنم. جایی که این و بسیاری از سؤالات دیگر با جزئیات بیشتر مورد بحث قرار می گیرند.

ویژگی های این دوره:
این دوره برای کسانی طراحی شده است که با زبان پرس و جو در 1C آشنا نیستند.
مطالب آموزشی به خوبی چیده شده و یادگیری آن آسان است.
چند ده درس؛
مثال های کاربردی مفید؛
تمامی دروس به زبانی واضح و ساده ارائه شده است

برای خوانندگان من، کوپن تخفیف 25٪: hrW0rl9Nnx

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

شما می توانید هر مبلغی را مستقیماً انتقال دهید:
Yandex.Money - 410012882996301
وب مانی - R955262494655

به گروه های من بپیوندید

43
NULL - مقادیر از دست رفته. نباید با مقدار صفر اشتباه گرفته شود! NULL یک عدد نیست، با فاصله، مرجع خالی یا تعریف نشده برابر نیست. NULL یک مقدار شکل دهنده نوع است، یعنی. یک نوع NULL و یک مقدار واحد از این نوع وجود دارد. خالی... 26
برای تولید و اجرای پرس و جوها در جداول پایگاه داده در پلت فرم 1C، از یک شی خاص از زبان برنامه نویسی Query استفاده می شود. این شی با فراخوانی ساختار New Request ایجاد می شود. درخواست راحت ... 18
این مقاله تکنیک های مفیدی را هنگام کار با پرس و جوهای 1C v.8.2 و همچنین اطلاعاتی ارائه می دهد که در مورد زبان پرس و جو چندان شناخته شده نیستند. من سعی نمی کنم توصیف کاملی از زبان پرس و جو ارائه کنم، اما می خواهم فقط در مورد ... 13
LIKE - عملگر برای بررسی شباهت یک رشته به یک الگو. آنالوگ LIKE در SQL. عملگر SIMILAR به شما امکان می دهد مقدار عبارت مشخص شده در سمت چپ آن را با رشته الگوی مشخص شده در سمت راست مقایسه کنید. معنی عبارت ...

زبان پرس و جو 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 است که در آینده سعی خواهم کرد برخی از نکات را با جزئیات بیشتر در نظر بگیرم.

حالا به بقیه نگاه کنیم.

توابع کار با رشته ها در جستارهای 1C

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

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

درخواست. متن = "انتخاب کنید
""خط:" " + منبع.نام
;

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

  1. رشته منبع
  2. تعداد کاراکتری که خط انتخاب شده باید با آن شروع شود.
  3. شخصیت ها.

درخواست. متن = "انتخاب کنید
SUBSTRING("
"خط:" "، 4، 3) به عنوان یک نتیجه"; // نتیجه: باشه

تابع ISNULL

NULL یک نوع داده خاص در پلت فرم 1C: Enterprise است. همچنین تنها مقدار ممکن از این نوع است. NULL می تواند در چند مورد در پرس و جو ظاهر شود: هنگام اتصال منابع پرس و جو، اگر مقدار مربوطه در یکی از جداول یافت نشد. هنگام دسترسی به جزئیات یک شی غیر موجود؛ اگر NULL در لیست فیلدهای پرس و جو مشخص شده باشد (مثلاً هنگام ترکیب نتایج انتخاب از چندین جدول) و غیره.

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

دو پارامتر دارد:

  1. مقدار در حال بررسی
  2. مقداری که اگر پارامتر اول NULL باشد باید جایگزین آن شود.

درخواست. متن = "انتخاب کنید
ISNULL(Source.Remainder, 0) AS Remainder"
; // اگر نتیجه درخواست باقیمانده فیلد = NULL باشد،
// سپس با 0 جایگزین می شود و می توانید عملیات ریاضی را با آن انجام دهید

کارکرد کاراییو لینک های مقدمه

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

درخواست. متن = "انتخاب کنید
بازنمایی (درست) به عنوان بولی،
نمایندگی (4) به عنوان یک عدد،
نمایندگی (Source.Link) به عنوان پیوند،
نمایندگی (DATETIME(2016,10,07)) به عنوان تاریخ"
;
// Boolean = "بله"، شماره = "4"، لینک = "سفارش دریافت نقدی سند شماره .... از..."
// Date="07.10.2016 0:00:00"

درخواست. متن = "انتخاب کنید
RERESENTATIONREFERENCE (درست) به عنوان بولی،
RERESENTATIONREFERENCE(4) به عنوان شماره
PRESENTINGLINK(Source.Link) به عنوان پیوند،
RERESENTATIONREFERENCE(DATETIME(2016,10,07)) به عنوان تاریخ"
;
// Boolean = TRUE, Number = 4, Link = "سفارش دریافت نقدی سند شماره .... از..."
// تاریخ=07.10.2016 0:00:00

کارکرد تایپ کنیدو TYPE VALUES

تابع تایپ کنیدنوع داده پلتفرم 1C: Enterprise را برمی گرداند.

درخواست. متن = "انتخاب کنید
TYPE (شماره)
TYPE (رشته)،
TYPE (سند. سفارش نقدی مخارج)"
;

تابع TYPE VALUESنوع مقدار ارسال شده به آن را برمی گرداند.

درخواست. متن = "انتخاب کنید
VALUES TYPE (5) به عنوان شماره،
TYPE ("
"خط" ") رشته AS،
TYPE (Source.Link) AS مرجع
از منبع Directory.Source AS"
;
//Number=Number، String=String، Directory = DirectoryLink.Source

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

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

از جانب

جایی که
VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)"
;

تابع معنی

تابع معنیبه شما امکان می دهد از اشیاء پیکربندی 1C به طور مستقیم در یک درخواست استفاده کنید، بدون استفاده از .

بیایید یک شرط دیگر را به مثال قبلی اضافه کنیم. فقط باید شماره تلفن طرف مقابل خود را دریافت کنید.

درخواست. متن = "انتخاب کنید
اطلاعات تماس. مقدمه
از جانب
ثبت اطلاعات اطلاعات تماس چگونه اطلاعات تماس
جایی که
VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)
و ContactInfo.Type = VALUE(Enum.ContactInfoTypes.Phone)"
;

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

اپراتور ارتباط دادن

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

به عنوان مثال، وظیفه انتخاب اطلاعات تماس برای طرفین می تواند به این صورت حل شود:

درخواست. متن = "انتخاب کنید
اطلاعات تماس. مقدمه
از جانب
ثبت اطلاعات اطلاعات تماس چگونه اطلاعات تماس
جایی که
ContactInformation.Object LINK Directory.Counterparties"
;

اپراتور بیان

اپراتور بیاندر جستارهای 1C در دو مورد استفاده می شود:

  • هنگامی که شما نیاز به تغییر ویژگی های یک نوع اولیه دارید.
  • زمانی که باید یک فیلد با نوع داده مرکب را به فیلدی با یک نوع واحد تبدیل کنید.

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

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

درخواست. متن = "انتخاب کنید
مقدار (ورود کالاها و خدمات مختلف. پیوند) به عنوان پیوند
از جانب
سند دریافت کالا و خدمات چگونه دریافت کالا و خدمات
دسته بندی بر اساس
EXPRESS(دریافت کالا و خدمات. نظر در ردیف (200))"
;

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

درخواست. متن = "انتخاب کنید
EXPRESS (حرکت گردش کالا. سفارش به عنوان سند. سفارش مشتری). تاریخ به عنوان تاریخ سفارش،
حرکت گردش کالا. نامگذاری
از جانب
RegisterAcumulations.Movement of Goods.Turnover AS Movement of GoodsTurnover
جایی که
جابجایی کالاها. لینک سفارش سند. سفارش مشتری"
;

اپراتورها انتخابو تهی است

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

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

درخواست. متن = "انتخاب کنید
ContactInformation. مقدمه،
انتخاب
WHEN VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Counterparties)
سپس "
طرف مقابل "
انتخاب دیگر
WHEN VALUES TYPE(ContactInformation.Object) = TYPE(Directory.Individuals)
سپس "
شخصی"
ELSE "یک نفر دیگر" "
پایان
پایان به عنوان مالک
از جانب
ثبت اطلاعات تماس با عنوان اطلاعات تماس"
;

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

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

درخواست. متن = "انتخاب کنید
انتخاب
وقتی مقدار NULL است، 0 است
معنی ELSE
پایان"
;

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

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

به عنوان دانشجو وارد سایت شوید

برای دسترسی به مطالب مدرسه به عنوان دانش آموز وارد شوید

زبان پرس و جو 1C 8.3 برای برنامه نویسان مبتدی: توابع و عملگرها برای کار با انواع (VALUE TYPE، TYPE، REFERENCE، ISNULL، EXPRESS)

بیایید به یاد داشته باشیم که هر ویژگی (ویژگی، فیلد) دایرکتوری، سند یا هر شیء کاربردی دیگری نوع خاص خود را دارد. و ما می توانیم به این نوع در پیکربندی نگاه کنیم:

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

تابع VALUE TYPE

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

حالا بیایید به لوازم جانبی نگاه کنیم ویژگی متمایزدر دایرکتوری شهرها:

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

اگر بخواهیم مقدار چنین جزئیاتی را در حالت 1C:Enterprise پر کنیم، سیستم از ما می‌پرسد که چه نوع مقداری وارد می‌شود:

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

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

با کلیک بر روی عناصر دایرکتوری می توانید این را برای خودتان ببینید شهرهادر حالت 1C: Enterprise. شما در حال خواندن نسخه آزمایشی درس هستید، دروس کامل در دسترس است.

در اینجا مقدار ویژگی متمایز یک عنصر دایرکتوری است طعم:

خط اینجاست:

و در اینجا به طور کلی یک عنصر از کتاب مرجع است رنگ ها:

اینها امکاناتی است که یک نوع داده ترکیبی برای ما باز می کند!

من تعجب می کنم که عملکرد چگونه عمل خواهد کرد TYPE VALUESروی پایه ها عنصر متمایز، داشتن یک نوع داده ترکیبی:

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

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

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

نوع ارزش ویژگی متمایز برای Perm برابر است با طعم. این درست است، زیرا مقدار ویژگی متمایز وارد شده در پایگاه داده برای شهر Perm یک پیوند به عنصر دایرکتوری است. طعم.

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

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

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

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

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

تابع TYPE

فقط یک پارامتر - نام نوع اولیه ( خط, عدد, تاریخ, بولیان، یا نام جدولی که می خواهید نوع پیوند آن را دریافت کنید.

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

مبهم به نظر می رسد، اینطور نیست؟

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

فرض کنید باید همه ورودی های دایرکتوری را انتخاب کنیم شهرها، که دارای پایه های کامپوزیت هستند ویژگی متمایزدارای مقدار نوع است خط:

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

عقب نشینی

همانطور که به یاد دارید، برخی از عناصر دایرکتوری شهرهالوازم جانبی ندارند ویژگی متمایز. تابع TYPE VALUESبرای چنین عناصری تولید می کند خالی.

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

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

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

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

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

اما مقایسه با UNDEFINED برای تعیین ویژگی‌های خالی (پر نشده) فقط برای انواع ترکیبی کار می‌کند.

به هر حال، عملگر منطقی IS NULL یک شکل نفی دارد که به شکل زیر است:

عملگر منطقی LINK

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

همانطور که به یاد دارید، ما می‌توانیم همان مشکل را با استفاده از آن حل کنیم TYPE VALUESو تایپ کنید:

تابع ISNULL

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

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

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

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

به نظر می رسد که اگر اولین پارامتر تابع ISNULLنا برابر خالی، سپس او برمی گردد. اگر NULL باشد، پارامتر دوم برگردانده می شود.

تابع EXPRESS

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

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

برای میدان ویژگی متمایزچنین انواع معتبر هستند خط, دایرکتوری.رنگ هاو دایرکتوری. سلیقه ها.

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

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

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

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

امتحان بده

شروع تست

1. صحیح ترین عبارت را انتخاب کنید

2. جزئیاتی که می توانند مقادیر یکی از چندین نوع را بگیرند نامیده می شوند

3. برای تعیین نوع مقدار ویژگی، از تابع استفاده کنید

4. جزئیات خالی از نوع کامپوزیت مهم است