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