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

در آخرین مقاله خود، قبلاً نوشتم که 1C یک پلت فرم متناقض است. سیستم ترکیب داده ها یکی از این پارادوکس ها است. SKD برای طراحی گزارش های پیچیده طراحی شده است و شامل جایگزینی برنامه نویسی گزارش «دستی» با طراحی در یک جعبه ابزار چند منظوره است. فرصت استفاده از سیستم های کنترل دسترسیدر نسخه هشتم ظاهر شد، اما زمان زیادی طول کشید تا نسخه 8.2 ظاهر شود تا 1C بتواند از آن در محصولات استاندارد خود استفاده کند. از یک طرف، ACS یک جعبه ابزار چند منظوره است که با استفاده از آن می توانید گزارش های بسیار پیچیده ای را بدون یک خط کد ایجاد کنید. با این حال، سیستم کنترل دسترسی دارای یک مانع نسبتاً بالایی برای ورود است، یادگیری و استفاده کامل از آن "به یکباره" بسیار دشوار است، زیرا رابط کاربری کاملاً شهودی نیست، اما بیشتر است. کتابچه های راهنمای کاملاستفاده فقط در قالب ادبیات پولی در دسترس است.

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

درخواست = درخواست جدید(
"انتخاب کنید
| جدول.نامگذاری،
| جدول.انبار
|از
| جدول &TK AS")؛
Request.SetParameter("TZ"، TZ);

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

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

اجازه دهید مشکل را تا یک مثال به تفصیل بیان کنیم. یک گزارش استاندارد وجود دارد: صورت های حقوق و دستمزد برای سازمان پیکربندی ZiK 8. لازم است که انواع محاسبات در گزارش به گروه های خاصی گروه بندی شوند. محاسبه مکاتبات View-Group در یک جدول مقادیر خارجی ذخیره می شود. برای بارگذاری آن در طرح چیدمان داده اصلی، یک "شیء مجموعه داده" با نام "گروه ها" ایجاد می کنیم (شکل 2). ما با "مجموعه داده های پرس و جو" - "اقلام تعهدی" بر اساس نوع محاسبه ارتباط برقرار می کنیم (شکل 3). در "مجموعه داده درخواست" - "اقلام تعهدی" اطلاعاتی برای گروه ها وجود دارد، ما همه ورودی ها را حذف می کنیم. پس از آن، در تب "تنظیمات" می توانیم از فیلد "گروه" استفاده کنیم که مقدار آن از یک منبع داده خارجی بارگیری می شود (شکل 4). در تابع تولید گزارش، بارگذاری داده های خارجی را تکمیل می کنیم.

تابع GenerateReport (نتیجه = تعریف نشده، داده های رمزگشایی = تعریف نشده، OutputInReportForm = درست) صادرات

//به دست آوردن یا تشکیل جدول مورد نیاز از مقادیر "Groups" و نوشتن آن در متغیری به همین نام

ExternalData = New Structure();//ساختار داده خارجی را ایجاد و پر کنید
ExternalData.Insert(Groups);

UserPanelValue = TypicalReports.GetUserPanelSettingsValuesofObject(ThisObject);
DefaultSettings = SettingsComposer.GetSettings();
TypicalReports.GetAppliedSetting(ThisObject);
TypicalReports.GenerateTypicalReport(This Object, Result, Decryption Data, OutputToReportForm, ExternalData);
SettingsLinker.LoadSettings(DefaultSetting);
نتیجه بازگشت؛

EndFunction

اگر از ابتدا گزارشی می‌سازیم، کد راه‌اندازی تولید گزارش به این صورت خواهد بود:

ExternalDataSets = ساختار جدید.
ExternalDataSets.Insert("Groups", Groups); //گروه ها - جدول مقادیر مورد نظر
DataCompositionSchema = GetLayout("MainDataCompositionSchema"); //طرح ما با نمودار جریان داده
تنظیمات = DataCompositionScheme.DefaultSettings;
LayoutLinker = newDataLayoutLayoutLinker;
LayoutLayout = LayoutComposer.Execute(DataLayoutSchema, Settings);
DataCompositionProcessor = newDataCompositionProcessor;
DataCompositionProcessor.Initialize(LayoutLayout, ExternalDataSets);
TabDoc = سندجدول جدید;
OutputProcessor = New OutputProcessorDataCompositionResultInTabularDocument;
OutputProcessor.SetDocument(TabDoc);
OutputProcessor.Output(DataCompositionProcessor);

بخوانید 9660 یک بار

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

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

عناصر نحوی پسوند زبان پرس و جو سیستم ترکیب داده

انتخاب کنید

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

به عنوان مثال:

(انتخاب کالا، انبار)

بعد از نام مستعار فیلد ممکن است ترکیبی از کاراکترهای ".*" وجود داشته باشد که امکان استفاده از فیلدهای فرزند از این فیلد را نشان می دهد.

به عنوان مثال، ورودی Nomenclature.* امکان استفاده از فیلدهای فرزند فیلد "Nomenclature" را نشان می دهد (به عنوان مثال، قسمت "Nomenclature.Code"). عنصر SELECT فقط می تواند در اولین درخواست پیوستن ظاهر شود.

کجا

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

(WHERE نامگذاری.*، انبار)

یک مثال ساده

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

برای حل مشکل، می توانید یک پرس و جو ایجاد کنید که مورد و جدول گردش فروش را با یک پیوست سمت چپ به هم متصل کند، در نتیجه برای کالایی که در دوره انتخاب شده فروخته نشده است، مقادیر فیلد را دریافت می کنیم طرف مقابل, توافقنامه, مقدار, مجموع= پوچ این درخواست:

SELECT ReferenceNomenclature.Link AS Nomenclature, SalesTurnover.Counterparty, SalesTurnover.Counterparty توافقنامه, SalesTurnover.QuantityTurnover AS Quantity, SalesTurnover.CostTurnover AS Cost FROM Reference.NomenclatureSTurnovers نرم افزار AS SalesTurnover SprNomenclature.Link = SalesTurnover. نامگذاری

نتیجه این است:

طرف مقابل توافقنامه نامگذاری مقدار مجموع
تهی تهی _تست 1 تهی تهی
LLC "شاخ و سم" توافقنامه 1 دمپایی 10 1200
OJSC "گازپروم" قرارداد باحال چکمه 5 13000
تهی تهی گالوش ها تهی تهی
تهی تهی تخته سنگ تهی تهی

در این مثال، هیچ فروشی از اقلام وجود نداشت: "کفش" و "دمپایی"

و همه چیز خوب خواهد بود، اگر نمونه را بر اساس طرف مقابل گروه بندی کنیم، تمام اقلام فروخته نشده در یک گروه جداگانه قرار می گیرند که در آن Counterparty = Null، اما مشتری می خواهد یک انتخاب تصادفی در گزارش توسط فیلد طرف مقابل داشته باشد (طبیعاً، این یعنی طرف مقابل از ثبت فروش). چه کار کنم؟ پس از همه، در واقع، ما فقط باید جدول را فیلتر کنیم فروش. اگر از تکمیل خودکار در سازنده ACS استفاده کنیم، فیلدهای انتخابی موجود شامل فیلد خواهند بود طرف مقابل، به نظر می رسد همه چیز خوب است، اما هنگام اجرای گزارش با انتخاب طرف مقابل، همه رکوردهای ارتباط با مورد را از دست خواهیم داد. به عنوان مثال، بیایید انتخاب را تنظیم کنیم: طرف مقابل = LLC "شاخ و سم". نتیجه به این صورت خواهد بود:

اصلاً چیزی نیست که ما نیاز داریم، درست است؟

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

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

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


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

SELECT Reference Nomenclature.Link AS Nomenclature, SalesTurnover.Counterparty AS Counterparty, SalesTurnover.Counterparty AS توافقنامه طرف مقابل, SalesTurnover.QuantityTurnover AS >Quantity, SalesTurnover.SalesTurnoverAStTurnoverTurnover AS ContractController agentIntroduction, RepresentationLINK (SalesTurnover. Counterparty) AS CounterpartyIntroduction, SprNomenclature.Presentation AS NomenclaturePresentation FROM Directory.Nomenclature AS SprNomenclature LEFT CONNECTION ثبت نام تجمعات.فروش. گردش مالی(&P , , , , Counterparty nover.Nomenclature

و بر این اساس نتیجه:

طرف مقابل توافقنامه نامگذاری مقدار مجموع
تهی تهی _تست 1 تهی تهی
LLC "شاخ و سم" توافقنامه 1 دمپایی 10 1200
تهی تهی چکمه تهی تهی
تهی تهی گالوش ها تهی تهی
تهی تهی تخته سنگ تهی تهی

Test1 گروهی در فهرست نامگذاری است که همه چیز در آن قرار دارد

ضمیمه شده به نشریه، طرح XML گزارش مورد استفاده در نشریه است. من مدار را در اتوماسیون مجتمع ایجاد کردم، اما فکر می کنم همه چیز در UPP و UT 10 به خوبی کار می کند.

جمع بندی

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

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

نرم افزار استفاده شده

  • برنامه اسکرین شاتSnimOK!
  • ویرایشگر فایل XML

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

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

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

سیستم ترکیب داده 1C 8.3 برای مبتدیان: اتصال مجموعه داده ها

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

یک گزارش جدید ایجاد کنید

پایگاه داده "Gastronom" را در پیکربندی باز کنید و یک گزارش جدید از طریق منوی اصلی ایجاد کنید:

نوع سند - "گزارش خارجی":

در قالب یک گزارش جدید، نام "درس 6" را مشخص کنید و روی دکمه "باز کردن نمودار ترکیب داده ها" کلیک کنید:

نام طرح پیش فرض را بگذارید:

اضافه کردن اولین مجموعه داده

در نموداری که باز می شود، به برگه "مجموعه داده ها" بروید و "Add data set - query" را با استفاده از علامت سبز سبز انتخاب کنید:

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

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

افزودن مجموعه داده دوم

مجموعه دومی از داده ها را اضافه کنید:

آن را انتخاب کنید (DataSet2) و دوباره سازنده query را فراخوانی کنید:

ما جدول دایرکتوری "غذا" و فیلدهایی را که باید از درخواست بدست آورید را نشان می دهیم:

متن درخواست حاصل این بود:

لطفاً توجه داشته باشید که ما اکنون دو مجموعه داده در گزارش داریم: Data Set1 و Data Set2. هر کدام متن و داده های درخواست خود را دارند.

توصیفی تر کردن نام ها

برای وضوح، اجازه دهید DataSet1 را به Customers و DataSet2 را به Food تغییر نام دهیم.

این کار را با دوبار کلیک کردن روی هر یک از مجموعه ها انجام دهید:

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

در در حال حاضرمجموعه "مشتریان" دارای فیلدهای زیر است: "Name" و "FavoriteColor" و مجموعه "Food" دارای: "Name" و "Color" است.

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

مجموعه “Clients” را انتخاب کنید و نام فیلدها را به این صورت تغییر دهید:

سپس مجموعه "غذا" را انتخاب کنید و نام فیلدها را به این صورت تغییر دهید:

فراخوانی سازنده تنظیمات

در نهایت، به تب "تنظیمات" بروید و روی چوب جادویی کلیک کنید تا طراح تنظیمات ظاهر شود:

نوع گزارش - "فهرست...":

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

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

بررسی گزارش

ما گزارش را ذخیره می کنیم و آن را در حالت کاربر تولید می کنیم:

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

اما از بین تمام این رکوردها باید فقط آنهایی را بگذاریم که فیلد "Customer's FavoriteColor" برابر با فیلد "FoodColor" است:

ما دو مجموعه داده را به هم وصل می کنیم

برای انجام این کار، دو مجموعه داده (مشتریان و غذا) را با استفاده از فیلدهای Customer FavoriteColor و FoodColor به هم متصل می کنیم.

به تب "پیوندهای مجموعه داده" بروید و روی دکمه مثبت کلیک کنید تا یک پیوند جدید اضافه کنید:

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

یه توضیحی میدم

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

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

بیان گیرنده.ما در اینجا یک عبارت یا به سادگی یک فیلد از مجموعه داده های گیرنده را نشان می دهیم (ما فیلد ColorFood را از مجموعه غذا در اینجا نشان دادیم).

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

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

عالیه

در مورد رشته توضیح میدم" شرایط ارتباطی"، که برنامه نویسان مبتدی اغلب به نیزه های خود ضربه می زنند.

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

در این صورت، برای تمام ردیف‌های منبع پیوند، این عبارت (شرایط پیوند) قبل از ایجاد پیوند بررسی می‌شود. و اگر این عبارت TRUE باشد، سعی می شود بین این سطر و سطرها از گیرنده پیوند پیوند برقرار شود. اگر عبارت FALSE باشد، چنین تلاشی انجام نخواهد شد.

نحوه کار کردن