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

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

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

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

Группировка в табличном документе 1С позволяет сворачивать строки и колонки в блоки с кнопками «плюс/минус», как в Excel. Это удобно для больших отчётов: пользователь видит итоги, а детализацию раскрывает по необходимости. Группировка доступна как вручную — через меню и комбинации клавиш, так и программно — методами встроенного языка.

Механизм работает одинаково в обычных и управляемых формах: поле табличного документа поддерживает горизонтальные (по строкам) и вертикальные (по колонкам) группы. Однако есть важное ограничение: группировки сохраняются в самом файле табличного документа (MXL), но при выводе через СКД или макеты их нужно формировать явно, иначе они не появятся.

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

Что такое группировка в табличном документе и когда она нужна

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

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

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

Ручная группировка строк и колонок

Самый быстрый способ — сгруппировать уже сформированный документ вручную. Выделите строки, которые должны войти в группу, кликая по заголовкам строк слева, затем нажмите Ctrl+F9 или выберите в главном меню «Таблица — Группировки — Сгруппировать». Слева появится панель с кнопкой сворачивания.

Для колонок действие аналогично: выделите колонки по заголовкам сверху и нажмите Ctrl+Shift+F9 либо используйте тот же пункт меню — платформа сама определит, что выделено. Вложенные группы создаются повторным выделением внутри существующей группы.

Чтобы удалить группировку, выделите строки группы и нажмите Ctrl+Shift+G (разгруппировать) или используйте пункт «Таблица — Группировки — Разгруппировать». Удаляется только выбранный уровень, вложенные группы сохраняются.

Порядок действий
  1. 1
    Сформируйте или откройте табличный документ
  2. 2
    Выделите смежные строки, кликая по их заголовкам слева
  3. 3
    Нажмите Ctrl+F9 или выберите Таблица — Группировки — Сгруппировать
  4. 4
    Проверьте появление панели уровней и кнопки сворачивания
  5. 5
    При необходимости создайте вложенную группу внутри первой
  6. 6
    Сохраните документ в формате MXL, если группировки нужны позже

Программная группировка методами встроенного языка

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

Для колонок используются НачатьГруппуКолонок и ЗакончитьГруппуКолонок. Методы вызываются до вывода областей: сначала начинается группа, затем выводятся области через Вывести или Присоединить, затем группа закрывается. Нарушение порядка приводит к исключению.

ТабДок = Новый ТабличныйДокумент;

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

Для Каждого СтрокаГруппы Из ВыборкаГрупп Цикл

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

ВыборкаДетали = СтрокаГруппы.Выбрать();

Пока ВыборкаДетали.Следующий() Цикл

ТабДок.Вывести(ОбластьСтрока, 2); // уровень 2

КонецЦикла;

КонецЦикла;

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

Альтернатива — автогруппировка: методы НачатьАвтогруппировкуСтрок и ЗакончитьАвтогруппировкуСтрок. В этом режиме уровень группы передаётся вторым параметром прямо в метод Вывести, и платформа сама расставляет границы групп. Это удобнее при обходе иерархических выборок из запроса с итогами.

Условия и ограничения механизма

Группировка работает только для смежных областей: нельзя объединить строки 2–4 и 10–12 в одну группу. Группы одного направления (строки) могут быть вложенными, но не пересекающимися — группа строк 2–8 и группа строк 5–10 несовместимы.

Количество уровней вложенности ограничено платформой (обычно до 8 уровней отображается на панели уровней). На практике больше 3–4 уровней используют редко: глубокая вложенность затрудняет навигацию.

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

Проверка результата и типичные ошибки

Признак корректной группировки — панель уровней слева от документа с кнопками уровней (1, 2, 3…) и значками сворачивания у каждой группы. Если панели нет, группировка не создана: проверьте, был ли вызван парный метод закрытия группы и не выводился ли документ заново после группировки (повторный Очистить и вывод стирают группы).

Частая ошибка — исключение «Нарушение соответствия уровней группировок» при автогруппировке. Причина: пропуск уровня или вывод области с уровнем выше предыдущей после возврата на меньший уровень. Лечится строгой последовательностью вывода: группа уровня N всегда предшествует строкам уровня N+1.

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

Типичные ошибки
01
Вызвали НачатьГруппуСтрок, но забыли ЗакончитьГруппуСтрок — документ не выводится или структура групп сломана
02
Перепутали порядок: закрывают группу до вывода всех областей — часть строк остаётся вне группы
03
Очищают табличный документ после создания групп и выводят заново без группировки — плюсики исчезают
04
Пытаются группировать несмежные строки — платформа создаёт отдельные группы вместо одной
05
Оставляют группы свёрнутыми перед печатью — в печатной форме нет детальных данных

Альтернативы: СКД, сводные таблицы, иерархические отчёты

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

Сводная таблица подходит, когда нужна двумерная группировка (строки × колонки) с перетаскиванием измерений пользователем. Для простых печатных форм с фиксированной структурой достаточно программной группировки табличного документа.

Сравнение вариантов

Ручная группировка (Ctrl+F9)

Подходит для разовой правки готового документа; не сохраняется при пересчёте отчёта

Программная группировка методами

Полный контроль из кода; требует аккуратного соблюдения уровней и парности методов

Автогруппировка строк

Оптимальна при обходе иерархических выборок запроса; уровень задаётся в методе Вывести

Группировки СКД

Автоматические итоги и настройка пользователем; не подходит для произвольных печатных форм

Итог

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

Группировка табличного документа создаётся вручную (Ctrl+F9) или программно парными методами НачатьГруппуСтрок/ЗакончитьГруппуСтрок либо автогруппировкой. Группы должны быть смежными и непересекающимися, а перед печатью свёрнутые группы следует развернуть.

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

Почему после группировки не появляются кнопки «плюс/минус»?

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

Сохраняются ли группировки при сохранении документа в Excel?

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

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

Методы ПоказатьУровеньГруппировокСтрок(Уровень) и ПоказатьУровеньГруппировокКолонок(Уровень) разворачивают документ до указанного уровня. Чтобы полностью развернуть, передайте максимальный уровень; чтобы свернуть всё до итогов — уровень 0 или 1.

Можно ли сгруппировать строки в отчёте на СКД?

Методы табличного документа при выводе СКД применять не следует — процессор вывода управляет структурой сам. Используйте группировки в настройках СКД: они дают дерево с итогами и сворачиванием без ручного кода.

Что делать с ошибкой «Нарушение соответствия уровней группировок»?

Ошибка означает, что при автогруппировке область выведена с уровнем, которого не может быть в текущей позиции: например, уровень 2 без предшествующего уровня 1, или возврат на уровень выше после глубокого уровня без промежуточных выводов. Выровняйте последовательность вызовов Вывести по возрастанию и убыванию уровней.

Сколько уровней вложенности групп допустимо?

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