1c تنظیمات فرم استاندارد را تنظیم کنید. انتخاب ها در گزارش ها تفاوت های ظریف سازنده تنظیمات. راه اندازی فرم ها و کار با لیست ها

زیرسیستم در 1C 8.3- یک شی درخت ابرداده که مسئول ساخت رابط فرمان پیکربندی است.

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

واقعیت این است که نسخه 8.1 (و همچنین یک برنامه معمولی 8.2) همچنین دارای زیرسیستم هایی بود، اما آنها اهداف کاملاً متفاوتی را دنبال می کردند، به احتمال زیاد برای توسعه دهنده تا کاربر. با استفاده از زیرسیستم ها در 8.1، عملکردهای مختلف معمولاً از هم جدا می شدند. زیرسیستم ها همچنین هنگام ترکیب پیکربندی های مختلف 1C کمک کردند - می توان تعیین کرد که کدام سیستم را منتقل کند.

زیرسیستم های 1C و رابط برنامه نویس

در نسخه های 8.3 و 8.2، زیرسیستم ها ابزار اصلی برای ساخت رابط کاربری فرمان هستند. زیرسیستم هایی که اشیاء فراداده دارند ساختار سلسله مراتبیبرای پیکربندی یک "زیر منو" در رابط، باید یک زیرسیستم فرعی اضافه کنید:

خواص و تنظیمات

بیایید به تنظیمات و ویژگی های زیرسیستم ها در پیکربندی نگاه کنیم:

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

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

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

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

روی زبانه گزینه های کاربردیفهرستی از گزینه های کاربردی را نشان می دهد که این زیر سیستم در آنها استفاده می شود.

Tab ترکیبمجموعه ای از اشیاء فراداده را که در یک زیرسیستم معین شرکت می کنند تعریف می کند.

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

اگر گزارش یا پردازشی در رابط مدیریت شده نمی بینید

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

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

دلیل دوم این است که در برگه Commands شی، چک باکس "استفاده از دستورات استاندارد" انتخاب شده است. این به این دلیل است که برای باز کردن پردازش، یا می توان رویه خود را توصیف کرد، یا می توان از یک استاندارد استفاده کرد:

این مقاله مجموعه "اولین گام ها در توسعه 1C" را ادامه می دهد.

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

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

قابلیت کاربرد

این مقاله رابط مدیریت شده را در نسخه "نسخه 8.2" پیکربندی توسعه یافته بر روی پلت فرم 1C 8.3.4.482 مورد بحث قرار می دهد.

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

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

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

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

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

پس از کلیک بر روی این دستور، پنجره "تنظیمات فرم" ظاهر می شود.

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

می توانید ترتیب جزئیات را تغییر دهید. یک گروه جدید اضافه کنید و برخی از جزئیات (عناصر) را در آن قرار دهید و گزینه ای را برای گروه بندی آنها (افقی، عمودی) تعریف کنید.

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

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

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

به عنوان مثال داشتن یک ویژگی نوع مرجع در فرم طرف مقابل، می توانید اضافه کنید فرد تماس، اگر این تکیه گاهدر فهرست "Counterparties" موجود است.

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

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

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

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

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

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

انتخاب را می توان با استفاده از چندین فیلد انجام داد. در این حالت به صورت پیش فرض انتخاب مطابق با شرط AND کار می کند همچنین می توانید از شرایط OR و NOT استفاده کنید.

برای استفاده از شرط OR (NOT)، باید گروه مناسب (OR Group، NOT Group) را با استفاده از دستور Group Conditions اضافه کنید.

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

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

شکل بعدی نحوه انجام گروه بندی را نشان می دهد.

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

شکل، نتیجه طراحی مشروط زمینه زمینه را نشان می دهد مجموع.
زمانی که مبلغ بیش از 100000 باشد.

لازم به ذکر است که امکان مشاهده دایرکتوری ها در حالت سلسله مراتبی وجود دارد.

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

همچنین می توان گروه بندی عناصر دایرکتوری خود را با جزئیات خاص پیکربندی کرد.

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

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

اشیاء موجود در لیست با نگه داشتن کلید انتخاب می شوند تغییر مکانیا Ctrl.

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

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

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

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

این با لیست ها و راه های پیکربندی آنها به پایان می رسد. در مقاله بعدی در ادامه با رابط کاربری آشنا می شویم و به ابزاری مناسب برای اطلاع رسانی به کاربر می پردازیم که قبلا در مورد آن صحبتی نکرده ایم. این چه نوع ساز است؟ :)

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

علاقه مندان می توانند قسمت های 1-4 را رد کرده و مستقیماً به سراغ نمونه ها بروند.

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

SP 8.3.6 و بالاتر، بخش های ITS (بند 10.3.7.5 و غیره)، کتاب "توسعه حرفه ای در سیستم 1C-Enterprise 8" (کازان، 2012، جلد دوم) استفاده شده است. در کتاب E. Khrustaleva اصلاً هیچ چیز قابل درک در مورد این موضوع وجود نداشت.

قسمت 1

همانطور که می دانید سازنده تنظیمات دارای مجموعه های "تنظیمات"، "تنظیمات ثابت" (از این پس "FN") و "تنظیمات سفارشی" (از این پس "CU") است. یک گزارش می تواند چندین گزینه داشته باشد و ارتباط بین گزینه، N، PN و FN بسیار منحصر به فرد است. همچنین منبع را فراموش نکنیم تنظیمات موجودو "جد" آن، که معمولاً خود مدار است که تنظیمات پیش فرض خود را نیز دارد.

* تنظیمات - تنظیمات ایجاد شده در حالت Configurator و تغییر در حالت ویرایش نسخه گزارش.

* تنظیمات کاربر - تنظیماتی که کاربر در حالت "1C: Enterprise" صرفاً از طریق رابط تغییر می دهد.

* FixedSettings - تنظیماتی که از زبان داخلی تنظیم شده اند، از جمله. به طور ضمنی توسط سیستم تنظیم می شوند. این ویژگی حاوی مقادیر انتخابی است که با استفاده از پارامترهای آن (ساختار "انتخاب") به فرم منتقل می شود.

تنظیمات و FNها از نظر طراحی مشابه هستند و دارای یک مجموعه "انتخاب" از نوع "انتخاب ترکیب داده ها" هستند که برای تغییر ترکیب در هر زمانی در طول وجود گزارش موجود است. در همان زمان، تنظیمات برای تغییرات رابط از طریق ویرایش یک نوع در دسترس هستند، اما FN ها اصلا قابل دسترسی نیستند. PN به نوبه خود یک "فرنی" است، که در آن عناصر مساوی می توانند هم خود "انتخاب" و هم اشیاء جداگانه از نوع "عنصر انتخاب ترکیب داده" (به اصطلاح شی تودرتو) باشند. علیرغم در دسترس بودن روش‌های مناسب، تغییر برنامه‌ای ترکیب مجموعه‌ای از عناصر PN غیرممکن است اگر اینها PN‌های خود گزارش باشند و توسط طراح "از ابتدا" ساخته نشده باشند - 1C گزارش خواهد کرد که "مجموعه کاربر تنظیمات نمی‌توانند ترکیب آن را تغییر دهند، زیرا با داده‌های تنظیمات طرح‌بندی مرتبط است." ITS می گوید: «این ویژگی با استفاده از زبان داخلی قابل نوشتن نیست.»، اما همانطور که بعدا خواهیم دید، امکان تأثیرگذاری بر PN وجود دارد. «فرنی» اشیاء دارد ارتباطات داخلی- برای سازگاری شرایط هنگام ایجاد گزارش و زمانی که ترکیب تغییر می کند بررسی می شود. در ITS می خوانیم: «عناصری که خودشان به عنوان سفارشی علامت گذاری شده اند اضافه نخواهند شد. به عنوان مثال، یک انتخاب سفارشی شامل عنصر انتخابی که به عنوان سفارشی علامت گذاری شده است، نخواهد بود. عناصر حاوی عناصر سفارشی اضافه نخواهند شد. به عنوان مثال، اگر گروه دارای عناصری باشد که به عنوان سفارشی علامت گذاری شده اند، گروه شرط اضافه نخواهد شد. برای عناصر تو در تو، ویژگی DisplayMode تجزیه و تحلیل نمی شود. آنها اضافه می شوند یا اضافه نمی شوند عناصر والد" بنابراین، "قدمت" اشیا در پشت صحنه عمل می کند. در این مورد، زمانی که رابط به شما اجازه می دهد انتخاب های متناقضی را برای یک نوع و PN آن و همچنین در داخل PN تعیین کنید، می توانید یک افکت دریافت کنید.

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

با کلیک بر روی "انتخاب گزینه..." و تایید تغییرات در فرم باز شده، رویدادها به ترتیب زیر فعال می شوند:

هنگام آپلود Option در سرور

هنگام به روز رسانی ترکیب تنظیمات کاربر در سرور

در این حالت نه گزینه و نه PN به هیچ وجه تغییر نمی کند. از اینجا مشخص است که گزینه و تنظیمات در صورت اتصال به هیچ وجه مستقیماً به هم متصل نیستند.

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

با کلیک بر روی "بیشتر"/"تنظیم تنظیمات استاندارد" در فرم تنظیمات (و همچنین مورد "تنظیمات استاندارد" در ویرایش گزینه) فقط رویداد را راه اندازی می کند. هنگام به روز رسانی ترکیب تنظیمات کاربر در سرور. در این حالت، گزینه تغییر می کند، اما PN تغییر می کند. اگر این گزینه قبلا تغییر کرده بود، تغییر باقی می ماند (نه پرچم تغییر یافته بازنشانی می شود و نه تنظیمات واقعی بازنشانی می شود).

با کلیک بر روی "ویژگی های یک عنصر تنظیمات سفارشی" در درخت ساختار در فرم ویرایش متغیر، یک شی "انتخاب" اضافه می شود، و خالی می شود و به هیچ وجه با انتخاب نوع موجود و عناصر انتخاب تودرتوی موجود همگام نمی شود. نوع به هیچ وجه تغییر نمی کند.

از این رو توصیه می شود: اگر نیاز دارید که انتخاب های خاصی را در حالت "Configurator" تنظیم کنید، به طوری که کد را به هم نزنید و به طوری که آنها در گزینه نباشند، اما در رابط گزارش باشند، نباید انتخاب را دستکاری کنید. عناصر گزینه، تغییر ویژگی های آنها، اما خود انتخاب، با استفاده از دکمه های "Element Properties..." و "Custom Settings".

افزودن چیزی که در تنظیمات به PN نشان داده می‌شود به اقداماتی در کد یا رابط نیاز دارد، اما حذف و پاک کردن تنظیمات بر روی PN بلافاصله و بدون هیچ به‌روزرسانی تأثیر می‌گذارد، به عنوان مثال:

Report.SettingsLitter.Settings.Selection.Items.Clear();

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

یادداشت:

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

هنگام افزودن یک انتخاب در فرم "تغییر گزینه"، بلافاصله با مجموعه پرچم "Include in PN" انجام می شود، اما، تکرار می کنم، از نظر زبان داخلی، PN بدون تغییر باقی می ماند.

تنظیم تغییر یک نوع و تنظیم تغییر PN ارتباط مستقیمی با هم ندارند؛ اینها دو جهت متفاوت از تغییرات هستند.

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

علیرغم بیانیه در سرمایه گذاری مشترک، PN ها کاملاً در xml سریالی هستند.

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

فرم پیش فرض برای ویرایش نسخه گزارش شامل موارد جالب زیادی است، اما هیچ جا با FN و PN کار نمی کند و حتی با تنظیمات اولیه بیشتر برای خواندن کار می کند (به جز اینکه انتخاب، ترتیب، قراردادها را پاک می کند).

قسمت 2

کار با Settings و FN از طریق مجموعه آنها تقریباً همیشه قابل قبول است، اما مهم است که به یاد داشته باشید که ماهیت "سطح سوم" در حال تغییر است. سطح اول همیشه شامل تنظیمات پیش فرض خود سیستم کنترل دسترسی است؛ آنها همچنین به طور ضمنی در منبع تنظیمات موجود ظاهر می شوند. در سطح دوم - تنظیمات گزینه مورد استفاده. اما در اینجا منطق به شما این امکان را می دهد که دستورالعمل های اساسی را "بازنویسی" کنید یا آنها را نادیده بگیرید. اما کار با PN دیگر اجازه آزادی را نمی دهد و دستکاری های ظریف باید با استفاده از روش های خاص و گاهی اوقات اشیاء واسطه کمکی موقت انجام شوند، برای مثال:

Comp=NewDataCompositionSettingsComposer; // همچنین می توانید // comp.Initialize(SomeSettingsComposer.GetSourceofAvailableSettings()) را شروع کنید. comp.LoadSettings(SomeSettingsComposer.Settings); SomeSettingsComposer.LoadCustomSettings(comp.CustomSettings);

سازنده تنظیمات یک روش دارد ()، که مقادیر تنظیمات کاربر را که به عنوان پارامتر به روش ارسال شده بارگیری می کند. روش GetSettings() به شما امکان می دهد یک کپی از تنظیمات فعلی (با در نظر گرفتن تنظیمات کاربر) دریافت کنید. روش تنظیمات دانلود() تنظیمات تصویب شده را در سازنده تنظیمات بارگیری می کند (تنظیمات کاربر نیز بر اساس داده های ارسال شده با در نظر گرفتن وجود کلیدها مجدداً جمع می شوند، به مثال زیر مراجعه کنید).

اعمال تنظیمات سفارشی به تنظیمات اصلی در روش انجام می شود GetSettings() سازنده تنظیمات. اقدامات زیر انجام می شود:

* برای انواع DataCompositionSelectionElement، محتویات عناصر به عناصر تنظیمات سفارشی مربوطه کپی می شود.

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

* برای انواع DataCompositionSelectionElementGroup، ویژگی Usage در عنصر مربوطه تنظیمات اصلی (بر اساس علامت استفاده از عنصر PN) تنظیم می شود.

قسمت 3

هنگام تشکیل تنظیمات نهایی، برای نقل قول ITS، تنظیمات مختلف به شرح زیر ترکیب می شوند:

* اگر هر نوع تنظیماتی کاملاً به عنوان سفارشی علامت‌گذاری شده باشد، تنظیمات حاصل شامل PN می‌شود. در این حالت، اگر هر یک از عناصر تنظیمات به عنوان غیرقابل دسترس علامت‌گذاری شود، این تنظیمات در تنظیمات حاصل از ویژگی Settings Composer.Settings قرار می‌گیرند.

* اگر هر نوع تنظیماتی نه به طور کامل، بلکه عنصر به عنصر به عنوان سفارشی علامت‌گذاری شود، عناصری که به‌عنوان سفارشی علامت‌گذاری شده‌اند در تنظیمات حاصل از ویژگی Settings Composer.CustomSettings وارد می‌شوند و عناصری که به‌عنوان غیرقابل دسترس علامت‌گذاری شده‌اند در تنظیمات حاصل از ویژگی Settings Composer.Settings.

* تنظیمات ثابت به تنظیمات حاصل "همانطور که هست" اضافه می شود. در این حالت، زمانی که FN و PN تنظیماتی به یک نام داشته باشند، وضعیت غیرقابل قبول است، به عنوان مثال، انتخاب با همان مقدار سمت چپ در شرایط. متذکر می شوم که حتی همزمانی کامل تمام خواص این شرایط ممنوع است. راستش کمی غیر منطقی است.

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

قسمت 4.

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

پارامتر "Source of AvailableSettings" هنگامی که فرم در سرور ایجاد می شود به طور خودکار به اطلاعات سازنده ترجمه می شود و نمی توان آن را لغو کرد. یا بهتر است بگوییم، می تواند، اما این تنها پس از تعریف مجدد کامل از کل زنجیره اشیاء مرتبط، تأثیر می گذارد. که در آن GetSourceAvailableSettings() تا پایان تمام رویدادهای باز کردن فرم، Undefined را برمی‌گرداند.

اجازه دهید توجه داشته باشم که پارامترهای فرم، که اساساً پارامترهای کلیدی نیستند، در صورت تنظیم پرچم شکل‌گیری هنگام باز کردن، تأثیر خود را روی چندین رویداد «کشش» می‌دهند. بله، در رویداد ProcessingCheckFillOnServer، در هنگام باز کردن و تشکیل فراخوانی می شود، پارامتر "انتخاب" در دسترس خواهد بود، اما با آن، اما به سادگی با کلیک کاربر روی دکمه "Generate" فراخوانی می شود، دیگر در دسترس نخواهد بود. این به این دلیل است که همه این رویدادها در یک "بازدید" به سرور پردازش می شوند، در صورتی که تشکیل هنگام باز کردن فعال باشد، و فقط در انتهای آنها کنترل به مشتری منتقل می شود و فراخوانی می شود. هنگام باز شدن. در این حالت، پارامترهای غیر کلیدی به طور طبیعی از بین می روند.

ترتیب کلی اجرای رویدادها هنگام باز کردن یک فرم با پرچم برای ایجاد گزارش در هنگام باز کردن (کمی بیشتر از آنچه در "توسعه حرفه ای" توضیح داده شده است):

وقتی CreatedOnServer

قبل از آپلود گزینه در سرور

هنگام آپلود Option در سرور

قبل از آپلود تنظیمات کاربر در سرور

هنگام بارگیری تنظیمات کاربر در سرور

هنگام به روز رسانی ترکیب تنظیمات کاربر در سرور

ProcessingCheckFillOnServer

هنگام باز شدن

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

قسمت 5.

حالا بیایید کار باز کردن یک فرم گزارش را با ساخت و انتخاب از پیش تعیین شده با جزئیات بیشتری بررسی کنیم. اطلاعات مختصراطلاعاتی در این مورد در ITS و in وجود دارد توصیه های روش شناختی، اما فقط خود اصل در آنجا پوشیده شده و ظرافت ها آشکار نمی شود. بنابراین، برای فراخوانی متنی یک گزارش، باید پارامتر "GenerateOnOpen" را به شکل آن، برابر با True ارسال کنید. و پارامتر Selection حاوی ساختار. کلیدهای ساختار نام فیلدهای ACS یا پارامترهای ACS هستند و مقادیر مقادیر آنها هستند. به نقل از SP، اگر یک پارامتر ACS با نامی مطابق با نام کلید ساختار وجود داشته باشد، مقدار روی آن تنظیم می شود. اگر پارامتری وجود نداشته باشد، اما یک فیلد وجود داشته باشد، یک انتخاب به این قسمت اضافه می شود. در عین حال، اگر پارامتر و فیلدی به همین نام وجود داشته باشد، سیستم به سادگی آن را نادیده می گیرد و چیزی را نصب نمی کند.

"توسعه حرفه ای" نمونه ای از تغییر (به عنوان مثال رهگیری و پیکربندی مجدد) PN "در حال پرواز" در یک رویداد را ارائه می دهد. قبل از آپلود تنظیمات کاربر در سرور، جایی که آرگومان حاوی PN فعلی ارسال می شود. در واقع، همیشه اینطور نیست - برای مثال، ممکن است مواردی وجود داشته باشد که خطا در ذخیره PN در جلسه قبلی، یا ناسازگاری بین تنظیمات، FN و PN منجر به خالی بودن آرگومان «تنظیمات» شود. و جالب‌ترین چیز این است که پیکربندی مجدد آن در این رویداد امکان‌پذیر نخواهد بود؛ این کار را فقط می‌توان در "پایان" دنباله رویدادها، یعنی در رویداد انجام داد. ProcessingCheckFillOnServer.

بیایید قبل از بارگذاری PN روی سرور ببینیم چه چیزی داریم.

برای یک مورد ساده، زمانی که هیچ چیز در ACS از پیش تنظیم نشده است و هیچ عنصری در PN گنجانده نشده است، وضعیت به شرح زیر است: تنظیمات - خالی. FN - شامل انتخاب صحیح است. دوشنبه حاوی یک انتخاب خالی است. شکل دهی به درستی کار می کند، اما از دیدگاه کاربر، رابط با داخلی ها در تضاد است و دلسرد کننده است - انتخاب کار می کند، اما قابل مشاهده نیست. به همین ترتیب، اگر Selection را در PN در تنظیمات ساختار گزینه فعال کنید، گزارش نیز با در نظر گرفتن انتخاب ساخته می شود، اما کاربر نیز هیچ انتخابی را نمی بیند.

بیایید پیش انتخاب ها (برابر مقادیر خالی) را در تنظیمات ACS در Configurator تنظیم کنیم و آنها را در PN قرار دهیم. در تئوری، FN ها باید تنظیمات را پر کنند، و آن ها باید PN را پر کنند، اما در واقع ما داریم: در تنظیمات - انتخاب با عنصر مورد نیاز، اما مقدار سمت راست خالی، FN ها حاوی انتخاب صحیح هستند و PN ها هنوز چیزی ندارند. علاوه بر این، در این مورد گزارش ساخته نخواهد شد، زیرا با وجود مقدار ارسال شده در پارامتر Select، مقدار انتخاب سمت راست خالی است.

تلاش برای کار با عناصر PN نیز نتیجه ای ندارد. برای عنصر PN، فقط می‌توانید پرچم «استفاده» و مشارکت در «سریع» را تغییر دهید. مقدار انتخاب در رابط خالی خواهد بود، سیستم هیچ خطایی ایجاد نمی کند. به طور مشابه، تلاش برای کار با PN Selection نیز جواب می‌دهد؛ در اشکال‌زدا، مقدار درست همانطور که به درستی پر شده است قابل مشاهده است، اما چیزی در رابط مشاهده نخواهید کرد. اجازه دهید یادآوری کنم که تغییر ترکیب PN غیرممکن است. بنابراین، ترفندهای اضافی مورد نیاز است. مثلا:

&در رویه سرور SetPresetSelections(UserSettings) اگر نه Parameters.Property("Selection") سپس EndIf را برگردانید. If Parameters.Selection.Quantity()=0 سپس EndIf را برگردانید. rTypeEO=Type("Element Selection DataComposition"); برای هر کلید From Parameters.Selection Loop pField=NewDataCompositionField(key.Key); // اگر (ValueType(kiz.Value)=Type("Array") orValueType(kiz.Value)=Type("ValueList")) و kiz.Value.Quantity()>1 سپس pViewComparison=DataCompositionComparisonType.InList; در غیر این صورت pComparisonType=DataCompositionComparisonType.Equals; endIf; // pNecessarySelection = Undefined; // ببینید آیا در تنظیمات کاربر Selection وجود دارد pNecessaryEO=Undefined; // ببینید آیا یک عنصر انتخاب جداگانه DataComposition در تنظیمات کاربر برای هر elnastr از UserSettings وجود دارد. چرخه عناصر If TypeValue(elnastr) = Type("DataComposition Selection") and pNecessarySelection=Udefined سپس // فقط یک pNecessarySelection= می تواند وجود داشته باشد. elnastr; // این را می توان خارج از حلقه انجام داد، اما لازم است که از طریق تنظیمات کاربر به خاطر عناصر مرتب شود... در غیر این صورت، اگر TypeZnch(elnastr) = pTypeEO سپس // این یک عنصر انتخاب است، می تواند بسیاری از موارد وجود داشته باشد. آنها را، اما ما علاقه مند به مواردی هستیم که مقداردهی اولیه نشده باشند یا دارای فیلد لازم هستند If elstr.LeftValue=pField یا elstr.LeftValue=Undefined و rNeedEO=Undefined سپس pNeedEO=elstr; endIf; endIf; چرخه پایان // If pRequiredSelection<>Undefined سپس // به عنوان اولویت می رود pNecessaryEOFromSelection = Undefined; برای هر elotb از چرخه pNecessarySelection.Elements اگر elotb.LeftValue=pField سپس pNecessaryEOfromSelection=eloteb; لغو EndIf. چرخه پایان اگر pNecessary EO from Selection = Undefined سپس pNecessary EO from Selection = pNecessary Selection.Elements.Add(pType of EO); pNeedEOFromSelection.LeftValue=pField; endIf; pNecessaryEOfromSelection.ComparisonType=pComparisonType; pNecessaryEOFromSelection.RightValue=kiz.Value; pNecessaryEOFromSelection.Use=True; // rNeededEO.Use=False; OtherwiseIf pNecessarySelection=Udefined و pNecessaryEO<>تعریف نشده سپس // روی عنصر pNecessaryEO.LeftValue=pField قرار دهید. pNecessaryEO.ComparisonType=pComparisonType; pNeedEO.RightValue=kiz.Value; pNeedEO.Use=True; endIf; pNeed=تعریف نشده; برای هر elotb از Report.ComposerSettings.Settings.Selection.Elements Loop // به روشی دوستانه، باید یک جستجوی بازگشتی وجود داشته باشد! اگر TypeValue(elotb)=pTypeEO و elotb.LeftValue=pField سپس pNeed=elotb; لغو EndIf. چرخه پایان اگر pNeed = Undefined سپس pNeed = Report.Settings Composer.Settings.Selection.Elements.Add(pEOType); pNeed.LeftValue=pMargin; endIf; pNecessary.ComparisonType=pComparisonType; pNeed.RightValue=kiz.Value; pNeed.Use=True; //EndCycle; Report.Settings Composer.FixedSettings.Selection.Items.Clear(); // در غیر این صورت گفته می شود که عناصر با پایان رویه تلاقی دارند/تضاد دارند

صحیح ترین راه برای فراخوانی این است:

&روی روی سرور پردازش پر کردن بررسی ها در سرور (نقص، جزئیات بررسی شده) انتخاب های از پیش تعریف شده را تنظیم کنید (گزارش. پیوند دهنده تنظیمات. تنظیمات کاربر). پایان رویه

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

&OnClient Procedure OpenReport(Command) If ValueFilled(Object.Link) سپس ot=New Structure("LinkToDirectory",Object.Link); // به این ترتیب نام فیلد در گزارش SDS نامگذاری شده است Form Parameters = New Structure ("Selection, GenerateWhen Opening", select, True); OpenForm("Report.Report1.Form.ReportForm",FormParameters,ThisForm); endIf; پایان رویه

قسمت 6.

در صورت لزوم، هنگام کار با آن، تنظیمات گزارش را تغییر دهید. چه در هنگام راه اندازی و چه پس از باز کردن، صحیح ترین راه این است که "از ابتدا" تغییر دهید، یعنی. از تنظیمات ACS تغییر طرح ACS فقط با شی گزارش (یا گزارش خارجی) و نه با داده های فرم انجام می شود و به خودی خود چیزی را تغییر نمی دهد - در تنظیمات و در PN همان چیزی که بود باقی می ماند و FN ممکن است باقی بماند. خالی. بنابراین، بسته به وظایف ما:

بعد از اعدام

Report.Settings Composer.LoadSettings(SKD.DefaultSettings)

فقط گزینه تغییر می کند و هیچ چیز بیشتر.

پس از اجرای تکنیک ارائه شده در بند 2 (با استفاده از "واسطه" و روش LoadCustomSettings()

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

بعد از اعدام

ThisForm.CreateFormElementsUserSettings(,DisplayModeDataCompositionSettings.All)

سکو فقط بی صدا می افتد. بر روی چندین نسخه مختلف تست شده است. و فراخوانی حالت برای نمایش تنظیمات فقط برای موارد سریع بی معنی است - ما بر ترکیب آنها تأثیری نداشتیم، بنابراین به هر حال هیچ چیز تغییر نخواهد کرد.

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

&در رویه سرور ChangeSKD() pObject = Form AttributesValue("گزارش"); selection=pObject.DataCompositionScheme.SettingsOptions.Get(0).Settings.Selection; eo = selection.Elements.Add(Type("DataCompositionSelectionElement")); eo.LeftValue=NewDataCompositionField("LinkToDirectory.Field1"); eo.ComparisonType=DataCompositionComparisonType.Equals; eo.RightValue=True; eo.Use=True; ValueВFormAttributes(pObject"Report"); Report.SettingsLitter.LoadSettings(pObject.DataCompositionSchema.DefaultSettings); Report.SettingsComposer.Restore(); // مطلوب است، اگرچه این هنوز بر FN تأثیر نمی گذارد. // در واقع، این دقیقاً همان چیزی است که می توان آن را تغییر در ترکیب PN برای هر ایمیل نامید From Report.ComponentSettings.Settings.Selection.Elements Cycle email.DisplayMode=ElementDisplayModeDataCompositionSettings.QuickAccess; اگر EmptyString(el.UserSettingsIdentifier) ​​سپس // می توانید از روش electronicSetIdentifier برای عنصر PN استفاده کنید، کمک آن را در SP ببینید، همه چیز در آنجا کاملاً واضح است e.UserSettingsIdentifier="ID123"; // مهم - شناسه می تواند ANY باشد، نه UUID یا GUID! el.ViewUserSettings="Test"; endIf; چرخه پایان comp=NewDataCompositionSettingsComposer; comp.LoadSettings(pObject.DataCompositionScheme.DefaultSettings); Report.SettingsComposer.LoadCustomSettings(comp.CustomSettings); برای هر ایمیل از Report.Settings Composer.CustomSettings.Elements چرخه ایمیل.DisplayMode=ItemDisplayModeDataLayoutSettings.QuickAccess; // EndCycle را روی فرم گزارش بکشید. // و حالا این اثر را خواهد داشت: ThisForm.CreateFormElementsUserSettings(,DisplayModeDataCompositionSettings.QuickAccess); پایان رویه

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

برخی چیزها به صورت تجربی روشن شده است و بنابراین بحث برانگیز است. از کسانی که بیشتر می دانند دعوت به نقد و نظر می شود.