При формировании отчетов в 1С с помощью табличного документа часто возникает задача вывести дополнительные колонки (например, информацию о банках, детализацию по складам или дополнительные аналитики) в свернутом виде. Это позволяет не перегружать отчет деталями, оставляя пользователю возможность развернуть нужные данные нажатием на пиктограмму «+».
Однако на практике разработчики сталкиваются с ситуацией, когда даже после настройки группировок колонки остаются открытыми или группировка вовсе не появляется. Разберем по шагам, как правильно управлять группировкой колонок в 1С, выясним причины возможных ошибок и проанализируем решения.
Для программного управления группами колонок в процессе формирования табличного документа платформой 1С предусмотрена пара методов: НачатьГруппуКолонок() и ЗакончитьГруппуКолонок().
Рассмотрим синтаксис метода начала группы:
ТаблицаДокумент.НачатьГруппуКолонок(ИмяГруппы, ОткрытаЛиГруппа);
Основные параметры метода:
Ложь, колонка будет выведена в свернутом виде (со значком «+»). Значение по умолчанию — Истина.После вывода или присоединения областей ячеек, входящих в группу, необходимо обязательно вызвать завершающий метод:
ТаблицаДокумент.ЗакончитьГруппуКолонок();
Проанализируем практический пример. Предположим, у нас есть макет с основной частью и дополнительной колонкой «Банк». Нам необходимо выводить основной блок открытым, а колонку «Банк» присоединенной и свернутой по умолчанию.
// Включаем отображение группировок в табличном документе
ПТД.ОтображатьГруппировки = Истина;
// Получаем области из макета
ОблШапка = Макет.ПолучитьОбласть("Шапка|ОсновнаяЧасть");
ОблШапкаБанк = Макет.ПолучитьОбласть("Шапка|Банк");
// Выводим основную шапку
ПТД.Вывести(ОблШапка);
// Начинаем свернутую группу колонок перед присоединением
ПТД.НачатьГруппуКолонок("Банк", Ложь);
ПТД.Присоединить(ОблШапкаБанк);
ПТД.ЗакончитьГруппуКолонок();
// Выводим строки данных в цикле
Пока Выборка.Следующий() Цикл
ОблСтрока = Макет.ПолучитьОбласть("Строка|ОсновнаяЧасть");
ОблСтрокаБанк = Макет.ПолучитьОбласть("Строка|Банк");
// Заполняем параметры
ОблСтрока.Параметры.Заполнить(Выборка);
ОблСтрокаБанк.Параметры.Заполнить(Выборка);
ПТД.Вывести(ОблСтрока);
// Присоединяем область колонки внутри группы
ПТД.НачатьГруппуКолонок("Банк", Ложь);
ПТД.Присоединить(ОблСтрокаБанк);
ПТД.ЗакончитьГруппуКолонок();
КонецЦикла;
Если код написан, но колонки не сворачиваются или не группируются, проанализируем основные причины и способы их устранения:
Это самая частая причина проблемы. Если в документе присутствует хотя бы одна строка (заголовок отчета, итоговая строка, подвал), в которой ячейки объединены по горизонтали и пересекают границу сворачиваемой группы колонок, платформа не сможет скрыть колонку. Для решения проблемы проверьте макет и разъедините объединенные ячейки в шапке или подвале, выведя их отдельными присоединенными областями.
Вызовы НачатьГруппуКолонок() и ЗакончитьГруппуКолонок() должны непосредственно обрамлять вывод или присоединение тех колонок, которые образуют группу. Вызов метода группировки колонок уже после полного построения всего документа не даст нужного эффекта.
Методы НачатьАвтогруппировкуКолонок() и ЗакончитьАвтогруппировкуКолонок() сгруппируют данные только в том случае, если в выводимых областях явно задан уровень иерархии при вызове Присоединить(). Для точечного сворачивания конкретной колонки лучше применять явные методы НачатьГруппуКолонок() и ЗакончитьГруппуКолонок().
Убедитесь, что для объекта ТабличныйДокумент установлено свойство ОтображатьГруппировки = Истина. Также можно явно задать расположение элементов управления:
ПТД.ОтображатьГруппировкиКолонок = СпособОтображенияГруппировокТабличногоДокумента.Сверху;
Если табличный документ выводится целиком без сложного пошагового присоединения областей, сгруппировать колонки можно постафактум по их номерам с помощью метода Сгруппировать() области табличного документа:
// Группируем колонку №3 (от колонки 3 до колонки 3)
ПТД.Область(, 3, , 3).Сгруппировать();
// Указываем, что группировки должны отображаться
ПТД.ОтображатьГруппировки = Истина;
Этот способ удобен, когда структура отчета известна заранее и номера колонок фиксированы.