Как увеличить размер шрифта в управляемых формах 1С для конкретных пользователей?

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

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

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

Решение 1: Штатный механизм масштабирования платформы (Рекомендуемый способ)

Наиболее правильным и простым решением является использование встроенного в платформу 1С:Предприятие 8.3 механизма масштабирования. Этот функционал появился начиная с версии 8.3.10, поэтому для платформы 8.3.10.2561, указанной в обсуждении, он уже полностью доступен и является предпочтительным.

Ключевые преимущества этого метода:

Рассмотрим по шагам, как пользователю изменить масштаб:

  1. Откройте любую форму в программе 1С.
  2. В главном меню программы найдите пункт "Вид" и выберите в нем "Изменить масштаб...". В более новых версиях платформы этот пункт может находиться в меню "Сервис и настройки" (кнопка с тремя точками или линиями в правом верхнем углу окна).
  3. В открывшемся диалоговом окне выберите желаемый масштаб, передвигая ползунок или указав точное значение в процентах (например, 125%).
  4. Чтобы применить этот масштаб ко всем формам в приложении, установите флажок "Установить для всех".
  5. Нажмите "ОК" для применения.

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

Решение 2: Программное изменение шрифта (Альтернативный подход и его риски)

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

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

Примерный код такого решения мог бы выглядеть так:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // Предполагаем, что функция НужноУвеличитьШрифтДляПользователя()
    // проверяет, включена ли для текущего пользователя соответствующая настройка.
    Если НужноУвеличитьШрифтДляПользователя() Тогда
        УстановитьУвеличенныйШрифтДляЭлементов(ЭтаФорма);
    КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура УстановитьУвеличенныйШрифтДляЭлементов(Форма)

    // Устанавливаем новый размер шрифта, например, 12
    НовыйРазмерШрифта = 12;

    Для Каждого Элемент Из Форма.Элементы Цикл
        // Проверяем, что у элемента вообще есть свойство "Шрифт"
        Если НЕ Элемент.Шрифт.Пустой() Тогда
            // Создаем новый объект шрифта на основе текущего, но с новым размером
            ТекущийШрифт = Элемент.Шрифт;
            НовыйШрифт = Новый Шрифт(ТекущийШрифт.Имя, НовыйРазмерШрифта, ТекущийШрифт.Жирный, ТекущийШрифт.Наклонный, ТекущийШрифт.Подчеркнутый, ТекущийШрифт.Зачеркнутый);
            Элемент.Шрифт = НовыйШрифт;
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры

Однако, как справедливо было отмечено в обсуждении, у этого метода есть серьезный недостаток — производительность.

Почему возникают "тормоза"? Когда вы программно на клиенте изменяете свойство элемента, которое влияет на его геометрию (размеры, положение), например, Шрифт, Высота, Ширина, платформа вынуждена выполнить серверный вызов. На сервере происходит полный пересчет геометрии всей формы с учетом новых размеров элементов, после чего обновленная компоновка отправляется обратно на клиент для перерисовки. На "тяжелых" формах с сотнями элементов такие операции, выполняемые при каждом открытии, могут приводить к заметным задержкам. Пользователь будет ощущать это как "зависание" или "тормоза" при открытии окон.

В то же время, изменение чисто оформительских свойств, не влияющих на размеры (например, ЦветФона или ЦветТекста), в большинстве случаев не требует серверного вызова и выполняется значительно быстрее.

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

Почему нельзя изменить «Основной стиль» или системные стили?

Давайте разберемся с первоначальным вопросом автора: почему нельзя просто изменить свойство конфигурации Основной стиль или переопределить системный стиль, например, Обычный текст.

Основной стиль конфигурации — это инструмент для брендирования всего прикладного решения. Он позволяет задать общую цветовую схему, чтобы привести интерфейс к корпоративным стандартам (например, задать цвет панели разделов, цвет фона активных элементов). Этот механизм влияет на внешний вид глобально для всех пользователей и не предназначен для индивидуальной настройки размера шрифта.

Системные стили (Обычный текст, Текст заголовка и т.д.) являются неотъемлемой частью платформы. Разработчик может создавать свои элементы стиля и применять их к конкретным элементам форм, но не может переопределять базовые стили платформы в разрезе отдельных пользователей. Платформа берет на себя унифицированное отображение элементов, а для пользовательской кастомизации их размера и предназначен механизм масштабирования.

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

← На главную