В процессе разработки интерфейсов на платформе 1С:Предприятие 8.3 часто возникает задача адаптации отображения формы под нужды конкретного пользователя или под объем выводимых данных. Например, если на форме расположено множество реквизитов, удобнее использовать компактный вид, а для простых форм ввода — обычный. Рассмотрим подробнее, какие инструменты предоставляет платформа для решения этой задачи и как обойти существующие ограничения встроенного языка.
Прежде чем переходить к коду, проанализируем важный нюанс архитектуры 1С. В системе существуют два принципиально разных понятия, которые часто путают:
Масштаб) доступно программно начиная с версии платформы 8.3.10.Если наша задача — просто «сжать» или «растянуть» форму визуально, мы можем воспользоваться свойством Масштаб. Проанализируем особенности его применения. Данное свойство является клиентским, поэтому обращаться к нему нужно в контексте выполнения на клиенте.
Рассмотрим пример установки масштаба при открытии формы. Обратите внимание, что мы используем обработчик ПриОткрытии, а не ПриСозданииНаСервере, так как на сервере визуальные параметры формы еще не определены.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Устанавливаем масштаб 80% от стандартного
ЭтаФорма.Масштаб = 80;
КонецПроцедуры
Также мы можем создать на форме интерактивный механизм переключения масштаба «на лету» (например, по нажатию кнопки):
&НаКлиенте
Процедура ИзменитьМасштабФормы(Команда)
// Переключаем масштаб между 80% и 100%
ЭтаФорма.Масштаб = ?(ЭтаФорма.Масштаб = 80, 100, 80);
КонецПроцедуры
Важно помнить, что диапазон допустимых значений масштаба в 1С обычно составляет от 25 до 400. Если вы укажете значение вне этого диапазона, система автоматически применит ближайшее допустимое граничное значение.
Выясним, как быть в ситуации, когда нам принципиально нужно изменить именно Вариант масштаба (перейти на компактный интерфейс «Такси»). Поскольку программно изменить это свойство у открытой формы нельзя, наиболее грамотным архитектурным решением будет создание двух вариантов формы в конфигураторе или программное изменение существующей.
Для того чтобы система сама выбирала нужную форму в зависимости от условий (например, роли пользователя), воспользуемся событием ОбработкаПолученияФормы в модуле менеджера объекта.
// В модуле менеджера объекта
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если ВидФормы = "ФормаОбъекта" Тогда
// Проверяем роль пользователя или функциональную опцию
Если РольДоступна("Бухгалтер") Тогда
// Подменяем стандартную форму на заранее созданную компактную
ВыбраннаяФорма = "ФормаОбъектаКомпактная";
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Этот метод считается наиболее «чистым», так как он не требует перезапуска сеанса и работает еще до того, как форма начала создаваться в памяти сервера.
Если требуется изменить масштаб не для одной формы, а для всего приложения в целом для текущего пользователя, мы можем программно управлять настройками клиентского приложения. Рассмотрим, как это реализовать через объект НастройкиКлиентскогоПриложения.
Для применения изменений на уровне сеанса разберем следующий код, который можно разместить, например, в модуле управляемого приложения в процедуре ПриНачалеРаботыСистемы:
Настройки = ПолучитьНастройкиКлиентскогоПриложения();
Настройки.ВариантМасштабаФормКлиентскогоПриложения = ВариантМасштабаФормКлиентскогоПриложения.Компактный;
УстановитьНастройкиКлиентскогоПриложения(Настройки);
Важное ограничение: программная установка настроек через УстановитьНастройкиКлиентскогоПриложения может потребовать перезапуска формы или всего сеанса для корректного отображения всех элементов. Если же вы хотите сохранить эту настройку навсегда для пользователя, воспользуемся ХранилищеСистемныхНастроек:
Настройка = ХранилищеСистемныхНастроек.Загрузить("Общее/НастройкиКлиентскогоПриложения", "");
Если Настройка = Неопределено Тогда
Настройка = Новый НастройкиКлиентскогоПриложения;
КонецЕсли;
Настройка.ВариантМасштабаФормКлиентскогоПриложения = ВариантМасштабаФормКлиентскогоПриложения.Компактный;
ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиКлиентскогоПриложения", "", Настройка);
Подводя итог, выделим основные правила работы с масштабом:
ЭтаФорма.Масштаб на клиенте.ОбработкаПолученияФормы.Масштаб помните, что вы перекрываете настройки, которые пользователь мог установить вручную через меню «Вид». Будьте аккуратны, чтобы не нарушить персональный комфорт пользователя.НастройкиКлиентскогоПриложения в сочетании с системным хранилищем настроек.Проанализировав данные способы, мы видим, что платформа 1С предоставляет достаточно гибкости, несмотря на жесткую фиксацию некоторых свойств в конфигураторе. Комбинируя эти подходы, можно добиться идеального отображения интерфейса для любого разрешения монитора и любых задач бизнеса.