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

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

При разработке и оформлении печатных форм в среде «1С:Предприятие» перед разработчиками часто встает задача динамического изменения стилей ячеек. Например, может потребоваться выделить жирным шрифтом строки итогов, важные показатели или заголовки таблиц. Однако попытка изменить начертание шрифта напрямую через свойства ячейки приводит к ошибке платформы. В этой статье мы подробно разберем, почему возникает эта ошибка и как правильно управлять оформлением текста программно.

Выясняем причину ошибки «Поле объекта недоступно для записи»

Рассмотрим типичную ситуацию. Разработчик получает область из макета и пытается сделать шрифт жирным следующим образом:


ОбластьСтрокаНач = Макет.ПолучитьОбласть("СтрокаНач");
ОбластьСтрокаНач.ТекущаяОбласть.Шрифт.Жирный = Истина;

При выполнении этого кода система выдает ошибку: «Поле объекта недоступно для записи (Жирный)». Причина кроется в архитектуре платформы «1С:Предприятие»: свойства существующего объекта Шрифт (такие как Жирный, Наклонный, Размер, Имя) доступны только для чтения. Напрямую модифицировать созданный объект шрифта нельзя.

Чтобы изменить оформление ячейки, необходимо создать совершенно новый объект Шрифт с требуемыми свойствами и присвоить его свойству Шрифт целевой области табличного документа.

---

Решение 1: Создание нового шрифта на основе существующего

Это самый простой и надежный способ, если вам нужно изменить только жирность шрифта, но при этом сохранить все остальные исходные настройки ячейки (размер, семейство шрифта, наклон и т.д.). Для этого мы используем специальный конструктор, где в качестве первого параметра передается исходный шрифт, а нужные свойства переопределяются.

Синтаксис конструктора выглядит следующим образом:

Новый Шрифт(<ИсходныйШрифт>, <ИмяШрифта>, <Размер>, <Жирный>, <Наклонный>, <Подчеркнутый>, <Зачеркнутый>)

Давайте разберем практический пример реализации:


// Получаем область из макета
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаНач");

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

// Создаем новый шрифт на основе старого, передавая параметр Жирный = Истина
НовыйЖирныйШрифт = Новый Шрифт(ИсходныйШрифт, , , Истина);

// Назначаем новый шрифт области
ОбластьСтрока.ТекущаяОбласть.Шрифт = НовыйЖирныйШрифт;

В данном примере мы опустили параметры имени и размера шрифта. Платформа автоматически унаследовала их из объекта ИсходныйШрифт, изменив только признак жирности.

---

Решение 2: Создание шрифта с нуля (по параметрам)

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

Синтаксис конструктора для создания шрифта по параметрам:

Новый Шрифт(<ИмяШрифта>, <Размер>, <Жирный>, <Наклонный>, <Подчеркнутый>, <Зачеркнутый>)

Рассмотрим пример создания полужирного шрифта Arial размером 10 пунктов:


// Назначение конкретного шрифта для выделенной области
ОбластьЯчейки = ОбластьСтрока.Область("R1C1:R1C5");
ОбластьЯчейки.Шрифт = Новый Шрифт("Arial", 10, Истина);

Если вы хотите использовать стандартный шрифт операционной системы, установленный по умолчанию, но сделать его жирным, параметры имени и размера можно опустить:

ОбластьСтрока.ТекущаяОбласть.Шрифт = Новый Шрифт(,, Истина); ---

Важно: Оптимизация производительности при работе в циклах

Создание любого нового программного объекта в 1С (включая Шрифт) — это ресурсоемкая операция. Если вы будете создавать новый шрифт в цикле для каждой из тысяч выводимых строк отчета, это приведет к критическому падению скорости формирования печатной формы.

Антипаттерн (так делать нельзя):


Для Каждого СтрокаДанных Из РезультатЗапроса Цикл
    Область = Макет.ПолучитьОбласть("Строка");
    Если СтрокаДанных.ЭтоИтог Тогда
        // ПЛОХО: Новый объект шрифта создается на каждой итерации цикла!
        Область.ТекущаяОбласть.Шрифт = Новый Шрифт(Область.ТекущаяОбласть.Шрифт, , , Истина);
    КонецЕсли;
    ТабДок.Вывести(Область);
КонецЦикла;

Правильный подход (оптимизированный код):

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


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

Для Каждого СтрокаДанных Из РезультатЗапроса Цикл
    Область = Макет.ПолучитьОбласть("Строка");
    
    // Заполняем параметры области...
    
    Если СтрокаДанных.ЭтоИтог Тогда
        // Быстро присваиваем уже готовый объект
        Область.Область("R1C1:R1C5").Шрифт = ЖирныйШрифт;
    Иначе
        Область.Область("R1C1:R1C5").Шрифт = ОбычныйШрифт;
    КонецЕсли;
    
    ТабДок.Вывести(Область);
КонецЦикла;

---

Использование системных стилей оформления конфигурации

Чтобы ваши отчеты и печатные формы выглядели профессионально и соответствовали выбранной теме оформления пользователя, рекомендуется использовать Шрифты стиля. Это позволяет избежать жесткого кодирования конкретных названий шрифтов (например, "Arial" или "Calibri"), которые могут отсутствовать на компьютере пользователя (например, при работе под управлением Linux или macOS).

Реализуется это следующим образом:


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

---

Альтернативный подход: Оформление на уровне макета

Написание большого объема программного кода для изменения стилей ячеек усложняет чтение и поддержку конфигурации. В практике разработки на платформе 1С наиболее простым и предпочтительным решением часто является создание нескольких областей в самом макете в режиме Конфигуратора.

Вы можете визуально настроить две разные строки:

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

Тогда программная логика вывода данных значительно упрощается:


Если СтрокаДанных.ЭтоИтог Тогда
    // Получаем уже готовую оформленную строку из макета
    ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаЖирная");
Иначе
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
КонецЕсли;

// Заполнение параметров и вывод
ТабДок.Вывести(ОбластьСтрока);

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

---

Как выделить жирным только часть текста в ячейке

Иногда возникает необходимость применить полужирное начертание выборочно к отдельным словам или цифрам в рамках одной ячейки (например: «Итого: 250 000 руб.»). Настройка свойства Шрифт у всей области здесь не поможет, так как она применится ко всему содержимому целиком.

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


// Объявляем жирный шрифт для выделения значения
ШрифтВыделения = Новый Шрифт(,, Истина);

// Собираем форматированную строку из частей
Часть1 = "Итого: ";
Часть2 = Новый ФорматированнаяСтрока("250 000", ШрифтВыделения);
Часть3 = " руб.";

// Помещаем результат в параметр ячейки табличного документа
Область.Параметры.Результат = Новый ФорматированнаяСтрока(Часть1, Часть2, Часть3);

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

← На главную