Как программно изменить вариант масштаба формы в 1С:Предприятие 8.3

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

В процессе разработки и кастомизации прикладных решений на платформе 1С:Предприятие 8.3 разработчики часто сталкиваются с необходимостью тонкой настройки пользовательского интерфейса. Одним из таких параметров является свойство ВариантМасштаба (ScaleVariant). Особенно актуально это становится в типовых конфигурациях, таких как БГУ или ERP, где некоторые формы по умолчанию жестко заданы в режиме «Компактный», что не всегда удобно пользователям с определенными предпочтениями или особенностями мониторов.

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

Техническая природа свойства «Вариант масштаба»

Для начала проанализируем ситуацию с точки зрения архитектуры платформы. Нам важно понимать различие между программным объектом УправляемаяФорма, с которым мы работаем в коде, и объектом метаданных, описывающим эту форму в конфигураторе.

Свойство «Вариант масштаба» (Compact/Normal/Auto) относится именно к метаданным. Это означает, что оно определяет способ первичной генерации и верстки элементов формы платформой. В объектной модели встроенного языка для объекта УправляемаяФорма не предусмотрено соответствующего свойства, доступного для записи в режиме «1С:Предприятие». Мы не можем обратиться к нему как ЭтаФорма.ВариантМасштаба = ..., так как этого свойства просто не существует в контексте выполнения кода.

Вариант масштаба влияет на:

Это структурное свойство, а не просто визуальный «зум». Именно поэтому его изменение требует особого подхода.

Решение 1: Использование расширений и режима «Авто»

Самый простой и рекомендуемый платформенный способ — это использование механизма расширений. Если в основной конфигурации форма жестко настроена на «Компактный», мы можем это переопределить.

Разберем по шагам, как это сделать:

  1. Создадим новое расширение или используем существующее.
  2. Добавим интересующую нас форму (например, ЖурналДокументов.ВзаимодействияСЕБП.Форма.ФормаСписка) в расширение.
  3. В свойствах формы внутри расширения найдем пункт «Вариант масштаба».
  4. Установим значение «Авто».

Почему именно «Авто»? Если мы установим «Обычный», то форма станет крупной для всех пользователей без исключения. Установка значения «Авто» позволяет платформе принимать решение на основе глобальных настроек системы или индивидуальных настроек пользователя. В этом случае пользователь сможет самостоятельно регулировать комфортный для него масштаб через меню «Сервис — Параметры — Внешний вид» или через стандартные средства изменения масштаба в самой форме.

Решение 2: Разграничение «Варианта масштаба» и «Процентного масштаба»

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

Индивидуальные настройки масштаба каждой формы сохраняются в системном хранилище. Мы можем попробовать программно установить нужный масштаб для конкретного пользователя, используя ХранилищеСистемныхНастроек. Ключ объекта для поиска в хранилище будет выглядеть как путь к форме.

Пример логики работы с настройками:


ПутьКФорме = "Общий/НастройкиФорм/ЖурналДокументов.ВзаимодействияСЕБП.Форма.ФормаСписка/Масштаб";
НастройкаМасштаба = 120; // Устанавливаем масштаб 120%
ХранилищеСистемныхНастроек.Сохранить(ПутьКФорме, "", НастройкаМасштаба, "ИмяПользователя");

Однако стоит помнить, что если форма жестко задана как «Компактная» в конфигураторе, то даже при масштабе 120% она останется структурно компактной (с маленькими отступами), просто все её элементы будут пропорционально увеличены.

Решение 3: Программная подмена формы при открытии

Если нам критически важно предоставлять разным пользователям разную верстку (одним — компактную, другим — обычную), и вариант с «Авто» не подходит, мы можем применить метод подмены формы. Это наиболее гибкий, но и наиболее трудоемкий путь.

Выясним алгоритм реализации этого метода:

  1. Создадим в расширении копию основной формы. Назовем её, например, ФормаСпискаОбычная.
  2. В этой копии установим свойство «Вариант масштаба» в значение «Обычный».
  3. В модуле менеджера объекта (в нашем примере это ЖурналДокументов.ВзаимодействияСЕБП) перехватим событие ОбработкаПолученияФормы.

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


Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
    
    Если ВидФормы = "ФормаСписка" Тогда
        
        // Здесь мы можем проверить настройки текущего пользователя
        НуженОбычныйМасштаб = ПользователиИнформационнойБазы.ТекущийПользователь().Имя = "Администратор"; 
        
        Если НуженОбычныйМасштаб Тогда
            // Указываем путь к нашей альтернативной форме в расширении
            ВыбраннаяФорма = "ЖурналДокументов.ВзаимодействияСЕБП.Форма.ФормаСпискаОбычная";
            СтандартнаяОбработка = Ложь;
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

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

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

Подводя итог нашему анализу, можно сделать следующие выводы:

  1. Прямого программного доступа к свойству ВариантМасштаба во время выполнения (Runtime) не существует.
  2. Лучшая практика — использование расширения для перевода формы в режим «Авто». Это дает пользователю возможность самостоятельно управлять интерфейсом через стандартные настройки 1С.
  3. Масштаб в процентах и Вариант масштаба — это разные механизмы. Изменение процентов через ХранилищеСистемныхНастроек не меняет плотность элементов (компактность).
  4. Сложные случаи решаются через создание дубликатов форм с разными свойствами метаданных и их программную подмену в событии ОбработкаПолученияФормы.

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

← На главную