Как настроить вывод группировок в СКД построчно и в отдельных колонках?

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

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

Настройка расположения группировок через системные параметры

Самый простой и правильный способ изменить визуальную структуру отчета — воспользоваться системными настройками компоновки. Если нам необходимо, чтобы группировки не смещались вправо, образуя иерархию, а шли друг за другом как в обычной таблице, проанализируем вкладку Другие настройки.

Найдем параметр Расположение группировок. По умолчанию он установлен в значение Авто, что обычно приводит к иерархическому выводу. Для решения нашей задачи выберем один из следующих вариантов:

  1. В отдельных колонках — этот режим полностью убирает эффект «лесенки». Каждая группировка (например, Счет, Субконто1, Субконто2) будет выведена в собственном столбце. Это идеальный вариант для создания плоских списков и реестров.
  2. Начало основной колонки / Конец основной колонки — позволяет управлять местоположением заголовков и итогов внутри группировочной области, что полезно при сложной верстке макета.

Использование выбранных полей для создания «плоского» вида

Иногда требуется вывести значения подчиненных группировок в ту же строку, где находятся данные родителя. Посмотрим, как это сделать без изменения структуры самих группировок:

  1. Перейдем в настройки конкретной группировки верхнего уровня.
  2. На вкладке Выбранные поля добавим не только поля самой группировки, но и реквизиты дочерних записей.
  3. В настройке Расположение реквизитов выберем значение Вместе с группировкой.

Это позволит дублировать значения для каждой строки, создавая визуальный эффект классической таблицы данных (Data Mining Style), где каждая запись содержит полный набор аналитик.

Применение функции СоединитьСтроки() для агрегации данных

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

  1. Перейдем на вкладку Ресурсы в схеме компоновки данных.
  2. Добавим поле, которое нужно собрать в строку.
  3. В поле Выражение напишем функцию СоединитьСтроки().

Пример выражения для ресурса:

СоединитьСтроки(ТаблицаЗначений(Субконто), ", ", "Пусто")

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

Полный контроль через макеты оформления

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

При создании макета мы указываем Область из макета-шаблона (табличного документа) и связываем параметры этой области с полями СКД. Это дает стопроцентную гибкость, но требует внимательности при обновлении структуры запроса.

Программная доработка результата

Выясним причину, по которой иногда даже макеты не помогают. СКД имеет ограничение: она не умеет автоматически объединять ячейки по вертикали для повторяющихся значений в разных строках, если это не предусмотрено стандартным выводом. Если вам нужен сложный отчет с вертикальным объединением («мерджингом»), используем программный вывод:


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

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

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

Резюме по выбору метода

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

← На главную