При разработке и адаптации конфигураций на платформах 1С:Предприятие 8.2 и 8.3 разработчики часто сталкиваются с задачей изменения шрифта по умолчанию или базового стиля оформления управляемых форм, а также с необходимостью адаптации отображения под конкретный язык интерфейса. Разберем по шагам, почему привычные механизмы обычных форм не работают в управляемом интерфейсе и какими способами можно решить эту задачу.
В обычных формах платформы 1С существовал механизм «Главный стиль» (Основной стиль), который позволял глобально переопределить шрифт и параметры оформления для всего приложения. В управляемых формах подход к формированию интерфейса принципиально изменился.
Проанализируем основные архитектурные особенности платформы:
Элемент стиля с типом Шрифт, платформа не станет автоматически применять его ко всем элементам управляемых форм. Элементы стиля работают только тогда, когда они явно назначены конкретному свойству конкретного реквизита или элемента формы.Для динамической смены шрифта в зависимости от языка сеанса или системных настроек используем программный подход. Рассмотрим, как реализовать централизованную процедуру обхода элементов формы.
Создадим процедуру в общем модуле и будем вызывать ее в событии ПриСозданииНаСервере нужных форм. Процедура анализирует значение функции ТекущийЯзык() и рекурсивно перебирает все элементы формы, меняя их шрифт.
Рассмотрим пример реализации функции установки шрифта:
Процедура УстановитьШрифтФормыПоЯзыку(Форма) Экспорт
ЯзыкСеанса = ТекущийЯзык();
// Определяем параметры шрифта в зависимости от языка
Если ЯзыкСеанса = "ru" Тогда
НовыйШрифт = Новый Шрифт("Arial", 10);
ИначеЕсли ЯзыкСеанса = "en" Тогда
НовыйШрифт = Новый Шрифт("Segoe UI", 11);
Иначе
Возврат;
КонецЕсли;
ОбходитьЭлементыФормы(Форма.Элементы, НовыйШрифт);
КонецПроцедуры
Процедура ОбходитьЭлементыФормы(КоллекцияЭлементов, НовыйШрифт)
Для Каждого Элемент Из КоллекцияЭлементов Цикл
// Проверяем наличие свойства Шрифт у элемента
Попытка
Элемент.Шрифт = НовыйШрифт;
Исключение
// У элемента может не быть свойства Шрифт
КонецПопытки;
// Если элемент содержит подчиненные элементы (например, группа)
Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Или ТипЗнч(Элемент) = Тип("ТаблицаФормы") Тогда
ОбходитьЭлементыФормы(Элемент.ПодчиненныеЭлементы, НовыйШрифт);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Чтобы не снимать типовую конфигурацию с поддержки и не модифицировать каждый модуль формы вручную, разберем использование расширения конфигурации.
Для этого создаем расширение и подключаем обработку события ПриСозданииНаСервере для нужных форм через аннотацию &После. В теле обработчика вызываем процедуру переопределения шрифтов из общего модуля расширения.
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Расш1_ОбщийМодульКлиентСервер.УстановитьШрифтФормыПоЯзыку(ЭтаФорма);
КонецПроцедуры
Если задача заключается исключительно в увеличении размера шрифта для удобства пользователей (например, при работе с крупными мониторами), рассмотрим штатные возможности платформы без написания кода.
Изменить масштаб, отрегулировать процент отображения интерфейса и нажать кнопку Установить для всех. Это правило сохраняется в настройках текущего пользователя.1cv8.exe или 1cv8c.exe позволяет масштабировать интерфейс глобально для всей программы.