Ba'zi tanlov bilan ro'yxat shaklini qanday ochish mumkin? 1c tanlov shaklini tanlash bilan oching.

Boshqariladigan 1C ilovasida shakllarni dasturiy ravishda ochish ularni oddiy dasturda ochishdan sezilarli darajada farq qiladi. Avval eski usulni ko'rib chiqaylik. U formani qabul qilish va keyin uni normal yoki modal rejimda ochishdan iborat (modal rejimda ochilganda forma dasturni bloklaydi).

GetForm() . Open()

Bu shakllarni ochishning eng sekin usuli. Biroq, bu shaklni ochishdan oldin uni dasturiy ravishda qayta ishlashga imkon beradi. Kodni qayta ishlash uchun siz biroz o'zgartirishingiz kerak:

Shakl = GetForm ( "Hujjat. Tovar va xizmatlarni qabul qilish. Hujjat shakli") ;
//Bu yerda forma bilan amallarni bajaramiz
Shakl. Open();

Shuni hisobga olish kerakki, ariza qabul qilinganda, boshqa hodisa protsedurasi bajariladi WhenCreatedOnServer.

Keling, boshqariladigan 1C ilovasida shakllarni tezroq va qulayroq ochishga imkon beruvchi boshqa usullarni ko'rib chiqaylik. Muayyan vaziyatga qarab, turli usullardan foydalanish mumkin.

1. Boshqariladigan ilovada ob'ekt formasini qanday ochish mumkin, agar unga havola mavjud bo'lsa.

Bunday holda, hamma narsa juda oddiy.

RefLink = Kataloglar. Nomenklatura. FindByCode("000000001" );
OpenValue (RefLink);

2. Tanlov shaklini qanday ochish va keyin tanlangan qiymatni olish.

Buning uchun funksiya mavjud EnterValue(). Funktsiya 3 ta parametrga ega:

  • Tanlangan qiymat yoziladigan o'zgaruvchi;
  • Tanlash oynasida ko'rsatiladigan maslahat;
  • Tanlangan qiymatlar turlarining tavsifi. Bir nechta turlar bo'lishi mumkin, bu holda ma'lum bir qiymatni tanlashdan oldin sizdan turni tanlashingiz so'raladi.

Funktsiyani bajarish natijasida ko'rsatilgan turdagi ob'ekt uchun standart tanlash shakli ochiladi.

O'zgaruvchan qiymat;
Massiv = yangi massiv;
Massiv. Qo‘shish(Tur( "DirectoryLink.Nomenklatura") ) ;
Massiv. Qo‘shish(Tur( "DirectoryLink. Qarama-qarshi tomonlar") ) ;

TypeDescription= new TypeDescription(Array) ;

Res = EnterValue(Qiymat, "Maslahat" , TypeDescription);

Oldingi usullar faqat ob'ektlar uchun standart shakllarni ochishga imkon berdi (ob'ekt shakli yoki tanlov shakli). Agar siz maxsus shaklni ochishingiz kerak bo'lsa, funksiyadan foydalanishingiz mumkin OpenForm().

Ushbu funktsiya juda ko'p parametrlarga ega. Keling, ulardan ba'zilarini ko'rib chiqaylik:

  • Shakl nomi— bu yerda siz standart obʼyekt shakllaridan birini tanlashingiz mumkin, masalan, Tanlov shakli yoki Ro'yxat shakli. Yoki ishlab chiquvchilar tomonidan yaratilgan maxsus shakl.
  • Variantlar— uni formadagi shaklga o‘tkazish imkonini beradi tuzilmalar uni ochishdan oldin ba'zi parametrlar, shu bilan chiqish ma'lumotlarini aniqlash. Parametrlar mijozdan serverga uzatilishi mumkin bo'lgan har qanday ma'lumotlar bo'lishi mumkin. Shaklni ochishda o'tgan parametrlar protsedurada qayta ishlanishi mumkin WhenCreatingOnServer() ochilayotgan shaklda.
  • Shaklni ochish rejimi— 3 ta variant mavjud: mustaqil, butun interfeysni bloklash, egasi formasini bloklash.

Funktsiya qanday ishlatilishini ko'rib chiqaylik OpenForm() turli vaziyatlarda.

3. Mavjud obyektning shakli qanday ochiladi

Har bir shakl bitta asosiy atributga ega. Shakl tafsilotlari ro'yxatida qalin shrift bilan ta'kidlangan va odatda chaqiriladi Ob'ekt ma'lumotnomalar va hujjatlarning elementlari shakllarida. Boshqa ob'ektlar boshqa nomga ega bo'lishi mumkin. Mavjud ob'ektning formasini ochish uchun ochilayotgan shaklga parametr o'tkazish kerak Kalit ob'ektga havola sifatida qiymat bilan.

&OnClient
Protsedura buyrug'i 1 (buyruq)
Parametr = yangi tuzilma;
Parametr. Insert("Kalit" , FindC() );
OpenForm(, Parametr);
Jarayonning oxiri

&OnServer
FindC();
Kataloglarni qaytarish. Qarama-qarshi tomonlar. FindByRequisites ("TIN", "745107734623")
EndFunction

4. Yangi obyekt formasini ochish

Bu yerda oddiy funksiya bajariladi OpenForm() hech qanday parametrlarsiz.

&OnClient
Protsedura buyrug'i 1 (buyruq)
OpenForm( "Katalog. Qarama-qarshi tomonlar. Ob'ekt shakli") ;
Jarayonning oxiri

5. Yangi ob'ekt shaklini qanday ochish va uni biror narsaga asoslanib to'ldirish

Siz parametrni kiritishingiz kerak Baza, uning qiymati to'ldirish asosiy ob'ektiga havola bo'ladi. Bu protsedurani boshlaydi ProcessFill().

&OnClient
Protsedura buyrug'i 1 (buyruq)
Parametr = yangi tuzilma;
Parametr. Insert ("Asosiy", LinkToBuyerAccount) ;
OpenForm( "Hujjat. Tovar va xizmatlarni sotish. Ob'ekt shakli", Parametr);
Jarayonning oxiri

Ushbu misol hujjatni yaratadi Tovar va xizmatlarni sotish va xaridorga to'lov uchun schyot-faktura asosida to'ldiriladi, unga havola uzatiladi.

6. Shaklni ochish va undagi tanlovni o'rnatish

1C shakllari bo'yicha tanlov oddiy yoki murakkab bo'lishi mumkin. Oddiy tanlash kabi ifodalarni o'z ichiga oladi Tashkilot = Horns and Hooves MChJ. Kompleks tanlash boshqa turdagi taqqoslashni o'z ichiga oladi, masalan. Ro'yxatda. Ushbu maqolada biz oddiy tanlovni tashkil qilishni ko'rib chiqamiz va alohida maqola murakkab tanlovga bag'ishlanadi.

Oddiy tanlovni tashkil qilish uchun ochilayotgan shaklga kalit bilan parametrni o'tkazish kerak Tanlash, qiymat kalit dinamik ro'yxat maydonining nomi bo'lgan struktura bo'ladi va qiymat izlanayotgan ma'lumotlardir.

Masalan, katalog ro'yxati formasini ochamiz GTD raqamlari va u erda egasi - katalog elementi bo'yicha tanlov qiling Nomenklatura.

&OnClient
Protsedura buyrug'i 1 (buyruq)
Parametr = yangi tuzilma;

tanlash= yangi tuzilma;
Tanlash. Insert("Egasi", LinkToNomenclature) ;

Parametr. Insert("Tanlash", Tanlash);

OpenForm( "Directory.GTD raqamlari.Ro'yxat shakli", Parametr);
Jarayonning oxiri

7. Axborot reestriga kirish blankasi qanday ochiladi

Buning uchun sizga ma'lumotlar registrini kiritish kaliti kerak bo'ladi.

Yozuv kaliti- bu barcha o'lchovlar va davrning qiymatlari (agar registr davriy bo'lsa). Ya'ni, yozuv kaliti - bu yozuvni yagona aniqlash mumkin bo'lgan parametrlar.

Ochilish algoritmi quyidagicha:

  1. Biz tuzilishga kerakli qiymatlar bilan asosiy yozuv ma'lumotlarini kiritamiz.
  2. Olingan strukturani massivga joylashtiramiz.
  3. Massivdan yozuv kalitini yaratamiz.
  4. Ochilgan formaga parametr o'tkazamiz Kalit qiymat sifatida 3-bosqichdagi yozuv kaliti bilan.

&OnClient
Protsedura buyrug'i 1 (buyruq)
Parametr = yangi tuzilma;

KeyParameters= yangi tuzilma;
Asosiy parametrlar. Insert("Nomenklatura", LinkToNomenklatura) ;
Asosiy parametrlar. Insert("PriceType", LinkToPriceType) ;
Asosiy parametrlar. Insert ("Don", Sana);

KeyArray = Yangi massiv;
KeyArray. Qo'shish (KeyParameters) ;

EntryKey = Yangi( "Axborot registrini qayd etish kaliti. Narxlar nomenklaturasi", KeyArray);

Parametr. Insert("Kalit", RecordKey) ;

OpenForm( "Axborot reestri. Nomenklatura narxlari. Ro'yxatga olish shakli", Parametr);
Jarayonning oxiri

Ushbu kod sizga ko'rsatilgan tanlov bilan hujjatlar ro'yxatini ochish imkonini beradi, shuningdek, kerakli tanlov bilan katalog elementlari ro'yxatini ochishingiz mumkin;

Code 1C v 8.2 UP Form = OpenForm ("Hujjat. Invoice.Form.ListForm"); // Shaklni oching
SelectionOwner =Form.List.Selection.Elements.Add(Type("DataCompositionSelectionElement")); //Tanlov qo'shish
SelectionOwner.ComparisonView = DataCompositionComparisonView.Equals; //Qanday qilib solishtiramiz
SelectOwner.Use = rost; // NewDataCompositionField("Nomenklatura") dan foydalanish uchun katakchani belgilang.
SelectionOwner.LeftValue = NewDataCompositionField("Hisob"); //Tanlash uchun qanday tafsilotlardan foydalanamiz?
SelectionOwner.RightValue = Object.Account; // Va tanlovning ma'nosi

Qilish uchun oldindan belgilangan tanlov bilan ro'yxat shaklini oching quyidagi usullardan foydalaning:

Birinchi yo'l shundan iboratki, siz formani ochganingizda, Tanlash formasi parametrini o'rnatishingiz va ushbu parametr bilan ro'yxat shaklini ochishingiz mumkin.

Tanlash parametri strukturani ifodalaydi. Elementlarning nomlari tanlov amalga oshiriladigan maydonlarning nomlariga mos keladi va qiymatlar tanlov qiymatlarini o'z ichiga oladi. Bu dinamik roʻyxat boshqariladigan shakl kengaytmasi variantidir. Ya'ni, u asosiy atributi DynamicList tipidagi atribut bo'lgan shakllar uchun mavjud, masalan, ro'yxat shakllari va tanlash shakllari.

Masalan, quyidagi misolda hisob-fakturalar ro'yxati Raqam maydonida 333 ga teng tanlangan holda ochiladi.

Kod 1C v 8.2 UE tanlash qiymati = Yangi tuzilma ("Raqam", "333");
SelectionParameters = Yangi tuzilma ("Tanlash", SelectionValue);
OpenForm("Hujjat. Qabul qilingan faktura. Ro'yxat shakli", Tanlash imkoniyatlari);

Ikkinchi yo'l

Roʻyxat shaklini parametrlarsiz ochishingiz mumkin:

Code 1C v 8.2 UE OpenForm ("Hujjat. Kvitansiya hisob-fakturasi. Ro'yxat shakli");

Va keyin, schyot-fakturalar ro'yxati uchun shakl hodisasi ishlovchisida CreatedOnServer qachon, shaklning asosiy atributi bo'lgan dinamik ro'yxatda tanlov yaratadigan kodni yozing:

Kod 1C v 8.2 UP &OnServer
OnServerda yaratilgan protsedura (muvaffaqiyatsizlik, standart ishlov berish)
Tanlash elementi = List.Selection.Elements.Add(Type("DataComposition Tanlash Elementi"));
SelectionElement.LeftValue = NewDataCompositionField("Raqam");
SelectionElement.ComparisonView = DataCompositionComparisonView.More;
SelectionElement.Use = rost;
SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.Inaccessible;
SelectionElement.RightValue = "000000001";
Jarayonning oxiri

Ushbu usulning afzalliklari shundaki, tanlov uchun Taqqoslash turi nafaqat birinchi holatda bo'lgani kabi Tengga, balki Ko'proq, Kamroq va hokazolarga ham o'rnatilishi mumkin.

Ammo bu usul ham juda muhim kamchilikka ega: bu tanlov bilan forma har doim ochiladi. Uni qayerdan chaqirishsa. Shuning uchun bu shakl asosiy sifatida belgilanmasligi kerak. Va agar, shunga qaramay, bu asosiy bo'lsa, tanlovni o'rnatishdan oldin ushbu shakl qaerdan ochilishini tahlil qilish kerak. Masalan, shakl parametrlarini tahlil qilish.

Uchinchi yo'l

Nihoyat, tanlov sharti dinamik ro'yxat uchun ma'lumotlarni tanlaydigan maxsus so'rovga joylashtirilishi mumkin.

Misol uchun, biz elementlar ro'yxatida ta'kidlangan elementni o'z ichiga olgan hisob-fakturalar ro'yxatini ochishimiz kerak.

Buning uchun elementlar ro'yxati shaklida buyruq va tegishli tugmani yarating.

Keling, ushbu buyruq uchun ijro ishlovchisini quyidagicha to'ldiramiz:

Kod 1C v 8.2 UP &OnClient
Protsedurani qabul qilish hisob-fakturalari (buyruq)
SelectionParameters = Yangi tuzilma ("FilterByProduct", Elements.List.CurrentRow);
OpenForm("Hujjat. Qabul qilingan faktura. Ro'yxat shakli", Tanlash imkoniyatlari);
Jarayonning oxiri

Ushbu ishlov beruvchida biz schyot-fakturalar ro'yxati uchun shaklni ochamiz, ob'ektlar ro'yxatidagi joriy elementga havolani FilterByProduct forma parametriga o'tkazamiz.

Shundan so'ng biz hujjatlar ro'yxati uchun forma yaratamiz: Kvitansiya hisob-fakturasi va FilterBy Product forma parametrini yaratamiz, biz kerakli tanlov bilan shaklni ochish uchun foydalanamiz.

Endi List formasining asosiy atributining xossalar palitrasini ochamiz. Maxsus so'rov bayrog'ini o'rnating va Ro'yxat sozlamalari qatorida Ochish tugmasini bosing.

So'rov maydoniga quyidagi so'rov matnini kiriting:

Kod 1C v 8.2 UP SELECT
Hujjatni qabul qilish raqami,
Hujjatni qabul qilish hisob-fakturasi.Sana
FROM
Document.ReceiptInvoice DocumentReceiptInvoice AS
QAYERDA
Hujjat qabul qilish Invoice.Mahsulotlar.Mahsulot = &Mahsulot

So'rovda biz FilterBy Item hisob-faktura ro'yxati shakli parametridagi elementlar ro'yxatidagi joriy qatorga havolani oladigan element parametridan foydalanamiz.

Buni amalga oshirish uchun, ro'yxat formasi hodisasi ishlovchisida CreatedOnServer qachon mahsulot so'rovi parametrining qiymatini belgilash uchun kod yozamiz:

Kod 1C v 8.2 UP &OnClient
Ochilish tartibi (muvaffaqiyatsizlik)
List.Parameters.SetParameterValue("Mahsulot", Parameters.FilterByProduct);
Jarayonning oxiri

Bu erda List.Parameters - List atributi uchun dinamik ro'yxat so'rovi parametrlari ro'yxati. Mahsulot parametrining qiymati FilterByProduct forma parametrining qiymatiga teng o'rnatiladi.

Natijada, ob'ektlar ro'yxati formasidagi "Kvitansiyalarni qabul qilish" tugmasini bosish orqali biz faqat ob'ektlar ro'yxatida tanlangan elementni o'z ichiga olgan hisob-fakturalar ro'yxatini olamiz.

Hayrli kun.

Bugun biz yangi boshqariladigan interfeysda tanlov shakllarini qanday qilib dasturiy ravishda ochish haqida gaplashamiz.

Ilgari, "muntazam dastur" da biz shunday yozgan edik:

forma = Directory.nomenclature.GetSelectionForm();

resultSelection = form.openModalNO();

Ushbu operatorlar orasida biz formaning xususiyatlarini o'zgartirishimiz mumkin, masalan, tanlovni o'rnatishimiz mumkin. Biz nomi bilan ma'lum bir shaklni belgilashimiz mumkin. Shakl elementlarining xususiyatlariga nuqta orqali ularning nomi bilan kirish orqali uning ko'rinishini o'zgartirishimiz mumkin (form.Button1.Visibility = False;)

Endi bizda boshqariladigan interfeys bor va bu erda hamma narsa boshqacha. Muammo kodni server va mijoz qismlariga bo'lishda. Biz ob'ektlar va ularning metama'lumotlariga faqat serverda kira olamiz va biz mijozda shakllarni ochishimiz kerak.

Shunday qilib, keling, boshlaylik.

1. Eng oddiy holat, biz tanlovni boshqarishimiz shart emas (tanlovlarni o'rnatish, parametrlarni ochilgan tanlov shakliga o'tkazish).

Shakllar faqat mijozda ochilishi mumkinligi sababli, bu mijoz tomonidagi kod bo'lagi bo'ladi. Funktsiyadan foydalanamiz Qiymatni kiriting(<Значение>, <Подсказка>, <Тип>) . Aslida, uning tavsifidan hamma narsa aniq. U birinchi parametrda foydalanuvchi tanlov qilganmi yoki yo'qmi belgisini qaytaradi, biz tanlov qiymati qaytariladigan konteynerni o'tkazamiz, ikkinchi matnda tanlov oynasining sarlavhasida, uchinchi qatorda ko'rsatiladi; turlari.

Mana foydalanishga misol:

O'zgaruvchan SelectTMC;

ArrayTypes = Yangi massiv;

DescriptionofTypesTMC = NewDescriptionofTypes(Array);

Agar EnterValue (Inventarni tanlang, "Elementni tanlang", Inventarizatsiya turlarining tavsifi) Keyin

//Tanlangan qiymatni qayta ishlash

endIf;

Men shuni qo'shimcha qilamanki, agar biz konteyner o'zgaruvchimizga uni tanlashdan oldin biron bir qiymat tayinlasak, u standart qiymat bo'ladi. Bunday holda, turlar qatorini yaratishingiz shart emas, turi konteynerdagi qiymatdan olinadi.

2. Ba'zan, qiymatni tanlashdan oldin, biz ba'zi tanlovlar va tanlov parametrlarini o'rnatishimiz kerak. Masalan, kontragent shartnomasini tanlashimiz kerak. Birinchi usul biz uchun barcha hujjatlarni ochadi, lekin biz egasi tomonidan tanlashimiz kerak.

Shakllarni ochishning ikkita usuli mavjud: OpenForm Va OpenFormModal. Birinchi usulda biz formani ochamiz va biz forma ochgan kod qismi tanlov natijasini olmagan holda ishlashda davom etadi. Tanlov natijasi, qo'ng'iroq usuliga qarab, kiritish maydoniga joylashtiriladi yoki oldindan belgilangan "Tanlovni qayta ishlash" protsedurasida qabul qilinadi.

Bizning holatda, tanlangan qiymatni ma'lum bir o'zgaruvchiga olishimiz va boshqaruvni boshqa protseduralarga o'tkazmasdan, tanlangan qiymatni hisobga olgan holda qayta ishlashni davom ettirishimiz kerak. Shuning uchun u bizga mos keladi OpenFormModal.

Bu veb-interfeys uchun yomon yo'l ekanligini darhol band qilaman, chunki... Modal oynalar odatda bloklangan yangi brauzer oynasida ochiladi. Ammo agar siz foydalanuvchiga nima ekanligini oldindan tushuntirsangiz, menimcha, u bu muammoni hal qiladi))

Shunday qilib, protsedura tavsifini ko'rib chiqaylik, u 4 ta parametrga ega. Birinchisida biz "Katalog. Pudratchilarning shartnomalari. Tanlov shakli" shakliga to'liq yo'l bilan chiziqni ko'rsatamiz. Ikkinchisida biz tanlov parametrlarini ko'rsatamiz, ular haqida quyida ko'proq. Uchinchisida - egasi, bu tanlov natijasini oladigan shakl yoki tanlov maydoni, biz uni to'ldirmaymiz. To'rtinchi parametr ham bizning holatlarimizda qo'llanilmaydi.

Shunday qilib, oddiy tanlov uchun quyidagi qator bajariladi:

&OnClient

Protsedura buyrug'i 1 (buyruq)

res = OpenFormModal("Katalog. Pudratchilarning shartnomalari. Tanlov shakli");

Jarayonning oxiri

Ammo bu №1 usulning to'liq analogidir va biz egasi tomonidan tanlanmasdan, barcha shartnomalarni tanlash uchun shaklni ko'ramiz. Bular. Bu faqat tanlov formasining nomini ko'rsatmoqchi bo'lsak amalga oshirilishi mumkin.

Tanlovni o'rnatish uchun ikkinchi parametr bizga yordam beradi.

Ikkinchi parametr "Tuzilish" turiga tegishli. Tuzilish elementlari sifatida siz tanlov formasining "parametrlar" yorlig'ida qo'shilgan shakl parametrlarini belgilashingiz mumkin. Ularni qayta ishlash protsedurada tasvirlangan bo'lishi kerak OnServer yaratilganda tanlov formasi modulida. Bu biz uchun yaxshi emas, chunki... Men konfiguratsiyani o'zgartirishim kerak. Bundan tashqari, parametr strukturasidagi "tanlash" tugmasi bilan tanlov strukturasini o'tkazishingiz mumkin. Keyin tanlov tuzilmasidagi barcha maydonlar elementlar ro'yxatini tanlashda ishlatiladi va foydalanuvchi ko'rish yoki o'zgartirish uchun mavjud bo'lmaydi.

Mening misolimda men ishlov berishda ishlov berish shakli atributiga ishora qiluvchi tanlov maydonini chizdim "qarshi tomon" ma'lumotlar turi bilan " DirectoryLink.Counterparties". va quyidagi kod qismini yozdi:

&OnClient

Protsedura buyrug'i 1 (buyruq)

Tanlovlar = Yangi tuzilma ("Egasi", kontragent);

SelectionParameters = Yangi tuzilma ("Tanlash", Tanlash);

res = OpenFormModal("Katalog. Pudratchilarning shartnomalari. Tanlov shakli", Tanlash parametrlari);

Jarayonning oxiri

Bu odatda ko'pgina muammolarni hal qilish uchun etarli va hech qanday konfiguratsiya aralashuvini talab qilmaydi. Biroq, "When CreatedOnServer" protsedurasidagi tanlov shaklida sizning tanlovingiz yo'qolishi mumkin. Shuning uchun, ushbu usuldan foydalanishdan oldin, siz ochgan tanlov shaklida ushbu tartibni ko'rib chiqing. U erdagi egri ishlab chiquvchilar tanlovning ochilish parametrlarida o'tganligini tekshirishni unutib, "sukut bo'yicha" o'z tanlovini osongina o'rnatishlari mumkin.

Bugun hammasi shu, e'tiboringiz uchun rahmat.