При создании отчетов на базе Системы компоновки данных (СКД) разработчики часто сталкиваются со стандартным иерархическим выводом группировок в виде «лесенки». Однако в некоторых случаях требуется представить данные в плоском виде, где каждая группировка занимает отдельную колонку или выводится в одну строку с родительскими данными. Рассмотрим детально, какими способами можно добиться такого результата, используя штатные настройки и расширенные возможности платформы 1С.
Самый простой и правильный способ изменить визуальную структуру отчета — воспользоваться системными настройками компоновки. Если нам необходимо, чтобы группировки не смещались вправо, образуя иерархию, а шли друг за другом как в обычной таблице, проанализируем вкладку Другие настройки.
Найдем параметр Расположение группировок. По умолчанию он установлен в значение Авто, что обычно приводит к иерархическому выводу. Для решения нашей задачи выберем один из следующих вариантов:
Счет, Субконто1, Субконто2) будет выведена в собственном столбце. Это идеальный вариант для создания плоских списков и реестров.Иногда требуется вывести значения подчиненных группировок в ту же строку, где находятся данные родителя. Посмотрим, как это сделать без изменения структуры самих группировок:
Вместе с группировкой.Это позволит дублировать значения для каждой строки, создавая визуальный эффект классической таблицы данных (Data Mining Style), где каждая запись содержит полный набор аналитик.
Если задача стоит в том, чтобы вывести все значения подчиненной группировки в одну ячейку через разделитель (например, перечислить все субконто через запятую напротив счета), воспользуемся механизмом ресурсов. Разберем этот метод по шагам:
СоединитьСтроки().Пример выражения для ресурса:
СоединитьСтроки(ТаблицаЗначений(Субконто), ", ", "Пусто")
Это выражение соберет все уникальные значения Субконто, относящиеся к текущей группировке, и выведет их в одну строку через запятую. Этот метод незаменим, когда нужно максимально компактно представить связанные данные без увеличения количества строк в отчете.
В ситуациях, когда стандартных настроек недостаточно и требуется специфическое объединение ячеек или нестандартная шапка, воспользуемся вкладкой Макеты. Система компоновки позволяет переопределить вывод любого элемента:
При создании макета мы указываем Область из макета-шаблона (табличного документа) и связываем параметры этой области с полями СКД. Это дает стопроцентную гибкость, но требует внимательности при обновлении структуры запроса.
Выясним причину, по которой иногда даже макеты не помогают. СКД имеет ограничение: она не умеет автоматически объединять ячейки по вертикали для повторяющихся значений в разных строках, если это не предусмотрено стандартным выводом. Если вам нужен сложный отчет с вертикальным объединением («мерджингом»), используем программный вывод:
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
После выполнения метода Вывести() мы можем программно обойти полученный ТабличныйДокумент и применить к нему методы Область().Объединить() или изменить условное оформление тех ячеек, которые не поддались стандартной настройке. Однако к этому способу стоит прибегать только в крайнем случае, так как он снижает производительность и усложняет поддержку отчета.
Для большинства задач достаточно изменить Расположение группировок на В отдельных колонках в настройках отчета. Если же требуется объединение данных в одну ячейку — используйте СоединитьСтроки в ресурсах. Для сложного визуального оформления применяйте Макеты, которые позволяют задать структуру строки в визуальном редакторе.