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