К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как программно изменить шрифт в табличном документе 1С

Как программно изменить шрифт в табличном документе 1С: свойство Шрифт области, примеры кода, работа с макетами, типичные ошибки и проверка результата.

Табличный документ в 1С используется для печатных форм, отчётов и вывода данных на экран, и оформление текста в нём задаётся через свойство Шрифт области ячеек. Программно изменить шрифт можно как для всей области целиком, так и для отдельных ячеек, причём доступны размер, имя шрифта, жирность, наклон, подчёркивание и зачёркивание.

Основной приём — получить область методом Область() объекта ТабличныйДокумент и присвоить её свойству Шрифт новое значение типа Шрифт. Конструктор шрифта позволяет создать объект с нуля или на основе существующего, изменив только нужные параметры.

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

Как устроено оформление ячеек табличного документа

Каждая область табличного документа (отдельная ячейка, прямоугольный диапазон, строка или колонка) имеет набор свойств оформления: Шрифт, ЦветТекста, ЦветФона, Границы, ГоризонтальноеПоложение и другие. Свойство Шрифт содержит объект типа Шрифт, который описывает начертание целиком, а не отдельными свойствами ячейки.

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

Базовый пример: изменить шрифт области программно

Минимальный рабочий код выглядит так: создаём табличный документ, получаем область и назначаем ей новый шрифт. Создание шрифта «с нуля» задаёт все параметры явно.

ТабДок = Новый ТабличныйДокумент;

ТабДок.Область("R1C1").Текст = "Заголовок отчёта";

// Шрифт с нуля: имя, размер, жирный, наклонный

НовыйШрифт = Новый Шрифт("Arial", 14, Истина, Ложь);

ТабДок.Область("R1C1").Шрифт = НовыйШрифт;

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

Область = ТабДок.Область("R2C3");

// Меняем только размер до 12 и делаем жирным, имя и наклон — как были

Область.Шрифт = Новый Шрифт(Область.Шрифт, , 12, Истина);

Обратите внимание на пропущенный второй параметр: пустая позиция означает «оставить значение исходного шрифта». Это удобно, когда макет уже задаёт нужное имя шрифта, а программно требуется лишь увеличить размер или добавить жирность.

bsl
Область = ТабДок.Область("R2C3");
Область.Шрифт = Новый Шрифт(Область.Шрифт, , 12, Истина); // размер 12, жирный

Изменение шрифта при выводе макета

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

Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Печать");

ОбластьИтого = Макет.ПолучитьОбласть("Итого");

ОбластьИтого.Параметры.СуммаИтого = СуммаДокумента;

ТабДок.Вывести(ОбластьИтого);

// Выделяем жирным только что выведенную строку итогов

НомерСтроки = ТабДок.ВысотаТаблицы;

Диапазон = ТабДок.Область("R" + НомерСтроки + "C1:R" + НомерСтроки + "C6");

Диапазон.Шрифт = Новый Шрифт(Диапазон.Шрифт, , , Истина);

Альтернатива — менять шрифт ещё в области макета до вывода: ОбластьИтого.Область("R1C1").Шрифт = .... Тогда оформление попадёт в табличный документ вместе с выводом. Такой подход удобен, когда одна и та же область макета выводится несколько раз с разным оформлением.

Условное изменение шрифта по значению ячейки

Распространённая задача — подсветить оформлением отрицательные суммы, просроченные документы или крупные значения. Логика проста: после вывода строки проверяется значение, и при выполнении условия области назначается другой шрифт.

Для Каждого СтрокаТовары Из Товары Цикл

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

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

ТабДок.Вывести(ОбластьСтрока);

Если СтрокаТовары.Сумма < 0 Тогда

Ном = ТабДок.ВысотаТаблицы;

ЯчейкаСумма = ТабДок.Область("R" + Ном + "C5");

ЯчейкаСумма.Шрифт = Новый Шрифт(ЯчейкаСумма.Шрифт, , , Истина);

ЯчейкаСумма.ЦветТекста = Новый Цвет(200, 0, 0);

КонецЕсли;

КонецЦикла;

Для отчётов на СКД такой ручной подход не нужен: там условное оформление задаётся в настройках схемы компоновки, и шрифт меняется декларативно по условию без обхода ячеек. Программный перебор областей оправдан именно для «классических» табличных документов, построенных выводом макетов.

Порядок действий при выводе печатной формы
  1. 1
    Получите макет и заполните параметры области
  2. 2
    Выведите область в табличный документ методом Вывести()
  3. 3
    Определите координаты выведенной области через ВысотаТаблицы или ШиринаТаблицы
  4. 4
    Получите область методом Область() и присвойте свойству Шрифт новый объект
  5. 5
    Проверьте результат на предпросмотре и при печати

Массовое изменение шрифта: весь документ, строки, колонки

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

ВсяОбласть = ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы);

ВсяОбласть.Шрифт = Новый Шрифт(ВсяОбласть.Шрифт, , 8);

Адресация по типам областей: ТабДок.Область("R5") — вся пятая строка, ТабДок.Область("C3") — вся третья колонка, ТабДок.Область("R2C1:R10C6") — прямоугольный диапазон. Учтите, что назначение шрифта большой области перезапишет индивидуальное оформление отдельных ячеек внутри неё.

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

Типичные ошибки
01
Попытка изменить свойство шрифта напрямую: Область.Шрифт.Размер = 12 — объект шрифта неизменяем, нужно создавать новый через Новый Шрифт
02
Назначение шрифта всей области после индивидуального оформления ячеек — перезаписывает различия, заданные ранее
03
Изменение шрифта в макете после того, как область уже выведена — на выведенные строки это не влияет
04
Использование несуществующего имени шрифта — при печати или экспорте в PDF начертание может подмениться системным шрифтом

Ограничения: печать, PDF, Excel и веб-клиент

Не всякий шрифт, заданный программно, одинаково отобразится во всех сценариях. При печати и сохранении в PDF используются шрифты, установленные на компьютере или сервере, где выполняется формирование. Если указанного имени шрифта в системе нет, будет выполнена подмена, и внешний вид документа изменится — особенно заметно это на сервере Linux, где набор шрифтов отличается от Windows.

При сохранении табличного документа в Excel шрифт и его параметры переносятся, но экзотические параметры (например, масштаб) могут быть проигнорированы. В тонком и веб-клиенте отображение зависит от доступности шрифта на клиентской машине, поэтому для печатных форм разумно использовать распространённые семейства: Arial, Times New Roman, Courier New.

Проверка результата и отладка

Быстрый способ убедиться, что шрифт применился, — вывести табличный документ на экран методом Показать() или открыть предпросмотр печатной формы. Программно можно прочитать свойство обратно и сравнить параметры: Область.Шрифт.Размер, Область.Шрифт.Жирный.

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

Контрольные точки

Как проверить результат

Чтение свойства после присвоения
Норма

Область.Шрифт.Размер и Жирный возвращают заданные значения

Тревожный признак

Свойства вернули старые значения — изменена не та область или макет перевыведен поверх

Предпросмотр печатной формы
Норма

Текст отображается нужным шрифтом и размером

Тревожный признак

Начертание отличается — шрифт подменён системой, проверьте его наличие

Печать или сохранение в PDF
Норма

Документ выглядит как на предпросмотре

Тревожный признак

Другой шрифт на бумаге — шрифт отсутствует на сервере или принтере

FAQ

Как изменить только размер шрифта, не трогая остальные параметры?

Создайте новый шрифт на основе текущего, указав только размер: Область.Шрифт = Новый Шрифт(Область.Шрифт, , 10). Пропущенные позиции параметров сохраняют имя, жирность и наклон исходного шрифта.

Почему присвоение Область.Шрифт.Жирный = Истина не работает?

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

Как задать шрифт для всего табличного документа по умолчанию?

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

Можно ли задать шрифт в макете, а не программно?

Да, в конфигураторе шрифт задаётся в палитре свойств ячейки макета. Программное изменение нужно, когда оформление зависит от данных: значения суммы, статуса документа, количества колонок и т.п.

Почему при печати шрифт отличается от того, что на экране?

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

Как изменить шрифт в отчёте на СКД?

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

Итог

Что важно запомнить

Шрифт меняется через свойство Шрифт области табличного документа, объект шрифта неизменяем — создавайте новый через Новый Шрифт на основе текущего. Правьте оформление до вывода области из макета или сразу после, и проверяйте наличие шрифта на сервере для печати и PDF.