Группировки в отчёте на СКД: как их свернуть и что делать с итогами
Содержание
Свернуть группировки в отчёте на СКД можно тремя способами: заранее задать структуру так, чтобы лишние уровни не выводились; дать пользователю переключатели в пользовательских настройках; свернуть уже готовый результат по уровням в табличном документе. Первый путь самый надёжный, второй самый гибкий, третий нужен, когда отчёт формируется кодом.
Ниже — как устроены группировки в схеме компоновки данных, где живут итоги и подвалы, как ведёт себя иерархия справочников и почему отчёт на больших данных «тормозит». Речь о платформе 8.3 с интерфейсом «Такси».
Как устроены группировки в схеме компоновки
Группировка в СКД — это узел дерева настроек. Ветка идёт сверху вниз: отчёт → группировка → вложенная группировка → детальные записи. Каждая группировка делит данные по одному или нескольким полям и считает по ним ресурсы.
Настройки задаются на двух уровнях:
- 🧱 Схема — вкладка «Настройки» в конструкторе схемы компоновки. Здесь структура по умолчанию, которую увидит любой пользователь.
- 👤 Пользовательские настройки — то, что человек меняет прямо в отчёте. Они накладываются поверх схемы и хранятся отдельно.
Чтобы увидеть, что реально выводится, смотрите на структуру: если внутри группировки остались «Детальные записи», именно они дают основную массу строк. Уберите их — и отчёт сразу «сложится» до итогов по группировкам.
Самый быстрый способ свернуть отчёт — отключить флажок «Использование» у детальных записей или вложенной группировки. Структура останется, но уровень не выводится и не считается.
Разные поля одной группировки — это не вложенные группировки. Если в одной группировке перечислено два поля, строки делятся по паре значений на одном уровне. Если нужен второй уровень с отступом, добавляйте вложенную группировку.
Отступы и вложенность: как управлять видом дерева
Вложенность читается по отступам. Чем глубже уровень, тем правее начинается его заголовок. На вид влияют два параметра вывода: расположение полей группировок и расположение итогов.
Параметр «Расположение полей группировок» принимает значения «Отдельно» и «Вместе» (есть и «Авто»):
| Значение | Как выглядит | Когда выбирать |
|---|---|---|
| Отдельно | Каждое поле группировки в своей колонке | Нужен фильтр или сортировка по колонкам, выгрузка в Excel |
| Вместе | Все уровни в одной колонке с отступом | Компактный отчёт, иерархия читается как дерево |
| Авто | Платформа решает сама | Ничего специально не настраивали |
Настраивается в параметрах вывода группировки или всего отчёта (контекстное меню узла → «Параметры вывода» либо закладка «Другие настройки»). Параметр группировки перекрывает параметр отчёта.
Если иерархия длинная (пять-шесть уровней), режим «Вместе» экономит ширину. Для плоских таблиц, которые потом разбирают сводной таблицей, лучше «Отдельно».
Свернуть уровни после формирования
Готовый результат — это табличный документ. Платформа группирует его строки по уровням, и слева в окне отчёта появляются значки «плюс/минус» и номера уровней. Нажатие на номер уровня сворачивает всё глубже него.
Из кода то же делает метод табличного документа ПоказатьУровеньГруппировокСтрок(Уровень). Пример для формы отчёта, где результат лежит в реквизите Результат:
Результат.ПоказатьУровеньГруппировокСтрок(2);
Метод показывает только заданный уровень и все более верхние. Вызывать его нужно после вывода результата, а не до: сворачивать пока нечего.
Итоги и подвалы группировок
Итоги считаются по ресурсам. Ресурс — это поле с выражением вида Сумма(Остаток) или Количество(Различные Документ). Без ресурса группировка выводит только заголовки.
Где показывать итог, определяет параметр «Расположение итогов». Основные значения: «Начало», «Конец», «Начало и конец», «Нет». Значение «Нет» убирает итоговую строку группировки, не затрагивая детали.
Что выбирают на практике:
- 📌 Начало — итог стоит в строке заголовка группировки. Отчёт можно сворачивать до заголовков и сразу видеть суммы. Самый удобный вариант для сворачиваемых отчётов.
- 📎 Конец — отдельная строка «Итого» после деталей. Привычно для печатных форм.
- 🔁 Начало и конец — итог дублируется. Нужен редко, чаще шумит.
- 🚫 Нет — для группировок, у которых суммы не имеют смысла.
Общие итоги всего отчёта настраиваются отдельным параметром «Расположение общих итогов» с теми же вариантами.
Ресурс можно считать по-разному на разных уровнях. В редакторе ресурсов у поля есть колонка «Рассчитывать по»: для общих итогов задаётся одно выражение, для конкретной группировки — другое. Классический пример: цена в детальных записях, а в итоге — средневзвешенная Сумма(Сумма) / Сумма(Количество).
Если итог по группировке «не бьётся» с суммой строк, проверьте выражение ресурса. Выражение Сумма(Цена) честно сложит цены, а нужное вам значение — стоимость, то есть сумма произведений.
Видимость группировок через пользовательские настройки
Хороший отчёт даёт пользователю самому решать, какие уровни показывать. Для этого у узла структуры есть режим доступа в пользовательские настройки.
Что сделать:
- Откройте схему в конструкторе, вкладка «Настройки».
- Выделите нужную группировку и найдите свойство «Включать в пользовательские настройки» (режимы: «Быстрый доступ», «Обычный», «Недоступный»).
- Для «Быстрого доступа» значение выводится прямо над отчётом, для «Обычного» — в диалоге настроек.
- Сохраните схему и перезапустите отчёт.
Пользователь получит флажок «Использование» рядом с группировкой: снял — уровень пропал, поставил — вернулся. Подписью служит заголовок группировки, поэтому задайте понятное имя, а не «Группировка1».
Для нескольких видов отчёта используйте варианты отчёта: например, «По контрагентам» и «По контрагентам с договорами» — одна схема, разные структуры. Это надёжнее, чем объяснять пользователям, какие флажки включать.
ПоказатьУровеньГруппировокСтрок после вывода результата и задайте нужный уровень.Иерархические справочники: группы, элементы, «Только иерархия»
Номенклатура, контрагенты и подразделения часто иерархические. В СКД за иерархию отвечает «Тип группировки» у поля группировки:
- Элементы — иерархия игнорируется, выводятся только элементы без родителей-групп. Плоский список.
- Иерархия — группы и элементы вперемешку: сначала группа, под ней её содержимое. Итоги группы включают подчинённые.
- Только иерархия — выводятся только группы справочника, элементы не показываются. Именно этот режим «сворачивает» справочник до папок.
Последний режим выручает, когда справочник огромный, а нужны суммы по категориям. Строк станет в десятки раз меньше, а итоги по группам сохранятся.
Следите за тем, откуда берутся группы. Иерархия работает, только если в запросе выбран сам справочник, а не его наименование строкой. Поле-ссылка Номенклатура даёт иерархию, поле Номенклатура.Наименование — нет: это просто строка.
Ещё одна тонкость — отбор. Если задан отбор «В группе» или «В списке по иерархии», вложенные элементы попадут в результат вместе с группой. Для отбора только элементов самой группы выбирайте другой вид сравнения.
Пример: продажи по менеджерам, клиентам и номенклатуре
Возьмём типовую задачу: отчёт по продажам за квартал, три уровня — менеджер, контрагент, номенклатура. Нужны два вида: сводка по менеджерам и подробная раскладка.
Как собрать:
- Создайте набор данных-запрос с полями «Менеджер», «Контрагент», «Номенклатура», «Количество», «Сумма».
- На вкладке «Ресурсы» добавьте
Сумма(Сумма)иСумма(Количество). - На вкладке «Настройки» постройте дерево: «Менеджер» → «Контрагент» → «Номенклатура» → «Детальные записи».
- Для группировки «Менеджер» поставьте «Расположение итогов: Начало» — сумма окажется в строке заголовка.
- Создайте два варианта отчёта. В «Сводке» отключите «Использование» у «Контрагента» и «Номенклатуры», в «Подробном» оставьте всё.
Проверим арифметику. У менеджера три контрагента: 120 000, 80 000 и 50 000 руб. В сводке строка менеджера покажет 250 000, в подробном виде — те же 250 000 в заголовке и три строки под ним. Если цифры в заголовке и в сумме строк разошлись, ищите причину в выражении ресурса или в отборе, который действует на скрытом уровне.
Для долгого отчёта на сотни менеджеров полезно ограничить выборку параметром периода и не выводить детальные записи по умолчанию: пользователь включит их флажком, когда понадобится разбор по конкретному клиенту.
Типичные ошибки и что с ними делать
Часть проблем со свёрнутыми отчётами повторяется из проекта в проект. Ниже — диагностика по симптомам.
Если после правки схемы изменения не видны, закройте отчёт и откройте заново: пользовательские настройки сохраняются отдельно, и старый вариант может перекрывать новую структуру. Сбросить его можно в диалоге настроек отчёта, там есть команда восстановления стандартных настроек.
Производительность на больших объёмах
Группировка по миллиону строк съедает время не из-за вывода, а из-за запроса и вычисления ресурсов. Что действительно помогает:
- ✂️ Отборы в запросе, а не в настройках. Параметры виртуальных таблиц (
&НачалоПериода,&КонецПериода) отсекают данные в СУБД ещё до компоновки. - 🧮 Минимум полей. Каждое лишнее поле в наборе данных расширяет выборку. Отключайте неиспользуемые поля в схеме или не выбирайте их в запросе.
- 🚫 Без детальных записей. Если нужны только итоги, уберите детальные записи — платформа не строит лишние строки.
- 🧩 Сложные выражения — в запрос. Агрегат в самом запросе (
СУММА(...)иСГРУППИРОВАТЬ ПО) дешевле, чем вычисление в ресурсе по каждой строке, особенно с функциями вродеВычислитьВыражение. - 🗂 Несколько наборов — через связь. Объединение и связь наборов считаются на стороне компоновки; для крупных объёмов лучше соединить в одном запросе.
Измерьте, где тратится время: сначала текст запроса в консоли запросов, потом сама компоновка. Если запрос отрабатывает за секунды, а отчёт формируется минутами, виноваты вычисляемые поля и ресурсы со сложными выражениями.
Вывод результата в табличный документ на десятках тысяч строк тоже тяжёлый. Для выгрузки в файл лучше формировать отчёт сразу в нужном формате, а не открывать его на экране.
Частые вопросы
Можно ли свернуть группировки в готовом отчёте одним кликом?
ПоказатьУровеньГруппировокСтрок.