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

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

При разработке отчетов часто возникает ситуация, когда один и тот же макет необходимо использовать для разных вариантов вывода данных. Например, в одном отчете должны отображаться все шесть колонок, а в другом — только пять из них. Чтобы не создавать несколько практически идентичных макетов, мы можем управлять составом колонок программно. Рассмотрим основные способы решения этой задачи, их преимущества и технические нюансы.

Способ 1: Использование метода УдалитьОбласть

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

Разберем пример кода, где мы удаляем конкретную колонку по её координатам:


// Определяем область, которую нужно удалить (например, 6-ю колонку)
Смещать = ТипСмещенияТабличногоДокумента.ПоГоризонтали;
// Удаляем область во всем диапазоне строк, либо в конкретных строках шапки
ОбластьУдаления = ТабДок.Область("C6"); 
ТабДок.УдалитьОбласть(ОбластьУдаления, Смещать);

Важные правила при использовании удаления:

  1. Принцип "Справа налево": Если вам нужно удалить несколько колонок, всегда начинайте с колонок с большим индексом (справа). Если вы удалите сначала вторую колонку, то третья станет второй, и ваш последующий код обратится уже не к той области.
  2. Тип смещения: Обязательно указывайте ТипСмещенияТабличногоДокумента.ПоГоризонтали, чтобы колонки справа сдвинулись влево, заполняя образовавшуюся пустоту.
  3. Координаты: Вы можете использовать формат "C6" (шестая колонка целиком) или "R1C6:R100C6" для удаления диапазона в конкретных строках.

Способ 2: Управление шириной и видимостью

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

Проанализируем программную реализацию:


// Вариант 1: Установка ширины колонки в 0
ТабДок.Область("C5").ШиринаКолонки = 0;

// Вариант 2: Использование свойства Видимость
ТабДок.Область("C5").Видимость = Ложь;

Особенности этого метода:

Способ 3: Сборка отчета через вертикальные секции (рекомендуемый)

Вместо того чтобы сначала выводить всё, а потом удалять лишнее, правильнее изначально выводить только нужные части. Для этого в макете создаются именованные вертикальные области.

Рассмотрим алгоритм действий:

  1. В макете выделите нужные колонки и назначьте им имена (например, КолонкаТовар, КолонкаЦена, КолонкаСкидка).
  2. В коде используйте методы Вывести() для первой секции строки и Присоединить() для всех последующих.

Пример программного кода:


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

// Получаем области
ОбластьШапкаЛево = Макет.ПолучитьОбласть("Шапка|КолонкаТовар");
ОбластьШапкаСкидка = Макет.ПолучитьОбласть("Шапка|КолонкаСкидка");
ОбластьШапкаИтог = Макет.ПолучитьОбласть("Шапка|КолонкаИтог");

// Выводим шапку
ТабДок.Вывести(ОбластьШапкаЛево);
Если НужноВыводитьСкидку Тогда
    ТабДок.Присоединить(ОбластьШапкаСкидка);
КонецЕсли;
ТабДок.Присоединить(ОбластьШапкаИтог);

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

Важные технические нюансы

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

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

← На главную