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