Как вывести отборы компоновщика на управляемую форму отдельными элементами

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В интерфейсе «Такси» платформы 1С:Предприятие 8.3 часто требуется сделать работу с отборами максимально удобной для пользователя — расположить ключевые поля фильтрации (организация, период, статус, контрагент) над таблицей списка в виде отдельных полей ввода, а не внутри общей модальной формы или стандартного выпадающего списка настроек.

Разберем, как устроен этот механизм, как настроить автоматический вывод отборов в конфигураторе, а также как управлять этим процессом программно.

Интерактивная настройка вывода отборов через свойства списка

Платформа 1С умеет генерировать элементы управления для отборов динамического списка автоматически без единой строчки кода. Для этого необходимо выполнить два ключевых шага.

Шаг 1. Настройка пользовательских настроек в схеме компоновки

  1. Откроем форму со списком и перейдем в свойства динамического списка (реквизит формы типа ДинамическийСписок).
  2. Откроем свойство Настройки компоновки данных и перейдем на закладку Отбор (или Параметры).
  3. Добавим нужный отбор (например, по полю Организация или ПометкаУдаления).
  4. В нижней части окна настроек нажмем кнопку Свойства элемента пользовательских настроек.
  5. Установим флаг Включать в пользовательские настройки.
  6. Критически важный параметр: в поле Режим отображения выберем значение Быстрый доступ. Именно этот режим сообщает платформе, что настройку необходимо отображать отдельным полем ввода на панели, а не прятать в общий список настроек.

Шаг 2. Привязка группы формы к динамическому списку

  1. В дереве элементов формы создадим новую группу (например, с видом Обычная группа — Без выделения) и зададим ей понятное имя, например ГруппаБыстрыхОтборов. Для горизонтального расположения полей можно установить свойство Группировка в значение Горизонтальная если возможно.
  2. Выделим таблицу формы, отображающую наш динамический список (элемент Список).
  3. В палитре свойств таблицы найдем свойство Группа пользовательских настроек.
  4. Укажем в этом свойстве созданную ранее группу ГруппаБыстрыхОтборов.

После этого при открытии формы платформа автоматически сгенерирует поля ввода для каждого отбора, у которого включен режим Быстрый доступ, и поместит их в указанную группу.

Программное управление элементами пользовательских настроек

Если требуется динамически управлять составом или размещением элементов, платформа предоставляет специальные программные методы и события.

Для генерации элементов в произвольный момент времени у таблицы динамического списка доступен метод СоздатьЭлементыФормыПользовательскихНастроек:


// Вызов метода генерации элементов формы
Элементы.Список.СоздатьЭлементыФормыПользовательскихНастроек(Элементы.ГруппаБыстрыхОтборов);

Если стандартное автоматическое размещение элементов не подходит, можно перехватить событие таблицы формы ПриОбновленииСоставаПользовательскихНастроекНаСервере. В этом обработчике можно отключить стандартное поведение и расположить сгенерированные элементы по собственным правилам:


&НаСервере
Процедура СписокПриОбновленииСоставаПользовательскихНастроекНаСервере(Элемент, СтандартнаяОбработка)
    
    // Если требуется полностью ручное управление элементами:
    // СтандартнаяОбработка = Ложь;
    
КонецПроцедуры

Особенности применения на формах без динамического списка

Рассмотрим ситуацию, когда требуется вывести отборы не для динамического списка, а для произвольного объекта КомпоновщикНастроекКомпоновкиДанных (например, на форме обработки или произвольного отчета).

Платформенный метод СоздатьЭлементыФормыПользовательскихНастроек и автоматическая привязка к группе формы реализованы исключительно в расширении таблицы формы для динамического списка и отчета. Для отдельного компоновщика настроек на форме обработки такой автоматической генерации «из коробки» нет.

В этом случае применяются следующие подходы:

  1. Создание явных реквизитов формы: на форму добавляются обычные реквизиты (поля ввода), а в их событиях ПриИзменении значения программно передаются в коллекцию КомпоновщикНастроек.Настройки.Отбор или КомпоновщикНастроек.ПользовательскиеНастройки.
  2. Отображение таблицы отбора: на форму выносится элемент управления типа Таблица с путем к данным КомпоновщикНастроек.Настройки.Отбор, что дает пользователю возможность интерактивно настраивать условия в виде таблицы.

Нюансы получения настроек и компоновки данных

Проанализируем частую ошибку при работе с отборами компоновщика: когда при вызове метода КомпоновщикНастроек.ПолучитьНастройки() формируется пустая выборка или не учитываются введенные пользователем значения.

Метод ПолучитьНастройки() возвращает только базовую структуру настроек схемы. Значения, которые пользователь ввел в элементах быстрого доступа, сохраняются отдельно в коллекции КомпоновщикНастроек.ПользовательскиеНастройки.

Чтобы корректно применить пользовательские отборы при ручном формировании отчета или макета, необходимо явно передавать пользовательские настройки в компоновщик макета:


КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(
    СхемаКомпоновкиДанных,
    КомпоновщикНастроек.ПолучитьНастройки(),
    ДанныеРасшифровки,
    ,
    ,
    КомпоновщикНастроек.ПользовательскиеНастройки
);

Также обратим внимание, что методы ПолучитьИсполняемуюСхемуКомпоновкиДанных() и ПолучитьИсполняемыеНастройкиКомпоновкиДанных() вызываются у элемента формы (таблицы списка), а не у самого прикладного объекта. Их вызов должен происходить только после полной инициализации формы и контекста данных списка.

← На главную