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