При работе с системой 1С:Предприятие разработчики и пользователи часто сталкиваются с необходимостью настройки внешнего вида печатных форм и отчетов. Одной из таких распространенных задач является изменение размера шрифта для обеспечения лучшей читаемости, соответствия корпоративным стандартам или просто для улучшения эстетики документа. В этой статье мы подробно разберем, как можно управлять шрифтом в отчетах, формируемых на базе ТабличногоДокумента, используя различные подходы и методы.
Мы выясним, какие объекты платформы 1С отвечают за форматирование текста, рассмотрим примеры кода и проанализируем типичные ситуации, где требуется изменение шрифта. Давайте вместе разберемся в этом вопросе и найдем оптимальные решения!
Прежде чем перейти к конкретным методам изменения шрифта, важно понять структуру ТабличногоДокумента. Отчеты в 1С часто формируются на основе макетов, которые представляют собой шаблоны таблиц со встроенными областями. Каждая область, в свою очередь, состоит из ячеек. Именно эти объекты – ОбластьТабличногоДокумента и ЯчейкаТабличногоДокумента – содержат свойства, позволяющие управлять их форматированием, включая шрифт.
Ключевым свойством для работы со шрифтом является свойство Шрифт, которое присутствует как у объекта ТабличныйДокумент, так и у его областей и ячеек. Это свойство возвращает объект типа Шрифт, который, в свою очередь, имеет под-свойства для настройки различных параметров: Размер, Жирный, Курсив, Подчеркивание, Цвет, Название и другие.
Когда мы формируем отчет, часто используем программный код для заполнения ТабличногоДокумента (взяв за основу пример внешней печатной формы на БСП). Для того чтобы изменить шрифт в определенной области или конкретной ячейке, мы будем работать со свойствами объектов ОбластьТабличногоДокумента и ЯчейкаТабличногоДокумента.
Наш подход будет заключаться в следующем:
Шрифт: После того как мы получили объект области или ячейки, мы обращаемся к его свойству Шрифт. Это свойство возвращает объект типа Шрифт, который мы можем модифицировать.Шрифт позволяет нам изменять такие параметры, как Размер, Жирный, Курсив, Подчеркивание, Цвет и другие. Мы можем установить новые значения для этих свойств.Важный нюанс: Часто новички сталкиваются с тем, что изменяют свойство Шрифт у объекта ОбластьМакета, полученного из макета, но потом выводят эту область, и изменения не применяются. Причина в том, что Макет.ПолучитьОбласть() возвращает копию области макета. Если мы изменяем шрифт этой копии, а затем выводим ее, все будет работать. Ошибка возникает, когда мы пытаемся получить объект области, изменить ее шрифт, а затем снова получить *другую* копию той же области из макета без применения к ней предыдущих изменений, или когда уже вывели область и пытаемся изменить ее через объект ОбластьМакета.
Рассмотрим подробнее, как это реализовать на практике. Предположим, у нас есть макет с областью "ЗаголовокОтчета", и мы хотим увеличить размер шрифта в этой области.
Этот способ является наиболее распространенным, когда мы хотим применить форматирование ко всей области, определенной в макете, перед ее выводом в ТабличныйДокумент.
// Предположим, что у нас уже есть ТабличныйДокумент и Макет
// ТабДок = Новый ТабличныйДокумент;
// Макет = ПолучитьМакет("МакетОтчета"); // Получаем макет нашего отчета
// 1. Получаем область из макета. Это будет объект ОбластьТабличногоДокумента.
ОбластьЗаголовок = Макет.ПолучитьОбласть("ЗаголовокОтчета");
// 2. Получаем объект Шрифт для этой области.
ШрифтЗаголовка = ОбластьЗаголовок.Шрифт;
// 3. Изменяем параметры шрифта.
ШрифтЗаголовка.Размер = 12; // Устанавливаем размер шрифта 12 пунктов
ШрифтЗаголовка.Жирный = Истина; // Делаем шрифт жирным
ШрифтЗаголовка.Курсив = Ложь; // Убираем курсив, если он был
ШрифтЗаголовка.Подчеркивание = Ложь; // Убираем подчеркивание
// Также можно изменить цвет текста
ШрифтЗаголовка.Цвет = Новый Цвет(0, 0, 128); // Темно-синий цвет
// 4. Выводим модифицированную область в табличный документ.
ТабДок.Вывести(ОбластьЗаголовок);
// Дополнительный пример: изменение шрифта конкретной ячейки внутри полученной области
// Например, если в области "ЗаголовокОтчета" есть ячейка с именем "Автор"
// Мы можем получить эту ячейку и изменить ее шрифт
ЯчейкаАвтора = ОбластьЗаголовок.Ячейки.Найти("Автор");
Если ЯчейкаАвтора <> Неопределено Тогда
ШрифтЯчейкиАвтора = ЯчейкаАвтора.Шрифт;
ШрифтЯчейкиАвтора.Размер = 9;
ШрифтЯчейкиАвтора.Курсив = Истина;
КонецЕсли;
Обратите внимание, что изменение свойств объекта Шрифт, полученного от области или ячейки, напрямую влияет на отображение текста при выводе в ТабличныйДокумент.
Иногда требуется изменить шрифт уже после того, как область была выведена в ТабличныйДокумент. В этом случае мы работаем с объектами Область самого ТабличногоДокумента, используя его методы для доступа к ячейкам по координатам.
// Предположим, что мы уже вывели какую-то область и хотим изменить шрифт
// в первой ячейке только что выведенной строки.
// Выводим область, получаем ссылку на выведенную область в ТабличномДокументе
ВыведеннаяОбласть = ТабДок.Вывести(Макет.ПолучитьОбласть("ОбластьДанных"));
// Теперь мы можем обратиться к конкретной ячейке в этой выведенной области
// Например, изменить шрифт первой ячейки в этой строке
// Если область выводилась в строку с номером ВыведеннаяОбласть.Верх
// и мы хотим изменить шрифт ячейки в первом столбце.
ЯчейкаДляИзменения = ТабДок.Область(ВыведеннаяОбласть.Верх, 1, ВыведеннаяОбласть.Верх, 1);
// Или, если это просто первая ячейка выведенной области:
// ЯчейкаДляИзменения = ВыведеннаяОбласть.Область(1, 1); // Относительные координаты внутри области
ШрифтЯчейки = ЯчейкаДляИзменения.Шрифт;
ШрифтЯчейки.Размер = 14;
ШрифтЯчейки.Жирный = Истина;
ШрифтЯчейки.Цвет = Новый Цвет(255, 0, 0); // Красный цвет
Этот метод полезен, когда форматирование зависит от данных, которые были выведены, или если нужно применить уникальное форматирование к отдельным ячейкам, а не ко всей области.
Для более структурированного подхода и возможности многократного использования форматирования, мы можем определить стили непосредственно в макете табличного документа. Это позволяет централизованно управлять внешним видом различных элементов отчета и значительно упрощает поддержку.
Рассмотрим шаги по использованию стилей:
Этот метод удобен, когда у нас есть несколько предопределенных стилей в макете, и мы хотим динамически выбирать, какой из них применить к выводимой области.
// Предположим, что в макете определен стиль с именем "СтильЗаголовка"
// и в нем уже задан нужный шрифт (например, Arial, 14, Жирный).
// 1. Получаем область из макета.
ОбластьОтчета = Макет.ПолучитьОбласть("ОбластьДанных");
// 2. Присваиваем стиль области, обращаясь к коллекции стилей макета.
ОбластьОтчета.Стиль = Макет.Стили.СтильЗаголовка;
// 3. Выводим область.
ТабДок.Вывести(ОбластьОтчета);
// Также можно применять стиль к конкретной ячейке при программном создании или модификации
// Если нам нужно создать новую ячейку и применить к ней стиль:
// ЯчейкаНовая = ТабДок.Область("R1C1");
// ЯчейкаНовая.Текст = "Новый текст";
// ЯчейкаНовая.Стиль = Макет.Стили.СтильДанных; // Применяем другой стиль
// Важно: если стиль уже назначен в макете, повторно присваивать его программно не всегда нужно.
// Программное присвоение стиля имеет смысл, если мы хотим динамически переключать стили
// или создать область без привязки к стилю в макете.
Использование стилей значительно упрощает поддержку и изменение форматирования, так как все настройки шрифта (и других параметров) сосредоточены в одном месте. При изменении стиля все области и ячейки, которые используют этот стиль, автоматически применят новые настройки.
Хотя обычно изменение шрифта производится для конкретных областей, иногда может возникнуть задача изменить шрифт по умолчанию для всего ТабличногоДокумента или для текста, добавляемого без явного указания стиля или области. Объект ТабличныйДокумент имеет собственное свойство Шрифт.
Мы можем попробовать изменить свойство Шрифт самого объекта ТабличныйДокумент. Однако стоит отметить, что этот подход может иметь ограничения и не всегда переопределяет форматирование, заданное в макете или явно для областей/ячеек. Он скорее устанавливает шрифт "по умолчанию" для всего документа, который будет использоваться, если для конкретной области или ячейки не задан иной шрифт.
// 1. Создаем новый ТабличныйДокумент.
ТабДок = Новый ТабличныйДокумент;
// 2. Получаем объект шрифта по умолчанию для всего документа.
ШрифтДокумента = ТабДок.Шрифт;
// 3. Изменяем его параметры.
ШрифтДокумента.Размер = 9;
ШрифтДокумента.Жирный = Ложь;
ШрифтДокумента.Название = "Times New Roman";
// 4. После этого весь текст, добавляемый без явного стиля или шрифта ячейки,
// будет использовать эти параметры.
// Например, если мы выводим область, у которой в макете не задан стиль
// и программно мы ей тоже не устанавливаем шрифт.
ТабДок.Вывести(Макет.ПолучитьОбласть("ПодвалОтчета"));
Мы рекомендуем использовать этот метод с осторожностью, поскольку более специфичные настройки (через стили или свойства областей/ячеек) будут иметь приоритет над глобальным шрифтом ТабличногоДокумента.
Для более сложных сценариев, когда шрифт должен меняться в зависимости от определенных условий (например, выделять отрицательные значения красным жирным шрифтом, или строки с определенным статусом другим цветом), мы можем использовать механизм "Условное оформление". Этот механизм доступен как для интерактивной настройки пользователем, так и для программного управления.
Механизм условного оформления позволяет динамически применять форматирование к ячейкам на основе значений данных. Мы можем настроить его как в режиме "Предприятие" для пользовательских настроек (если отчет на СКД), так и программно в коде, когда формируем ТабличныйДокумент вручную.
Рассмотрим программный пример применения условного оформления:
// Предположим, у нас есть ТабДок и мы хотим выделить отрицательные суммы
// в столбце "Сумма" красным жирным шрифтом.
// 1. Создаем новый элемент условного оформления.
УсловноеОформление = ТабДок.УсловноеОформление.Элементы.Добавить();
// 2. Определяем условие, при котором будет применяться оформление.
// Создаем элемент условия.
ЭлементУсловия = УсловноеОформление.Условия.Элементы.Добавить(Тип("ЭлементУсловияОформленияКомпоновщикНастроек"));
ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновщикНастроек.Меньше; // Условие: значение меньше
ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновщикаНастроек("Сумма"); // Например, поле "Сумма" в отчете
ЭлементУсловия.ПравоеЗначение = 0; // Сравниваем с нулем
// 3. Определяем параметры оформления, которые будут применены при выполнении условия.
// Создаем элемент оформления.
ЭлементОформления = УсловноеОформление.Оформление.Элементы.Добавить(Тип("ЭлементОформленияКомпоновщикНастроек"));
ЭлементОформления.ВидОформления = ВидОформленияКомпоновщикНастроек.Шрифт; // Тип оформления - шрифт
// Значение шрифта: создаем новый объект Шрифт с нужными параметрами
// СтандартныйШрифт - глобальный объект, предоставляющий доступ к шрифту системы
ЭлементОформления.Значение = Новый Шрифт(СтандартныйШрифт.Шрифт, СтандартныйШрифт.Размер, Истина, Ложь, Ложь, 0); // Жирный шрифт
ЭлементОформления.ВидОформления = ВидОформленияКомпоновщикНастроек.ЦветТекста; // Тип оформления - цвет текста
ЭлементОформления.Значение = Новый Цвет(255, 0, 0); // Красный цвет (RGB)
// 4. Указываем, к каким полям (столбцам) отчета применять это оформление.
ПолеОформления = УсловноеОформление.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновщикаНастроек("Сумма"); // Применяем к полю "Сумма"
// После настройки условного оформления, оно будет автоматически применяться
// к данным, выводимым в ТабличныйДокумент, по мере его заполнения.
Этот подход обеспечивает высокую гибкость и позволяет создавать отчеты с динамическим форматированием без необходимости жесткого кодирования условий для каждой ячейки. Он особенно эффективен для отчетов, построенных на Системе Компоновки Данных (СКД).
При работе с форматированием шрифтов в 1С мы должны учитывать несколько важных моментов:
МинимальныйРазмерШрифта и МаксимальныйРазмерШрифта: Для некоторых объектов, например, для полей формы или элементов управления, могут существовать свойства, ограничивающие диапазон допустимых размеров шрифта. В ТабличномДокументе мы оперируем абсолютными значениями, но при связывании с другими элементами управления стоит это учитывать.Мы подробно рассмотрели основные способы изменения размера шрифта и других параметров форматирования в отчетах 1С, основанных на ТабличномДокументе. Использование свойств Шрифт для областей и ячеек, применение стилей из макета, а также возможности условного оформления позволяют нам эффективно управлять внешним видом наших отчетов.
Мы рекомендуем отдавать предпочтение стилям в макетах для стандартизации и легкости поддержки, а при необходимости динамического форматирования — использовать условное оформление. Прямое изменение свойств Шрифт у объектов областей и ячеек также является мощным инструментом, особенно для специфических и уникальных случаев. Надеемся, что эти знания помогут вам создавать более информативные, удобные для чтения и профессионально выглядящие отчеты в системе 1С:Предприятие.