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