При разработке отчетов часто возникает ситуация, когда один и тот же макет необходимо использовать для разных вариантов вывода данных. Например, в одном отчете должны отображаться все шесть колонок, а в другом — только пять из них. Чтобы не создавать несколько практически идентичных макетов, мы можем управлять составом колонок программно. Рассмотрим основные способы решения этой задачи, их преимущества и технические нюансы.
Это самый прямой способ физического удаления данных и структуры колонки из уже сформированного или формируемого табличного документа. Метод УдалитьОбласть позволяет не просто очистить содержимое ячеек, но и сдвинуть оставшиеся колонки, чтобы на месте удаленной не оставалось пустого пространства.
Разберем пример кода, где мы удаляем конкретную колонку по её координатам:
// Определяем область, которую нужно удалить (например, 6-ю колонку)
Смещать = ТипСмещенияТабличногоДокумента.ПоГоризонтали;
// Удаляем область во всем диапазоне строк, либо в конкретных строках шапки
ОбластьУдаления = ТабДок.Область("C6");
ТабДок.УдалитьОбласть(ОбластьУдаления, Смещать);
Важные правила при использовании удаления:
ТипСмещенияТабличногоДокумента.ПоГоризонтали, чтобы колонки справа сдвинулись влево, заполняя образовавшуюся пустоту."C6" (шестая колонка целиком) или "R1C6:R100C6" для удаления диапазона в конкретных строках.Если физическое удаление кажется слишком радикальным или может нарушить структуру сложных объединений ячеек, мы можем воспользоваться механизмом скрытия колонок. Существует два варианта: установка нулевой ширины или использование свойства видимости.
Проанализируем программную реализацию:
// Вариант 1: Установка ширины колонки в 0
ТабДок.Область("C5").ШиринаКолонки = 0;
// Вариант 2: Использование свойства Видимость
ТабДок.Область("C5").Видимость = Ложь;
Особенности этого метода:
Видимость = Ложь работает более корректно с точки зрения платформы, однако стоит учитывать, что при интерактивном использовании отчета пользователь может случайно "раздвинуть" скрытую колонку мышкой.Вместо того чтобы сначала выводить всё, а потом удалять лишнее, правильнее изначально выводить только нужные части. Для этого в макете создаются именованные вертикальные области.
Рассмотрим алгоритм действий:
КолонкаТовар, КолонкаЦена, КолонкаСкидка).Вывести() для первой секции строки и Присоединить() для всех последующих.Пример программного кода:
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетОтчета");
// Получаем области
ОбластьШапкаЛево = Макет.ПолучитьОбласть("Шапка|КолонкаТовар");
ОбластьШапкаСкидка = Макет.ПолучитьОбласть("Шапка|КолонкаСкидка");
ОбластьШапкаИтог = Макет.ПолучитьОбласть("Шапка|КолонкаИтог");
// Выводим шапку
ТабДок.Вывести(ОбластьШапкаЛево);
Если НужноВыводитьСкидку Тогда
ТабДок.Присоединить(ОбластьШапкаСкидка);
КонецЕсли;
ТабДок.Присоединить(ОбластьШапкаИтог);
Этот подход считается наиболее профессиональным, так как он исключает "кромсание" уже готового документа и позволяет гибко управлять логикой формирования отчета без использования жестких координат ячеек типа R1C1.
Перед тем как приступать к манипуляциям с областями табличного документа, обратите внимание на следующие моменты:
ТабДок.ТолькоПросмотр = Ложь.ТабДок.Области.ИмяОбласти. Это гарантирует, что если вы добавите в макет новую строку сверху, программный код не "промахнется" мимо нужной колонки.Видимость = Ложь может привести к тому, что при разворачивании группы скрытая колонка снова станет видимой. В этом случае физическое удаление через УдалитьОбласть будет надежнее.Выбор конкретного метода зависит от сложности вашего макета. Для простых списков достаточно УдалитьОбласть, а для сложных документов со множеством условий лучше сразу проектировать макет с использованием вертикальных секций.