В процессе разработки на платформе 1С нам часто требуется динамически изменять внешний вид элементов формы, например, устанавливать определенный шрифт для текстовых полей, надписей или кнопок. Мы рассмотрим, как это можно сделать программно, а также какие подводные камни могут встретиться на этом пути. Для оперативной проверки и отладки оформления элементов непосредственно в режиме «Предприятие» можно использовать обработку для редактирования свойств элементов формы.
Прежде чем мы приступим к изменению шрифта, давайте разберемся с объектом Шрифт в 1С. Мы выясним, что у этого объекта есть свойство Вид, которое, как показала практика, недоступно для прямой записи.
Вот пример кода, который демонстрирует попытку прямого изменения свойства Вид и связанную с этим ошибку:
// Создаем переменную для хранения желаемого вида шрифта
ВидШрифтаДляЗаписи = ВидШрифта.WindowsШрифт;
// Создаем новый объект Шрифт с параметрами по умолчанию
ОбычныйШрифт = Новый Шрифт(,,,,,,);
// Попытка изменить свойство Вид уже существующего объекта Шрифт
ОбычныйШрифт.Вид = ВидШрифта; // Ошибка: поле объекта недоступно для записи (Вид).
// Присваиваем измененный шрифт элементу формы (этот код не будет выполнен из-за ошибки выше)
Элемент_.Шрифт = ОбычныйШрифт;
Как мы видим, попытка установить свойство Вид напрямую приведет к ошибке: "поле объекта недоступно для записи (Вид)". Это происходит потому, что свойство Вид у объекта Шрифт доступно только для чтения. Это означает, что все характеристики шрифта, включая его вид, должны быть заданы в момент его создания.
Основной способ программного создания и изменения шрифта – это использование конструктора Новый Шрифт(). Однако, как мы обнаружили в ходе обсуждения, даже с конструктором могут возникнуть сложности, если не понимать, какие параметры он ожидает.
Рассмотрим распространенную ошибку, с которой столкнулись наши коллеги: попытка передать в качестве первого параметра конструктора значение перечисления ВидШрифта, например, ВидШрифта.WindowsШрифт.
// Определяем желаемый вид шрифта (как перечисление)
ВидШрифтаДляЗаписи = ВидШрифта.WindowsШрифт;
// Попытка создать новый шрифт, передав перечисление в первый параметр
// Ожидается строковое имя шрифта, а не значение перечисления
ОбычныйШрифт = Новый Шрифт(ВидШрифтаДляЗаписи,,,,,,,);
// Присваиваем созданный шрифт элементу формы
Элемент_.Шрифт = ОбычныйШрифт;
При такой передаче параметра мы можем получить неожиданный результат. Например, вместо ожидаемого "WindowsШрифт" шрифт становится "Абсолютный" (как было замечено в исходной теме). Это происходит потому, что первый параметр конструктора Новый Шрифт() ожидает строковое имя шрифта (например, "Arial", "Times New Roman", "Verdana"), а не значение перечисления ВидШрифта. Система пытается интерпретировать значение перечисления как строку, что приводит к непредсказуемым результатам.
Давайте разберем подробнее параметры конструктора Новый Шрифт(), чтобы мы могли использовать его правильно:
Истина для полужирного начертания и Ложь для обычного.Истина для курсивного начертания и Ложь для обычного.Истина для подчеркивания и Ложь для его отсутствия.Истина для зачеркивания и Ложь для его отсутствия.Таким образом, если мы хотим установить шрифт "Arial" размером 10 пунктов и сделать его жирным, мы должны написать следующий код:
// Создаем новый объект Шрифт, указывая имя, размер и начертание
// "Arial" - строковое имя шрифта
// 10 - размер шрифта в пунктах
// Истина - шрифт будет жирным
ОбычныйШрифт = Новый Шрифт("Arial", 10, Истина);
// Присваиваем созданный шрифт элементу формы
Элемент_.Шрифт = ОбычныйШрифт;
Этот подход позволяет нам максимально гибко настраивать шрифты, используя их системные имена и различные атрибуты.
Самый простой и часто рекомендуемый способ установить шрифт для элемента формы, особенно если нам не требуется тонкая настройка конкретного шрифта по имени или размеру, – это использовать предопределенные объекты из коллекции WindowsШрифты. Эти объекты представляют собой заранее определенные системные шрифты, которые обеспечивают хорошую совместимость и предсказуемость отображения.
Мы можем выбрать один из следующих предопределенных шрифтов, которые являются частью стандартной библиотеки 1С:
WindowsШрифты.СистемныйШрифт: Это стандартный системный шрифт, который обычно используется в элементах управления операционной системы Windows. Он обеспечивает привычный вид для пользователей.WindowsШрифты.ANSIШрифтМоноширинный: Моноширинный шрифт, соответствующий набору символов ANSI. Он полезен для отображения кода или данных, где каждый символ должен занимать одинаковую ширину.WindowsШрифты.ANSIШрифтПропорциональный: Пропорциональный шрифт, соответствующий набору символов ANSI. В таком шрифте символы имеют разную ширину, что обычно делает текст более читаемым.WindowsШрифты.OEMШрифтМоноширинный: Моноширинный шрифт, соответствующий набору символов OEM (Original Equipment Manufacturer). Может быть полезен для совместимости с устаревшими системами или специфическими задачами.WindowsШрифты.ШрифтДиалоговИМеню: Шрифт, который обычно используется операционной системой для диалоговых окон, меню и других стандартных элементов интерфейса.Чтобы применить один из этих шрифтов к элементу формы, нам достаточно просто присвоить соответствующий объект свойству Шрифт нашего элемента. Например, если мы хотим использовать системный шрифт, код будет выглядеть так:
// Присваиваем системный шрифт элементу формы
Элемент_.Шрифт = WindowsШрифты.СистемныйШрифт;
Или для других вариантов:
// Пример использования моноширинного шрифта ANSI
Элемент_.Шрифт = WindowsШрифты.ANSIШрифтМоноширинный;
// Пример использования пропорционального шрифта ANSI
Элемент_.Шрифт = WindowsШрифты.ANSIШрифтПропорциональный;
// Пример использования моноширинного шрифта OEM
Элемент_.Шрифт = WindowsШрифты.OEMШрифтМоноширинный;
// Пример использования шрифта для диалогов и меню
Элемент_.Шрифт = WindowsШрифты.ШрифтДиалоговИМеню;
Этот подход является наиболее надежным, особенно если нам не требуется тонкая настройка конкретного шрифта по имени или размеру, а достаточно использовать стандартные системные варианты, которые гарантированно будут корректно отображаться в системе пользователя.
В управляемом приложении 1С нам рекомендуется использовать так называемые стилевые шрифты для обеспечения единообразия и кроссплатформенной совместимости. Это особенно актуально, если наше решение должно корректно работать на различных операционных системах, включая Linux, и на различных устройствах (тонкий клиент, веб-клиент, мобильный клиент).
К стилевым шрифтам относятся предопределенные шрифты, такие как:
<Шрифт текста>: Стандартный шрифт для основного текста в приложении.<Мелкий шрифт текста>: Более мелкий вариант для дополнительной информации или сносок.<Крупный шрифт текста>: Увеличенный шрифт для заголовков или важных элементов.<Очень крупный шрифт текста>: Максимально увеличенный шрифт для акцентирования внимания.Использование стилевых шрифтов позволяет централизованно управлять внешним видом приложения. Если мы изменим определение этих стилей в конфигурации, все элементы, которые их используют, автоматически обновят свое отображение.
Кроме того, для лучшей совместимости всегда желательно использовать шрифты из набора MS Core Fonts, такие как Arial, Times New Roman, Verdana, Georgia, Trebuchet MS, Courier New. Эти шрифты широко распространены и предустановлены в большинстве операционных систем. Использование других, менее распространенных или экзотических шрифтов может привести к некорректному отображению (например, замене на системные аналоги) в разных операционных системах, что нарушит задуманный дизайн и может негативно сказаться на пользовательском опыте. Мы должны стремиться к максимальной универсальности.
Помимо прямого присвоения шрифта элементу формы, в 1С существует несколько других мощных механизмов для управления внешним видом текста, которые мы также можем использовать в зависимости от решаемой задачи. Мы рассмотрим их, чтобы иметь полное представление о возможностях платформы.
ШрифтСтиля из общих модулей. Это особенно удобно для крупных решений, где важно единообразие.Шрифт объекта ОбластьЯчеекТабличногоДокумента. Это позволяет нам форматировать отчеты с высокой степенью детализации, выделяя важную информацию.Используя эти механизмы, мы получаем гибкий и мощный инструментарий для создания информативных и удобных для пользователя интерфейсов в 1С. Правильное применение этих инструментов позволяет нам делать наши решения не только функциональными, но и визуально привлекательными и интуитивно понятными.
Таким образом, для программного изменения вида шрифта мы должны помнить о следующих ключевых моментах:
Вид объекта Шрифт доступно только для чтения, его нельзя изменить после создания объекта.Новый Шрифт(), передавая строковое имя шрифта (например, "Arial") в качестве первого параметра, а не значение перечисления ВидШрифта.WindowsШрифты.Надеемся, что этот подробный разбор поможет вам успешно управлять шрифтами в ваших 1С-решениях и создавать качественные, удобные и красивые интерфейсы!