Как программно определить, что элемент формы скрыт пользователем через «Изменить форму»?

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

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

Разбираемся в причинах проблемы

Когда мы проверяем доступность или наличие элемента через Элементы.Найти("ИмяЭлемента"), мы часто сталкиваемся с тем, что метод возвращает объект ПолеФормы, а свойство Видимость установлено в значение Истина. Однако элемент физически не отображается. Почему так происходит?

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

Как правильно проверить состояние элемента

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

Рассмотрим, как выглядит проверка в программном коде:


// Проверка элемента, который мог быть отключен пользователем
ЭлементКонтрагента = Элементы.Найти("Контрагент");

Если ЭлементКонтрагента <> Неопределено Тогда
    Если ЭлементКонтрагента.ВидимостьПользователя = Ложь Тогда
        // Элемент скрыт пользователем в настройках «Изменить форму»
        Сообщить("Элемент скрыт пользователем!");
    КонецЕсли;
КонецЕсли;

Анализируем механизмы видимости

Давайте систематизируем полученные знания, чтобы в будущем подобные задачи решались за секунды:

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

Важные советы по работе с интерфейсом

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

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

Теперь, когда вы знаете о существовании этого свойства, вы сможете легко диагностировать, почему элемент «не найден» или почему код работает не так, как ожидалось, даже при активной системной видимости.

← На главную