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