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

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

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

Разберем по шагам доступные способы реализации обоих требований, а также проанализируем ограничения платформы 1С при работе со строковым форматированием.

Задача 1. Динамическое изменение заголовка колонки по параметру отбора

Если требуется, чтобы имя колонки совпадает со значением выбранного параметра (например, наименованием характеристики или номенклатуры), стандартными настройками схемы компоновки данных обойтись не получится. Имена полей в схеме являются статическими. Однако эту задачу можно легко решить с помощью программного кода в модуле отчета.

Рассмотрим порядок действий для динамической подмены заголовка выбранного поля в модуле отчета:

  1. Откроем модуль отчета СКД и перейдем к обработчику события ПриКомпоновкеРезультата().
  2. Извлечем значение нужного параметра из настроек компоновщика.
  3. Пройдем по структуре колонок отчета и изменим свойство Заголовок у нужного элемента вывода.

Проанализируем пример программной реализации:


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

КонецПроцедуры

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

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

Задача 2. Объединение двух показателей «Остаток» и «Динамика» в одну ячейку

Выясним, как вывести в одной ячейке сразу два числовых значения в формате Остаток (Динамика), например 15 (+10).

Существует три основных способа реализации этой задачи:

Способ A. Использование вычисляемого поля или выражения представления

Самый простой и гибкий метод — создание нового вычисляемого поля на вкладке Вычисляемые поля в схеме компоновки данных.

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

Формат(Остаток, "ЧДЦ=0") + " (" + Формат(Динамика, "ЧДЦ=0; ЧН=0; ЧО=+") + ")"

Если необходимо скрывать вывод динамики, если она равна нулю, можно использовать условное выражение:


Формат(Остаток, "ЧДЦ=0") + ВЫБОР КОГДА Динамика <> 0 ТОГДА " (" + Формат(Динамика, "ЧДЦ=0; ЧО=+") + ")" ИНАЧЕ "" КОНЕЦ

Если эти данные необходимо выводить и в итоговых группировках, на вкладке Ресурсы для данного вычисляемого поля необходимо прописать аналогичную формулу агрегирования с суммированием исходных числовых полей:


Формат(Сумма(Остаток), "ЧДЦ=0") + " (" + Формат(Сумма(Динамика), "ЧДЦ=0; ЧО=+") + ")"

Способ Б. Использование пользовательского макета ячейки

Если к отчету предъявляются особые требования по визуальному оформлению, можно настроить собственный макет поля в СКД:

  1. Переходим на вкладку Макета в схеме компоновки данных.
  2. Добавляем макет поля для нужного показателя.
  3. В ячейке макета задаем текст шаблона: [Остаток] ([Динамика]).
  4. В свойствах ячейки устанавливаем режим заполнения Шаблон.
  5. В таблице параметров макета связываем выражения Остаток и Динамика с соответствующими полями набора данных и задаем для них форматирование.

Важные ограничения платформы 1С

При оформлении комбинированных полей следует учитывать технические особенности платформы:

1. Отсутствие частичного форматирования внутри ячейки. В 1С невозможно применить разное оформление (например, сделать одно слово красным, а другое зеленым, или выводить часть текста верхним индексом) к отдельным фрагментам текста в рамках одной ячейки. Цвет, шрифт и размер всегда применяются ко всей ячейке целиком с помощью условного оформления.

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

← На главную