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

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

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

Понимание архитектуры платформы 1С

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

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

Почему программные методы не работают

Рассмотрим, почему распространенные попытки решения задачи оказываются неудачными:

  1. Программное управление элементами: Как только вы пытаетесь обратиться к Элементы.ИмяРеквизита, вы обращаетесь к объекту, который физически существует на форме только в текущем сеансе пользователя. Если пользователь добавил его через настройки, он его видит. Если не добавил — элемента на форме нет, и обращение к нему вызовет ошибку или не даст никакого результата для всей системы в целом.
  2. Использование обработчиков ожидания: Попытки «отследить» момент изменения формы и принудительно скрыть элементы также не приносят успеха, так как платформенные механизмы отрисовки элементов, добавленных пользователем, работают на другом уровне приоритетов.
  3. Пользовательская видимость в Конфигураторе: Настройка Пользовательская видимость в свойствах элемента в Конфигураторе работает корректно только для уже существующих на форме элементов. Она не блокирует права доступа к данным как таковым.

Единственное надежное решение: Управление на уровне ролей

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

Шаг 1: Анализ ролей

Проанализируем профили групп доступа, назначенные пользователям. Необходимо выявить все роли, которые предоставляют доступ к объекту метаданных (документу) и конкретному реквизиту. Помните: права суммируются.

Шаг 2: Создание или корректировка ролей

Наиболее правильный архитектурный подход — это создание расширения конфигурации. В расширении мы можем создать новую роль (или скопировать существующую), где мы явно запрещаем Просмотр и Редактирование для конкретного реквизита.

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

Шаг 3: Настройка профилей групп доступа

После создания «ограничивающей» роли необходимо заменить типовые роли в профилях групп доступа на ваши скорректированные роли. Если вы используете типовые конфигурации (например, ЗУП, ERP или КА), важно следить за тем, чтобы не нарушить целостность системы:

Рекомендации по реализации

Если вы столкнулись с необходимостью скрыть реквизит в типовом решении, следуйте этим рекомендациям:

Не пытайтесь «перехитрить» платформу кодом. Любые попытки управления интерфейсом через Если РольДоступна(...) Тогда ... будут лишь косметическими и не защитят данные на уровне доступа к объекту. Если пользователю нужно запретить видеть реквизит, это должно быть ограничение прав.

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

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

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

← На главную