Как изменить размер шрифта в мобильном приложении на платформе 1С:Предприятие?

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

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

Выясним причину такого поведения и подробно разберем практические способы реализации динамического изменения размера шрифта в конфигурации и за ее пределами.

Почему не срабатывают настройки операционной системы

Проанализируем ситуацию: системный ползунок изменения размера шрифта в настройках Android или iOS предназначен для нативных текстовых элементов операционной системы и приложений, использующих стандартные системные стили. Мобильная платформа 1С использует собственный графический движок компоновки форм, оперирующий фиксированными размерами в пунктах (pt). По этой причине изменение системных текстовых настроек устройством игнорируется платформой 1С.

Кроме того, стили конфигурации задаются разработчиком статически на этапе конфигурирования и не могут быть модифицированы пользователем «на лету» в режиме предприятия. Поэтому задачу масштабирования необходимо решать программно или средствами системного масштаба экрана.

Способ 1. Программное назначение шрифта и его сериализация

Рассмотрим подробнее идею сохранения и применения выбранного шрифта. Объект Шрифт в платформе 1С является сериализуемым типом данных. Это позволяет трансформировать настройки шрифта в XML-строку, сохранять ее в настройках пользователя и при открытии форм применять к элементам интерфейса.

Посмотрим на пример сериализации и обратного восстановления шрифта:


// Сохранение настроенного шрифта в строку XML
СохраненнаяСтрока = ЗначениеВСтрокуXML(Элементы.ПолеВводаТекста.Шрифт);

// Восстановление шрифта из строки и назначение элементу формы
Элементы.ПолеВводаТекста.Шрифт = ЗначениеИзСтрокиXML(СохраненнаяСтрока);

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

Способ 2. Рекурсивный обход элементов формы

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

Проанализируем пример кода серверной процедуры масштабирования формы:


Процедура ПрименитьМасштабКФорме(Форма, НовыйРазмерШрифта) Экспорт
    
    Для Каждого Элемент Из Форма.Элементы Цикл
        ПрименитьШрифтКЭлементу(Элемент, НовыйРазмерШрифта);
    КонецЦикла;
    
КонецПроцедуры

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

Вызов процедуры ПрименитьМасштабКФорме достаточно разместить в обработчике ПриСозданииНаСервере форм конфигурации, передавая в качестве параметра желаемый размер (например, 10 для мелкого, 12 для стандартного и 15 для крупного шрифта).

Способ 3. Управление шрифтами списков и таблиц через УсловноеОформление

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

Посмотрим на пример программной настройки шрифта всей таблицы:


ЭлементОформления = УсловноеОформление.Элементы.Добавить();

// Назначаем оформляемые поля (все видимые колонки таблицы)
Для Каждого Колонка Из Элементы.СписокТоваров.ПодчиненныеЭлементы Цикл
    ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(Колонка.Имя);
КонецЦикла;

// Устанавливаем новый размер шрифта без условий отбора
ЭлементОформления.Оформление.УстановитьЗначениеПараметра(
    "Шрифт", 
    Новый Шрифт(, ВыбранныйРазмер)
);

Способ 4. Использование поля HTML-документа для специализированных интерфейсов

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

При таком подходе размер шрифта регулируется элементарно через CSS-классы или переменные, переключаемые из кода 1С при смене режима масштабирования без необходимости перезагрузки и перерисовки всей формы.

Способ 5. Изменение масштаба экрана на устройстве (без изменения конфигурации)

Если вносить доработки в конфигурацию нельзя, задачу можно решить системными настройками самого устройства, но не через меню шрифтов, а через изменение масштаба интерфейса:

  1. В настройках операционной системы Android найдем раздел «Дисплей» или «Экран» и перейдем в пункт «Масштаб экрана» (Display Size). Увеличение этого параметра пропорционально увеличивает весь интерфейс платформы 1С.
  2. На смартфонах и ТСД под управлением Android можно использовать режим разработчика: в пункте «Минимальная ширина» (Smallest width / DPI) уменьшение числового значения приводит к общему пропорциональному увеличению всех элементов и текстов в мобильном приложении 1С.
  3. В устройствах на iOS аналогичный эффект дает системная опция «Увеличенный масштаб» (Display Zoom) в параметрах экрана.

Подводные камни программного увеличения шрифта

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

  1. Использовать строго вертикальную группировку элементов без жесткого деления на узкие горизонтальные колонки.
  2. Устанавливать свойство ПоложениеЗаголовка в значение Верх либо полностью скрывать заголовок и использовать свойство ПодсказкаВвода.
  3. Не задавать фиксированную ширину и высоту в пикселях для полей ввода и надписей, позволяя платформе рассчитывать габариты элементов автоматически.
← На главную