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