Группировки в отчёте на СКД: как их свернуть и что делать с итогами

· 9 мин

Содержание

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

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

Как устроены группировки в схеме компоновки

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

Настройки задаются на двух уровнях:

  • 🧱 Схема — вкладка «Настройки» в конструкторе схемы компоновки. Здесь структура по умолчанию, которую увидит любой пользователь.
  • 👤 Пользовательские настройки — то, что человек меняет прямо в отчёте. Они накладываются поверх схемы и хранятся отдельно.

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

Самый быстрый способ свернуть отчёт — отключить флажок «Использование» у детальных записей или вложенной группировки. Структура останется, но уровень не выводится и не считается.

Разные поля одной группировки — это не вложенные группировки. Если в одной группировке перечислено два поля, строки делятся по паре значений на одном уровне. Если нужен второй уровень с отступом, добавляйте вложенную группировку.

Отступы и вложенность: как управлять видом дерева

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

Параметр «Расположение полей группировок» принимает значения «Отдельно» и «Вместе» (есть и «Авто»):

ЗначениеКак выглядитКогда выбирать
ОтдельноКаждое поле группировки в своей колонкеНужен фильтр или сортировка по колонкам, выгрузка в Excel
ВместеВсе уровни в одной колонке с отступомКомпактный отчёт, иерархия читается как дерево
АвтоПлатформа решает самаНичего специально не настраивали

Настраивается в параметрах вывода группировки или всего отчёта (контекстное меню узла → «Параметры вывода» либо закладка «Другие настройки»). Параметр группировки перекрывает параметр отчёта.

Если иерархия длинная (пять-шесть уровней), режим «Вместе» экономит ширину. Для плоских таблиц, которые потом разбирают сводной таблицей, лучше «Отдельно».

Свернуть уровни после формирования

Готовый результат — это табличный документ. Платформа группирует его строки по уровням, и слева в окне отчёта появляются значки «плюс/минус» и номера уровней. Нажатие на номер уровня сворачивает всё глубже него.

Из кода то же делает метод табличного документа ПоказатьУровеньГруппировокСтрок(Уровень). Пример для формы отчёта, где результат лежит в реквизите Результат:

Результат.ПоказатьУровеньГруппировокСтрок(2);

Метод показывает только заданный уровень и все более верхние. Вызывать его нужно после вывода результата, а не до: сворачивать пока нечего.

Итоги и подвалы группировок

Итоги считаются по ресурсам. Ресурс — это поле с выражением вида Сумма(Остаток) или Количество(Различные Документ). Без ресурса группировка выводит только заголовки.

Где показывать итог, определяет параметр «Расположение итогов». Основные значения: «Начало», «Конец», «Начало и конец», «Нет». Значение «Нет» убирает итоговую строку группировки, не затрагивая детали.

Что выбирают на практике:

  • 📌 Начало — итог стоит в строке заголовка группировки. Отчёт можно сворачивать до заголовков и сразу видеть суммы. Самый удобный вариант для сворачиваемых отчётов.
  • 📎 Конец — отдельная строка «Итого» после деталей. Привычно для печатных форм.
  • 🔁 Начало и конец — итог дублируется. Нужен редко, чаще шумит.
  • 🚫 Нет — для группировок, у которых суммы не имеют смысла.

Общие итоги всего отчёта настраиваются отдельным параметром «Расположение общих итогов» с теми же вариантами.

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

Если итог по группировке «не бьётся» с суммой строк, проверьте выражение ресурса. Выражение Сумма(Цена) честно сложит цены, а нужное вам значение — стоимость, то есть сумма произведений.

Видимость группировок через пользовательские настройки

Хороший отчёт даёт пользователю самому решать, какие уровни показывать. Для этого у узла структуры есть режим доступа в пользовательские настройки.

Что сделать:

  1. Откройте схему в конструкторе, вкладка «Настройки».
  2. Выделите нужную группировку и найдите свойство «Включать в пользовательские настройки» (режимы: «Быстрый доступ», «Обычный», «Недоступный»).
  3. Для «Быстрого доступа» значение выводится прямо над отчётом, для «Обычного» — в диалоге настроек.
  4. Сохраните схему и перезапустите отчёт.

Пользователь получит флажок «Использование» рядом с группировкой: снял — уровень пропал, поставил — вернулся. Подписью служит заголовок группировки, поэтому задайте понятное имя, а не «Группировка1».

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

Как свернуть группировки в вашем случае?

Иерархические справочники: группы, элементы, «Только иерархия»

Номенклатура, контрагенты и подразделения часто иерархические. В СКД за иерархию отвечает «Тип группировки» у поля группировки:

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

Последний режим выручает, когда справочник огромный, а нужны суммы по категориям. Строк станет в десятки раз меньше, а итоги по группам сохранятся.

Следите за тем, откуда берутся группы. Иерархия работает, только если в запросе выбран сам справочник, а не его наименование строкой. Поле-ссылка Номенклатура даёт иерархию, поле Номенклатура.Наименование — нет: это просто строка.

Ещё одна тонкость — отбор. Если задан отбор «В группе» или «В списке по иерархии», вложенные элементы попадут в результат вместе с группой. Для отбора только элементов самой группы выбирайте другой вид сравнения.

Пример: продажи по менеджерам, клиентам и номенклатуре

Возьмём типовую задачу: отчёт по продажам за квартал, три уровня — менеджер, контрагент, номенклатура. Нужны два вида: сводка по менеджерам и подробная раскладка.

Как собрать:

  1. Создайте набор данных-запрос с полями «Менеджер», «Контрагент», «Номенклатура», «Количество», «Сумма».
  2. На вкладке «Ресурсы» добавьте Сумма(Сумма) и Сумма(Количество).
  3. На вкладке «Настройки» постройте дерево: «Менеджер» → «Контрагент» → «Номенклатура» → «Детальные записи».
  4. Для группировки «Менеджер» поставьте «Расположение итогов: Начало» — сумма окажется в строке заголовка.
  5. Создайте два варианта отчёта. В «Сводке» отключите «Использование» у «Контрагента» и «Номенклатуры», в «Подробном» оставьте всё.

Проверим арифметику. У менеджера три контрагента: 120 000, 80 000 и 50 000 руб. В сводке строка менеджера покажет 250 000, в подробном виде — те же 250 000 в заголовке и три строки под ним. Если цифры в заголовке и в сумме строк разошлись, ищите причину в выражении ресурса или в отборе, который действует на скрытом уровне.

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

Перед отправкой отчёта пользователям
Выполнено: 0 / 5

Типичные ошибки и что с ними делать

Часть проблем со свёрнутыми отчётами повторяется из проекта в проект. Ниже — диагностика по симптомам.

Диагностика: выберите симптом

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

Производительность на больших объёмах

Группировка по миллиону строк съедает время не из-за вывода, а из-за запроса и вычисления ресурсов. Что действительно помогает:

  • ✂️ Отборы в запросе, а не в настройках. Параметры виртуальных таблиц (&НачалоПериода, &КонецПериода) отсекают данные в СУБД ещё до компоновки.
  • 🧮 Минимум полей. Каждое лишнее поле в наборе данных расширяет выборку. Отключайте неиспользуемые поля в схеме или не выбирайте их в запросе.
  • 🚫 Без детальных записей. Если нужны только итоги, уберите детальные записи — платформа не строит лишние строки.
  • 🧩 Сложные выражения — в запрос. Агрегат в самом запросе (СУММА(...) и СГРУППИРОВАТЬ ПО) дешевле, чем вычисление в ресурсе по каждой строке, особенно с функциями вроде ВычислитьВыражение.
  • 🗂 Несколько наборов — через связь. Объединение и связь наборов считаются на стороне компоновки; для крупных объёмов лучше соединить в одном запросе.

Измерьте, где тратится время: сначала текст запроса в консоли запросов, потом сама компоновка. Если запрос отрабатывает за секунды, а отчёт формируется минутами, виноваты вычисляемые поля и ресурсы со сложными выражениями.

Вывод результата в табличный документ на десятках тысяч строк тоже тяжёлый. Для выгрузки в файл лучше формировать отчёт сразу в нужном формате, а не открывать его на экране.

Частые вопросы

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