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

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

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

Понимание архитектуры: Макет против Табличного документа

Важно уяснить фундаментальное различие: Макет — это лишь шаблон, структура, хранящаяся в конфигурации. Когда мы выполняем метод ПолучитьОбласть(), мы создаем экземпляр этой области. Но окончательное форматирование и отрисовка границ происходят в тот момент, когда мы выводим эту область в ТабличныйДокумент.

Многие ошибки возникают из-за попыток изменить границы прямо в объекте Макет. Эти изменения часто игнорируются или перекрываются настройками, которые применяются при выводе. Поэтому золотое правило разработки: всегда меняйте параметры оформления у той области, которая уже выведена в ваш результирующий ТабличныйДокумент.

Способ 1: Использование объекта «Линия»

Для управления границами используется конструктор Новый Линия(). Чтобы убрать линию, необходимо использовать тип ТипЛинииЯчейкиТабличногоДокумента.НетЛинии. Рассмотрим, как это применить на практике.

После вывода области в табличный документ мы получаем объект типа ОбластьЯчеекТабличногоДокумента. Именно у этого объекта мы должны изменять свойство ГраницаСнизу (или любое другое).

Пример кода для удаления линии у выведенной области:


// Сначала выводим область и получаем её в переменную
ВыведеннаяОбласть = ТабДок.Вывести(Макет.ПолучитьОбласть("ИмяОбласти"));

// Теперь задаем параметры границы для этой конкретной области
ВыведеннаяОбласть.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии, 0);

Обратите внимание: мы передаем в конструктор два параметра. Первый — это тип линии (в данном случае НетЛинии), второй — толщина. Если вы хотите сделать линию видимой, например, сплошной, код будет выглядеть так:


// Установка сплошной линии толщиной 1 пункт
ВыведеннаяОбласть.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1);

Способ 2: Очистка оформления всей области

Иногда требуется сбросить все настройки оформления ячейки к состоянию «по умолчанию» (без рамок, стандартный шрифт и фон). В этом случае поможет метод Очистить(). Он особенно полезен, когда нужно гарантированно убрать все «наслоения» стилей.


// Третий параметр Истина указывает на необходимость очистки оформления
ОбластьДляОчистки.Очистить(,, Истина);

Способ 3: Разделение макетов на варианты

Если логика изменения границ сложная (например, в зависимости от количества строк подписи или наличия данных), самым надежным и простым методом будет создание двух разных именованных областей в самом макете: ОбластьСЛинией и ОбластьБезЛинии. Это позволяет избежать программного «рисования» и значительно упрощает отладку.


Если ЕстьДанные Тогда
    ТабДок.Вывести(Макет.ПолучитьОбласть("ОбластьСЛинией"));
Иначе
    ТабДок.Вывести(Макет.ПолучитьОбласть("ОбластьБезЛинии"));
КонецЕсли;

Как диагностировать ошибки с границами?

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

  1. Проверьте диапазон: Линия может относиться к соседней ячейке или к границе всего табличного документа. Убедитесь, что вы выбираете именно те координаты (строки и колонки), которые визуально содержат линию.
  2. Используйте выделение: Примените метод ТабДок.ВыбратьОбласть(Область), чтобы увидеть в отладчике, какую именно часть документа вы пытаетесь «исправить».
  3. Установите «тестовую» линию: Попробуйте вместо удаления установить очень толстую линию (например, толщиной 5). Если после вывода вы увидите жирную черную полосу в другом месте — значит, вы обращаетесь к другой области.

Использование ТипЛинииЯчейкиТабличногоДокумента позволяет гибко управлять форматом. Помните, что ТипЛинииЯчейкиТабличногоДокумента.НетЛинии полностью удаляет границу, делая объект визуально «прозрачным» в плане рамок, что и требовалось решить в данной задаче.

← На главную