Как выделить выбранный вариант реквизита в печатной форме 1С?

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

При разработке печатных форм в 1С часто возникает задача визуального акцентирования данных. Например, если в документе есть реквизит с выбором из нескольких вариантов, пользователю нужно наглядно видеть в распечатанном документе, что именно было выбрано. Рассмотрим, как программно реализовать подчеркивание или иное выделение выбранного варианта в табличном документе.

Метод 1: Программное изменение шрифта ячейки

Первый путь, который приходит на ум — это изменение свойств шрифта ячейки «на лету». Важно понимать, что в платформе 1С объект Шрифт является неизменяемым (immutable). Это значит, что мы не можем просто обратиться к свойству Подчеркивание и изменить его значение на Истина, так как это свойство доступно только для чтения. Чтобы изменить начертание, нам необходимо создать новый объект Шрифт на основе старого, передав в конструктор нужный нам параметр.

Разберем, как это сделать по шагам:

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

Пример программного кода для реализации этой задачи:


// Предположим, мы нашли нужную область
Область = Макет.Область("ИмяЯчейки");

// Создаем новый шрифт, копируя параметры текущего и устанавливая подчеркивание
НовыйШрифт = Новый Шрифт(Область.Шрифт, , , , , Истина);

// Применяем новый шрифт к области
Область.Шрифт = НовыйШрифт;

Этот способ позволяет гибко управлять оформлением текста, однако требует внимательности при работе с поиском ячеек в макете.

Метод 2: Работа с границами ячейки

Иногда вместо подчеркивания текста удобнее использовать границы ячеек. Однако попытки прямого обращения к границам через НайтиТекст могут приводить к ошибкам доступа. Чтобы корректно применить линию, необходимо сначала идентифицировать конкретную область. Давайте посмотрим, как это реализовать:


// Поиск области и применение границы снизу
ОбластьПоиска = ОбластьЗаголовок.НайтиТекст("1. автомобилем");

Если ОбластьПоиска <> Неопределено Тогда
    // Получаем область по имени, найденному в результате поиска
    ЦелеваяОбласть = ОбластьЗаголовок.Область(ОбластьПоиска.Имя);
    
    // Устанавливаем нижнюю границу
    ЦелеваяОбласть.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 2);
КонецЕсли;

Важное примечание: При использовании метода НайтиТекст убедитесь, что искомая фраза уникальна в рамках вашего макета. В противном случае система вернет только первое вхождение, что может привести к неверному оформлению документа.

Метод 3: Использование именованных областей (Лучшая практика)

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

Разберем этот подход подробнее:

  1. В макете табличного документа создайте две версии строки: одна — с обычным шрифтом, другая — с подчеркнутым (или выделенным жирным шрифтом).
  2. Присвойте этим строкам разные имена областей, например: СтрокаАвтомобиль_Обычный и СтрокаАвтомобиль_Подчеркнутый.
  3. В модуле формирования печатной формы используйте логическое условие Если...Тогда...Иначе, чтобы вывести именно ту область, которая соответствует состоянию данных в документе.

Пример реализации:


Если ВыбранныйВариант = Перечисления.СпособыДоставки.Автомобиль Тогда
    ОбластьДляВывода = Макет.ПолучитьОбласть("СтрокаАвтомобиль_Подчеркнутый");
Иначе
    ОбластьДляВывода = Макет.ПолучитьОбласть("СтрокаАвтомобиль_Обычный");
КонецЕсли;

ТабличныйДокумент.Вывести(ОбластьДляВывода);

Преимущества данного метода:

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

← На главную