Отчеты и Аналитика · 10 мин
Как сгруппировать табличный документ в 1С
Как сгруппировать строки и колонки табличного документа в 1С: ручная группировка, программные методы, работа со сводными таблицами и типичные ошибки.
Группировка в табличном документе 1С позволяет сворачивать строки и колонки в блоки с кнопками «плюс/минус», как в Excel. Это удобно для больших отчётов: пользователь видит итоги, а детализацию раскрывает по необходимости. Группировка доступна как вручную — через меню и комбинации клавиш, так и программно — методами встроенного языка.
Механизм работает одинаково в обычных и управляемых формах: поле табличного документа поддерживает горизонтальные (по строкам) и вертикальные (по колонкам) группы. Однако есть важное ограничение: группировки сохраняются в самом файле табличного документа (MXL), но при выводе через СКД или макеты их нужно формировать явно, иначе они не появятся.
Ниже разобраны все рабочие способы: ручная группировка выделенных областей, программное создание групп методами НачатьГруппуСтрок и НачатьГруппуКолонок, автогруппировка при выводе, а также типичные ошибки, из-за которых «плюсики» не отображаются.
Что такое группировка в табличном документе и когда она нужна
Группировка — это объединение смежных строк или колонок в сворачиваемый блок. Слева (для строк) или сверху (для колонок) появляется панель уровней с кнопками, позволяющими свернуть или развернуть группу, а также переключаться между уровнями вложенности.
Типичные сценарии, где группировка оправдана: многоуровневые отчёты с итогами по подразделениям и детализацией по сотрудникам, прайс-листы с категориями товаров, оборотно-сальдовые ведомости с развёрнутыми субсчетами. Если строк больше нескольких десятков и есть естественная иерархия — группировка заметно упрощает чтение.
Важно понимать отличие от группировок СКД и динамических списков: там группировка — это структура отчёта, формируемая запросом. В табличном документе группировка — свойство самого документа, независимое от источника данных. Один и тот же отчёт может иметь группировки СКД и дополнительно группировки табличного документа.
Ручная группировка строк и колонок
Самый быстрый способ — сгруппировать уже сформированный документ вручную. Выделите строки, которые должны войти в группу, кликая по заголовкам строк слева, затем нажмите Ctrl+F9 или выберите в главном меню «Таблица — Группировки — Сгруппировать». Слева появится панель с кнопкой сворачивания.
Для колонок действие аналогично: выделите колонки по заголовкам сверху и нажмите Ctrl+Shift+F9 либо используйте тот же пункт меню — платформа сама определит, что выделено. Вложенные группы создаются повторным выделением внутри существующей группы.
Чтобы удалить группировку, выделите строки группы и нажмите Ctrl+Shift+G (разгруппировать) или используйте пункт «Таблица — Группировки — Разгруппировать». Удаляется только выбранный уровень, вложенные группы сохраняются.
- 1Сформируйте или откройте табличный документ
- 2Выделите смежные строки, кликая по их заголовкам слева
- 3Нажмите Ctrl+F9 или выберите Таблица — Группировки — Сгруппировать
- 4Проверьте появление панели уровней и кнопки сворачивания
- 5При необходимости создайте вложенную группу внутри первой
- 6Сохраните документ в формате MXL, если группировки нужны позже
Программная группировка методами встроенного языка
При выводе отчёта из кода группы создаются парными методами объекта ТабличныйДокумент: НачатьГруппуСтрок(ИмяГруппы, Открыта) и ЗакончитьГруппуСтрок(). Всё, что выводится между этими вызовами, попадает в группу. Параметр Открыта (булево) задаёт начальное состояние — развёрнута группа или свёрнута.
Для колонок используются НачатьГруппуКолонок и ЗакончитьГруппуКолонок. Методы вызываются до вывода областей: сначала начинается группа, затем выводятся области через Вывести или Присоединить, затем группа закрывается. Нарушение порядка приводит к исключению.
ТабДок = Новый ТабличныйДокумент;
ТабДок.НачатьАвтогруппировкуСтрок();
Для Каждого СтрокаГруппы Из ВыборкаГрупп Цикл
ТабДок.Вывести(ОбластьГруппа, 1); // уровень 1
ВыборкаДетали = СтрокаГруппы.Выбрать();
Пока ВыборкаДетали.Следующий() Цикл
ТабДок.Вывести(ОбластьСтрока, 2); // уровень 2
КонецЦикла;
КонецЦикла;
ТабДок.ЗакончитьАвтогруппировкуСтрок();
Альтернатива — автогруппировка: методы НачатьАвтогруппировкуСтрок и ЗакончитьАвтогруппировкуСтрок. В этом режиме уровень группы передаётся вторым параметром прямо в метод Вывести, и платформа сама расставляет границы групп. Это удобнее при обходе иерархических выборок из запроса с итогами.
Условия и ограничения механизма
Группировка работает только для смежных областей: нельзя объединить строки 2–4 и 10–12 в одну группу. Группы одного направления (строки) могут быть вложенными, но не пересекающимися — группа строк 2–8 и группа строк 5–10 несовместимы.
Количество уровней вложенности ограничено платформой (обычно до 8 уровней отображается на панели уровней). На практике больше 3–4 уровней используют редко: глубокая вложенность затрудняет навигацию.
Группировки сохраняются при записи табличного документа в файл MXL и при программном выводе на форму. При печати свёрнутые группы выводятся свёрнутыми — это нужно учитывать: пользователь может распечатать отчёт без детализации, не заметив этого.
Проверка результата и типичные ошибки
Признак корректной группировки — панель уровней слева от документа с кнопками уровней (1, 2, 3…) и значками сворачивания у каждой группы. Если панели нет, группировка не создана: проверьте, был ли вызван парный метод закрытия группы и не выводился ли документ заново после группировки (повторный Очистить и вывод стирают группы).
Частая ошибка — исключение «Нарушение соответствия уровней группировок» при автогруппировке. Причина: пропуск уровня или вывод области с уровнем выше предыдущей после возврата на меньший уровень. Лечится строгой последовательностью вывода: группа уровня N всегда предшествует строкам уровня N+1.
Ещё одна проблема — группировки «теряются» при выводе через СКД. Процессор вывода СКД сам управляет структурой табличного документа, и ручные вызовы методов группировки между выводом элементов результата конфликтуют с ним. В таких случаях используйте штатные группировки СКД, а не методы табличного документа.
Альтернативы: СКД, сводные таблицы, иерархические отчёты
Если цель — аналитический отчёт с итогами, чаще правильнее использовать группировки СКД: они формируются запросом, автоматически считают итоги по каждому уровню и отображаются в отчёте как дерево. Ручная группировка табличного документа итогов не считает — она лишь визуально сворачивает строки.
Сводная таблица подходит, когда нужна двумерная группировка (строки × колонки) с перетаскиванием измерений пользователем. Для простых печатных форм с фиксированной структурой достаточно программной группировки табличного документа.
Сравнение вариантов
Подходит для разовой правки готового документа; не сохраняется при пересчёте отчёта
Полный контроль из кода; требует аккуратного соблюдения уровней и парности методов
Оптимальна при обходе иерархических выборок запроса; уровень задаётся в методе Вывести
Автоматические итоги и настройка пользователем; не подходит для произвольных печатных форм
Что важно запомнить
Группировка табличного документа создаётся вручную (Ctrl+F9) или программно парными методами НачатьГруппуСтрок/ЗакончитьГруппуСтрок либо автогруппировкой. Группы должны быть смежными и непересекающимися, а перед печатью свёрнутые группы следует развернуть.
Частые вопросы
Почему после группировки не появляются кнопки «плюс/минус»?
Чаще всего группа была создана, но документ затем выведен заново без группировки, либо группировка применена к полю табличного документа, отображение групп которого отключено. Проверьте, что группа создана после финального вывода областей, и что у поля формы не сброшено свойство отображения группировок.
Сохраняются ли группировки при сохранении документа в Excel?
При сохранении табличного документа в формате XLS группировки строк обычно переносятся как группы Excel, но корректность зависит от версии платформы и структуры документа. Перед отправкой файла откройте его в Excel и проверьте панель группировок вручную.
Как программно свернуть или развернуть все группы?
Методы ПоказатьУровеньГруппировокСтрок(Уровень) и ПоказатьУровеньГруппировокКолонок(Уровень) разворачивают документ до указанного уровня. Чтобы полностью развернуть, передайте максимальный уровень; чтобы свернуть всё до итогов — уровень 0 или 1.
Можно ли сгруппировать строки в отчёте на СКД?
Методы табличного документа при выводе СКД применять не следует — процессор вывода управляет структурой сам. Используйте группировки в настройках СКД: они дают дерево с итогами и сворачиванием без ручного кода.
Что делать с ошибкой «Нарушение соответствия уровней группировок»?
Ошибка означает, что при автогруппировке область выведена с уровнем, которого не может быть в текущей позиции: например, уровень 2 без предшествующего уровня 1, или возврат на уровень выше после глубокого уровня без промежуточных выводов. Выровняйте последовательность вызовов Вывести по возрастанию и убыванию уровней.
Сколько уровней вложенности групп допустимо?
Платформа поддерживает ограниченное число уровней, отображаемых на панели группировок. На практике рекомендуется не более трёх-четырёх уровней: при большей глубине пользователю сложно ориентироваться, и лучше перейти на иерархический отчёт СКД.