Как изменить шрифт и стиль приложения в 1С 8.2 на обычных формах под каждого пользователя?

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

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

Архитектура решения и использование регистра "НастройкиПользователей"

Для того чтобы не создавать новые регистры и структуры данных в конфигурациях на базе 1С:Управление торговлей 10.3, 1С:Управление производственным предприятием 1.3 или 1С:Бухгалтерия 2.0, целесообразно задействовать типовой регистр сведений НастройкиПользователей и связанный справочник НастройкиПользователей.

Разберем алгоритм по шагам:

  1. В справочник НастройкиПользователей добавляем новый элемент (например, с наименованием "ШрифтКрупнее") с типом значения Булево.
  2. Пользователь или администратор в режиме "1С:Предприятие" устанавливает флажок данной настройки в соответствующее значение (Истина/Ложь).
  3. В конфигураторе создаем дополнительный стиль в объекте БиблиотекаСтилей (например, стиль с индексом 1, где заданы увеличенные шрифты для надписей и полей).
  4. При запуске программы считываем значение настройки из регистра и подставляем нужный стиль в системное свойство ГлавныйСтиль.

Реализация кода в модуле обычного приложения

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

Откроем модуль обычного приложения (или модуль внешнего соединения при необходимости) и в обработчик события ПередНачаломРаботыСистемы добавим следующий код:


Процедура ПередНачаломРаботыСистемы(Отказ)
    
    УправлениеПользователями.ПроверитьВозможностьРаботыПользователя(Отказ);    
    
    // Установка стиля оформления на основе индивидуальных настроек
    ГлавныйСтиль = БиблиотекаСтилей.Получить(ПолучитьНомерСтиляПользователя());
    
КонецПроцедуры

Далее напишем функцию ПолучитьНомерСтиляПользователя(), которая обращается к регистру сведений НастройкиПользователей и возвращает индекс стиля в коллекции БиблиотекаСтилей:


Функция ПолучитьНомерСтиляПользователя()
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    НастройкиПользователей.Значение КАК Значение
    |ИЗ
    |    РегистрСведений.НастройкиПользователей КАК НастройкиПользователей
    |ГДЕ
    |    НастройкиПользователей.Пользователь = &Пользователь
    |    И НастройкиПользователей.Настройка.Наименование = &Наименование";
    
    Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь);
    Запрос.УстановитьПараметр("Наименование", "ШрифтКрупнее");
    
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        Если Выборка.Значение = Истина Тогда
            Возврат 1; // Индекс стиля с увеличенным шрифтом в Библиотеке Стилей
        Иначе 
            Возврат 0; // Основной стиль по умолчанию
        КонецЕсли;
    Иначе 
        Возврат 0; // Если настройка у пользователя не задана
    КонецЕсли;
    
КонецФункции

Ограничения платформы и альтернативные методы изменения шрифта

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

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