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

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

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

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

Основной механизм группировки колонок при выводе

Для программного управления группами колонок в процессе формирования табличного документа платформой 1С предусмотрена пара методов: НачатьГруппуКолонок() и ЗакончитьГруппуКолонок().

Рассмотрим синтаксис метода начала группы:

ТаблицаДокумент.НачатьГруппуКолонок(ИмяГруппы, ОткрытаЛиГруппа);

Основные параметры метода:

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

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

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

Проанализируем практический пример. Предположим, у нас есть макет с основной частью и дополнительной колонкой «Банк». Нам необходимо выводить основной блок открытым, а колонку «Банк» присоединенной и свернутой по умолчанию.


// Включаем отображение группировок в табличном документе
ПТД.ОтображатьГруппировки = Истина;

// Получаем области из макета
ОблШапка = Макет.ПолучитьОбласть("Шапка|ОсновнаяЧасть");
ОблШапкаБанк = Макет.ПолучитьОбласть("Шапка|Банк");

// Выводим основную шапку
ПТД.Вывести(ОблШапка);

// Начинаем свернутую группу колонок перед присоединением
ПТД.НачатьГруппуКолонок("Банк", Ложь);
ПТД.Присоединить(ОблШапкаБанк);
ПТД.ЗакончитьГруппуКолонок();

// Выводим строки данных в цикле
Пока Выборка.Следующий() Цикл
    ОблСтрока = Макет.ПолучитьОбласть("Строка|ОсновнаяЧасть");
    ОблСтрокаБанк = Макет.ПолучитьОбласть("Строка|Банк");
    
    // Заполняем параметры
    ОблСтрока.Параметры.Заполнить(Выборка);
    ОблСтрокаБанк.Параметры.Заполнить(Выборка);
    
    ПТД.Вывести(ОблСтрока);
    
    // Присоединяем область колонки внутри группы
    ПТД.НачатьГруппуКолонок("Банк", Ложь);
    ПТД.Присоединить(ОблСтрокаБанк);
    ПТД.ЗакончитьГруппуКолонок();
КонецЦикла;

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

Если код написан, но колонки не сворачиваются или не группируются, проанализируем основные причины и способы их устранения:

  1. Пересечение с объединенными ячейками по горизонтали.

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

  2. Неверный порядок вызовов группировок.

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

  3. Использование автогруппировки вместо явных групп.

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

  4. Отключенное свойство отображения группировок.

    Убедитесь, что для объекта ТабличныйДокумент установлено свойство ОтображатьГруппировки = Истина. Также можно явно задать расположение элементов управления:

    
    ПТД.ОтображатьГруппировкиКолонок = СпособОтображенияГруппировокТабличногоДокумента.Сверху;
    

Альтернативный способ: группировка по номерам колонок

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


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

// Указываем, что группировки должны отображаться
ПТД.ОтображатьГруппировки = Истина;

Этот способ удобен, когда структура отчета известна заранее и номера колонок фиксированы.

← На главную