Группировки в 1С 8.3: от строк отчёта до итогов в запросе
Содержание
Группировка в 1С собирает строки с одинаковым значением поля в один уровень и считает по нему итог. В готовом отчёте её меняют в форме настроек на вкладке структуры, в своём отчёте — на вкладке Настройки конструктора схемы компоновки данных, а в запросе за неё отвечают две разные конструкции: СГРУППИРОВАТЬ ПО и ИТОГИ ПО.
Работает группировка по одной схеме: есть поля, по которым строки объединяются (контрагент, номенклатура, месяц), и ресурсы — числа, которые на каждом уровне суммируются или считаются другой агрегатной функцией. Если поле не назначено ресурсом, итога по нему не будет. Отсюда и большинство вопросов «почему в группе пусто».
Как устроена иерархия данных в отчёте
Отчёт на системе компоновки данных (СКД) — это дерево. Корень называется «Отчет», под ним идут группировки, под ними — вложенные группировки и, в самом низу, детальные записи.
Пример структуры отчёта о продажах:
Отчет
└── Контрагент
└── Номенклатура
└── Детальные записи (документ, дата, количество, сумма)
На выходе получается такая таблица:
| Уровень | Что в строке | Сумма |
|---|---|---|
| Контрагент | ООО «Ромашка» | 150 000 |
| Номенклатура | Бумага А4 | 90 000 |
| Детальная запись | Реализация № 12 | 40 000 |
| Детальная запись | Реализация № 17 | 50 000 |
| Номенклатура | Картридж | 60 000 |
| Общий итог | 150 000 |
Итог группы равен сумме её подчинённых строк: 40 000 + 50 000 = 90 000 по бумаге, 90 000 + 60 000 = 150 000 по контрагенту.
Три вида уровней, которые стоит различать:
- 📁 Группировка по полю — строки с одинаковым значением поля сворачиваются в одну.
- 📄 Детальные записи — группировка без полей. Она выводит исходные строки набора данных без свёртки.
- 🌳 Иерархическая группировка — для справочников с группами (номенклатура, контрагенты, статьи затрат) выводит ещё и папки справочника с промежуточными итогами.
Типы группировки по иерархии
У каждого поля группировки в СКД есть тип. От него зависит, будут ли видны папки справочника.
| Тип | Что выводит | Когда нужен |
|---|---|---|
| Элементы | Только элементы, без папок | Плоский список товаров или клиентов |
| Иерархия | Папки с итогами и элементы внутри | Продажи по товарным группам с расшифровкой |
| Только иерархия | Только папки, без элементов | Сводка по группам, когда элементов тысячи |
Иерархия работает, только если справочник иерархический. Для неиерархического справочника тип «Иерархия» ничего не добавит — выведутся те же элементы.
Настройка группировок в готовом отчёте и в конструкторе
Типовой отчёт в режиме 1С:Предприятие
Стандартные отчёты типовых конфигураций (БП 3.0, ЗУП 3.1, УТ 11) построены на СКД, поэтому порядок одинаковый:
- Откройте отчёт и нажмите кнопку
Настройки. - Переключите вид настроек на расширенный — без этого вкладка структуры не показывается.
- На вкладке структуры выделите узел, под которым нужен новый уровень, и добавьте группировку.
- Выберите поле: например, «Контрагент» или «Период, месяц».
- Закройте настройки и сформируйте отчёт.
В отчётах бухгалтерии вроде оборотно-сальдовой ведомости группировка задаётся проще — галочками и списком полей на вкладке группировки в настройках. Например, в ОСВ по счёту 62 можно выбрать группировку по контрагентам и договорам.
Изменённые настройки сохраняются через меню Ещё → Сохранить вариант отчета. Иначе при следующем открытии структура вернётся к исходной.
Свой отчёт в конструкторе схемы компоновки
В Конфигураторе откройте схему компоновки данных отчёта и перейдите на вкладку Настройки:
- Щёлкните правой кнопкой по узлу «Отчет» и выберите добавление новой группировки.
- В окне выбора полей укажите поле и тип: «Элементы», «Иерархия» или «Только иерархия».
- Чтобы вывести исходные строки, добавьте в самый низ группировку без полей — это и есть «Детальные записи».
- На закладке
Выбранные полянастроек отметьте поля для вывода. Если у группировки список пуст, она берёт поля из родителя — в списке это видно как «Авто».
Группировку по дате можно разбить по периодам. Добавьте поле даты, а в его свойствах выберите тип дополнения периодов (день, месяц, квартал). Тогда отчёт выведет даже месяцы без оборотов — с пустыми суммами, чтобы в графике не было «дыр».
Таблица вместо дерева
Кроме обычной группировки в структуру можно добавить таблицу. У неё есть строки и колонки:
- в строки ставят, например, «Номенклатура»;
- в колонки — «Период, месяц»;
- на пересечении — ресурс «Сумма».
Получается сводная таблица, как в Excel, только формируется она сразу из данных базы.
Итоги и вычисления по группам
Ресурсы — основа итогов
Итог в группе считается только по ресурсам. Ресурсы задаются на вкладке Ресурсы конструктора схемы. Для каждого указывают выражение агрегатной функции:
| Функция | Что считает | Пример |
|---|---|---|
Сумма(Поле) | Сумму значений | Сумма продаж |
Количество(Поле) | Число строк | Сколько документов |
Количество(Различные Поле) | Число уникальных значений | Сколько разных клиентов |
Максимум(Поле) / Минимум(Поле) | Крайние значения | Максимальная цена |
Среднее(Поле) | Среднее арифметическое | Средний чек |
У ресурса можно указать, по каким группировкам его считать. По умолчанию он рассчитывается везде. Если, например, остаток на складе нужен только на уровне склада, а не в общем итоге, ограничьте ресурс этой группировкой.
Вычисляемые показатели
Отношения считайте выражением ресурса, а не суммой готовых процентов. Средняя цена в группе — это Сумма(Сумма) / Сумма(Количество), а не Среднее(Цена).
Пример. В группе две строки: 10 шт. по 100 ₽ (1 000 ₽) и 1 шт. по 1 000 ₽ (1 000 ₽).
Среднее(Цена)= (100 + 1 000) / 2 = 550 ₽.Сумма(Сумма) / Сумма(Количество)= 2 000 / 11 ≈ 181,82 ₽.
Правильная средняя цена — вторая. Чтобы не получить деление на ноль в пустой группе, оберните выражение:
ВЫБОР
КОГДА Сумма(Количество) = 0 ТОГДА 0
ИНАЧЕ Сумма(Сумма) / Сумма(Количество)
КОНЕЦ
Где выводятся итоги
На вкладке Другие настройки задаётся, где показывать итоги: в начале группы, в конце, в начале и в конце или не показывать. Там же настраивается расположение общих итогов по вертикали и горизонтали — например, убрать общий итог справа в таблице с колонками по месяцам.
Оформление групп и условное выделение
Строки разного уровня легче читать, когда они выглядят по-разному. Для этого в СКД есть два инструмента.
Оформление группировки. У каждой группировки есть свои настройки: её можно выделить из общей структуры и задать ей условное оформление и параметры вывода отдельно от остального отчёта.
Условное оформление. На вкладке Условное оформление настроек добавьте правило:
- В поле «Оформление» укажите, что менять: цвет текста, фон, шрифт, формат числа.
- В «Условии» задайте отбор, например
Сумма Меньше 0. - В «Оформляемых полях» выберите, какие колонки красить. Если оставить пусто — изменится вся строка.
- В «Области использования» отметьте, где правило действует: в группировке, в иерархической группировке, в общем итоге, в заголовке полей.
Практичные правила оформления:
- 🔴 отрицательные остатки — красным текстом;
- 🟡 строки-папки иерархии — жирным шрифтом с серым фоном;
- 🔢 суммы — формат с разделителем разрядов и двумя знаками после запятой;
- ⚪ нулевые суммы — пустой ячейкой вместо «0,00» (параметр «ЧН=» в формате).
Если оформление нужно только на уровне конкретной группировки, задавайте его в настройках этой группировки, а не в общих. Так правило не «протечёт» на детальные записи.
Группировка в запросе и в СКД: в чём разница
Группировку можно сделать ещё до СКД — в тексте запроса. Делают это двумя способами, и они решают разные задачи.
СГРУППИРОВАТЬ ПО — свёртка строк
Конструкция сворачивает строки и оставляет одну на каждое сочетание полей. Все поля в ВЫБРАТЬ, кроме агрегатных функций, должны стоять в СГРУППИРОВАТЬ ПО.
ВЫБРАТЬ
Продажи.Контрагент,
СУММА(Продажи.Сумма) КАК Сумма
ИЗ
РегистрНакопления.Продажи КАК Продажи
СГРУППИРОВАТЬ ПО
Продажи.Контрагент
ИМЕЮЩИЕ
СУММА(Продажи.Сумма) > 100000
ИМЕЮЩИЕ — это отбор уже по итогу группы. Пример выше оставит только контрагентов с продажами больше 100 000 ₽. Условие ГДЕ тут не подойдёт: оно срабатывает до группировки и проверяет каждую строку.
ИТОГИ ПО — дерево с промежуточными итогами
ИТОГИ не сворачивает данные, а добавляет над детальными строками строки итогов:
ВЫБРАТЬ
Продажи.Номенклатура,
Продажи.Регистратор,
Продажи.Сумма
ИЗ
РегистрНакопления.Продажи КАК Продажи
ИТОГИ
СУММА(Сумма)
ПО
ОБЩИЕ,
Номенклатура ИЕРАРХИЯ
ОБЩИЕ даёт строку общего итога, ИЕРАРХИЯ — итоги по папкам справочника. Есть и ТОЛЬКО ИЕРАРХИЯ, она выводит только папки. Для дат есть дополнение ПЕРИОДАМИ(МЕСЯЦ, &Начало, &Конец) — оно заполняет пустые месяцы.
Результат с итогами обходят по группировкам:
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл
Сообщить(СтрШаблон("%1: %2", Выборка.Номенклатура, Формат(Выборка.Сумма, "ЧДЦ=2")));
ВыборкаДетали = Выборка.Выбрать();
Пока ВыборкаДетали.Следующий() Цикл
// строки следующего уровня
КонецЦикла;
КонецЦикла;
Что выбрать
| Задача | Где группировать |
|---|---|
| Отчёт, который пользователь будет перестраивать | В настройках СКД |
| Уменьшить объём данных до вывода | СГРУППИРОВАТЬ ПО в запросе |
| Отбор по сумме группы | ИМЕЮЩИЕ в запросе или отбор по ресурсу в СКД |
| Обработка или печатная форма с промежуточными итогами | ИТОГИ ПО в запросе |
В запросе для СКД не пишите ИТОГИ — система компоновки строит итоги сама по ресурсам и группировкам из настроек. Свёртку СГРУППИРОВАТЬ ПО в наборе данных оставляйте, только если детальные строки точно не понадобятся: без них группировка «Детальные записи» покажет уже свёрнутые данные.
Группировка в списках
В формах списков (документов, справочников) тоже есть группировка. Её включают в настройке списка, которая открывается из меню Ещё: на вкладке группировки выбирают поле, например «Контрагент». Список станет деревом, которое можно сворачивать. Итогов по суммам там нет — это навигация, а не отчёт.
Частые ошибки при группировке и как их исправить
Ещё две ошибки, которые встречаются при перестройке типовых отчётов:
- ⚠️ Остатки в группировке по документу. Для регистра остатков группировка по регистратору показывает обороты, а не остаток на момент документа. Остатки корректны на уровне аналитики (склад, номенклатура) и периода.
- ⚠️ Количество(Различные) по группам не складывается. Если у первого менеджера 10 уникальных клиентов, а у второго 8, в общем итоге может быть 15 — часть клиентов общая. Это правильное поведение, а не сбой.