نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی پرتال اطلاعاتی
  • خانه
  • در تماس با
  • 1c انتخاب در فرم انتخاب. چگونه یک فرم لیست را با مقداری انتخاب باز کنیم؟ TypeArray = آرایه جدید

1c انتخاب در فرم انتخاب. چگونه یک فرم لیست را با مقداری انتخاب باز کنیم؟ TypeArray = آرایه جدید

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

GetForm(). باز کن()

این کندترین روش باز کردن فرم ها است. با این حال، به شما این امکان را می دهد که قبل از باز کردن فرم، آن را به صورت برنامه ریزی شده پردازش کنید. برای پردازش کد باید کمی تغییر دهید:

فرم = GetForm( "سند. دریافت کالا و خدمات. فرم سند") ;
//در اینجا اقداماتی را با فرم انجام می دهیم
فرم. باز کن()؛

باید در نظر داشت که هنگام دریافت فرم، رویه رویداد دیگری اجرا خواهد شد WhenCreatedOnServer.

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

1. نحوه باز کردن یک فرم شی در یک برنامه مدیریت شده در صورت وجود پیوند به آن.

در این مورد، همه چیز بسیار ساده است.

RefLink = دایرکتوری ها. نامگذاری. FindByCode("000000001");
OpenValue(RefLink)؛

2. نحوه باز کردن فرم انتخاب و سپس دریافت مقدار انتخاب شده.

یک تابع برای این وجود دارد EnterValue().تابع دارای 3 پارامتر است:

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

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

مقدار متغیر؛
آرایه = آرایه جدید;
آرایه. افزودن(نوع( "DirectoryLink.Nomenclature") ) ;
آرایه. افزودن(نوع( "DirectoryLink. طرف مقابل") ) ;

TypeDescription= new TypeDescription(Array) ;

Res = EnterValue(Value, "Hint" , TypeDescription) ;

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

این تابع چند پارامتر دارد. بیایید به برخی از آنها نگاه کنیم:

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

بیایید نحوه استفاده از تابع را بررسی کنیم OpenForm()در موقعیت های مختلف

3. نحوه باز کردن فرم یک شی موجود

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

&OnClient
دستور رویه 1 (فرمان)
Parameter= ساختار جدید;
پارامتر. Insert("Key" , FindC() );
OpenForm(, Parameter) ;
پایان رویه

&روی سرور
تابع FindC();
راهنماهای بازگشت. طرف مقابل. FindByRequisites ("TIN"، "745107734623")
EndFunction

4. نحوه باز کردن یک فرم شی جدید

یک تابع ساده در اینجا انجام می شود OpenForm()بدون هیچ پارامتر

&OnClient
دستور رویه 1 (فرمان)
OpenForm( "دایرکتوری. طرف مقابل. فرم شی") ;
پایان رویه

5. نحوه باز کردن یک فرم شی جدید و پر کردن آن بر اساس چیزی

شما باید یک پارامتر را پاس کنید پایه، که مقدار آن مرجعی به شی پایه پرکننده خواهد بود. این روند شروع می شود ProcessFill().

&OnClient
دستور رویه 1 (فرمان)
Parameter= ساختار جدید;
پارامتر. Insert("Base", LinkToBuyerAccount) ;
OpenForm( "سند. فروش کالا و خدمات. فرم شی"، پارامتر) ؛
پایان رویه

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

6. نحوه باز کردن یک فرم و تنظیم یک انتخاب روی آن

انتخاب در فرم های 1C می تواند ساده یا پیچیده باشد. انتخاب ساده شامل عباراتی مانند سازمان = شاخ و سم LLC.انتخاب پیچیده شامل انواع دیگری از مقایسه است، به عنوان مثال. در لیست. در این مقاله سازماندهی انتخاب ساده را در نظر خواهیم گرفت و مقاله جداگانه ای به انتخاب پیچیده اختصاص داده خواهد شد.

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

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

&OnClient
دستور رویه 1 (فرمان)
Parameter= ساختار جدید;

انتخاب= ساختار جدید;
انتخاب. Insert("مالک"، LinkToNomenclature) ;

پارامتر. درج ("انتخاب"، انتخاب) ;

OpenForm( "Directory.GTD numbers.Form List"، پارامتر) ؛
پایان رویه

7. نحوه باز کردن فرم ورود به ثبت اطلاعات

برای این کار به کلید ثبت اطلاعات نیاز دارید.

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

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

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

&OnClient
دستور رویه 1 (فرمان)
Parameter= ساختار جدید;

KeyParameters= ساختار جدید;
پارامترهای کلیدی Insert("Nomenclature", LinkToNomenclature) ;
پارامترهای کلیدی Insert("PriceType", LinkToPriceType) ;
پارامترهای کلیدی درج ("دوره"، تاریخ) ;

KeyArray = آرایه جدید;
KeyArray. افزودن (KeyParameters) ;

EntryKey = جدید( "Information RegisterRecord Key.PricesNomenclature"، KeyArray)؛

پارامتر. Insert("Key", RecordKey) ;

OpenForm( "ثبت اطلاعات. قیمت نامگذاری. فرم ثبت"، پارامتر) ؛
پایان رویه

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

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

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

هنگام باز کردن فرم، انتخاب بر اساس فیلد مشخص شده انجام می شود. به عنوان مثال در مثال زیر لیستی از فاکتورها با انتخاب فیلد Number برابر با 333 باز می شود.

مقدار انتخاب = ساختار جدید ("تعداد"، "333");

SelectionParameters = ساختار جدید ("Selection", SelectionValue);

OpenForm("سند. فاکتور رسید. فرم لیست"، گزینه های انتخاب);

2. می توانید یک فرم لیست را بدون پارامتر باز کنید:

OpenForm("Document.Invoice.ListForm");

و سپس در رویداد handler فرم لیست فاکتور وقتی CreatedOnServerکدی بنویسید که انتخابی را در یک لیست پویا ایجاد می کند که ویژگی اصلی فرم است:

&روی سرور

رویه زمانی که روی سرور ایجاد شد (شکست، پردازش استاندارد)

Selection Element = List.Selection.Elements.Add(Type("DataComposition Selection Element"));

SelectionElement.LeftValue = NewDataCompositionField("Number");

SelectionElement.ComparisonView = DataCompositionComparisonView.More;

SelectionElement.Use = True;

SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.Inaccessible;

SelectionElement.RightValue = "000000001";

پایان رویه

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

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

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

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

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

&OnClient

رسیدهای رویه فاکتورها (فرمان)

ListForm = GetForm("Document.Invoice.ListForm");

ListForm.FilterByProduct = Items.List.CurrentRow;

ListForm.Open();

پایان رویه

در این هندلر فرم لیست فاکتورها را دریافت می کنیم و لینک مورد فعلی در لیست آیتم ها را به پارامتر فرم FilterByProduct منتقل می کنیم و فرم را با این پارامتر باز می کنیم.

سپس یک فرم لیست اسناد ایجاد می کنیم فاکتور خریدو صفت فرم FilterByProduct را ایجاد کنید که هنگام باز کردن آن از آن به عنوان پارامتر فرم استفاده می کنیم. حال اجازه دهید پالت خصوصیات ویژگی اصلی فرم List را باز کنیم. بیایید پرچم را تنظیم کنیم درخواست سفارشیو در خط تنظیم لیستروی Open کلیک کنید.

در قسمت Request متن درخواست زیر را وارد کنید:

انتخاب کنید

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

فاکتور رسید سند.تاریخ

از جانب

Document.ReceiptInvoice AS DocumentReceiptInvoice

جایی که

فاکتور رسید سند.محصولات.محصول = &محصول

در درخواست، از پارامتر Item استفاده می‌کنیم، که پیوندی به خط فعلی در لیست اقلام موجود در پارامتر فرم فهرست فاکتور FilterBy Item دریافت می‌کند. برای انجام این کار، در کنترل کننده رویداد فرم لیست OnOpen، کدی را برای تنظیم مقدار پارامتر درخواست محصول می نویسیم:

&OnClient

مراحل بازگشایی (شکست)

List.Parameters.SetParameterValue("محصول"، FilterByProduct);

پایان رویه

اینجا فهرست.گزینه هالیستی از پارامترهای درخواست لیست پویا برای ویژگی List است. مقدار پارامتر Product برابر با مقدار پارامتر فرم FilterByProduct تنظیم شده است.

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

یک نمونه آزمایشی برای گزینه سوم در دایرکتوری 1CITS/EXE/FAQ/OpenFormWithSelection.dt قرار دارد. نمونه بر روی پلتفرم نسخه 8.2.9.356 انجام شد.

این کد به شما امکان می دهد لیستی از اسناد را با انتخاب مشخص باز کنید

Code 1C v 8.2 UP Form = OpenForm("Document. Invoice.Form.ListForm"); //فرم را باز کنید
SelectionOwner =Form.List.Selection.Elements.Add(Type("DataCompositionSelectionElement")); //افزودن انتخاب
SelectionOwner.ComparisonView = DataCompositionComparisonView.Equals; //چگونه مقایسه خواهیم کرد
SelectOwner.Use = True; // چک باکس را برای استفاده از NewDataCompositionField ("Nomenclature") تنظیم کنید
SelectionOwner.LeftValue = NewDataCompositionField("Account"); //از چه جزئیاتی برای انتخاب استفاده خواهیم کرد؟
SelectionOwner.RightValue = Object.Account; // و خود معنای انتخاب

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

راه اولاین است که وقتی یک فرم را باز می کنید، می توانید پارامتر Selection form را تنظیم کنید و فرم لیست را با این پارامتر باز کنید.

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

به عنوان مثال در مثال زیر لیستی از فاکتورها با انتخاب فیلد Number برابر با 333 باز می شود.

Code 1C v 8.2 UE Selection Value = New Structure("Number", "333");
SelectionParameters = ساختار جدید ("Selection", SelectionValue);
OpenForm("سند. فاکتور رسید. فرم لیست"، گزینه های انتخاب);

راه دوم

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

کد 1C v 8.2 UP OpenForm ("سند. فاکتور رسید. فرم لیست");

و سپس، در مدیریت رویداد فرم برای لیست فاکتورها When CreatedOnServer، کدی را بنویسید که انتخابی را در لیست پویا ایجاد می کند، که ویژگی اصلی فرم است:

کد 1C v 8.2 UP & OnServer
رویه زمانی که روی سرور ایجاد شد (شکست، پردازش استاندارد)
Selection Element = List.Selection.Elements.Add(Type("DataComposition Selection Element"));
SelectionElement.LeftValue = NewDataCompositionField("Number");
SelectionElement.ComparisonView = DataCompositionComparisonView.More;
SelectionElement.Use = True;
SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.Inaccessible;
SelectionElement.RightValue = "000000001";
پایان رویه

مزایای این روش این است که نوع مقایسه برای انتخاب را می توان نه تنها مانند حالت اول برابر، بلکه روی More، Less و غیره نیز تنظیم کرد.

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

راه سوم

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

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

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

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

کد 1C v 8.2 UP & OnClient
رسیدهای رویه فاکتورها (فرمان)
SelectionParameters = New Structure("FilterByProduct", Elements.List.CurrentRow);
OpenForm("سند. فاکتور رسید. فرم لیست"، گزینه های انتخاب);
پایان رویه

در این کنترلر، فرم لیست فاکتورها را باز می کنیم و پیوندی را به آیتم فعلی در لیست آیتم ها به پارامتر فرم FilterByProduct ارسال می کنیم.

سپس یک فرم برای لیست اسناد ایجاد می کنیم: Receipt Invoice و یک پارامتر فرم FilterBy Product ایجاد می کنیم که از آن برای باز کردن یک فرم با انتخاب مورد نیاز استفاده می کنیم.

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

در قسمت Request متن درخواست زیر را وارد کنید:

کد 1C v 8.2 UP SELECT
شماره فاکتور رسید سند.
فاکتور رسید سند.تاریخ
از جانب
Document.ReceiptInvoice AS DocumentReceiptInvoice
جایی که
فاکتور رسید سند.محصولات.محصول = &محصول

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

برای انجام این کار، هنگام CreatedOnServer در مدیریت رویداد فرم لیست، کدی را برای تنظیم مقدار پارامتر درخواست محصول می نویسیم:

کد 1C v 8.2 UP & OnClient
مراحل بازگشایی (شکست)
List.Parameters.SetParameterValue("محصول"، Parameters.FilterByProduct);
پایان رویه

در اینجا List.Parameters لیستی از پارامترهای درخواست لیست پویا برای ویژگی List است. مقدار پارامتر Product برابر با مقدار پارامتر فرم FilterByProduct تنظیم شده است.

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

به منظور. واسه اینکه. برای اینکه فرم انتخاب را با انتخاب در 1s 8.2 باز کنید(فرم های معمولی)، باید اقداماتی را انجام دهیم. اول می گیریم پس از آن، ما انتخاب را تنظیم می کنیم و آن را به صورت برنامه نویسی باز می کنیم، در اینجا یک مثال کد وجود دارد:

انتخاب روی فرم در قسمت ورودی 1C 8.2 با چندین مقدار

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

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

تنظیم انتخاب در قسمت ورودی در فرم در 1C 8.3، رویداد Start of Selection

حالا بیایید در نظر بگیریم انتخاب در قسمت ورودی در فرم مدیریت شده در 1C 8.3. بیایید عنصر مورد علاقه خود را در فرم پیدا کنیم، که در آن انتخاب را تنظیم می کنیم، در مورد ما این قسمت "سازمان" است. ما رویداد "شروع انتخاب" را پیدا می کنیم، روی ذره بین کلیک می کنیم و خود را در این روش می یابیم. پارامتر Selection Data را می بینیم که این پارامتر از نوع ValueList است. برای محدود کردن انتخاب به عناصر لازم، باید لیست مقادیر را پر کنیم. ما می‌توانیم عناصر را فقط روی سرور انتخاب کنیم، بنابراین یک رویه با دستور کامپایل &OnServer ایجاد می‌کنیم. در این روش، Selection Data را پر کنید.

بهترین مقالات در این زمینه