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