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

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

صفحه اصلی برای توسعه دهندگان مبتدی برنامه نویسی را یاد بگیرید

چگونه فرم یک شی موجود را باز کنیم؟

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

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

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

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

مثلا:

LinkToDirectoryItem = Elements.List.CurrentLine; FormParameters = ساختار جدید ("Key", LinkToDirectoryItem); OpenForm("Directory.Organizations.Form.UniversalObjectForm",FormParameters);

لازم به ذکر است در مواردی که علاوه بر ارجاع به یک شی، نیازی به انتقال پارامتر به فرم در حال باز شدن نیست و فرم اصلی شی موجود است، می توانید از روش ساده تری استفاده کنید. - فرم را با استفاده از رویه باز کنید OpenValue():

OpenValue(Items.List.CurrentRow);

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

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

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

روز همگی بخیر!
من فکر می کنم که اطلاعات این موضوع برای بسیاری از بازدیدکنندگان این انجمن بسیار مفید خواهد بود.
برای مدت طولانی نتوانستم مشکل را حل کنم - چگونه می توان فرم یک سند جدید را باز کرد تا خالی نباشد، اما قبلاً تا حدی به صورت برنامه ریزی شده پر شده است، در حالی که خود سند هنوز در پایگاه داده نوشته نشده است؟ من زمان زیادی را صرف جستجوی راه حلی برای این مشکل در اینترنت کردم، از انجمن های زیادی بازدید کردم که این موضوع در آنها مطرح شد، اما تنها تعداد کمی از آنها به راه حل هایی برخوردند. ساده ترین آنها این است که ابتدا به صورت برنامه نویسی یک سند جدید ایجاد کنید، جزئیات لازم را به صورت برنامه ای پر کنید، سند را در پایگاه داده بنویسید و سپس آن را برای کاربر باز کنید. اگر کاربر نمی خواهد آن را ذخیره کند چه؟ اگر نظرش عوض شود و فرم باز را ببندد چه؟ در این صورت، سند از قبل ثبت شده در پایگاه داده باقی می ماند. و چه کسی به اسناد اضافی در پایگاه داده نیاز دارد؟
و اگر سند را ذخیره نکنید، محبوب ترین گزینه استفاده از GetForm (روش "Documents.DesiredDocumentType.DocumentForm") است. اما در این حالت می‌توانید یک فرم خالی از سند دریافت کنید و به سادگی آن را با استفاده از متد Open() نمایش دهید. این هم یک گزینه نیست...
پس از مدتی، کار با استفاده از تابع زمینه جهانی "FillPropertyValues" حل شد.

زمینه جهانی
FillPropertyValues ​​(FillPropertyValues)
نحو:
FillPropertyValues(<Приемник>, <Источник>, <Список свойств>, <Исключая свойства>)
شرح:
مقادیر دارایی را کپی می کند<Источника>به خواص<Приемника>. تطبیق با نام اموال انجام می شود.

با استفاده از مثال وظیفه من، می خواهم توضیح دهم که چگونه می توانید از این تابع برای پر کردن فرم یک سند جدید استفاده کنید. کار به شرح زیر بود - یک سند (Order-order) وجود دارد که لازمه قسمت جدولی آن سند دیگری است (ارائه خدمات). بنابراین، لازم بود آن را طوری انجام دهیم که هنگام اضافه کردن یک سند جدید "ارائه خدمات" به قسمت جدولی "سفارش"، فرم سند جدید "ارائه خدمات" روی صفحه نمایش داده شود. جزئیاتی که قبلاً پر شده است، از آن سفارش-کاری که خلقت از آن نام گرفته شده است، گرفته شده است. در عین حال، به طوری که خود سند جدید، در زمانی که شکل آن روی صفحه ظاهر می شود، هنوز در پایگاه داده نوشته نشده است. اگر کاربر به طور ناگهانی تصمیم گرفت سند را پر نکند و به سادگی فرم را ببندد، باید این کار انجام شود.
در اینجا یک قطعه کد با یک راه حل برای مشکل آمده است:

&در رویه مشتری EnterRecord() RecordForm = GetForm("Document.MedicalServices.ObjectForm"); PropertyValues ​​را پر کنید (فرم ثبت. شیء، شیء، تاریخ، متخصص، تخصص، پرستار، وضعیت اجرا،)؛ // مقادیر ویژگی هایی را که نام آنها در هر دو سند یکسان است پر کنید TekStr = Elements.Receive.CurrentData; //داده های خط فعلی سند منبع StructureProperty = New Structure; // ساختار حاوی مقادیر جزئیاتی است که باید در فرم یک سند جدید پر شود، اما در سند منبع وجود ندارد. StructureProperties.Insert("OutfitRecord",Object.Link); StructureProperty.Insert("Reception Time", CurrentStr. Reception Time); PropertyValues ​​را پر کنید(RecordForm.Object,PropertyStructure,OutfitRecord,ReceptionTime,); RecordForm.Open(); پایان رویه

یعنی، ما تمام عملیات را مستقیماً روی کلاینت، بدون تماس با سرور، در یک رویه خودساخته انجام می دهیم. در واقع از این طریق می توانید فرم هر سند یا دایرکتوری را پر کرده و باز کنید. ابتدا با استفاده از اشیاء فرم مشخصات را از یک فرم به فرم دیگر پر کردم و سپس با استفاده از شی "Structure" که مشخصات گم شده را در آن وارد کردم، جزئیات بیشتری از فرم باز شده را پر کردم و سپس فرم را باز کردم. .
امیدوارم این تاپیک باعث صرفه جویی در وقت افراد زیادی شود که با کار مشابهی روبرو هستند!

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

GetForm(). باز کن()

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

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

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

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

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

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

RefReference= مراجع. نامگذاری. FindByCode("000000001");
OpenValue(ReferenceReference) ;

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

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

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

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

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

TypeDescription= new TypeDescription(Array) ;

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

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

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

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

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

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

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

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

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

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

این فقط یک تابع است OpenForm()بدون هیچ پارامتر

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

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

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

&AtClient
دستور رویه 1 (فرمان)
Parameter= ساختار جدید;
پارامتر. Insert("Reason" , LinkToAccountToBuyer) ;
OpenForm( "سند. تحقق کالا و خدمات. فرم شی"، پارامتر) ؛
پایان رویه

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

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

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

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

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

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

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

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

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

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

برای انجام این کار، به یک کلید رکورد ثبت اطلاعات نیاز دارید.

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

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

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

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

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

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

RecordKey = جدید( "اطلاعات RegisterRecordKey.NomenclaturePrices"، ArrayKey)؛

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

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

برترین مقالات مرتبط