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

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

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

Различие между «Масштабом» и «Вариантом масштаба»

Прежде чем переходить к коду, проанализируем важный нюанс архитектуры 1С. В системе существуют два принципиально разных понятия, которые часто путают:

  1. Вариант масштаба (Обычный / Компактный): Это свойство определяет плотность расположения элементов управления (отступы между кнопками, полями, высоту строк). Оно задается в конфигураторе для конкретной формы. К сожалению, программно изменить это свойство для уже созданного экземпляра формы невозможно — оно недоступно для записи во встроенном языке.
  2. Масштаб (процентное соотношение): Это классическое масштабирование (зум), которое увеличивает или уменьшает все содержимое формы пропорционально. Это свойство (Масштаб) доступно программно начиная с версии платформы 8.3.10.

Способ 1: Использование свойства Масштаб (Zoom)

Если наша задача — просто «сжать» или «растянуть» форму визуально, мы можем воспользоваться свойством Масштаб. Проанализируем особенности его применения. Данное свойство является клиентским, поэтому обращаться к нему нужно в контексте выполнения на клиенте.

Рассмотрим пример установки масштаба при открытии формы. Обратите внимание, что мы используем обработчик ПриОткрытии, а не ПриСозданииНаСервере, так как на сервере визуальные параметры формы еще не определены.


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Устанавливаем масштаб 80% от стандартного
    ЭтаФорма.Масштаб = 80; 
КонецПроцедуры

Также мы можем создать на форме интерактивный механизм переключения масштаба «на лету» (например, по нажатию кнопки):


&НаКлиенте
Процедура ИзменитьМасштабФормы(Команда)
    // Переключаем масштаб между 80% и 100%
    ЭтаФорма.Масштаб = ?(ЭтаФорма.Масштаб = 80, 100, 80);
КонецПроцедуры

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

Способ 2: Подмена формы через «ОбработкаПолученияФормы»

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

Для того чтобы система сама выбирала нужную форму в зависимости от условий (например, роли пользователя), воспользуемся событием ОбработкаПолученияФормы в модуле менеджера объекта.


// В модуле менеджера объекта
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
    
    Если ВидФормы = "ФормаОбъекта" Тогда
        
        // Проверяем роль пользователя или функциональную опцию
        Если РольДоступна("Бухгалтер") Тогда
            // Подменяем стандартную форму на заранее созданную компактную
            ВыбраннаяФорма = "ФормаОбъектаКомпактная";
            СтандартнаяОбработка = Ложь;
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Этот метод считается наиболее «чистым», так как он не требует перезапуска сеанса и работает еще до того, как форма начала создаваться в памяти сервера.

Способ 3: Глобальная настройка интерфейса через код

Если требуется изменить масштаб не для одной формы, а для всего приложения в целом для текущего пользователя, мы можем программно управлять настройками клиентского приложения. Рассмотрим, как это реализовать через объект НастройкиКлиентскогоПриложения.

Для применения изменений на уровне сеанса разберем следующий код, который можно разместить, например, в модуле управляемого приложения в процедуре ПриНачалеРаботыСистемы:


Настройки = ПолучитьНастройкиКлиентскогоПриложения();
Настройки.ВариантМасштабаФормКлиентскогоПриложения = ВариантМасштабаФормКлиентскогоПриложения.Компактный;
УстановитьНастройкиКлиентскогоПриложения(Настройки);

Важное ограничение: программная установка настроек через УстановитьНастройкиКлиентскогоПриложения может потребовать перезапуска формы или всего сеанса для корректного отображения всех элементов. Если же вы хотите сохранить эту настройку навсегда для пользователя, воспользуемся ХранилищеСистемныхНастроек:


Настройка = ХранилищеСистемныхНастроек.Загрузить("Общее/НастройкиКлиентскогоПриложения", "");
Если Настройка = Неопределено Тогда
    Настройка = Новый НастройкиКлиентскогоПриложения;
КонецЕсли;

Настройка.ВариантМасштабаФормКлиентскогоПриложения = ВариантМасштабаФормКлиентскогоПриложения.Компактный;
ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиКлиентскогоПриложения", "", Настройка);

Резюме и рекомендации

Подводя итог, выделим основные правила работы с масштабом:

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

← На главную