При разработке отчетов на системе компоновки данных (СКД) программисты часто сталкиваются с задачей создания сложной иерархической шапки. Обычный список детальных записей не всегда позволяет наглядно отобразить данные, особенно если требуется разнести показатели по категориям, которые являются значениями полей базы данных (например, формы обучения, уровни подготовки или периоды). В данной статье мы проанализируем ситуацию и разберем по шагам, как превратить плоский отчет в структурированную таблицу с вложенными группировками в колонках.
Когда нам нужно, чтобы заголовками колонок становились конкретные значения из базы данных (например, «Очная», «Заочная» формы обучения), мы должны использовать элемент настройки Таблица. Это классический способ реализации кросс-отчетов. Рассмотрим подробнее, как это настроить в конструкторе СКД:
Строки и Колонки.Строки добавим те поля, которые должны идти вертикально (например, Подразделение или ФизЛицо).Колонки добавим поле, значения которого должны стать шапкой. В нашем примере это может быть ФормаОбучения или УровеньПодготовки.КоличествоСтудентов).Выясним причину, почему это работает: СКД автоматически анализирует все имеющиеся данные и для каждого уникального значения в поле группировки колонок создает отдельный столбец. Если данных по конкретной форме обучения нет, колонка просто не будет выведена (если не настроено иное).
Если структура колонок заранее известна и не зависит от того, какие значения есть в базе данных, или если нам нужно объединить несколько разных ресурсов под один общий заголовок, мы используем механизм групп. Посмотрим на пример реализации такой задачи:
Допустим, нам нужно вывести общую группу «Успеваемость», внутри которой будут колонки «Средний балл» и «Количество пропусков». Разберем по шагам процесс настройки:
Заголовок введем текст, который будет отображаться в «верхней» части шапки.Расположение выберем значение Горизонтально (это критически важно для создания иерархии).Проанализируем ситуацию: такой подход позволяет создавать многоуровневые шапки неограниченной вложенности. Группы могут содержать в себе другие группы, формируя сложную «деревовидную» структуру заголовков отчета.
Иногда требуется более сложная логика, когда данные в колонки должны попадать не просто по значению поля, а по определенному условию. В этом случае нам помогут Вычисляемые поля. Рассмотрим подробнее, как это реализовать с помощью кода 1С в СКД:
Предположим, нам нужно вывести колонку, которая суммирует показатели только для студентов определенных курсов. Мы можем создать вычисляемое поле с выражением:
Выбор
Когда Курс В (1, 2) Тогда "Младшие курсы"
Когда Курс В (3, 4, 5) Тогда "Старшие курсы"
Конец
После создания такого поля мы можем использовать его в группировке колонок таблицы, как было описано в первом способе. СКД сгруппирует данные согласно нашему условию ВЫБОР.
Часто при создании сложных группировок стандартные итоги сверху или снизу мешают восприятию. Проанализируем ситуацию: пользователь просит убрать лишние итоги, чтобы отчет выглядел чище. Это настраивается в разделе «Другие настройки»:
Расположение итогов: установите значение Нет, если промежуточные итоги по группировкам не требуются.Расположение общих итогов по горизонтали: позволяет управлять итоговой колонкой «Всего» в конце таблицы.Расположение общих итогов по вертикали: управляет строкой «Итого» в конце или начале отчета.Если стандартного оформления СКД недостаточно для достижения нужного визуального эффекта (как отмечалось в обсуждении на форуме), следует использовать Макеты компоновки данных. Разберем по шагам, как создать индивидуальное оформление для шапки:
ФормаОбучения).Параметр и свяжем его с полем СКД.Важный момент: использование макетов позволяет полностью уйти от стандартного вида 1С-отчетов и приблизить их к печатным формам документов. Проанализируем ситуацию: хотя это требует больше времени на разработку, результат будет гораздо более удобным для конечного пользователя.
В заключение отметим, что для глубокого понимания работы с группировками рекомендуется изучать специализированную литературу, например, работы Е. Хрусталевой по СКД. Это база, которая позволяет решать 90% задач по проектированию сложных отчетов без написания избыточного кода в модулях объектов.