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