Как динамически добавить текст к названию или заголовку поля в СКД

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

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

Метод 1. Использование «Выражения представления» в наборе данных

Проанализируем самый простой и эффективный способ, который работает даже для динамических колонок. В СКД у каждого поля есть свойство Выражение представления. Оно определяет, как значение поля будет выглядеть в конечном отчете, не меняя при этом само значение для расчетов.

Рассмотрим по шагам, как это настроить:

  1. Откроем схему компоновки данных и перейдем на закладку Наборы данных.
  2. Найдем поле, которое отвечает за вывод номера (например, НомерИтерации).
  3. В колонке Выражение представления нам нужно написать формулу.

Частая ошибка начинающих разработчиков — попытка простого сложения строки и числа, например: "Номер итерации №" + НомерИтерации. При выводе отчета 1С выдаст ошибку: "Неверные параметры +". Это происходит потому, что система не может автоматически привести число к строке внутри выражения СКД.

Выясним причину: СКД требует явного преобразования типов. Рассмотрим правильный вариант написания выражения:

"Номер итерации № " + Формат(НомерИтерации, "ЧГ=0")

Разберем, почему мы использовали Формат, а не просто Строка. Функция Строка() в 1С при работе с большими числами (например, 1000) может добавлять неразрывный пробел как разделитель разрядов. Это испортит заголовок. Использование Формат(..., "ЧГ=0") гарантирует, что число будет выведено "как есть", без лишних пробелов.

Метод 2. Обработка пустых значений (NULL) в заголовках

Проанализируем ситуацию, когда поле может содержать пустое значение. Если НомерИтерации окажется равен NULL, результат сложения со строкой тоже может стать неопределенным или вызвать ошибку в зависимости от настроек СУБД. Чтобы заголовок всегда выглядел корректно, применим функцию ЕстьNull.

Посмотрим на пример надежного выражения:

"Номер итерации № " + Формат(ЕстьNull(НомерИтерации, 0), "ЧГ=0")

В данном случае, если данных нет, пользователь увидит "Номер итерации № 0" вместо пустой ячейки или системной ошибки. Это делает отчет более профессиональным и понятным.

Метод 3. Программное изменение заголовков перед выводом

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

Этот метод позволяет перебирать структуру настроек и принудительно устанавливать свойство Заголовок для нужных элементов. Разберем пример кода:


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

    // Далее стандартный вывод
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Результат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
КонецПроцедуры

Этот способ дает максимальный контроль. Мы можем изменять заголовки в зависимости от параметров отчета, текущей даты или прав доступа пользователя.

Метод 4. Использование макетов оформления

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

Рассмотрим алгоритм действий:

  1. Переходим на закладку Макеты.
  2. Добавляем Макет заголовка группировки.
  3. Указываем имя поля (наш НомерИтерации).
  4. В области макета создаем ячейку, устанавливаем ей тип Параметр.
  5. В выражении параметра пишем уже знакомую нам формулу: "№ " + Представление(НомерИтерации).

Преимущество данного метода: Вы можете оформить ячейку заголовка в редакторе (границы, шрифты), и это оформление применится ко всем динамически созданным колонкам этого поля.

Важные нюансы при экспорте в Excel

Проанализируем, как наши изменения повлияют на дальнейшую работу с отчетом. Использование Выражения представления удобно тем, что в самом значении ячейки (для системы) остается число. Это позволяет:

Резюме: Если вам нужно быстро добавить префикс к заголовку динамической колонки, используйте "Текст " + Формат(Поле, "ЧГ=0") в Выражении представления. Если же требуется сложное форматирование — используйте программную обработку в ПриКомпоновкеРезультата или макеты оформления.

← На главную