Разработка и Конфигурация · 10 мин
Как программно изменить шрифт в табличном документе 1С
Как программно изменить шрифт в табличном документе 1С: свойство Шрифт области, примеры кода, работа с макетами, типичные ошибки и проверка результата.
Табличный документ в 1С используется для печатных форм, отчётов и вывода данных на экран, и оформление текста в нём задаётся через свойство Шрифт области ячеек. Программно изменить шрифт можно как для всей области целиком, так и для отдельных ячеек, причём доступны размер, имя шрифта, жирность, наклон, подчёркивание и зачёркивание.
Основной приём — получить область методом Область() объекта ТабличныйДокумент и присвоить её свойству Шрифт новое значение типа Шрифт. Конструктор шрифта позволяет создать объект с нуля или на основе существующего, изменив только нужные параметры.
Ниже разобраны практические сценарии: изменение шрифта при выводе макета, оформление итогов и заголовков, условное оформление по значению ячейки, а также ограничения, о которых нужно помнить при работе с печатью и сохранением в файлы.
Как устроено оформление ячеек табличного документа
Каждая область табличного документа (отдельная ячейка, прямоугольный диапазон, строка или колонка) имеет набор свойств оформления: Шрифт, ЦветТекста, ЦветФона, Границы, ГоризонтальноеПоложение и другие. Свойство Шрифт содержит объект типа Шрифт, который описывает начертание целиком, а не отдельными свойствами ячейки.
Объект Шрифт имеет параметры: имя (например, «Arial»), размер, жирность (булево), наклон (булево), подчёркивание (булево), зачёркивание (булево) и масштаб. Изменить один параметр готового шрифта напрямую нельзя — объект шрифта неизменяем после создания, поэтому принято создавать новый шрифт на основе текущего.
Базовый пример: изменить шрифт области программно
Минимальный рабочий код выглядит так: создаём табличный документ, получаем область и назначаем ей новый шрифт. Создание шрифта «с нуля» задаёт все параметры явно.
ТабДок = Новый ТабличныйДокумент;
ТабДок.Область("R1C1").Текст = "Заголовок отчёта";
// Шрифт с нуля: имя, размер, жирный, наклонный
НовыйШрифт = Новый Шрифт("Arial", 14, Истина, Ложь);
ТабДок.Область("R1C1").Шрифт = НовыйШрифт;
Чаще нужно изменить только один параметр, сохранив остальные. Для этого первым аргументом конструктора передают исходный шрифт, а изменяемые параметры указывают позиционно:
Область = ТабДок.Область("R2C3");
// Меняем только размер до 12 и делаем жирным, имя и наклон — как были
Область.Шрифт = Новый Шрифт(Область.Шрифт, , 12, Истина);
Обратите внимание на пропущенный второй параметр: пустая позиция означает «оставить значение исходного шрифта». Это удобно, когда макет уже задаёт нужное имя шрифта, а программно требуется лишь увеличить размер или добавить жирность.
Область = ТабДок.Область("R2C3");
Область.Шрифт = Новый Шрифт(Область.Шрифт, , 12, Истина); // размер 12, жирныйИзменение шрифта при выводе макета
Типовой сценарий — печатная форма строится из макета, а шрифт нужно скорректировать динамически: например, выделить жирным строку итогов или уменьшить шрифт при большом количестве колонок. Удобнее всего менять оформление сразу после Вывести() или Присоединить(), пока известны координаты только что выведенной области.
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Печать");
ОбластьИтого = Макет.ПолучитьОбласть("Итого");
ОбластьИтого.Параметры.СуммаИтого = СуммаДокумента;
ТабДок.Вывести(ОбластьИтого);
// Выделяем жирным только что выведенную строку итогов
НомерСтроки = ТабДок.ВысотаТаблицы;
Диапазон = ТабДок.Область("R" + НомерСтроки + "C1:R" + НомерСтроки + "C6");
Диапазон.Шрифт = Новый Шрифт(Диапазон.Шрифт, , , Истина);
Альтернатива — менять шрифт ещё в области макета до вывода: ОбластьИтого.Область("R1C1").Шрифт = .... Тогда оформление попадёт в табличный документ вместе с выводом. Такой подход удобен, когда одна и та же область макета выводится несколько раз с разным оформлением.
Условное изменение шрифта по значению ячейки
Распространённая задача — подсветить оформлением отрицательные суммы, просроченные документы или крупные значения. Логика проста: после вывода строки проверяется значение, и при выполнении условия области назначается другой шрифт.
Для Каждого СтрокаТовары Из Товары Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Заполнить(СтрокаТовары);
ТабДок.Вывести(ОбластьСтрока);
Если СтрокаТовары.Сумма < 0 Тогда
Ном = ТабДок.ВысотаТаблицы;
ЯчейкаСумма = ТабДок.Область("R" + Ном + "C5");
ЯчейкаСумма.Шрифт = Новый Шрифт(ЯчейкаСумма.Шрифт, , , Истина);
ЯчейкаСумма.ЦветТекста = Новый Цвет(200, 0, 0);
КонецЕсли;
КонецЦикла;
Для отчётов на СКД такой ручной подход не нужен: там условное оформление задаётся в настройках схемы компоновки, и шрифт меняется декларативно по условию без обхода ячеек. Программный перебор областей оправдан именно для «классических» табличных документов, построенных выводом макетов.
- 1Получите макет и заполните параметры области
- 2Выведите область в табличный документ методом Вывести()
- 3Определите координаты выведенной области через ВысотаТаблицы или ШиринаТаблицы
- 4Получите область методом Область() и присвойте свойству Шрифт новый объект
- 5Проверьте результат на предпросмотре и при печати
Массовое изменение шрифта: весь документ, строки, колонки
Чтобы изменить шрифт всего документа, получите область, охватывающую весь использованный диапазон, и назначьте ей новый шрифт. Например, уменьшение размера всего документа помогает уместить широкую таблицу на листе.
ВсяОбласть = ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы);
ВсяОбласть.Шрифт = Новый Шрифт(ВсяОбласть.Шрифт, , 8);
Адресация по типам областей: ТабДок.Область("R5") — вся пятая строка, ТабДок.Область("C3") — вся третья колонка, ТабДок.Область("R2C1:R10C6") — прямоугольный диапазон. Учтите, что назначение шрифта большой области перезапишет индивидуальное оформление отдельных ячеек внутри неё.
Если нужно сохранить разные размеры у разных ячеек, но сменить у всех имя шрифта, перебирайте ячейки в цикле и создавайте шрифт на основе текущего, меняя только имя. Это медленнее, но сохраняет различия в размерах и начертаниях.
Ограничения: печать, PDF, Excel и веб-клиент
Не всякий шрифт, заданный программно, одинаково отобразится во всех сценариях. При печати и сохранении в PDF используются шрифты, установленные на компьютере или сервере, где выполняется формирование. Если указанного имени шрифта в системе нет, будет выполнена подмена, и внешний вид документа изменится — особенно заметно это на сервере Linux, где набор шрифтов отличается от Windows.
При сохранении табличного документа в Excel шрифт и его параметры переносятся, но экзотические параметры (например, масштаб) могут быть проигнорированы. В тонком и веб-клиенте отображение зависит от доступности шрифта на клиентской машине, поэтому для печатных форм разумно использовать распространённые семейства: Arial, Times New Roman, Courier New.
Проверка результата и отладка
Быстрый способ убедиться, что шрифт применился, — вывести табличный документ на экран методом Показать() или открыть предпросмотр печатной формы. Программно можно прочитать свойство обратно и сравнить параметры: Область.Шрифт.Размер, Область.Шрифт.Жирный.
При отладке удобно временно задавать ячейке контрастный цвет фона вместе со шрифтом — так видно, что изменения применились именно к нужной области, а не к соседней. После проверки цвет убирают, оставляя только шрифт.
Как проверить результат
Область.Шрифт.Размер и Жирный возвращают заданные значения
Свойства вернули старые значения — изменена не та область или макет перевыведен поверх
Текст отображается нужным шрифтом и размером
Начертание отличается — шрифт подменён системой, проверьте его наличие
Документ выглядит как на предпросмотре
Другой шрифт на бумаге — шрифт отсутствует на сервере или принтере
FAQ
Как изменить только размер шрифта, не трогая остальные параметры?
Создайте новый шрифт на основе текущего, указав только размер: Область.Шрифт = Новый Шрифт(Область.Шрифт, , 10). Пропущенные позиции параметров сохраняют имя, жирность и наклон исходного шрифта.
Почему присвоение Область.Шрифт.Жирный = Истина не работает?
Объект типа Шрифт неизменяем: его свойства доступны только для чтения. Нужно сконструировать новый объект шрифта и присвоить его свойству Шрифт области целиком.
Как задать шрифт для всего табличного документа по умолчанию?
Назначьте шрифт области, охватывающей весь использованный диапазон: ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы). Имейте в виду, что это перезапишет индивидуальное оформление ячеек внутри диапазона.
Можно ли задать шрифт в макете, а не программно?
Да, в конфигураторе шрифт задаётся в палитре свойств ячейки макета. Программное изменение нужно, когда оформление зависит от данных: значения суммы, статуса документа, количества колонок и т.п.
Почему при печати шрифт отличается от того, что на экране?
Наиболее вероятная причина — указанный шрифт не установлен на компьютере или сервере, где формируется печать, и система подменила его похожим. Проверьте наличие шрифта и используйте распространённые семейства для печатных форм.
Как изменить шрифт в отчёте на СКД?
В отчётах на компоновке данных используйте условное оформление в настройках отчёта: там можно задать шрифт для полей по условию без программного перебора ячеек табличного документа.
Что важно запомнить
Шрифт меняется через свойство Шрифт области табличного документа, объект шрифта неизменяем — создавайте новый через Новый Шрифт на основе текущего. Правьте оформление до вывода области из макета или сразу после, и проверяйте наличие шрифта на сервере для печати и PDF.