Как скрыть элементы формы при открытии, сохранив возможность их включения пользователем?

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

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

В этой статье мы подробно разберем, почему так происходит, проанализируем разницу между технической и пользовательской видимостью, и рассмотрим несколько эффективных способов реализации этой задачи.

Понимаем разницу между Видимостью и Пользовательской видимостью

Для начала выясним причину, по которой обычный код не работает так, как ожидает автор вопроса. Проанализируем два ключевых свойства элемента управляемой формы:

  1. Свойство Видимость: Если мы устанавливаем Элементы.ИмяЭлемента.Видимость = Ложь на сервере, платформа оптимизирует передачу данных. Этот элемент вообще не отрисовывается в браузере или тонком клиенте. Раз его нет на клиенте, он исчезает и из диалога «Изменить форму».
  2. Свойство ПользовательскаяВидимость: Это свойство управляет «галочкой» в настройках формы. Если оно равно Ложь, элемент физически присутствует в структуре формы на клиенте, но скрыт от глаз. Пользователь может в любой момент зайти в настройки и включить его обратно.

Рассмотрим подробнее каждый из способов реализации корректного скрытия.

Способ 1. Использование Конфигуратора (статическая настройка)

Это самый простой и рекомендуемый метод, если логика скрытия не зависит от сложных условий в коде. Разберем шаги настройки:

  1. Откроем нужную управляемую форму в Конфигураторе.
  2. Выберем элемент (поле, группу или кнопку), который должен быть скрыт по умолчанию.
  3. В палитре свойств найдем строку Пользовательская видимость и нажмем на ссылку «Открыть».
  4. В появившемся окне мы увидим список ролей. Чтобы элемент был скрыт для всех, нужно снять галочки во всех колонках (или для конкретных ролей, если требуется избирательность).

При таком подходе при первом открытии формы пользователем элемент будет скрыт, но он останется доступен в списке доступных полей при нажатии Еще — Изменить форму.

Способ 2. Программное управление свойством ПользовательскаяВидимость

Иногда нам нужно скрыть элементы программно, например, в зависимости от функциональных опций или параметров системы. Для этого мы можем обратиться к свойству ПользовательскаяВидимость в коде. Посмотрим на пример реализации в модуле формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Скрываем элемент, но оставляем его доступным в настройках
    Элементы.ГруппаДополнительныеРеквизиты.ПользовательскаяВидимость = Ложь;
    
КонецПроцедуры

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

Способ 3. Использование функциональных опций (ФО)

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

  1. Создадим Константу (например, ИспользоватьДополнительныеПоля) или реквизит справочника настроек.
  2. Создадим Функциональную опцию, привязанную к этой константе.
  3. В составе функциональной опции укажем наши элементы формы.

Если ФО выключена, элементы не будут видны. Однако, чтобы пользователь мог ими управлять через «Изменить форму», в свойствах элементов формы на вкладке «Использование» необходимо проверить привязку к функциональным опциям. Это позволяет гибко управлять интерфейсом без написания лишнего кода.

Способ 4. Управление через ХранилищеНастроекДанныхФорм

Если задача стоит так: «сделать для всех пользователей настройки по умолчанию, но дать им право менять их», то можно воспользоваться механизмом копирования настроек. Выясним, как это работает:

Мы можем один раз настроить форму в режиме «Предприятие» под администратором (скрыть нужные поля через «Изменить форму»), а затем программно скопировать эти настройки другим пользователям. Для этого используется объект ХранилищеСистемныхНастроек.

Пример логики копирования настроек:


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

Этот метод позволяет установить «эталонный» вид формы для всей компании, при этом каждый сотрудник сохраняет возможность индивидуальной подстройки под свои задачи.

Способ 5. Свертываемые группы как альтернатива

Рассмотрим вариант, предложенный в обсуждении: использование свертываемых групп. Это часто встречается в типовых конфигурациях (например, в карточке номенклатуры в УТ 11 или ERP).

Вместо того чтобы полностью скрывать элемент, мы можем поместить его в группу со следующими настройками:

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

Подведение итогов

Мы проанализировали различные подходы к ограничению видимости элементов формы. Подведем итоги наших изысканий:

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

← На главную