Как изменить размер шрифта в отчете 1С, сформированном на Табличном документе?

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

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

Мы выясним, какие объекты платформы 1С отвечают за форматирование текста, рассмотрим примеры кода и проанализируем типичные ситуации, где требуется изменение шрифта. Давайте вместе разберемся в этом вопросе и найдем оптимальные решения!

Основы работы с Табличным Документом и его элементами

Прежде чем перейти к конкретным методам изменения шрифта, важно понять структуру ТабличногоДокумента. Отчеты в 1С часто формируются на основе макетов, которые представляют собой шаблоны таблиц со встроенными областями. Каждая область, в свою очередь, состоит из ячеек. Именно эти объекты – ОбластьТабличногоДокумента и ЯчейкаТабличногоДокумента – содержат свойства, позволяющие управлять их форматированием, включая шрифт.

Ключевым свойством для работы со шрифтом является свойство Шрифт, которое присутствует как у объекта ТабличныйДокумент, так и у его областей и ячеек. Это свойство возвращает объект типа Шрифт, который, в свою очередь, имеет под-свойства для настройки различных параметров: Размер, Жирный, Курсив, Подчеркивание, Цвет, Название и другие.

Метод 1: Изменение шрифта для области или ячейки табличного документа программно

Когда мы формируем отчет, часто используем программный код для заполнения ТабличногоДокумента (взяв за основу пример внешней печатной формы на БСП). Для того чтобы изменить шрифт в определенной области или конкретной ячейке, мы будем работать со свойствами объектов ОбластьТабличногоДокумента и ЯчейкаТабличногоДокумента.

Наш подход будет заключаться в следующем:

  1. Получение области или ячейки: Прежде всего, нам необходимо получить ссылку на ту область или ячейку, шрифт которой мы хотим изменить. Это можно сделать по имени области, если она задана в макете, или по координатам ячейки, если речь идет о уже выведенном в табличный документ содержимом.
  2. Доступ к свойству Шрифт: После того как мы получили объект области или ячейки, мы обращаемся к его свойству Шрифт. Это свойство возвращает объект типа Шрифт, который мы можем модифицировать.
  3. Настройка параметров шрифта: Объект Шрифт позволяет нам изменять такие параметры, как Размер, Жирный, Курсив, Подчеркивание, Цвет и другие. Мы можем установить новые значения для этих свойств.

Важный нюанс: Часто новички сталкиваются с тем, что изменяют свойство Шрифт у объекта ОбластьМакета, полученного из макета, но потом выводят эту область, и изменения не применяются. Причина в том, что Макет.ПолучитьОбласть() возвращает копию области макета. Если мы изменяем шрифт этой копии, а затем выводим ее, все будет работать. Ошибка возникает, когда мы пытаемся получить объект области, изменить ее шрифт, а затем снова получить *другую* копию той же области из макета без применения к ней предыдущих изменений, или когда уже вывели область и пытаемся изменить ее через объект ОбластьМакета.

Рассмотрим подробнее, как это реализовать на практике. Предположим, у нас есть макет с областью "ЗаголовокОтчета", и мы хотим увеличить размер шрифта в этой области.

Пример 1.1: Изменение шрифта для области перед выводом

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


// Предположим, что у нас уже есть ТабличныйДокумент и Макет
// ТабДок = Новый ТабличныйДокумент;
// Макет = ПолучитьМакет("МакетОтчета"); // Получаем макет нашего отчета

// 1. Получаем область из макета. Это будет объект ОбластьТабличногоДокумента.
ОбластьЗаголовок = Макет.ПолучитьОбласть("ЗаголовокОтчета");

// 2. Получаем объект Шрифт для этой области.
ШрифтЗаголовка = ОбластьЗаголовок.Шрифт;

// 3. Изменяем параметры шрифта.
ШрифтЗаголовка.Размер = 12;      // Устанавливаем размер шрифта 12 пунктов
ШрифтЗаголовка.Жирный = Истина;  // Делаем шрифт жирным
ШрифтЗаголовка.Курсив = Ложь;    // Убираем курсив, если он был
ШрифтЗаголовка.Подчеркивание = Ложь; // Убираем подчеркивание

// Также можно изменить цвет текста
ШрифтЗаголовка.Цвет = Новый Цвет(0, 0, 128); // Темно-синий цвет

// 4. Выводим модифицированную область в табличный документ.
ТабДок.Вывести(ОбластьЗаголовок);

// Дополнительный пример: изменение шрифта конкретной ячейки внутри полученной области
// Например, если в области "ЗаголовокОтчета" есть ячейка с именем "Автор"
// Мы можем получить эту ячейку и изменить ее шрифт
ЯчейкаАвтора = ОбластьЗаголовок.Ячейки.Найти("Автор");
Если ЯчейкаАвтора <> Неопределено Тогда
    ШрифтЯчейкиАвтора = ЯчейкаАвтора.Шрифт;
    ШрифтЯчейкиАвтора.Размер = 9;
    ШрифтЯчейкиАвтора.Курсив = Истина;
КонецЕсли;

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

Пример 1.2: Изменение шрифта для ячейки после вывода области

Иногда требуется изменить шрифт уже после того, как область была выведена в ТабличныйДокумент. В этом случае мы работаем с объектами Область самого ТабличногоДокумента, используя его методы для доступа к ячейкам по координатам.


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

// Выводим область, получаем ссылку на выведенную область в ТабличномДокументе
ВыведеннаяОбласть = ТабДок.Вывести(Макет.ПолучитьОбласть("ОбластьДанных"));

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

ШрифтЯчейки = ЯчейкаДляИзменения.Шрифт;
ШрифтЯчейки.Размер = 14;
ШрифтЯчейки.Жирный = Истина;
ШрифтЯчейки.Цвет = Новый Цвет(255, 0, 0); // Красный цвет

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

Метод 2: Использование стилей в макете

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

Рассмотрим шаги по использованию стилей:

  1. Создание или модификация стиля в конфигураторе:
    • Откройте макет отчета в конфигураторе.
    • В меню "Таблица" выберите пункт "Стили". Откроется окно "Стили".
    • Здесь мы можем создать новый стиль (кнопка "Добавить") или изменить существующий, выбрав его из списка.
  2. Настройка шрифта в стиле:
    • В окне свойств стиля перейдите на вкладку "Шрифт".
    • Установите необходимые параметры: размер, начертание (жирный, курсив), цвет, название шрифта и т.д.
    • Нажмите "ОК", чтобы сохранить изменения в стиле.
  3. Применение стиля к области/ячейке макета:
    • После того как стиль определен, мы можем применить его к любой области или ячейке макета.
    • Выберите нужную область или ячейку в макете.
    • В окне "Свойства" этой области/ячейки найдите свойство "Стиль".
    • Из выпадающего списка выберите созданный нами стиль.
  4. Программное применение стиля (если необходимо): Мы также можем применять стили программно, хотя чаще всего они задаются в макете один раз. Рассмотрим, как это выглядит.

Пример 2.1: Программное применение стиля, определенного в макете

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


// Предположим, что в макете определен стиль с именем "СтильЗаголовка"
// и в нем уже задан нужный шрифт (например, Arial, 14, Жирный).

// 1. Получаем область из макета.
ОбластьОтчета = Макет.ПолучитьОбласть("ОбластьДанных");

// 2. Присваиваем стиль области, обращаясь к коллекции стилей макета.
ОбластьОтчета.Стиль = Макет.Стили.СтильЗаголовка; 

// 3. Выводим область.
ТабДок.Вывести(ОбластьОтчета);

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

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

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

Метод 3: Глобальное изменение шрифта для Табличного Документа

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

Мы можем попробовать изменить свойство Шрифт самого объекта ТабличныйДокумент. Однако стоит отметить, что этот подход может иметь ограничения и не всегда переопределяет форматирование, заданное в макете или явно для областей/ячеек. Он скорее устанавливает шрифт "по умолчанию" для всего документа, который будет использоваться, если для конкретной области или ячейки не задан иной шрифт.


// 1. Создаем новый ТабличныйДокумент.
ТабДок = Новый ТабличныйДокумент;

// 2. Получаем объект шрифта по умолчанию для всего документа.
ШрифтДокумента = ТабДок.Шрифт;

// 3. Изменяем его параметры.
ШрифтДокумента.Размер = 9;
ШрифтДокумента.Жирный = Ложь;
ШрифтДокумента.Название = "Times New Roman";

// 4. После этого весь текст, добавляемый без явного стиля или шрифта ячейки,
// будет использовать эти параметры.
// Например, если мы выводим область, у которой в макете не задан стиль
// и программно мы ей тоже не устанавливаем шрифт.
ТабДок.Вывести(Макет.ПолучитьОбласть("ПодвалОтчета"));

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

Метод 4: Использование условного оформления для динамического изменения шрифта

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

Механизм условного оформления позволяет динамически применять форматирование к ячейкам на основе значений данных. Мы можем настроить его как в режиме "Предприятие" для пользовательских настроек (если отчет на СКД), так и программно в коде, когда формируем ТабличныйДокумент вручную.

Рассмотрим программный пример применения условного оформления:


// Предположим, у нас есть ТабДок и мы хотим выделить отрицательные суммы
// в столбце "Сумма" красным жирным шрифтом.

// 1. Создаем новый элемент условного оформления.
УсловноеОформление = ТабДок.УсловноеОформление.Элементы.Добавить();

// 2. Определяем условие, при котором будет применяться оформление.
// Создаем элемент условия.
ЭлементУсловия = УсловноеОформление.Условия.Элементы.Добавить(Тип("ЭлементУсловияОформленияКомпоновщикНастроек"));
ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновщикНастроек.Меньше; // Условие: значение меньше
ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновщикаНастроек("Сумма"); // Например, поле "Сумма" в отчете
ЭлементУсловия.ПравоеЗначение = 0; // Сравниваем с нулем

// 3. Определяем параметры оформления, которые будут применены при выполнении условия.
// Создаем элемент оформления.
ЭлементОформления = УсловноеОформление.Оформление.Элементы.Добавить(Тип("ЭлементОформленияКомпоновщикНастроек"));
ЭлементОформления.ВидОформления = ВидОформленияКомпоновщикНастроек.Шрифт; // Тип оформления - шрифт
// Значение шрифта: создаем новый объект Шрифт с нужными параметрами
// СтандартныйШрифт - глобальный объект, предоставляющий доступ к шрифту системы
ЭлементОформления.Значение = Новый Шрифт(СтандартныйШрифт.Шрифт, СтандартныйШрифт.Размер, Истина, Ложь, Ложь, 0); // Жирный шрифт
ЭлементОформления.ВидОформления = ВидОформленияКомпоновщикНастроек.ЦветТекста; // Тип оформления - цвет текста
ЭлементОформления.Значение = Новый Цвет(255, 0, 0); // Красный цвет (RGB)

// 4. Указываем, к каким полям (столбцам) отчета применять это оформление.
ПолеОформления = УсловноеОформление.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновщикаНастроек("Сумма"); // Применяем к полю "Сумма"

// После настройки условного оформления, оно будет автоматически применяться
// к данным, выводимым в ТабличныйДокумент, по мере его заполнения.

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

Дополнительные рекомендации и нюансы

При работе с форматированием шрифтов в 1С мы должны учитывать несколько важных моментов:

  1. Типовые конфигурации и обновления: В типовых конфигурациях 1С часто используются стандартные макеты. Если мы вносим изменения непосредственно в макеты конфигурации, при обновлении системы эти изменения могут быть утеряны или привести к конфликтам. Лучшим подходом будет создание расширения конфигурации или использование внешних отчетов и обработок, чтобы сохранить независимость наших доработок от типового функционала.
  2. Шрифты на стороне клиента: Если мы используем нестандартные шрифты (т.е., не Arial, Times New Roman, Courier New), необходимо убедиться, что эти шрифты установлены на компьютерах всех пользователей, которые будут работать с отчетом. В противном случае, система может заменить их на шрифты по умолчанию, что приведет к искажению внешнего вида отчета или некорректному отображению.
  3. Экспорт в другие форматы: При экспорте отчетов в Excel, PDF, OpenOffice или другие форматы, убедитесь, что форматирование шрифтов сохраняется корректно. Иногда могут потребоваться дополнительные настройки или особенности вывода, чтобы сохранить идентичность внешнего вида в разных форматах. В некоторых случаях, особенно при работе с очень специфичными шрифтами, может потребоваться тестирование экспорта.
  4. Производительность: Хотя изменение шрифтов обычно не является ресурсоемкой операцией, интенсивная работа с форматированием большого количества ячеек (например, в отчетах с тысячами строк) может незначительно повлиять на производительность формирования отчета. В большинстве случаев это не критично, но стоит помнить о такой возможности.
  5. Единообразие оформления: Старайтесь поддерживать единообразие в оформлении отчетов. Чрезмерное использование разных шрифтов, размеров и цветов может сделать отчет сложным для восприятия и менее профессиональным. Используйте стили для стандартизации и обеспечения единого вида всех документов в системе.
  6. Свойство МинимальныйРазмерШрифта и МаксимальныйРазмерШрифта: Для некоторых объектов, например, для полей формы или элементов управления, могут существовать свойства, ограничивающие диапазон допустимых размеров шрифта. В ТабличномДокументе мы оперируем абсолютными значениями, но при связывании с другими элементами управления стоит это учитывать.

Заключение

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

Мы рекомендуем отдавать предпочтение стилям в макетах для стандартизации и легкости поддержки, а при необходимости динамического форматирования — использовать условное оформление. Прямое изменение свойств Шрифт у объектов областей и ячеек также является мощным инструментом, особенно для специфических и уникальных случаев. Надеемся, что эти знания помогут вам создавать более информативные, удобные для чтения и профессионально выглядящие отчеты в системе 1С:Предприятие.

← На главную