Как использовать необязательные параметры в виртуальных таблицах при работе с Построителем отчета?

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

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

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

Понимание работы фигурных скобок в Построителе отчета

В тексте запроса, который вы передаете в ПостроительОтчета.Текст, фигурные скобки {} обозначают области, доступные для управления через коллекции Отбор, ВыбранныеПоля и другие. Когда вы размещаете условие внутри параметров виртуальной таблицы, вы сообщаете построителю, что это поле можно включать или выключать программно.

Важно помнить: передача значения через ПостроительОтчета.Параметры.Вставить("Имя", Значение) в данном случае не приведет к автоматической фильтрации данных внутри виртуальной таблицы. Фильтрация будет игнорироваться, если не настроить соответствующий элемент в коллекции Отбор.

Пошаговое решение задачи

Разберем процесс настройки на примере фильтрации по контрагентам в остатках регистра накопления.

  1. Определение условий в запросе: В тексте запроса укажите параметр в фигурных скобках с использованием псевдонима. Это позволит отделить имя поля в регистре от имени отбора в объекте ПостроительОтчета.
    
    ВЫБРАТЬ
    Долги.Контрагент КАК Контрагент,
    Долги.СуммаРубОстаток КАК СуммаДолга
    ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(, Фирма = &Фирма {(Контрагент КАК Покупатели)}) КАК Долги
    
  2. Программная настройка отбора: В коде модуля, перед вызовом метода Выполнить(), необходимо обратиться к коллекции Отбор построителя.
    
    ПолеОтбора = ПостроительОтчета.Отбор.Добавить("Покупатели");
    Если ЗначениеЗаполнено(Покупатели) Тогда
        ПолеОтбора.Значение = Покупатели;
        ПолеОтбора.Использование = Истина;
        ПолеОтбора.ВидСравнения = ВидСравнения.ВСпискеПоИерархии;
    Иначе
        ПолеОтбора.Использование = Ложь;
    КонецЕсли;
    

Почему важно использовать коллекцию Отбор?

Использование связки {(Поле КАК Псевдоним)} и коллекции Отбор дает два ключевых преимущества:

Советы по оптимизации кода

При написании кода можно сделать его более лаконичным. Например, вместо удаления элемента из коллекции Отбор, достаточно просто управлять свойством Использование:


// Более компактный подход
ПолеОтбора = ПостроительОтчета.Отбор.Найти("Покупатели");
Если ПолеОтбора <> Неопределено Тогда
    ПолеОтбора.Использование = ЗначениеЗаполнено(Покупатели);
    Если ПолеОтбора.Использование Тогда
        ПолеОтбора.Значение = Покупатели;
    КонецЕсли;
КонецЕсли;

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

← На главную