К статье
Практический материал

Отчеты и Аналитика · 9 мин

Что такое группировки в 1С и как ими пользоваться

Группировки в 1С: что это, где применяются, как настроить в отчётах и СКД. Примеры, типичные ошибки и ответы на вопросы.

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

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

Где в 1С встречаются группировки

Чаще всего пользователь сталкивается с группировками в отчётах. Откройте практически любой типовой отчёт — «Продажи», «Оборотно-сальдовая ведомость», «Анализ остатков на складах» — и вы увидите, что строки в нём сгруппированы: по контрагентам, счетам учёта, номенклатуре. Эта структура задаётся настройками варианта отчёта и может меняться без программирования.

Второе место применения — запросы. Конструкция СГРУППИРОВАТЬ ПО сворачивает данные до нужного уровня детализации, а секция ИТОГИ ПО формирует иерархические итоги, которые СКД затем превращает в группировки отчёта. Третий сценарий — динамические списки и таблицы значений, где разработчик может программно свернуть данные методом Свернуть().

Как настроить группировку в варианте отчёта

В типовых конфигурациях на управляемых формах структура отчёта меняется через кнопку «Настройки» или «Изменить вариант». В расширенном режиме настройки есть вкладка «Структура», где отображаются текущие группировки: строки, колонки, таблицы и диаграммы. Чтобы добавить новую группировку, выделите узел «Отчет» или существующую группировку и нажмите «Добавить» — «Новая группировка».

В появившемся окне выберите поле, по которому данные будут объединяться: «Контрагент», «Номенклатура», «Склад», «Период» и так далее. После добавления группировки в правой части окна настройте её поля: состав выводимых колонок, отбор внутри группы, сортировку и условное оформление. Порядок группировок определяет иерархию: верхняя группировка — внешний уровень, нижняя — вложенная в неё.

Порядок настройки группировки
  1. 1
    Откройте отчёт и нажмите «Настройки» → «Расширенная»
  2. 2
    Перейдите на вкладку «Структура» и выделите узел «Отчет»
  3. 3
    Нажмите «Добавить» → «Новая группировка» и выберите поле группировки
  4. 4
    В правой части задайте выводимые поля, сортировку и отбор
  5. 5
    Нажмите «Закрыть и сформировать» и проверьте результат

Проверка результата проста: в сформированном отчёте должны появиться строки-заголовки групп с итогами, а под ними — детальные записи или вложенные группы. Если группировка добавлена, но итогов не видно, проверьте, что в ресурсах отчёта (вкладка «Ресурсы») выбраны суммируемые поля и указан способ их расчёта.

Группировки в запросах: СГРУППИРОВАТЬ ПО и ИТОГИ

В языке запросов 1С есть два разных механизма, которые часто путают. Конструкция СГРУППИРОВАТЬ ПО сворачивает данные: на выходе остаётся по одной строке на каждую комбинацию значений группировочных полей, а числовые показатели вычисляются агрегатными функциями — СУММА, КОЛИЧЕСТВО, СРЕДНЕЕ, МАКСИМУМ, МИНИМУМ. Детальные строки при этом теряются.

Секция ИТОГИ ПО работает иначе: детальные записи сохраняются, а итоговые строки добавляются к результату как отдельный уровень выборки. Именно этот механизм лежит в основе иерархических отчётов. В СКД итоги обычно не пишут в запросе вручную — платформа строит группировки автоматически по настройкам структуры отчёта.

bsl
ВЫБРАТЬ
	Продажи.Контрагент КАК Контрагент,
	СУММА(Продажи.СуммаОборот) КАК Сумма
ИЗ
	РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода) КАК Продажи
СГРУППИРОВАТЬ ПО
	Продажи.Контрагент

Иерархия, вложенность и общие итоги

Группировки можно вкладывать друг в друга, создавая многоуровневые отчёты: организация → склад → номенклатура. Каждый уровень имеет собственные итоги, а на самом верху формируются общие итоги по отчёту. Уровень вложенности практически не ограничен, но на деле больше трёх-четырёх уровней делают отчёт трудночитаемым.

Для ссылочных полей доступен особый тип группировки — «Иерархия». Она выводит группы справочника как уровни отчёта: например, папки номенклатуры с итогами по каждой папке. Тип группировки выбирается при её добавлении: «Элементы» — только сами элементы, «Иерархия» — группы и элементы, «Только иерархия» — только папки.

Ресурсы и расчёт итогов

Итоги по группировкам считаются только для полей, объявленных ресурсами отчёта. В настройках СКД ресурсы находятся на одноимённой вкладке: там указывается поле, агрегатная функция и — важно — по каким группировкам ресурс рассчитывается. Если ресурс не распределён на конкретную группировку, итог в ней будет пустым.

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

Типичные ошибки
01
Добавление группировки без распределения ресурсов — итоговые строки пустые
02
Использование СГРУППИРОВАТЬ ПО там, где нужны детальные записи — данные теряются безвозвратно
03
Группировка по полю с большим числом пустых значений — в отчёте появляется огромная группа без названия
04
Слишком глубокая вложенность — отчёт становится нечитаемым и медленным
05
Изменение структуры типового варианта без сохранения собственного — настройки теряются при обновлении

Группировки в динамических списках и таблицах значений

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

Для таблиц значений в коде используется метод Свернуть("ПолеГруппировки", "СуммируемыеПоля"). Это аналог СГРУППИРОВАТЬ ПО: таблица сворачивается до уникальных комбинаций значений, числовые колонки суммируются, остальные данные удаляются. Перед свёрткой имеет смысл скопировать таблицу, если исходные данные ещё понадобятся.

Способы свёртки данных

СГРУППИРОВАТЬ ПО в запросе

Быстро и экономно по памяти, но детальные строки теряются на выходе

ИТОГИ ПО в запросе

Сохраняет детали и даёт иерархию итогов, результат обходится через выборку по группировкам

Группировки СКД

Гибкая настройка пользователем без кода, но требует отчёта на СКД

ТаблицаЗначений.Свернуть()

Просто для обработок в коде, но вся таблица уже должна быть в памяти

Когда группировки замедляют отчёт и что с этим делать

Каждая группировка заставляет платформу сортировать и агрегировать данные, поэтому сложная структура на больших объёмах формируется заметно дольше. Признаки проблемы: отчёт строится минутами, потребление памяти сервера растёт, пользователи жалуются на «зависания».

Что помогает на практике: убрать лишние уровни вложенности, заменить детальные записи группировкой по полю, сузить период и отборы, а для регулярных тяжёлых отчётов — использовать итоги регистров (следить, чтобы они были включены и актуальны) или выносить агрегацию в запрос. Если данные нужны только в свёрнутом виде, не тащите в выборку детальные поля — каждое лишнее поле увеличивает число строк результата.

Контрольные точки

Как проверить результат

Структура отчёта
Норма

Группы с заголовками и итогами, вложенность соответствует замыслу

Тревожный признак

Плоский список строк или одна пустая группа

Итоги по группам
Норма

Суммы по группам сходятся с контрольным отчётом

Тревожный признак

Пустые итоги или расхождения с эталоном

Скорость формирования
Норма

Отчёт строится за приемлемое время при рабочем объёме данных

Тревожный признак

Минутное ожидание, рост памяти сервера

Частые вопросы о группировках

Чем группировка отличается от отбора?

Отбор убирает лишние строки из отчёта, а группировка не удаляет данные, а структурирует их: все строки остаются, но раскладываются по группам с итогами. Отбор отвечает на вопрос «что показать», группировка — «как это организовать».

Почему в отчёте появилась пустая группа без названия?

Это строки, у которых поле группировки не заполнено. Например, документы без указанного склада при группировке по складам. Решение — заполнить данные в документах либо поставить отбор «Поле заполнено» в настройках отчёта.

Можно ли сгруппировать по периоду — месяцу или неделе?

Да. В настройках группировки для поля типа «Дата» доступна дополнительная настройка периодичности: день, неделя, месяц, квартал, год. В запросах для этого используются функции типа НАЧАЛОПЕРИОДА(Дата, МЕСЯЦ).

Как сохранить свою структуру группировок, чтобы не настраивать заново?

Сохраните настройки как отдельный вариант отчёта через «Ещё» → «Сохранить вариант отчёта». Вариант запоминает структуру, отборы и оформление и доступен при следующем открытии отчёта.

Почему итог по группе не равен сумме видимых строк?

Частые причины: в группу попадают скрытые отбором внутри группировки записи, ресурс рассчитывается по формуле, отличной от простой суммы, либо данные округляются при выводе. Проверьте выражение ресурса и отборы на каждом уровне структуры.

Итог

Что важно запомнить

Группировки превращают плоский список данных в структурированный отчёт с итогами. Настраиваются они в структуре варианта отчёта, а итоги появляются только для полей-ресурсов, распределённых на нужные группировки. В запросах выбирайте: СГРУППИРОВАТЬ ПО — если детали не нужны, ИТОГИ ПО — если нужна иерархия с детальными строками.