В процессе разработки и кастомизации прикладных решений на платформе 1С:Предприятие 8.3 разработчики часто сталкиваются с необходимостью тонкой настройки пользовательского интерфейса. Одним из таких параметров является свойство ВариантМасштаба (ScaleVariant). Особенно актуально это становится в типовых конфигурациях, таких как БГУ или ERP, где некоторые формы по умолчанию жестко заданы в режиме «Компактный», что не всегда удобно пользователям с определенными предпочтениями или особенностями мониторов.
В этой статье мы подробно разберем, почему нельзя просто написать одну строку кода для изменения этого свойства, и рассмотрим все доступные методы решения данной задачи.
Для начала проанализируем ситуацию с точки зрения архитектуры платформы. Нам важно понимать различие между программным объектом УправляемаяФорма, с которым мы работаем в коде, и объектом метаданных, описывающим эту форму в конфигураторе.
Свойство «Вариант масштаба» (Compact/Normal/Auto) относится именно к метаданным. Это означает, что оно определяет способ первичной генерации и верстки элементов формы платформой. В объектной модели встроенного языка для объекта УправляемаяФорма не предусмотрено соответствующего свойства, доступного для записи в режиме «1С:Предприятие». Мы не можем обратиться к нему как ЭтаФорма.ВариантМасштаба = ..., так как этого свойства просто не существует в контексте выполнения кода.
Вариант масштаба влияет на:
Это структурное свойство, а не просто визуальный «зум». Именно поэтому его изменение требует особого подхода.
Самый простой и рекомендуемый платформенный способ — это использование механизма расширений. Если в основной конфигурации форма жестко настроена на «Компактный», мы можем это переопределить.
Разберем по шагам, как это сделать:
ЖурналДокументов.ВзаимодействияСЕБП.Форма.ФормаСписка) в расширение.Почему именно «Авто»? Если мы установим «Обычный», то форма станет крупной для всех пользователей без исключения. Установка значения «Авто» позволяет платформе принимать решение на основе глобальных настроек системы или индивидуальных настроек пользователя. В этом случае пользователь сможет самостоятельно регулировать комфортный для него масштаб через меню «Сервис — Параметры — Внешний вид» или через стандартные средства изменения масштаба в самой форме.
Рассмотрим ситуацию, когда пользователю нужно просто увеличить элементы, не меняя структуру верстки. Проанализируем возможности программного управления масштабом в процентах. Хотя мы не можем программно переключить форму из режима «Компактный» в «Обычный», мы можем попытаться воздействовать на процентное отображение.
Индивидуальные настройки масштаба каждой формы сохраняются в системном хранилище. Мы можем попробовать программно установить нужный масштаб для конкретного пользователя, используя ХранилищеСистемныхНастроек. Ключ объекта для поиска в хранилище будет выглядеть как путь к форме.
Пример логики работы с настройками:
ПутьКФорме = "Общий/НастройкиФорм/ЖурналДокументов.ВзаимодействияСЕБП.Форма.ФормаСписка/Масштаб";
НастройкаМасштаба = 120; // Устанавливаем масштаб 120%
ХранилищеСистемныхНастроек.Сохранить(ПутьКФорме, "", НастройкаМасштаба, "ИмяПользователя");
Однако стоит помнить, что если форма жестко задана как «Компактная» в конфигураторе, то даже при масштабе 120% она останется структурно компактной (с маленькими отступами), просто все её элементы будут пропорционально увеличены.
Если нам критически важно предоставлять разным пользователям разную верстку (одним — компактную, другим — обычную), и вариант с «Авто» не подходит, мы можем применить метод подмены формы. Это наиболее гибкий, но и наиболее трудоемкий путь.
Выясним алгоритм реализации этого метода:
ФормаСпискаОбычная.ЖурналДокументов.ВзаимодействияСЕБП) перехватим событие ОбработкаПолученияФормы.Проанализируем пример кода для реализации такой подмены:
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если ВидФормы = "ФормаСписка" Тогда
// Здесь мы можем проверить настройки текущего пользователя
НуженОбычныйМасштаб = ПользователиИнформационнойБазы.ТекущийПользователь().Имя = "Администратор";
Если НуженОбычныйМасштаб Тогда
// Указываем путь к нашей альтернативной форме в расширении
ВыбраннаяФорма = "ЖурналДокументов.ВзаимодействияСЕБП.Форма.ФормаСпискаОбычная";
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Этот метод позволяет полностью контролировать интерфейс. Однако помните о поддержке: любые изменения в логике работы основной формы (код в модуле формы, новые реквизиты) придется дублировать и в альтернативную форму. Чтобы минимизировать затраты на поддержку, рекомендуется выносить всю бизнес-логику формы в общие модули или использовать внедрение кода через расширения.
Подводя итог нашему анализу, можно сделать следующие выводы:
ВариантМасштаба во время выполнения (Runtime) не существует.ХранилищеСистемныхНастроек не меняет плотность элементов (компактность).ОбработкаПолученияФормы.Выбор метода зависит от ваших конкретных бизнес-задач и готовности поддерживать изменения в будущем. В большинстве случаев достаточно установки значения «Авто» в расширении, что полностью решает проблему комфорта пользователей без сложного программирования.