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