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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Разберем типичную ситуацию: разработчик настраивает структуру в макете через пункт меню Таблица → Группы → Объединить в группу. В самом конфигураторе визуально колонки сворачиваются, однако при выводе готового табличного документа в режиме «1С:Предприятие» эти группировки пропадают. Выясним причину такого поведения и рассмотрим, как программно реализовать сворачивание колонок.

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

Проанализируем механику формирования печатной формы. Когда мы формируем результирующий табличный документ, платформа 1С осуществляет последовательный вывод отдельных областей или ячеек с помощью методов Вывести() и Присоединить(). При этом настройки иерархических групп, заданные статически в шаблоне макета, не переносятся в результирующий ТабличныйДокумент автоматически. Любое группирование по вертикали или горизонтали в динамически заполняемом отчете необходимо создавать программно.

Рассмотрим основные способы реализации сворачиваемых колонок в 1С.

Способ 1. Автоматическая группировка колонок с указанием уровней

По аналогии с привычной автогруппировкой строк, для колонок существует парный механизм: методы НачатьАвтогруппировкуКолонок() и ЗакончитьАвтогруппировкуКолонок(). Присоединение горизонтальных секций выполняется с указанием числового номера уровня иерархии.

Разберем по шагам логику формирования таблицы:

  1. Включаем режим автогруппировки колонок методом ТабДок.НачатьАвтогруппировкуКолонок().
  2. При выводе шапки и колонок отчета используем метод Присоединить(), вторым параметром которого передаем номер уровня (уровень 1 — базовый/родительский, уровень 2 и выше — подчиненные сворачиваемые колонки).
  3. Завершаем процесс вызовом ТабДок.ЗакончитьАвтогруппировкуКолонок().

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


ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");

ОбластьСтрокаШапка = Макет.ПолучитьОбласть("Шапка|СтрокаДанных");
ОбластьКолонкаОсновная = Макет.ПолучитьОбласть("Шапка|КолонкаИтог");
ОбластьКолонкаДетали = Макет.ПолучитьОбласть("Шапка|КолонкаДетализация");

// Включаем автогруппировку по колонкам
ТабДок.НачатьАвтогруппировкуКолонок();

// Выводим левую фиксированную часть строки
ТабДок.Вывести(ОбластьСтрокаШапка);

// Присоединяем детальные колонки на уровне 2 (они будут сворачиваться)
ТабДок.Присоединить(ОбластьКолонкаДетали, 2, "ГруппаДетализации", Истина);
ТабДок.Присоединить(ОбластьКолонкаДетали, 2, "ГруппаДетализации", Истина);

// Присоединяем итоговую колонку на уровне 1 (базовый уровень)
ТабДок.Присоединить(ОбластьКолонкаОсновная, 1);

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

Способ 2. Явное управление группами через НачатьГруппуКолонок

Если структура таблицы сложная или неудобно оперировать числовыми индексами уровней в цикле, можно явно объявлять начало и конец группы колонок. Для этого применяются методы НачатьГруппуКолонок() и ЗакончитьГруппуКолонок().

Рассмотрим пример формирования с явным выделением групп:


ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");

ОбластьСтроки = Макет.ПолучитьОбласть("Строка|ДанныеСтроки");
ОбластьКолонка1 = Макет.ПолучитьОбласть("Строка|Колонка1");
ОбластьКолонка2 = Макет.ПолучитьОбласть("Строка|Колонка2");
ОбластьКолонкаИтог = Макет.ПолучитьОбласть("Строка|Итог");

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

// Открываем группу для сворачиваемых колонок
ТабДок.НачатьГруппуКолонок("ДетализацияПериода", Истина);

ТабДок.Присоединить(ОбластьКолонка1);
ТабДок.Присоединить(ОбластьКолонка2);

// Закрываем группу
ТабДок.ЗакончитьГруппуКолонок();

// Выводим итоговую не сворачиваемую колонку
ТабДок.Присоединить(ОбластьКолонкаИтог);

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

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

Посмотрим на пример постобработки:


// Выбираем диапазон колонок, например с 3 по 5
ОбластьДляГруппировки = ТабДок.Область(, 3, , 5);

// Создаем группу
ОбластьДляГруппировки.Сгруппировать("ГруппаПодробно");

Управление состоянием группировок и отображением

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

  1. Отображение панели группировок: Убедимся, что свойство ТабДок.ОтображатьГруппировки = Истина; включено, иначе значки плюса и минуса не будут видны пользователю.
  2. Расположение итоговой колонки: Свойство ТабДок.ИтогиСправа = Истина; (или Ложь) определяет, с какой стороны относительно скрываемой группы колонок будет располагаться управляющий элемент и итоговая колонка.
  3. Программное сворачивание до определенного уровня: Чтобы при открытии отчета колонки были свернуты по умолчанию, вызывается метод ПоказатьУровеньГруппировокКолонок().

Рассмотрим универсальную процедуру для сворачивания колонок отчета до заданного уровня:


Процедура СвернутьКолонкиОтчета(ДокументРезультат, НужныйУровеньОтчета = 0, МаксУровень = 1) Экспорт 
    
    Пока МаксУровень >= НужныйУровеньОтчета - 1 Цикл
        ДокументРезультат.ПоказатьУровеньГруппировокКолонок(МаксУровень);
        МаксУровень = МаксУровень - 1;
    КонецЦикла;
    
КонецПроцедуры

Таким образом, для создания сворачиваемых колонок в отчете достаточно использовать метод Присоединить() с указанием уровней группировки или методы НачатьГруппуКолонок() и Сгруппировать() с обязательной проверкой свойства ОтображатьГруппировки.

← На главную