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

Разработка и Конфигурация · 10 мин

Как свернуть группировки в табличном документе 1С

Как свернуть группировки в табличном документе 1С: интерактивные кнопки, методы НачатьАвтоГруппировкуСтрок и ПоказатьУровеньГруппировокСтрок, примеры кода и типичные ошибки.

Группировки в табличном документе 1С позволяют упорядочить большие отчёты: строки объединяются в иерархические уровни, которые пользователь может разворачивать и сворачивать. Однако по умолчанию документ часто выводится полностью развёрнутым, и пользователю приходится вручную сворачивать десятки узлов. Задача «свернуть группировки» решается двумя путями: интерактивно — кнопками на панели табличного документа, и программно — методами объекта ТабличныйДокумент.

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

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

Интерактивное сворачивание группировок в режиме просмотра

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

Кнопки с цифрами (1, 2, 3 и далее) сворачивают или разворачивают сразу весь документ до выбранного уровня. Например, нажатие кнопки «1» оставит видимыми только строки первого уровня иерархии — все вложенные детали будут скрыты. Это удобно, когда нужно быстро получить обзорную картину по крупным итогам.

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

Создание группировок: без них сворачивать нечего

Прежде чем сворачивать группировки, убедитесь, что они вообще формируются. Вручную группировка строк создаётся парой методов: НачатьГруппуСтрок() открывает группу, ЗакончитьГруппуСтрок() закрывает её. Все строки, выведенные между этими вызовами, попадают в один сворачиваемый узел.

Альтернатива — автоматическая группировка. Метод НачатьАвтоГруппировкуСтрок() переводит документ в режим, при котором уровень группы определяется параметром области: если в макете у области задан уровень группировки, платформа сама открывает и закрывает группы по мере вывода. Завершается режим вызовом ЗакончитьАвтоГруппировкуСтрок().

Типичный фрагмент кода с ручной группировкой выглядит так:

ТабДок.НачатьГруппуСтрок("По контрагенту", Истина);

ТабДок.Вывести(ОбластьШапкаГруппы);

// ... вывод строк деталей ...

ТабДок.ЗакончитьГруппуСтрок();

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

1c
ТабДок.НачатьГруппуСтрок("Группа", Ложь); // группа будет свёрнута при открытии

Программное сворачивание: метод ПоказатьУровеньГруппировокСтрок

Основной инструмент программного сворачивания — метод ПоказатьУровеньГруппировокСтрок(Уровень). Он сворачивает документ так, что видимыми остаются строки до указанного уровня включительно. Вызов с параметром 0 покажет только строки верхнего уровня, полностью скрыв содержимое всех групп.

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

ТабДок.ЗакончитьАвтоГруппировкуСтрок();

ТабДок.ПоказатьУровеньГруппировокСтрок(0); // свернуть всё до верхнего уровня

Для колонок существует зеркальный метод ПоказатьУровеньГруппировокКолонок — он актуален для кросс-отчётов, где группировки строятся и по горизонтали. Оба метода независимы друг от друга.

Порядок действий при программном сворачивании
  1. 1
    Сформируйте табличный документ с группировками (вручную или через автогруппировку)
  2. 2
    Убедитесь, что все группы закрыты: ЗакончитьГруппуСтрок или ЗакончитьАвтоГруппировкуСтрок
  3. 3
    Вызовите ПоказатьУровеньГруппировокСтрок с нужным уровнем
  4. 4
    Выведите документ пользователю или сохраните его
  5. 5
    Проверьте результат, развернув одну группу вручную

Как выбрать уровень сворачивания

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

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

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

Как выбрать действие

Нужно свернуть документ один раз при просмотреИспользуйте кнопки уровней на панели табличного документа
Отчёт всегда должен открываться свёрнутымВызовите ПоказатьУровеньГруппировокСтрок после формирования
Разные группы должны иметь разное начальное состояниеУправляйте параметром развёрнутости в НачатьГруппуСтрок для каждой группы
Отчёт построен на СКДНастройте состояние группировок через настройки компоновки, а не методы табличного документа

Особенности отчётов на СКД

Отчёты, построенные на системе компоновки данных, формируют группировки автоматически по настройкам отчёта. Методы табличного документа здесь тоже работают — после вывода результата в табличный документ можно вызвать ПоказатьУровеньГруппировокСтрок, и отчёт откроется свёрнутым. Это самый простой способ для типовой ситуации.

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

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

Для отчётов на СКД надёжнее всего вызывать ПоказатьУровеньГруппировокСтрок в конце обработчика формирования результата — тогда сворачивание применяется при каждом пересчёте отчёта, включая изменение настроек пользователем.
ПЗ
Практическое замечание

Типичные ошибки и ограничения

Самая частая ошибка — вызов ПоказатьУровеньГруппировокСтрок до завершения формирования документа. Метод применяется к уже существующим группам, поэтому вызов в середине вывода областей даст частичный результат или не даст его вовсе. Всегда размещайте его после ЗакончитьАвтоГруппировкуСтрок или последнего ЗакончитьГруппуСтрок.

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

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

Типичные ошибки
01
Вызов ПоказатьУровеньГруппировокСтрок до закрытия групп — метод применяется к неполной структуре и результат теряется
02
Ожидание, что свёрнутое состояние переживёт выгрузку в Excel — при экспорте скрытые строки могут выгружаться целиком
03
Попытка свернуть документ без группировок — метод отработает без ошибки, но визуально ничего не изменится
04
Жёсткое указание уровня при переменной глубине иерархии — ветки сворачиваются неравномерно

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

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

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

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

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

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

Показаны только строки заданного уровня

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

Документ полностью развёрнут или пуст

Значки управления группами
Норма

У каждой свёрнутой группы есть значок разворачивания

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

Значков нет — группировки не созданы

Разворачивание вручную
Норма

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

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

Группа раскрывается пустой или с чужими строками

Часто задаваемые вопросы

Свернётся ли документ автоматически при повторном формировании?

Нет, состояние группировок не запоминается между формированиями. Чтобы отчёт каждый раз открывался свёрнутым, вызов ПоказатьУровеньГруппировокСтрок должен выполняться в коде после каждого формирования документа.

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

Отдельного метода для сворачивания одной произвольной группы нет. Управлять состоянием отдельной группы можно только в момент её создания — параметром развёрнутости метода НачатьГруппуСтрок. Уже сформированный документ сворачивается только по уровням целиком.

Почему метод ПоказатьУровеньГруппировокСтрок не даёт эффекта?

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

Сохранится ли свёрнутое состояние при сохранении в Excel?

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

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

Для горизонтальных группировок используется метод ПоказатьУровеньГруппировокКолонок с аналогичным параметром уровня. Он работает независимо от группировок строк, поэтому в кросс-отчёте обычно вызывают оба метода.

Работает ли сворачивание в веб-клиенте и тонком клиенте?

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

Итог

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

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