Отчеты и Аналитика · 11 мин
Как сгруппировать колонки в СКД 1С
Как сгруппировать колонки в СКД 1С: настройка группировок в схеме компоновки данных, вложенные группировки, итоги, ресурсы и типичные ошибки при настройке отчётов.
Группировка в системе компоновки данных (СКД) — это способ объединить записи отчёта по значению одного или нескольких полей и показать по ним итоги. Без группировок отчёт выводит плоский список строк, что удобно только для простых реестров. Как только нужно увидеть продажи по менеджерам, остатки по складам или обороты по месяцам — без группировки не обойтись.
В СКД группировки бывают двух видов: группировки строк (вертикальная структура отчёта) и группировки колонок (горизонтальная). Колонки настраиваются только внутри элемента «Таблица» или «Диаграмма» — в обычной иерархической структуре отчёта есть только строки. Именно это различие чаще всего сбивает с толку начинающих разработчиков: они ищут «колонки» там, где их по определению нет.
Настройка выполняется в конструкторе схемы компоновки на вкладке «Настройки», либо программно — через объект НастройкиКомпоновкиДанных. Оба способа дают одинаковый результат, но визуальный редактор быстрее для разработки, а программный подход нужен, когда структура отчёта зависит от параметров или прав пользователя.
Где в СКД настраиваются группировки строк и колонок
Откройте схему компоновки данных отчёта и перейдите на вкладку «Настройки». В левой части находится дерево структуры отчёта: корневой элемент «Отчёт», внутри которого можно добавлять группировки, таблицы и диаграммы. Правая часть показывает настройки выбранного элемента — выбранные поля, отбор, сортировку, параметры вывода.
Простая группировка (без таблицы) всегда формирует строки. Чтобы появились колонки, добавьте в структуру отчёта элемент «Таблица»: у него есть два вложенных узла — «Строки» и «Колонки». В каждый из них добавляются свои группировки. Например, строки — «Номенклатура», колонки — «ПериодМесяц»: получится кросс-таблица продаж по товарам в разрезе месяцев.
Важно понимать, что поле, доступное для группировки, должно присутствовать в наборе данных. Если поле не выбрано в запросе набора данных или не добавлено на вкладке «Настройки» в список доступных, перетащить его в группировку не получится. Проверяйте секцию запроса и вкладку «Ресурсы» до настройки структуры.
Пошаговая настройка простой группировки строк
Самый частый сценарий — сгруппировать детальные записи по одному измерению, например вывести продажи по контрагентам. Порядок действий в конструкторе СКД одинаков для большинства типовых конфигураций и самописных отчётов.
- 1Откройте схему компоновки данных и перейдите на вкладку «Настройки».
- 2Убедитесь, что нужные поля есть в наборе данных и добавлены в «Выбранные поля» отчёта.
- 3В дереве структуры выделите «Отчёт», нажмите «Добавить» и выберите «Новая группировка».
- 4В поле группировки укажите измерение, например «Контрагент».
- 5Внутри группировки добавьте «Детальные записи», если нужно видеть строки внутри каждой группы.
- 6На вкладке «Ресурсы» проверьте, что суммируемые поля (например, «Сумма») добавлены как ресурсы.
- 7Сформируйте отчёт и проверьте наличие итогов по группам.
После добавления группировки в её «Выбранные поля» автоматически попадает поле группировки и ресурсы. Если нужно вывести дополнительные поля на уровне группы (например, телефон контрагента), добавьте их в выбранные поля самой группировки, а не детальных записей — иначе значение продублируется в каждой строке.
Итоги по группе выводятся автоматически, если поле-ресурс описано на вкладке «Ресурсы» с агрегатной функцией (Сумма, Количество, Среднее и т.д.). Если итог пустой или равен нулю, первым делом проверяйте именно эту вкладку: поле могло не попасть в ресурсы или для него указан неверный расчёт.
Как сгруппировать колонки через таблицу (кросс-отчёт)
Для группировки по колонкам добавьте в структуру отчёта элемент «Таблица». Внутри таблицы появятся узлы «Строки» и «Колонки». В узел «Строки» добавьте группировку по основному измерению (например, «Номенклатура»), в узел «Колонки» — по полю, которое должно разворачиваться горизонтально (например, «Склад» или «Период»).
На пересечении строк и колонок СКД выводит значения ресурсов. В выбранные поля таблицы достаточно добавить сам ресурс — платформа сама разнесёт его по ячейкам. Если ресурсов несколько, они выстроятся последовательно внутри каждой колонки, что иногда делает отчёт шире, чем ожидалось.
Если колонки должны идти в строгом порядке (например, месяцы года), настройте сортировку внутри группировки колонок. Для периодов дополнительно полезно указать «Тип дополнения» в настройках поля группировки — тогда в отчёт попадут и пустые периоды, за которые не было данных, что критично для помесячной динамики.
Вложенные группировки и иерархия
Группировки можно вкладывать друг в друга: «Организация» → «Контрагент» → «Детальные записи». Каждая вложенная группировка уточняет предыдущую. Итоги при этом считаются на каждом уровне: по контрагенту, по организации и общий итог по отчёту.
Есть два способа построить такую структуру: вложить группировки одна в другую в дереве настроек либо добавить в одну группировку несколько полей. Результат отличается: несколько полей в одной группировке выводятся в одной строке через запятую (или в соседних колонках), а вложенные группировки дают классическую древовидную структуру с отдельными строками итогов. Для отчётов, которые будут сворачивать пользователи, вложенные группировки удобнее.
Иерархические группировки (по иерархии справочника) включаются выбором типа группировки «Иерархия» или «Только иерархия» в свойствах поля группировки. Это актуально для папок номенклатуры или статей затрат. Учтите: итоги по иерархии считаются корректно только если запрос набора данных возвращает данные с учётом иерархии или это обеспечивает сама СКД через поле-ссылку.
Настройка ресурсов и итогов по группам
Вкладка «Ресурсы» определяет, какие числа будут суммироваться в итогах. Для каждого ресурса указывается выражение (обычно Сумма(СуммаОборот)) и группировки, по которым ресурс считается. Если оставить список «Рассчитывать по» пустым, ресурс считается по всем группировкам — это стандартное поведение.
Для нестандартных итогов (среднее, количество различных, максимум) измените агрегатную функцию в выражении ресурса, например Количество(Различные Заказ). Помните, что среднее по группе, посчитанное как среднее детальных значений, и среднее, вычисленное как деление суммы на количество, могут отличаться — выбирайте формулу осознанно под задачу.
Программная настройка группировок
Когда структура отчёта должна меняться в зависимости от параметров, группировки добавляют кодом. Работа идёт с объектом настроек компоновщика: создаётся группировка, в неё добавляется поле, затем задаются выбранные поля.
Настройки = Отчет.КомпоновщикНастроек.Настройки;
Группировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ПолеГруппировки = Группировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Контрагент");
ПолеГруппировки.Использование = Истина;
ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("СуммаОборот");
Для колонок логика аналогична, но сначала в структуру добавляется ТаблицаКомпоновкиДанных, а группировки создаются в её коллекциях Строки и Колонки. После программного изменения настроек отчёт нужно переформировать. При работе в управляемых формах не забывайте, что пользовательские настройки могут перекрывать заданную программно структуру — при необходимости очищайте или корректируйте их.
Перед программной настройкой структуры удобно сначала собрать нужный вариант в конструкторе настроек в режиме предприятия, сохранить его в файл XML и посмотреть, какие элементы и свойства заполнила платформа. Это быстрее, чем искать состав свойств в синтакс-помощнике.
Проверка результата и ограничения
После настройки сформируйте отчёт и проверьте три вещи: наличие строк группировки с итогами, корректность сумм (сверьте общий итог с контрольным значением из исходных данных) и поведение при сворачивании групп. Если итог группы не сходится с суммой детальных строк — почти всегда проблема в ресурсах или в связях наборов данных.
Как проверить результат
Сумма по группе равна сумме её детальных строк
Итог пустой, нулевой или меньше суммы строк — проверяйте вкладку «Ресурсы»
Группы сворачиваются, колонки разворачивают данные горизонтально
Вместо колонок — вложенные строки, группировка добавлена не в тот узел
Совпадает с контрольной суммой по данным за период
Расходится — проверяйте отборы, связи наборов и дублирование строк в запросе
Учитывайте ограничения: СКД не умеет группировать колонки вне таблицы и диаграммы; количество колонок ограничено здравым смыслом и производительностью; при большом объёме данных вложенные иерархические группировки могут заметно замедлять формирование. Для тяжёлых отчётов переносите агрегацию в запрос (временные таблицы, группировка в самом запросе), а СКД используйте только для представления.
Что важно запомнить
Строки группируются обычной группировкой в структуре отчёта, колонки — только группировкой внутри элемента «Таблица». Итоги считаются по ресурсам с агрегатными функциями. Для вложенности используйте вложенные группировки, а не несколько полей в одной. Большинство проблем с итогами решается на вкладке «Ресурсы».
Частые вопросы по группировке в СКД
Почему поле недоступно для добавления в группировку?
Поле отсутствует в наборе данных, не отмечено как доступное или для него снято использование. Проверьте запрос набора данных, список полей на вкладке «Настройки» и свойства поля на вкладке «Наборы данных» — там может быть снят флаг доступности или поле помечено как ресурс, а ресурсы группировками быть не могут.
Как вывести итоги по группе в начале строки, а не в конце?
В настройках группировки на вкладке «Другие настройки» есть параметр «Расположение итогов». Установите значение «Начало» — строка итогов группы появится перед детальными записями. Аналогично настраивается расположение общих итогов для всего отчёта.
Можно ли сгруппировать по вычисляемому полю?
Да. Создайте вычисляемое поле на соответствующей вкладке схемы компоновки, задайте выражение (например, выделение месяца из даты или категорию по условию), после чего поле станет доступно для группировки наравне с полями набора данных.
Как убрать детальные записи и оставить только итоги по группам?
Удалите из структуры отчёта элемент «Детальные записи» внутри группировки. Отчёт покажет только строки групп с итогами. Если детальные записи нужны иногда, оставьте их, но отключите через пользовательские настройки — так пользователь сможет включать их сам.
Почему в кросс-таблице колонки идут в произвольном порядке?
Порядок колонок определяется сортировкой внутри группировки колонок. Добавьте в настройки группировки колонок сортировку по нужному полю (например, по периоду по возрастанию). Для строковых полей, где нужен неалфавитный порядок, добавьте в запрос служебное поле порядка и сортируйте по нему.
Чем группировка в СКД отличается от группировки в запросе?
Группировка в запросе агрегирует данные на уровне СУБД и уменьшает объём выборки, но фиксирует структуру. Группировка СКД работает поверх детальных данных и позволяет менять структуру отчёта в настройках без изменения запроса. Оптимально комбинировать: грубую агрегацию делать в запросе, гибкую визуальную структуру — средствами СКД.