Как программно изменить вид шрифта элемента формы в 1С?

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

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

Понимание объекта «Шрифт» и его свойств

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

Вот пример кода, который демонстрирует попытку прямого изменения свойства Вид и связанную с этим ошибку:


// Создаем переменную для хранения желаемого вида шрифта
ВидШрифтаДляЗаписи = ВидШрифта.WindowsШрифт;

// Создаем новый объект Шрифт с параметрами по умолчанию
ОбычныйШрифт = Новый Шрифт(,,,,,,); 

// Попытка изменить свойство Вид уже существующего объекта Шрифт
ОбычныйШрифт.Вид = ВидШрифта; // Ошибка: поле объекта недоступно для записи (Вид).

// Присваиваем измененный шрифт элементу формы (этот код не будет выполнен из-за ошибки выше)
Элемент_.Шрифт = ОбычныйШрифт;

Как мы видим, попытка установить свойство Вид напрямую приведет к ошибке: "поле объекта недоступно для записи (Вид)". Это происходит потому, что свойство Вид у объекта Шрифт доступно только для чтения. Это означает, что все характеристики шрифта, включая его вид, должны быть заданы в момент его создания.

Корректное создание нового шрифта через конструктор

Основной способ программного создания и изменения шрифта – это использование конструктора Новый Шрифт(). Однако, как мы обнаружили в ходе обсуждения, даже с конструктором могут возникнуть сложности, если не понимать, какие параметры он ожидает.

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


// Определяем желаемый вид шрифта (как перечисление)
ВидШрифтаДляЗаписи = ВидШрифта.WindowsШрифт;

// Попытка создать новый шрифт, передав перечисление в первый параметр
// Ожидается строковое имя шрифта, а не значение перечисления
ОбычныйШрифт = Новый Шрифт(ВидШрифтаДляЗаписи,,,,,,,); 

// Присваиваем созданный шрифт элементу формы
Элемент_.Шрифт = ОбычныйШрифт;

При такой передаче параметра мы можем получить неожиданный результат. Например, вместо ожидаемого "WindowsШрифт" шрифт становится "Абсолютный" (как было замечено в исходной теме). Это происходит потому, что первый параметр конструктора Новый Шрифт() ожидает строковое имя шрифта (например, "Arial", "Times New Roman", "Verdana"), а не значение перечисления ВидШрифта. Система пытается интерпретировать значение перечисления как строку, что приводит к непредсказуемым результатам.

Давайте разберем подробнее параметры конструктора Новый Шрифт(), чтобы мы могли использовать его правильно:

  1. Имя шрифта (строка): Это первый и самый важный параметр. Здесь мы указываем конкретное системное наименование шрифта, которое должно быть установлено. Например, мы можем использовать "Arial", "Verdana", "Times New Roman", "Courier New" и другие шрифты, установленные в операционной системе.
  2. Размер (число): Второй параметр, который задает размер шрифта в пунктах. Это числовое значение, например, 10, 12, 14.
  3. Жирный (булево): Третий параметр. Мы устанавливаем Истина для полужирного начертания и Ложь для обычного.
  4. Наклонный (булево): Четвертый параметр. Мы используем Истина для курсивного начертания и Ложь для обычного.
  5. Подчеркнутый (булево): Пятый параметр. Мы передаем Истина для подчеркивания и Ложь для его отсутствия.
  6. Зачеркнутый (булево): Шестой параметр. Мы устанавливаем Истина для зачеркивания и Ложь для его отсутствия.
  7. Масштаб (число): Седьмой параметр, задает масштаб шрифта в процентах (по умолчанию 100). Мы можем использовать его для тонкой настройки размера шрифта, если стандартный размер нам не подходит.

Таким образом, если мы хотим установить шрифт "Arial" размером 10 пунктов и сделать его жирным, мы должны написать следующий код:


// Создаем новый объект Шрифт, указывая имя, размер и начертание
// "Arial" - строковое имя шрифта
// 10 - размер шрифта в пунктах
// Истина - шрифт будет жирным
ОбычныйШрифт = Новый Шрифт("Arial", 10, Истина);

// Присваиваем созданный шрифт элементу формы
Элемент_.Шрифт = ОбычныйШрифт;

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

Использование предопределенных системных шрифтов (WindowsШрифты)

Самый простой и часто рекомендуемый способ установить шрифт для элемента формы, особенно если нам не требуется тонкая настройка конкретного шрифта по имени или размеру, – это использовать предопределенные объекты из коллекции WindowsШрифты. Эти объекты представляют собой заранее определенные системные шрифты, которые обеспечивают хорошую совместимость и предсказуемость отображения.

Мы можем выбрать один из следующих предопределенных шрифтов, которые являются частью стандартной библиотеки 1С:

  1. WindowsШрифты.СистемныйШрифт: Это стандартный системный шрифт, который обычно используется в элементах управления операционной системы Windows. Он обеспечивает привычный вид для пользователей.
  2. WindowsШрифты.ANSIШрифтМоноширинный: Моноширинный шрифт, соответствующий набору символов ANSI. Он полезен для отображения кода или данных, где каждый символ должен занимать одинаковую ширину.
  3. WindowsШрифты.ANSIШрифтПропорциональный: Пропорциональный шрифт, соответствующий набору символов ANSI. В таком шрифте символы имеют разную ширину, что обычно делает текст более читаемым.
  4. WindowsШрифты.OEMШрифтМоноширинный: Моноширинный шрифт, соответствующий набору символов OEM (Original Equipment Manufacturer). Может быть полезен для совместимости с устаревшими системами или специфическими задачами.
  5. WindowsШрифты.ШрифтДиалоговИМеню: Шрифт, который обычно используется операционной системой для диалоговых окон, меню и других стандартных элементов интерфейса.

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


// Присваиваем системный шрифт элементу формы
Элемент_.Шрифт = WindowsШрифты.СистемныйШрифт;

Или для других вариантов:


// Пример использования моноширинного шрифта ANSI
Элемент_.Шрифт = WindowsШрифты.ANSIШрифтМоноширинный;

// Пример использования пропорционального шрифта ANSI
Элемент_.Шрифт = WindowsШрифты.ANSIШрифтПропорциональный;

// Пример использования моноширинного шрифта OEM
Элемент_.Шрифт = WindowsШрифты.OEMШрифтМоноширинный;

// Пример использования шрифта для диалогов и меню
Элемент_.Шрифт = WindowsШрифты.ШрифтДиалоговИМеню;

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

Рекомендации по выбору шрифтов и стилей в 1С

В управляемом приложении 1С нам рекомендуется использовать так называемые стилевые шрифты для обеспечения единообразия и кроссплатформенной совместимости. Это особенно актуально, если наше решение должно корректно работать на различных операционных системах, включая Linux, и на различных устройствах (тонкий клиент, веб-клиент, мобильный клиент).

К стилевым шрифтам относятся предопределенные шрифты, такие как:

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

Кроме того, для лучшей совместимости всегда желательно использовать шрифты из набора MS Core Fonts, такие как Arial, Times New Roman, Verdana, Georgia, Trebuchet MS, Courier New. Эти шрифты широко распространены и предустановлены в большинстве операционных систем. Использование других, менее распространенных или экзотических шрифтов может привести к некорректному отображению (например, замене на системные аналоги) в разных операционных системах, что нарушит задуманный дизайн и может негативно сказаться на пользовательском опыте. Мы должны стремиться к максимальной универсальности.

Другие механизмы управления внешним видом текста в 1С

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

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

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

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

  1. Свойство Вид объекта Шрифт доступно только для чтения, его нельзя изменить после создания объекта.
  2. Создавать новый шрифт следует с помощью конструктора Новый Шрифт(), передавая строковое имя шрифта (например, "Arial") в качестве первого параметра, а не значение перечисления ВидШрифта.
  3. Для простых случаев и установки стандартных системных шрифтов мы можем использовать предопределенные объекты из коллекции WindowsШрифты.
  4. В управляемом приложении отдавайте предпочтение стилевым шрифтам и шрифтам из набора MS Core Fonts для лучшей кроссплатформенной совместимости и единообразия.
  5. Мы также можем использовать стили конфигурации, табличные документы, поля текстового документа и условное оформление для более сложного и централизованного управления внешним видом текста.

Надеемся, что этот подробный разбор поможет вам успешно управлять шрифтами в ваших 1С-решениях и создавать качественные, удобные и красивые интерфейсы!

← На главную