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

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

1С СКД: как вывести свернутые группировки

Как вывести свернутые группировки в СКД 1С: настройка состояния группировок, программное сворачивание, типовые ошибки и проверка результата.

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

Механизм управления сворачиванием в СКД основан на свойстве «Состояние» элемента группировки и на параметре вывода «Состояние группировок». В зависимости от того, где формируется отчет — в типовой форме отчета, в произвольной форме или программно из кода — подход отличается. Ниже разобраны все рабочие способы с указанием ограничений и типичных ошибок.

Важно понимать разницу между двумя задачами: «свернуть группировки при выводе» (пользователь видит только верхний уровень, но может развернуть) и «не выводить детальные записи вообще» (данные физически отсутствуют в результате). Это разные механизмы, и путать их — частая причина неожиданно медленной работы отчетов.

Как СКД хранит состояние группировок

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

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

Свертывание через настройки в конструкторе

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

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

Порядок действий в конструкторе
  1. 1
    Откройте схему компоновки данных, закладка «Настройки»
  2. 2
    Выделите корневой элемент «Отчет» в структуре
  3. 3
    Откройте параметры вывода и найдите «Состояние группировок»
  4. 4
    Установите значение «Свернуто» и сформируйте отчет
  5. 5
    Проверьте: видны только строки верхнего уровня, у них есть значок разворачивания

В пользовательском режиме (когда отчет уже встроен в конфигурацию) тот же параметр доступен через кнопку «Еще» — «Изменить вариант» — «Дополнительные настройки». Пользователь может сам свернуть группировки и сохранить вариант отчета, и при следующих запусках он будет открываться свернутым.

Программное сворачивание группировок

Когда отчет формируется из кода — например, в расширении, внешней обработке или при переопределении типовой формы — состояние задается программно. Основной объект — коллекция группировок компоновщика настроек. У каждого элемента есть свойство «Состояние» типа «СостояниеЭлементаГруппировкиКомпоновкиДанных».

Для Каждого Группировка Из КомпоновщикНастроек.Настройки.Структура Цикл

Если ТипЗнч(Группировка) = Тип("ГруппировкаКомпоновкиДанных") Тогда

Группировка.Состояние = СостояниеЭлементаГруппировкиКомпоновкиДанных.Свернуто;

КонецЕсли;

КонецЦикла;

Если группировки вложенные, обходить структуру нужно рекурсивно: у каждой группировки есть собственная коллекция «Структура» с дочерними группировками. Альтернатива рекурсии — установить параметр вывода на уровне всей настройки:

Настройки = КомпоновщикНастроек.Настройки;

ПараметрСостояния = Настройки.ПараметрыВывода.НайтиЗначениеПараметра(

Новый ПараметрКомпоновкиДанных("СостояниеГруппировок"));

ПараметрСостояния.Использование = Истина;

ПараметрСостояния.Значение = СостояниеГруппировокКомпоновкиДанных.Свернуто;

Важно: параметр вывода применяется только если у него установлен флаг «Использование». Без него значение игнорируется — это одна из самых частых причин, почему «код отрабатывает, но отчет все равно раскрыт».

Свертывание в типовых формах отчетов

В конфигурациях на БСП (Библиотека стандартных подсистем) — УТ, ERP, Бухгалтерия — отчеты работают через универсальную форму «ФормаОтчета». Здесь программное сворачивание удобно делать в модуле отчета, в обработчике «ПриКомпоновкеРезультата» или через переопределение настроек в событии формы. Типовой подход — доработать процедуру «ПриОпределенииНастроек» не получится, поэтому обычно перехватывают настройки до формирования.

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

Маршрут решения

Как выбрать способ

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

Свернуть или не выводить: в чем разница

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

Если детализация пользователю в принципе не нужна, правильнее убрать нижний уровень из структуры настроек: удалить детальную группировку или снять у нее флаг использования. Тогда запрос вернет меньше строк, итоги посчитаются на нужном уровне, а отчет сформируется быстрее. Для сценария «иногда нужно детально» создайте два варианта отчета: сводный и детальный.

Сравнение подходов

Свернутые группировки

Детализация доступна по клику, но запрос и формирование работают с полным объемом данных. Подходит для интерактивного анализа.

Отключенная детальная группировка

Детальных строк нет вовсе, отчет формируется быстрее. Подходит для сводных показателей, но развернуть детализацию нельзя.

Два варианта отчета

Пользователь выбирает сводный или детальный вариант. Гибко, но требует сопровождения двух настроек.

Частые ошибки и их причины

Первая типичная ситуация: разработчик установил «Состояние» у группировки, но отчет выводится раскрытым. Причина почти всегда в том, что на уровне всей настройки или родительской структуры параметр вывода «Состояние группировок» имеет собственное значение и перекрывает индивидуальное. Проверьте параметры вывода на всех уровнях — отчета, таблицы, группировки.

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

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

Типичные ошибки
01
Установлено состояние группировки, но параметр вывода на уровне отчета перекрывает его — отчет остается раскрытым
02
Программно задано значение параметра без Использование = Истина — настройка игнорируется
03
Настройки изменены после инициализации процессора компоновки — результат не перестраивается
04
Сворачивание используется вместо удаления детальной группировки — отчет медленно формируется на больших данных
05
Не очищены пользовательские настройки при отладке — поведение отчета отличается от заданного в схеме

Проверка результата

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

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

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

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

Видимые строки после формирования
Норма

Только верхний уровень группировки с маркерами разворачивания

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

Все уровни раскрыты или исчезли итоговые строки

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

Совпадают с итогами полностью раскрытого варианта

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

Суммы изменились после сворачивания

Разворачивание строки
Норма

Детализация открывается кликом без переформирования

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

Строка не разворачивается или отчет формируется заново

Время формирования
Норма

Сопоставимо с раскрытым вариантом (сворачивание) или заметно меньше (удаление детализации)

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

Сводный отчет формируется дольше детального — вероятно, избыточная структура

Ограничения и нюансы

Сворачивание работает для группировок в таблицах и иерархических структурах, но не применимо к диаграммам — там понятие «свернутости» отсутствует. Для таблиц (где группировки образуют строки и колонки) параметр «Состояние группировок» действует на обе оси, но иногда требуется настраивать строки и колонки отдельно через свойства соответствующих коллекций.

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

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

FAQ

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

Да. Установите состояние «Свернуто» только у нужных группировок в их свойствах, а параметр вывода «Состояние группировок» на уровне отчета не трогайте. Индивидуальное состояние группировки сработает, если его не перекрывает параметр вывода вышестоящего уровня.

Почему пользователь видит отчет раскрытым, хотя в схеме задано «Свернуто»?

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

Ускорит ли сворачивание группировок формирование отчета?

Нет. СКД выполняет запрос и формирует все строки результата независимо от состояния группировок — сворачивание влияет только на отображение. Для ускорения убирайте лишние уровни детализации из структуры настроек, оптимизируйте запрос и отборы.

Как свернуть группировки в уже сформированном табличном документе без переформирования?

У табличного документа есть методы управления группировкой строк (например, установка уровня отображения группировок), если при выводе использовалось начало групп строк. В форме отчета на БСП проще переформировать отчет с нужными настройками — типовой механизм делает это автоматически при изменении параметра.

Работает ли сворачивание для иерархических группировок по справочнику?

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

Что попадет в Excel при выгрузке свернутого отчета?

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

Итог

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

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