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