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

Программист 1С v8.3 (Управляемые формы)
← На главную

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

Понимание структуры «Таблица» в СКД

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

Рассмотрим по шагам, как настроить таблицу для горизонтального вывода:

  1. Перейдите на закладку Настройки в схеме компоновки данных.
  2. Нажмите правой кнопкой мыши на корень настроек и выберите Новая таблица.
  3. В таблице есть две основные секции: Строки и Колонки.
  4. Чтобы подразделения выводились горизонтально, перетащите поле Подразделение в секцию Колонки.
  5. В секцию Строки необходимо добавить те данные, которые должны идти вертикально под каждым подразделением (например, Сотрудник).

Проблема: Если мы просто добавим Сотрудник в строки, СКД попытается сопоставить каждого сотрудника с каждым подразделением. Если сотрудник «Иванов» работает только в «Отделе продаж», то в колонках других отделов напротив него будут пустые ячейки. Это создаст «шахматку», а не компактный список. В некоторых случаях полезно изучить решение СКД. Нет данных - нет столбцов, чтобы скрывать лишние области.

Метод выравнивания через искусственный ключ (Номер строки)

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

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

  1. В схеме на закладке Вычисляемые поля добавьте новое поле ПорядковыйНомер.
  2. В выражении ресурса (на закладке Ресурсы) укажите для него формулу: Количество(Сотрудник) или используйте функцию ВычислитьВыражение.
  3. Более надежный способ — использовать в настройках выражение для нумерации строк (в отладке поможет Управляемая консоль запросов, отчетов 3.9.0 (расширение, внешняя обработка)):

    
    ВычислитьВыражение("Количество(Сотрудник)", , "Группировка", "Первая", "Текущая")
    
  4. Теперь в настройках Таблицы в Строки добавьте группировку по этому ПорядковомуНомеру.
  5. Внутрь этой группировки (или в выбранные поля) добавьте поле Сотрудник.

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

Особенности параметра «Тип макета»

Часто возникает путаница с параметром Тип макета (Вертикальный/Горизонтальный) в настройках группировки. Выясним причину, почему он «не работает» для разворота всей таблицы.

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

Использование вложенных отчетов для сложных структур

Если под каждым подразделением должна выводиться не просто колонка, а сложная таблица с собственными итогами и заголовками, лучше всего использовать механизм Вложенных схем. Разберем этот вариант подробнее.

Проанализируем структуру такого решения:

  1. Создается основная схема, которая выбирает только список Подразделений.
  2. В настройках основной схемы создается таблица, где в колонках стоит Подразделение.
  3. В ячейку (строку) этой таблицы вставляется Вложенный отчет.
  4. Во вложенном отчете настраивается выборка сотрудников, где в параметрах указана связь: Подразделение (из основной схемы) = Подразделение (параметр вложенной схемы).

Этот метод позволяет добиться максимальной гибкости, так как вложенный отчет — это фактически полноценная СКД, в которой можно рисовать любые макеты.

Программный вывод через «Присоединить»

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

Вместо стандартного метода Вывести(), который добавляет блоки данных сверху вниз, мы будем использовать метод Присоединить(). Проанализируем фрагмент кода:


// Сначала выводим первую колонку (левую часть отчета)
ТабличныйДокумент.Вывести(ОбластьСПервымПодразделением);

// Для всех последующих подразделений используем Присоединить
Пока ВыборкаПодразделений.Следующий() Цикл
    ТабличныйДокумент.Присоединить(ОбластьСПоследующимПодразделением);
КонецЦикла;

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

Настройка макетов оформления

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

  1. Добавьте Макет группировки.
  2. Выберите тип группировки (Заголовок или Тело) и укажите поле Подразделение.
  3. Тип макета укажите как Горизонтальный.
  4. В области макета нарисуйте нужный дизайн ячеек.

Именно использование собственных макетов в сочетании со структурой Таблица позволяет создавать отчеты любой сложности, которые выглядят как профессиональные бланки или дашборды с горизонтальным распределением данных.

Важный совет: При горизонтальном выводе обязательно следите за шириной колонок. В настройках выбранных полей для Подразделения рекомендуется установить параметры Минимальная ширина и Максимальная ширина. Это предотвратит ситуацию, когда из-за длинного названия одного отдела вся таблица «расползается» и становится нечитаемой на экране.

← На главную