ایجاد و کار با درخواست ها (برای مبتدیان). ایجاد و کار با درخواست ها (برای مبتدیان) 1s 8.3 اگر در یک درخواست باشد

برنامه نویسی 1C شامل چیزی بیشتر از نوشتن یک برنامه است. 1C شمش اقدامات و داده های کاربر است که با آن کار می کند.

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

بخش اساسی گزارش درخواست 1C است. در مورد گزارش، ACS بزرگترین بخش گزارش است.

بشین یک نفسی بگیر. آرام باش. حالا خبر را به شما می گویم.

برای برنامه نویسی در 1C، دانستن زبان برنامه نویسی 1C کافی نیست. همچنین باید زبان پرس و جو 1C را بدانید.

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

او همچنین دو زبانه است - یعنی می توانید به روسی یا انگلیسی بنویسید. این بسیار شبیه به زبان پرس و جو SQL است و کسانی که آن را می دانند می توانند آرامش داشته باشند.

نحوه استفاده از درخواست های 1C

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

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

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

ایجاد و اجرای پرس و جوهای 1C

درخواست 1C متن واقعی درخواست در زبان درخواست 1C است.
متن را می توان با خودکار نوشت. یعنی بگیر و بنویس (اگر این زبان را بلدی).

از آنجایی که 1C مفهوم برنامه نویسی بصری را ترویج می کند، جایی که بسیاری از یا تقریباً همه چیز را می توان بدون نوشتن کد با دست انجام داد، یک شی Query Constructor ویژه وجود دارد که به شما امکان می دهد متن یک پرس و جو را بدون دانستن زبان پرس و جو ترسیم کنید. با این حال، معجزه اتفاق نمی افتد - برای این شما باید بدانید که چگونه با سازنده کار کنید.

هنگامی که متن درخواست 1C آماده شد، باید اجرا شود. برای این منظور یک شی در کد 1C Request() وجود دارد. در اینجا یک مثال است:

Request = New Request();
Query.Text = "انتخاب کنید
| نامگذاری.پیوند
|از
| Directory.Nomenclature AS Nomenclature
| کجا
| نامگذاری.سرویس"؛
Select = Query.Run().Select();

گزارش (انتخاب. پیوند);
چرخه پایان

همانطور که در مثال مشاهده می کنید، پس از اجرای درخواست 1C، نتیجه به دست ما می رسد و باید آن را پردازش کنیم. نتیجه یک یا چند ردیف از جدول (در یک فرم خاص) است.

نتیجه را می توان در یک جدول معمولی بارگذاری کرد:
Fetch = Query.Run().Unload(); //نتیجه - جدول مقادیر

یا فقط خط به خط دور بچرخید.
Select = Query.Run().Select();
در حالی که حلقه () Select.Next
//با نتایج پرس و جو کاری انجام دهید
چرخه پایان

کار با درخواست های 1C

اصول اولیه پرس و جوهای 1C

اصول اولیه ساخت یک درخواست 1C –
فهرست فیلدها را از عنوان جدول WHERE شرایط انتخاب کنید

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

انتخاب کنید
//لیست فیلدهایی که باید انتخاب کنید
ارتباط دادن،
نام،
کد
از جانب
//نام جدولی که داده ها را از آن انتخاب می کنیم
//list of tables فهرستی از اشیاء در پنجره پیکربندی است
فهرست نامگذاری
جایی که
//انتخاب را نشان می دهد
نوع محصول = &سرویس //انتخاب بر اساس مقدار خارجی
یا Service // ویژگی "Service" از نوع Boolean، انتخاب بر اساس مقدار True
مرتب سازی بر اساس
//مرتب سازی
نام

لیست جداول 1C

می توانید نام جدول را در پنجره پیکربندی ببینید. شما فقط باید به جای «دایرکتوری ها»، «دایرکتوری» بنویسید، برای مثال «دایرکتوری. نامگذاری» یا «سند. فروش کالاها و خدمات» یا «ثبت انباشت. فروش».

جداول اضافی (مجازی) برای ثبت وجود دارد که به شما امکان می دهد اعداد نهایی را بدست آورید.

اطلاعات Register.RegisterName.Last Slice(&Date) - درخواست 1C از ثبت اطلاعات، اگر دوره ای باشد، برای یک تاریخ خاص

ثبت انباشت. نام ثبت. موجودی (&تاریخ) - درخواست 1C از ثبت موجودی برای یک تاریخ خاص

انباشت ثبت نام. نام ثبت. گردش مالی (&تاریخ شروع، &تاریخ پایان) - درخواست 1C از ثبت گردش مالی برای دوره از تاریخ شروع تا تاریخ پایان.

اصول اضافی

وقتی لیستی از برخی داده ها را درخواست می کنیم، اصول اولیه کار می کنند. اما ما همچنین می توانیم اعداد را درخواست کنیم و درخواست می تواند آنها را برای ما شمارش کند (مثلاً آنها را اضافه کنیم).

انتخاب کنید
//Quantity(FieldName) - مقدار را می شمارد
//Field AS OtherName – نام فیلد را تغییر می دهد
مقدار (لینک) به عنوان تعداد اسناد ارسال شده
از جانب

جایی که
انجام شده

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

انتخاب کنید
//فقط یک فیلد سند
سازمان،
//مقدار را بشمار
مقدار (پیوند) AS QuantityBy سازمانها
از جانب
سند فروش کالا و خدمات
جایی که
انجام شده
دسته بندی بر اساس

سازمان

این درخواست 1C تعداد اسناد مربوط به هر سازمان را به ما برمی گرداند (که «توسط سازمان» نیز نامیده می شود).

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

انتخاب کنید
//فقط یک فیلد سند
سازمان،
//مقدار را بشمار

//مقدار را بشمار

از جانب
سند فروش کالا و خدمات
جایی که
انجام شده
دسته بندی بر اساس
اگر لیست فیلدها دارای یک تابع count() و یک یا چند فیلد به طور همزمان باشد //باید استفاده شود - پس باید بر اساس این فیلدها گروه بندی کنید.
سازمان

این درخواست 1C نیز مقدار اسناد را به ما برمی گرداند.

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

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

مختصری در مورد ویژگی های اضافی زبان پرس و جو 1C:

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

1C Query Builder

برای اینکه متن درخواست را با دست ننویسید، یک طراح درخواست 1C وجود دارد. فقط در هر نقطه از ماژول کلیک راست کرده و 1C Query Designer را انتخاب کنید.

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

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

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

در تب Order، مرتب سازی نشان داده شده است. در تب Results - خلاصه نتایج.

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

زبان پرس و جو 1C 8 ابزاری ضروری برای برنامه نویس 1C است؛ این زبان به شما امکان می دهد کدهای مختصر، ساده و قابل فهم بیشتری بنویسید و از منابع سیستم کمتری هنگام کار با داده ها استفاده کنید. این مقاله مجموعه ای از دروس اختصاص داده شده به زبان پرس و جو 1C 8 را باز می کند. در درس اول به ساختار اپراتور اصلی این زبان خواهیم پرداخت - انتخاب کنید.با استفاده از این عملگر می توانید انتخاب هایی را از جداول پایگاه داده ایجاد کنید. داده های جدول انتخابی را می توان مرتب کرد، شرایط را روی آن قرار داد، با داده های جداول دیگر پیوند و ترکیب کرد، بر اساس فیلدهای مختلف گروه بندی کرد و موارد دیگر.

زبان پرس و جو 1C سازمانی 8 - ساختار اپراتور SELECT

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

[مجاز] [متفاوت] [FIRST A] [Field1] [AS Alias1], [Field2] [AS Alias2], ... [FieldM] [AS AliasB] [PUT TemporaryTableName] [FROM Table1 AS AliasTableTable1 [[INNER JOIN] ][LEFT JOIN][FULL JOIN] Table2 AS مستعار Table2 [[INNER JOIN][LEFT Join][FULL JOIN] TableC AS مستعار TablesC BY Expression1 [و Expression2]...[و ExpressionD]] .. ... BY Expression1 [And Expression2]...[And ExpressionE]] ... [TableF AS TableF مستعار] ... ] [GROUP BY GroupingField1[,] ... [GroupingFieldG]] [WHERE Expression1 [AND Expression2] ... [AND ExpressionH]] [UNITE ALL...] [; ...] [INDEX BY Alias1 ... AliasB] [TOTALS [AggregationFunction(Field1)][,] [AggregationFunction(Field2)][,] ... [AggregationFunction(FieldI)] BY [GENERAL][,] [ GroupingField1][,] ... [GroupingFieldj]]

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

  • انتخاب کنید- یک کلمه کلیدی که شروع عملگر را نشان می دهد.
  • مجازنشان می دهد که انتخاب باید شامل رکوردهای جدولی باشد که برای کاربر معین دسترسی خواندن دارند.
  • مختلفنشان می دهد که نمونه باید فقط شامل جریان های مختلف (در همه زمینه ها) باشد. به عبارت دیگر، ردیف های تکراری از نمونه حذف خواهند شد.
  • اول الفاگر این کلمه کلیدی را مشخص کنید، فقط اولین A از ردیف های انتخاب شده توسط پرس و جو در انتخاب گنجانده می شود، جایی که A یک عدد طبیعی است.
  • بلوک میدانی- این بلوک فیلدهایی را که باید در انتخاب گنجانده شوند را نشان می دهد. این فیلدها ستون های انتخابی خواهند بود. در ساده‌ترین حالت، فیلد به این شکل است: Table Alias.TableFieldName AS فیلد مستعار

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

کلمات کلیدی و بلوک برای کار با جداول

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

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

کلمات کلیدی و بلوک های تبدیل داده ها

  • بلوک گروهی- این بلوک برای گروه بندی ردیف های جدول استفاده می شود. در صورتی که مقادیر فیلدهای مشخص شده بعد از کلمه کلیدی، سطرها در یک ترکیب شوند دسته بندی بر اساسمعلوم شود که همینطور است در این حالت، تمام فیلدهای دیگر با استفاده از توابع جمع، جمع، میانگین، حداکثر یا کمینه می شوند. توابع جمع در یک بلوک فیلد استفاده می شود. مثال: حداکثر (TableAlias.TableFieldName) AS FieldAlias
  • بلوک وضعیت- در این بلوک بعد از کلمه کلیدی جایی کهعبارات شرطی جدا شده توسط عملگرهای منطقی نشان داده شده است و، یا، برای اینکه هر یک از ردیف های انتخاب شده در نمونه گنجانده شود، لازم است که همه شرایط موجود در مجموع دارای یک مقدار باشند. درست است، واقعی.
  • همه چیز را با هم ترکیب کنید- این کلمه کلیدی برای ترکیب پرس و جوها (اپراتورها) استفاده می شود انتخاب کنید). زبان پرس و جو 1C به شما امکان می دهد چندین پرس و جو را در یک پرس و جو ترکیب کنید. برای اینکه کوئری ها ادغام شوند، باید مجموعه فیلدهای یکسانی داشته باشند.
  • «;» - نقطه ویرگول برای جداسازی عباراتی که مستقل از یکدیگر هستند استفاده می شود انتخاب کنید؛
  • شاخص بر اساس- کلمه کلیدی برای نمایه سازی فیلدهای مشخص شده بعد از آن استفاده می شود.
  • بلوک خلاصه- برای ساختن نمونه های درخت مانند استفاده می شود. برای هر یک از فیلدهای گروه بندی مشخص شده بعد از کلمه کلیدی توسط،یک ردیف جداگانه در انتخاب ایجاد می شود. در این خط با استفاده از توابع تجمیع، مجموع مقادیر فیلدهای مشخص شده پس از کلمه کلیدی محاسبه می شود. نتایج.

آیا می خواهید به یادگیری زبان پرس و جو 1C 8 ادامه دهید؟ سپس مقاله بعدی را بخوانید.

درخواست .متن = "انتخاب کنید | StorageUnits.Link |از | Directory.usStorageUnits چگونه touseStorageUnits // مثال 1: مقایسه با یک مقدار بولی خالی: | کجا | StorageUnits.AllowSelectionFromReserveZone = نادرست // مثال 2. اما اگر این Boolean تعریف شده باشد، بهتر است اینگونه باشد: // شرط برای یک Boolean منفی: | کجا | واحدهای ذخیره سازی نیستند. انتخاب از منطقه رزرو مجاز است // مثال 3. انتخاب بر اساس شرایط یک فیلد خالی که دارای نوع "directory of a specific type" است. | کجا | StorageUnits.ActiveSelectionArea = VALUE(Directory.usSelectionArea.EmptyRef) // مثال 3a. انتخاب بر اساس شرط یک فیلد خالی با نوع "سند نوع خاص" | کجا | OurInformationRegister.Document = VALUE(Document.OurDocument.EmptyLink) // مثال 3b. انتخاب بر اساس شرط یک فیلد خالی با نوع "اسناد از انواع مختلف" ( میدان مرکب) | کجا | (OurInformationRegister.Document = VALUE(Document.OurDocument1.EmptyLink) | OR OurInformationRegister.Document = VALUE(Document.OurDocument2.EmptyLink) | یا... (و غیره - ما به صورت متوالی شرایط همه انواع فیلد ممکن را فهرست می کنیم) ) // مثال 4. یا برعکس، اگر شما نیاز به انتخاب یک مقدار پر شده از نوع "رشته" دارید، شرط کمک خواهد کرد: | کجا | Storage Unit.Name > """" // مثال 5. اگر شما نیاز به انتخاب اسناد از یک نوع خاص، با یک نوع داده ترکیبی دارید، به عنوان مثال، در ثبات "RunningTasks"، منبع "Task" دارای یک نوع ترکیبی است که در میان مقادیر آن سند "انتخاب" امکان پذیر است | کجا | EXPRESS(Information RegisterExecutedTasks.Task AS Document.Selection) LINK Document.Selection // مثال 5a. مثال مشابه دیگری زمانی که باید اسنادی از نوع خاصی را انتخاب کنید | انتخاب | WHEN TO EXPRESS (ag مکاتبات اسناد. DocumentBU AS Document. Recive of کالا و خدمات) LINK سند. دریافت کالا و خدمات | سپس ""دریافت کالا و خدمات"" | WHEN TO EXPRESS (ag مکاتبات اسناد. DocumentBU AS Document. فروش کالا و خدمات) سند پیوند. فروش کالا و خدمات | سپس ""فروش کالا و خدمات"" | دیگر """" | پایان به عنوان نمای سند // مثال 6. انتخاب با شرط یک مقدار تعریف نشده: | کجا | SavedSettings.User = UNDEFINED // مثال 7. انتخاب بر اساس نوع حرکت "ورودی" ثبت انباشت، "هزینه" - به طور مشابه): | کجا | RegProductsInRetail.MovementType = VALUE(MovementTypeAccumulation.Incoming) // مثال 8. چگونه در یک درخواست نشان دهیم که نیازی به اجرای درخواست نیست (به عنوان مثال، شما باید به صورت برنامه نویسی، بسته به شرایط، یک نتیجه درخواست خالی را برگردانید - Request.Text = StrReplace(Request.Text, "WHERE Doc.Link = &DocumentLink" , "WHERE IS THE LIE");). برای انجام این کار، فقط شرط "Where is False" را اضافه کنید. به هر حال، صرف نظر از حجم داده های درخواست شده در نمونه، چنین درخواستی به صورت آنی اجرا می شود. |دروغ کجاست // مثال 9. بررسی اینکه نتیجه پرس و جو حاوی داده است: اگر نهدرخواست.اجرا کردن().خالی() سپس // مثال 10. انتخاب بر اساس تاریخ خالی: | کجا | tbStrings.CancellationDate = DATETIME(1، 1، 1)

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

توابع زبان پرس و جو 1C

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

1. تابع زمان قرار- این تابع یک فیلد ثابت با نوع "Date" ایجاد می کند.

نحو: زمان قرار(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

مثال استفاده:

2. تابع DATE DIFERENCE- اختلاف بین دو تاریخ را در یکی از ابعاد (سال، ماه، روز، ساعت، دقیقه، ثانیه) برمی‌گرداند. اندازه گیری به عنوان یک پارامتر ارسال می شود.

نحو: تفاوت (<Дата1>, <Дата2>, <Тип>)

مثال استفاده:

Query.Text = "SELECT | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS تعداد روز";

3. تابع VALUE- یک فیلد ثابت با یک رکورد از پیش تعریف شده از پایگاه داده تنظیم می کند؛ همچنین می توانید یک پیوند خالی از هر نوع دریافت کنید.

نحو: VALUE(<Имя>)

مثال استفاده:

Request.Text = "انتخاب //عنصر از پیش تعریف شده | VALUE(Directory.Currencies.Dollar) به عنوان دلار، //پیوند خالی | VALUE(Document.Receipt of Goods and Services.EmptyLink) به عنوان رسید، //ارزش انتقال | VALUE(انتقال . حقوقی. فردی) AS Individual، //حساب از پیش تعریف شده | VALUE(نمودار حساب ها. خود حمایتی. مواد) AS Account_10" ;

4. تابع SELECT- ما یک آنالوگ از ساختار IF داریم که در کد استفاده می شود، فقط این مورد در جستارهای 1C استفاده می شود.

نحو: انتخاب چه زمانی<Выражение>سپس<Выражение>در غیر این صورت<Выражение>پایان

مثال استفاده:

Request.Text = //اگر مبلغ بیش از 7500 باشد، باید 300 روبل تخفیف داده شود، //بنابراین اگر شرط فعال شد، تابع //Sum - 300 برمی گرداند //در غیر این صورت درخواست به سادگی Sum برمی گردد. "انتخاب | انتخاب | WHEN TCReceipts. Amount > 7500 | THEN TCReceipts. Amount - 300 | ELSE TCReceipts. Amount | END AS AmountwithDiscount | FROM | Document. Receipt of Goods Services.TCGoodsAS"

5. تابع EXPRESS- به شما امکان می دهد یک فیلد ثابت را با یک نوع خاص بیان کنید.

نحو: EXPRESS (FieldName AS TypeName)

مثال استفاده:

Query.Text = "انتخاب VARIOUS | Sales.Registrar.Number، | SELECT | WHEN Sales.Registrar LINK Document.Consumable | THEN EXPRESS(Sales.Registrar AS Document.Consumable) | ELSE SELECT | WHEN Sales.Registrar LINKDocumentment | THEN EXPRESS(Sales.Registrar AS Document.Implementation) | END | ... | END AS Number | FROM | Register Accumulations.Purchases AS Purchases";

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

مثال استفاده:

Query.Text = "SELECT | EXPRESS(Nomenclature.Comment AS Line(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Directory.Nomenclature AS Nomenclature";

6. تابع ISNULL(املای جایگزین ISNULL) - اگر فیلد از نوع NULL باشد، با پارامتر دوم تابع جایگزین می شود.

نحو: ISNULL(<Поле>, <ПодставляемоеЗначение>)

مثال استفاده:

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

Query.Text = //کل آیتم و موجودی های آن را انتخاب کنید //اگر موجودی در برخی از آیتم ها وجود نداشته باشد، یک فیلد //NULL وجود خواهد داشت که با مقدار 0 "SELECT | No. Link, | ISNULL" جایگزین می شود. (محصولاتInStockRemains.InStockRemaining، 0) AS Remainder | FROM | فهرست راهنما. نامگذاری به عنوان شماره | اتصال سمت چپ ثبت تجمعات. کالاها در انبارها. باقیمانده ها به عنوان کالاهادر انبارها باقیمانده ها | روشن (GoodsInclasture.No.

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

نحو: کارایی(<НаименованиеПоля>)

مثال استفاده:

query.text = "SELECT | بازنمایی (freeremainingRemains.NomenClature) به عنوان نامگذاری ، | بازنمایی (FreerMainingRemaining.warehouse) به عنوان انبار ، | freeremainingRemaining.instockremaining | از | تجمع ثبت نام.

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

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

1. لینک ساخت و ساز- یک عملگر منطقی برای بررسی نوع مرجع است. اغلب هنگام بررسی یک فیلد از نوع پیچیده در برابر یک نوع خاص با آن مواجه می‌شویم. نحو: ارتباط دادن<Имя таблицы>

مثال استفاده:

Request.Text = //اگر نوع مقدار ضبط کننده، Document Receipt باشد، //سپس عبارت "دریافت کالا" را برمی گرداند، در غیر این صورت "فروش کالا" "انتخاب | SELECT | WHEN Remainings.Registrar LINK Document.Receipt of Goods and خدمات | سپس ""دریافت" | دیگر ""مصرف" | پایان به عنوان نوع حرکت | FROM | ثبت تجمع. محصولات باقیمانده در انبارها به عنوان باقی مانده" ;

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

نحو: بین<Выражение>و<Выражение>

مثال استفاده:

Request.Text = //دریافت کل نامگذاری که کد آن در محدوده 1 تا 100 است.

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

نحو: که در(<СписокЗначений>), در سلسله مراتب (<СписокЗначений>)

مثال استفاده:

درخواستی حساب ها. خود حمایتی. کالاها)";

4. طراحی مشابه- این تابع به ما امکان می دهد یک رشته را با یک الگوی رشته مقایسه کنیم.

نحو: پسندیدن "<ТекстШаблона>"

گزینه های الگوی ردیف:

% - دنباله ای حاوی هر تعداد کاراکتر دلخواه.

یک شخصیت دلخواه

[...] - هر کاراکتر منفرد یا دنباله ای از کاراکترهای فهرست شده در داخل پرانتز. شمارش می‌تواند محدوده‌هایی را مشخص کند، به‌عنوان مثال a-z، به این معنی که یک کاراکتر دلخواه که در محدوده گنجانده شده است، از جمله انتهای محدوده.

[^...] - هر کاراکتر منفرد یا دنباله ای از کاراکترهای فهرست شده در داخل کروشه به جز آنهایی که بعد از علامت نفی فهرست شده اند.

مثال استفاده:

Query.Text = //کل نامگذاری را بیابید که حاوی ریشه TABUR است و //با یک حرف کوچک یا بزرگ t شروع می شود "انتخاب | نامگذاری. پیوند | از | فهرست. نامگذاری AS نامگذاری | کجا | محصولات. نام مانند "" [Tt ]abur%""" ;

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

نحو: ALLOWED بعد از کلمه کلیدی SELECT نوشته می شود

مثال استفاده:

Request.Text = "انتخاب مجاز | طرفین. پیوند | از | دایرکتوری. طرفین به عنوان طرف مقابل";

6. طراحی متفاوت- به شما امکان می دهد رکوردهایی را انتخاب کنید که در آنها رکوردهای تکراری وجود ندارد.

نحو: VARIOUS بعد از کلمه کلیدی SELECT نوشته می شود

مثال استفاده:

Request.Text = // رکوردهایی را انتخاب می کند که خواننده دارای حقوق است.

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

مثال استفاده:

Request.Text = // رکوردهای مختلفی را انتخاب می کند که خواننده دارای حقوق است.

7. ابتدا طراحی کنید- تعداد رکوردهای مشخص شده در پارامتر را از نتیجه پرس و جو انتخاب می کند.

نحو: اول<число>

مثال استفاده:

Request.Text = //انتخاب 4 عدد CCD اول از دایرکتوری "انتخاب FIRST 4 | اعداد CCD. پیوند | FROM | فهرست. اعداد CCD به عنوان اعداد CCD";

8. طراحی برای تغییر- به شما امکان می دهد جدول را قفل کنید، فقط در تراکنش ها کار می کند (فقط مربوط به قفل های خودکار).

نحو: برای تغییر<НаименованиеТаблицы>

مثال استفاده:

Query.Text = "انتخاب | باقیمانده رایگان. نامگذاری، | باقیمانده رایگان. انبار، | باقیمانده رایگان. در انبار باقی مانده | FROM | ثبت تجمعات. باقیمانده های رایگان. باقیمانده ها به عنوان باقیمانده های رایگان باقیمانده ها | ثبت نام برای انباشت | FORCANGE | باقیمانده رایگان.

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

نحو: مرتب سازی بر اساس<НаименованиеПоля>سفارش خودکار

مثال استفاده:

Query.Text = "انتخاب | باقیمانده رایگان. نامگذاری AS نامگذاری، | باقیمانده رایگان. انبار به عنوان انبار، | باقیمانده رایگان باقیمانده. در انبار باقیمانده | از | ثبت تجمعات. باقیمانده های رایگان. باقیمانده به عنوان باقیمانده رایگان | نامگذاری | بازیابی سفارش خودکار"؛

10. گروه طراحی توسط- برای گروه بندی رشته های پرس و جو بر اساس فیلدهای خاص استفاده می شود. فیلدهای عددی باید با هر تابع جمعی استفاده شوند.

نحو: دسته بندی بر اساس<НаименованиеПоля1>, .... , <НаименованиеПоляN>

مثال استفاده:

Query.Text = "انتخاب | ProductsIn Warehouses.Nomenclature AS Nomenclature, | ProductsIn Warehouses. Warehouse, | SUM(GoodsIn Warehouses.InStock) AS Instock |FROM | RegisterAcumulations.ProductsIn Warehouses AS ProductsIn Warehouses AS B ProductsIn Warehouses AS ProductsIn Warehouses. s. انبار" ;

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

نحو: داشتن<агрегатная функция с условием>

مثال استفاده:

Query.Text = // رکوردهای گروه بندی شده را انتخاب می کند که در آن فیلد InStock بزرگتر از 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK.FROM | RegisterAccumStocksItem | گروه بر اساس | محصولات در انبارها. نامگذاری، | محصولات در انبارها. انبار | |موجود | مقدار(محصولاتدر انبارها.در انبار) > 3" ;

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

نحو: شاخص بر اساس<Поле1, ... , ПолеN>

مثال استفاده:

Query.Text = "انتخاب | Ts.NameOS، | Ts.FolderNumber، | Ts.CodeOS، | Ts.Term، | Ts.Type | PLACE DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS، | Ts .CodeOS"؛

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

نحو: جایی که<Условие1 ОператорЛогСоединения УсловиеN>

مثال استفاده:

Query.Text = //همه رکوردهای دارای CompensationRemaining انتخاب می شوند<>0 و //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, | CompensationRPORemains.Child, | CompensationRPORmains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains.AmountForCalcCompRemains.AmountForCalcCompRemains.AmountForCalcCompRemains.AmountForCalcCompRemains.AmountForCalcCompRemains.AmountForCalcCompRemains.AmountForCalcCompRemains.AmountForCalcCompRemains.PlaceCompRemains. ensationRPOstat ki |WHERE | جبران خسارتRPORemaining.CompensationRemaining<>0 | و CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

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

نحو: نتایج<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>توسط<ОБЩИЕ> <Поле1, ... , ПолеN>

مثال استفاده:

Request.Text = "انتخاب | محاسبات. قرارداد طرف قرارداد. نوع قرارداد به عنوان نوع قرارداد، | محاسبات. قرارداد طرف مقابل به عنوان قرارداد، | محاسبات. طرف مقابل، | محاسبات. مقدار موجودی تسویه متقابل به عنوان موجودی | FROM | ثبت انباشت. متقابل تسویه حساب با طرفین. موجودی ها به عنوان محاسبات | کل | مقدار (موجودی) | نرم افزار | GENERAL، | نوع قرارداد";

شکل گروه بندی هایی را نشان می دهد که در طول اجرای درخواست تشکیل شده اند، یکی از بالا به بخش GENERAL و دوم به قسمت Counterparty AgreementAgreement Type اشاره دارد.

در این مقاله به بررسی مبحث جداول تو در تو در زبان پرس و جو 1C می پردازیم.

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

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

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

و در آن قسمت جدولی "خدمات" را می بینیم.

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

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

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

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

بیایید روی OK در طراح کلیک کنیم و ببینیم درخواست ما چگونه خواهد بود.

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

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

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

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

بیایید ببینیم چنین درخواستی چگونه اجرا می شود.

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

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

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

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


&روی سرور
رویه FillOnServer()
درخواست = درخواست جدید;
درخواست. متن = "انتخاب کنید
| فروش محصول لینک
| فروش محصول.محصولات.(
| تولید - محصول،
| تعداد
|از
| سند. فروش محصولات نحوه فروش محصولات"
;
واکشی = پرس و جو اجرا کن(). انتخاب کنید()؛
انتخاب خداحافظ. حلقه بعدی ()
TopLine of the Tree = فروش محصولات. GetItems();
NewRow = TopRowTree. اضافه کردن()؛
خط جدید. پیوند = انتخاب ارتباط دادن؛
TableProducts = انتخاب. کالاها؛
SelectionProducts = TableProducts. انتخاب کنید()؛
در حالی که انتخاب محصولات. حلقه بعدی ()
TreeChildRow = NewRow. GetItems();
ProductRow = ChildTreeRow. اضافه کردن()؛
ProductString. لینک = انتخاب محصول تولید - محصول؛
ProductString. مقدار = SampleItems. تعداد ;
چرخه پایان
چرخه پایان
پایان رویه

اجازه دهید کد بالا را توضیح دهم.

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

و سپس جالب ترین چیز، حتی می توانید بعداً آن را در دیباگر خودتان نگاه کنید، ما به قسمت انتخاب محصولات می رویم و برای راحتی، این فیلد را در یک متغیر جداگانه در TableProducts بنویسید. این متغیر از نوع Query Result است. و شما به راحتی می توانید نمونه ای از این نتیجه را دریافت کنید. این کاری است که ما انجام می دهیم. باقی می ماند که این انتخاب را با استفاده از تابع بعدی و حلقه while دور بزنیم.

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

این نتیجه ای است که این کد باز خواهد گشت

هنوز سوالی دارید؟

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

کد تبلیغاتی برای 20% تخفیف: hrW0rl9Nnx

با اهدای هر مبلغی از پروژه من حمایت کنید

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