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