Как реализовать группировку и сворачивание колонок-ресурсов в отчете СКД по таблице значений?

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

При разработке сложных отчетов в Системе компоновки данных (СКД), особенно когда источником данных выступает внешняя ТаблицаЗначений, программисты часто сталкиваются с проблемой визуального перегруза. Если в отчете представлено большое количество ресурсов (например, 20-30 колонок), пользователю становится трудно ориентироваться в данных. Стандартное объединение полей в группы в настройках "Выбранные поля" создает визуальные заголовки, но не дает возможности интерактивно сворачивать и разворачивать эти группы с помощью кнопок "+" и "-".

В этой статье мы подробно рассмотрим, как настроить иерархию колонок так, чтобы они вели себя аналогично строковым группировкам, и выясним, как вернуть "пропавшие" итоги в подвале отчета после изменения его структуры.

Способ 1: Использование структуры группировок колонок

Рассмотрим основной подход, который позволяет добиться появления кнопок сворачивания. Вместо того чтобы просто добавлять все ресурсы в список "Выбранные поля" детальных записей, нам необходимо создать иерархическую структуру непосредственно в настройках колонок отчета.

Разберем ситуацию по шагам:

  1. Перейдем на закладку Настройки в схеме СКД.
  2. В окне структуры отчета выделим секцию Колонки.
  3. Вместо использования стандартных "Детальных записей", добавим новую группировку. Если у нас нет конкретного поля для группировки (все 27 колонок — это независимые ресурсы из ТЗ), мы можем создать пустую группировку или группировку по определенному логическому признаку.
  4. Для того чтобы колонки сворачивались под общий заголовок, нам нужно создать "родительскую" группировку. Внутри нее мы можем разместить ресурсы.
  5. Важный нюанс: чтобы СКД поняла, что ресурсы нужно сгруппировать, мы должны отключить автополе в выбранных полях этой группировки и добавить нужные ресурсы вручную.

Проанализируем пример настройки структуры:

Способ 2: Использование вычисляемых полей для создания заголовков

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

Создадим на закладке Вычисляемые поля новое поле, например, ГруппаПоказателейПродаж. В выражении просто укажем строковое значение в кавычках: "Показатели продаж". Теперь в настройках отчета в секцию "Колонки" добавим группировку по этому вычисляемому полю. Внутрь этой группировки поместим наши детальные записи или конкретные ресурсы. Теперь при формировании отчета СКД создаст общую "шапку" с заголовком "Показатели продаж", которую можно будет свернуть.

Рассмотрим преимущества этого метода:

Решение проблемы с исчезновением итогов в подвале

Часто после ручной настройки иерархии колонок программисты замечают, что внизу отчета пропадают Общие итоги. Это происходит потому, что СКД при усложнении структуры колонок переходит из автоматического режима расчета итогов в ручной.

Разберем, как восстановить итоги по шагам:

  1. Выделим корневой элемент в настройках отчета (самую верхнюю строку "Отчет").
  2. Перейдем на закладку Другие настройки.
  3. Найдем параметр Расположение общих итогов по вертикали.
  4. Вместо значения "Авто", принудительно установим значение Конец.
  5. Аналогично проверим параметр Расположение общих итогов по горизонтали (установите "Конец", если итоги нужны справа).

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

Трансформация данных для универсального решения (Unpivot)

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

Посмотрим на пример кода трансформации таблицы:


// Допустим, ТЗ_Исходная имеет колонки: Товар, Склад, Продажи, Остаток...
// Создадим ТЗ_Результат с колонками: Товар, Склад, ИмяПоказателя, Значение

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

В СКД в этом случае настройка будет максимально простой:

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

Этот метод обеспечивает автоматическое появление кнопок "+" и "-" без сложной ручной настройки каждого из 27 ресурсов в схеме.

Дополнительные настройки оформления

При использовании группировки колонок важно следить за тем, как отображаются заголовки. В Других настройках группировки колонок обратите внимание на параметр Тип макета. Если установить его в значение "Заголовок", вы сможете более гибко управлять визуальным представлением сворачиваемой группы.

Также рекомендуется проверить параметр Расположение ресурсов. В некоторых случаях СКД может выводить ресурсы вертикально (один под другим в одной колонке), что затрудняет чтение. Установите значение Горизонтально, чтобы каждый ресурс занимал свою отдельную колонку внутри вашей интерактивной группы.

Таким образом, комбинируя ручную настройку структуры колонок и управление параметрами вывода итогов в "Других настройках", мы получаем функциональный и удобный отчет, который корректно работает с внешними данными из ТаблицыЗначений.

← На главную