Открытие управляемой формы списка (выбора) с произвольными отборами
В процессе работы возникла необходимость открывать управляемую форму выбора справочника со сложным отбором по реквизитам (с видами сравнения "в списке", "не равно" и др.). Чтобы не создавать для каждого случая отдельную форму выбора, был создан универсальный механизм.
- Описание
- Подробнее
Описание
Доработка формы выбора. В автоматически созданную управляемую форму выбора добавляем ключевой параметр ‘ПараметрыОтбора’, тип = произвольный. Из обработчика события ПриОткрытии() вызываем процедуру НастроитьОтборСписка():
&НаКлиенте
Процедура НастроитьОтборСписка()
Перем ПараметрыОтбора, РежимОтображения;
Если Параметры.Свойство(«ПараметрыОтбора», ПараметрыОтбора)
И ТипЗнч(ПараметрыОтбора) = Тип(«Структура»)
Тогда
Отбор = Список.Отбор.Элементы;
Для Каждого ЭлементСтруктуры Из ПараметрыОтбора Цикл
ИмяОтбора = ЭлементСтруктуры.Ключ;
НастройкаОтбора = ЭлементСтруктуры.Значение;
Если НЕ НастройкаОтбора.Свойство(«РежимОтображения», РежимОтображения) Тогда
РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
КонецЕсли;
ЭлементОтбора = Отбор.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ИдентификаторПользовательскойНастройки = ИмяОтбора;
ЭлементОтбора.Представление = ИмяОтбора;
ЭлементОтбора.ПредставлениеПользовательскойНастройки = ИмяОтбора;
ЭлементОтбора.РежимОтображения = РежимОтображения;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ВидСравнения = НастройкаОтбора.ВидСравнения;
ЭлементОтбора.ЛевоеЗначение = НастройкаОтбора.ЛевоеЗначение;
ЭлементОтбора.ПравоеЗначение = НастройкаОтбора.ПравоеЗначение;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Использование. В месте, откуда надо вызвать открытие нашей формы, помещаем код, например:
НастройкаОтбораПоВладельцам = Новый Структура;
НастройкаОтбораПоВладельцам.Вставить(«ЛевоеЗначение», Новый ПолеКомпоновкиДанных(«Владелец»));
НастройкаОтбораПоВладельцам.Вставить(«ВидСравнения», ВидСравненияКомпоновкиДанных.ВСписке);
НастройкаОтбораПоВладельцам.Вставить(«ПравоеЗначение», СписокКонтрагентов);
НастройкаОтбораПоВладельцам.Вставить(«РежимОтображения», РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный);
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить(«Владелец», НастройкаОтбораПоВладельцам); // Ключ структуры не обязательно должен быть «Владелец»
ПараметрыОткрытия = Новый Структура(«ПараметрыОтбора», ПараметрыОтбора);
ОткрытьФорму(«Справочник.ДоговорыКонтрагентов.ФормаВыбора», ПараметрыОткрытия, Элемент, ЭтаФорма);

