В процессе разработки на платформе 1С:Предприятие 8.3 часто возникает необходимость открыть форму выбора документа или справочника с уже установленными ограничениями. Например, пользователю нужно показать только проведенные документы за текущий месяц или элементы, относящиеся к определенному подразделению. Однако стандартная передача параметров через Отбор в структуру ПараметрыФормы часто не дает нужного результата, особенно если требуется не просто равенство, а более сложные условия.
Важно различать два подхода к передаче условий при открытии формы. Первый — использование параметра Отбор. Это самый простой способ, который работает аналогично стандартному отбору в списке. Если вы передаете структуру вида Структура("ПометкаУдаления, Проведен", Ложь, Истина), платформа применит условия на равенство. Ограничение: через этот механизм невозможно передать условия Больше, Меньше, В списке или сложные группы И/ИЛИ.
Если вам нужно задать сложные критерии, такие как отбор по периоду (БольшеИлиРавно), используйте ФиксированныеНастройки. Эти настройки передаются в параметрах открытия как объект НастройкиКомпоновкиДанных. Главное преимущество этого способа в том, что пользователь не сможет отключить такие отборы в интерфейсе.
Разберем пример создания таких настроек в коде:
// На клиенте формируем структуру параметров
НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;
// Создаем группу условий для логики И
ГруппаОтбора = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
// Условие по проведенным документам
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Проведен");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = Истина;
// Условие по периоду
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = НачалоМесяца(ТекущаяДата());
ПараметрыВыбора = Новый Структура;
ПараметрыВыбора.Вставить("ФиксированныеНастройки", НастройкиКомпоновки);
ПараметрыВыбора.Вставить("РежимВыбора", Истина);
ОткрытьФорму("Документ.ЭкземплярБюджета.Форма.ФормаВыбора", ПараметрыВыбора);
Если механизм ФиксированныхНастроек кажется избыточным или требуется динамическая настройка уже открытой формы, рекомендуем применить подход с получением формы и последующим обращением к ее динамическому списку. Это самый гибкий метод, позволяющий накладывать любые условия.
ПолучитьФорму().Список).Отбор.Элементы этого списка.Использование = Истина.Открыть().
ФормаВыбора = ПолучитьФорму("Документ.ЭкземплярБюджета.Форма.ФормаВыбора");
ЭлементОтбора = ФормаВыбора.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбора.ПравоеЗначение = НачалоМесяца(ТекущаяДата());
ЭлементОтбора.Использование = Истина;
ФормаВыбора.Открыть();
В ходе анализа мы выяснили основные причины неудач:
Использование: Если не установить его в Истина, платформа проигнорирует созданный элемент отбора.ДинамическомСписке).ПараметровФормы.Рекомендуем придерживаться второго способа для сложных задач, так как он позволяет легко отлаживать каждый этап добавления условий, визуально контролируя содержимое коллекции Отбор.Элементы в отладчике 1С.