Разработка и Конфигурация · 11 мин
1С: как изменить шрифт макета программно
Как программно изменить шрифт в табличном документе 1С: объект Шрифт, область макета, оформление ячеек. Примеры кода, ошибки и проверка результата.
При формировании печатных форм и отчетов в 1С часто требуется изменить шрифт не в конфигураторе, а прямо в коде: выделить итоги жирным, уменьшить кегль для длинных наименований, поменять начертание в зависимости от условий. Для этого платформа предоставляет объект Шрифт (Font), который применяется к области табличного документа или к оформлению ячейки.
Ключевой принцип: шрифт в 1С не редактируется «внутри» уже выведенного текста как строка — он задается как свойство области табличного документа. Поэтому порядок действий всегда одинаков: получить область, обратиться к её свойству Шрифт, создать новый объект шрифта с нужными параметрами и присвоить его. Ниже разобраны все рабочие способы с примерами кода.
Как устроен объект Шрифт в 1С
Объект Шрифт создается конструктором Новый Шрифт() с несколькими параметрами. Полная форма конструктора: имя шрифта, размер, жирность, наклон, подчеркивание, зачеркивание, вид шрифта. Все параметры, кроме имени, необязательны — если их не указать, будут использованы значения по умолчанию.
Типичный вызов выглядит так: Новый Шрифт("Arial", 12, Истина, Ложь, Ложь) — шрифт Arial, размер 12, жирный, без наклона и подчеркивания. Третий параметр отвечает за жирность, четвертый — за наклон (курсив), пятый — за подчеркивание, шестой — за зачеркивание.
Важно понимать: объект шрифта неизменяем после создания. Нельзя написать Область.Шрифт.Жирный = Истина — платформа выдаст ошибку, потому что свойства объекта доступны только для чтения. Чтобы поменять одну характеристику, нужно создать новый шрифт целиком, скопировав остальные параметры из текущего.
Изменение шрифта области табличного документа
Это самый распространенный сценарий: макет создан в конфигураторе, печатная форма выводится в табличный документ, и нужно переопределить шрифт конкретной области после вывода. Сначала область получают из макета или из уже сформированного табличного документа, затем меняют свойство.
Макет = ПолучитьМакет("ПечатьЗаказа");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = НомерДок;
ТабДок.Вывести(ОбластьШапка);
// Меняем шрифт уже выведенной области по координатам
ОбластьЯчеек = ТабДок.Область("R3C2");
ОбластьЯчеек.Шрифт = Новый Шрифт("Verdana", 10, Истина);
Обратиться к области можно двумя способами: по имени области макета до вывода или по координатам вида R3C2 (строка 3, колонка 2) после вывода в табличный документ. Диапазон задается как ТабДок.Область("R5C1:R8C4") — тогда шрифт применится ко всем ячейкам диапазона.
Если нужно изменить шрифт всего табличного документа сразу, пройдите циклом по строкам и колонкам или задайте шрифт через свойство области всего документа: ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы).Шрифт = Новый Шрифт("Arial", 9). Учтите, что это перезапишет индивидуальные настройки отдельных ячеек.
Область = ТабДок.Область("R2C1:R2C5");
Область.Шрифт = Новый Шрифт("Arial", 12, Истина, Ложь, Ложь);Условное изменение шрифта при выводе данных
На практике чаще всего шрифт меняют по условию: отрицательные суммы — жирным, строки с просроченной задолженностью — курсивом, итоговые строки — увеличенным кеглем. Для этого логику размещают в цикле вывода строк, где после заполнения параметров проверяется условие и применяется нужный шрифт.
Для Каждого СтрокаТовара Из Товары Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Заполнить(СтрокаТовара);
ТабДок.Вывести(ОбластьСтрока);
Если СтрокаТовара.Сумма < 0 Тогда
НомерСтроки = ТабДок.ВысотаТаблицы;
ТабДок.Область(НомерСтроки, 1, НомерСтроки, 5).Шрифт =
Новый Шрифт(, , Истина); // жирный, имя и размер по умолчанию
КонецЕсли;
КонецЦикла;
Обратите внимание на прием с ТабДок.ВысотаТаблицы: после вывода области это свойство возвращает номер последней строки, что позволяет точно адресовать только что выведенные ячейки без ручного подсчета. Это надежнее, чем хранить счетчик строк отдельно, особенно когда выводятся области разной высоты.
Альтернативный подход — заранее подготовить в макете несколько вариантов одной области (например, «Строка» и «СтрокаЖирная») с разным оформлением и выбирать нужную при выводе. Это удобно, когда вариантов оформления немного и они фиксированы: код становится проще, а внешний вид контролируется визуально в конфигураторе.
Как выбрать подход
Шрифт в отчетах на СКД
Если отчет построен на системе компоновки данных, прямой доступ к ячейкам результата затруднен — результат формируется компоновщиком. Здесь шрифт меняется через условное оформление: в настройках отчета на вкладке «Условное оформление» добавляется элемент, где указывается условие отбора, оформляемые поля и параметр «Шрифт».
Программно это делается через коллекцию Настройки.УсловноеОформление.Элементы. Создается элемент, в его оформлении находится параметр Шрифт, которому присваивается новый объект шрифта, а в отборе задается условие применения. Такой подход корректно работает и в пользовательском режиме, и при программной компоновке.
ЭлементОформления = Настройки.УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Использование = Истина;
ПараметрШрифт = ЭлементОформления.Оформление.НайтиЗначениеПараметра(
Новый ПараметрКомпоновкиДанных("Шрифт"));
ПараметрШрифт.Использование = Истина;
ПараметрШрифт.Значение = Новый Шрифт(, , Истина);
Не пытайтесь для отчета СКД после вывода менять шрифты через ТабДок.Область() — при любой перенастройке отчета пользователем результат будет переформирован и все ручные правки исчезнут. Условное оформление СКД встроено в механизм формирования и сохраняется при перекомпоновке.
Частые ошибки при работе со шрифтами
Первая и самая массовая ошибка — попытка изменить свойство существующего шрифта: Область.Шрифт.Размер = 14. Платформа сообщит, что свойство доступно только для чтения. Правильный путь — конструирование нового объекта и присвоение его целиком.
Вторая ошибка — указание шрифта, которого нет на компьютере пользователя или на сервере. Если печатная форма формируется на сервере, шрифт должен быть установлен именно там; иначе система подставит шрифт по умолчанию, и документ будет выглядеть иначе, чем у разработчика. Проверяйте наличие гарнитуры на всех машинах, где формируется печать.
Третья типичная проблема — изменение шрифта области макета до вывода с ожиданием, что это сработает: ОбластьШапка.Шрифт = ... до ТабДок.Вывести() действительно сработает для шаблона области, но многие забывают, что параметры макета с автооформлением могут переопределить вид. Надежнее менять шрифт уже выведенной области по координатам.
Проверка результата и ограничения
После изменения шрифта обязательно проверьте три вещи: читаемость текста (не обрезан ли он в ячейке), соответствие печатной формы при выводе на принтер (экранный вид и печать могут отличаться) и поведение при экспорте в Excel или PDF — некоторые шрифты некорректно переносятся при сохранении, если их нет в системе.
Учитывайте ограничение по размеру: увеличение кегля часто требует одновременной корректировки высоты строки и ширины колонок, иначе текст визуально «вылезет» или будет скрыт. Высота строки управляется свойством области ВысотаСтроки, ширина колонки — ШиринаКолонки.
Для управляемых форм помните: шрифт элементов формы (надписей, полей) меняется иначе — через свойство Шрифт элемента формы или через условное оформление формы, а не через табличный документ. Механизмы не взаимозаменяемы, хотя объект Шрифт используется один и тот же.
Как проверить результат
Текст полностью виден, начертание соответствует заданному
Текст обрезан, шрифт визуально не изменился
Начертание совпадает с экранным видом
При печати подставляется другой шрифт — гарнитуры нет на машине
Шрифт сохраняется в файле
В файле шрифт заменен системным — шрифт не встроен или отсутствует
Оформление сохраняется после изменения настроек
Шрифт сбрасывается — изменения вносились в табличный документ вручную, а не через оформление СКД
FAQ
Как изменить только жирность, не зная текущего имени шрифта?
Прочитайте параметры текущего шрифта области через Область.Шрифт.ИмяШрифта и Область.Шрифт.Размер, затем создайте новый объект с этими же значениями, но с нужной жирностью: Новый Шрифт(СтароеИмя, СтарыйРазмер, Истина). Так остальные характеристики сохранятся.
Можно ли задать шрифт по умолчанию для всего макета?
Да. В конфигураторе выделите все ячейки макета и задайте шрифт в палитре свойств — он станет базовым для области. Программно это делается присвоением шрифта диапазону всего табличного документа после формирования.
Почему шрифт меняется у разработчика, но не у пользователей?
Наиболее вероятная причина — указанная гарнитура не установлена на компьютерах пользователей или на сервере 1С, где выполняется код. Платформа молча подставляет доступный шрифт. Используйте стандартные гарнитуры вроде Arial или Times New Roman либо обеспечьте установку шрифта на всех рабочих местах.
Как поменять шрифт в мобильном клиенте или веб-клиенте?
Механизм тот же — объект Шрифт и свойство области табличного документа работают в обоих клиентах. Ограничение касается доступных гарнитур: в веб-браузере и на мобильных устройствах набор шрифтов уже, поэтому выбирайте распространенные семейства и проверяйте отображение в целевом клиенте.
Можно ли применить разные шрифты к части текста внутри одной ячейки?
Напрямую — нет: шрифт задается для ячейки целиком. Обходной путь — использовать форматированную строку (объект ФорматированнаяСтрока) в полях формы, где это поддерживается, либо разбить содержимое на несколько ячеек с разным оформлением.
Что делать, если после смены шрифта текст не помещается в ячейку?
Увеличьте высоту строки через свойство ВысотаСтроки области, расширьте колонку через ШиринуКолонки или включите автоподбор высоты (свойство АвтоВысотаСтроки). Альтернатива — уменьшить размер шрифта либо разрешить перенос слов в свойствах ячейки.
Что важно запомнить
Шрифт в 1С меняется только присвоением нового объекта Новый Шрифт() свойству области — свойства существующего шрифта доступны только для чтения. Для табличных документов работайте с областями по координатам после вывода, для отчетов СКД — через условное оформление. Проверяйте наличие гарнитуры на сервере и у пользователей, а типовые процедуры печати меняйте через расширение.