При разработке на управляемых формах 1С часто возникает задача ограничить видимость определенных реквизитов. Казалось бы, логичным решением кажется программное управление свойством Видимость или Доступность элемента формы. Однако, когда мы сталкиваемся с требованием скрыть реквизит, который изначально не выведен на форму, но доступен пользователю через механизм Изменить форму (включая добавление полей по ссылке), привычные методы перестают работать. Давайте разберемся, почему так происходит и как решить эту задачу правильно.
Важно осознать один фундаментальный принцип работы платформы 1С: механизм Изменить форму — это не просто настройка отображения элементов, это инструмент, который опирается на права доступа пользователя. Если у пользователя есть право на Чтение или Просмотр реквизита, заданное в его ролях, платформа разрешит ему вывести этот реквизит на форму, даже если разработчик этого не предусматривал.
Система прав 1С работает по разрешительному принципу. Это означает, что если у пользователя назначено несколько профилей или ролей, и хотя бы в одной из них реквизит доступен для просмотра, платформа предоставит пользователю возможность увидеть этот реквизит в списке доступных полей. Попытки программного скрытия через Элементы.ИмяРеквизита.Видимость = Ложь в модуле формы будут неэффективны, так как сам элемент может отсутствовать в коллекции элементов формы до тех пор, пока пользователь не добавит его вручную.
Рассмотрим, почему распространенные попытки решения задачи оказываются неудачными:
Элементы.ИмяРеквизита, вы обращаетесь к объекту, который физически существует на форме только в текущем сеансе пользователя. Если пользователь добавил его через настройки, он его видит. Если не добавил — элемента на форме нет, и обращение к нему вызовет ошибку или не даст никакого результата для всей системы в целом.Пользовательская видимость в свойствах элемента в Конфигураторе работает корректно только для уже существующих на форме элементов. Она не блокирует права доступа к данным как таковым.Для того чтобы полностью исключить возможность появления реквизита в интерфейсе пользователя, необходимо действовать на уровне метаданных и прав доступа. Рассмотрим пошаговый алгоритм действий:
Проанализируем профили групп доступа, назначенные пользователям. Необходимо выявить все роли, которые предоставляют доступ к объекту метаданных (документу) и конкретному реквизиту. Помните: права суммируются.
Наиболее правильный архитектурный подход — это создание расширения конфигурации. В расширении мы можем создать новую роль (или скопировать существующую), где мы явно запрещаем Просмотр и Редактирование для конкретного реквизита.
Даже если у этой роли есть право на Чтение самого документа, отсутствие права на чтение конкретного реквизита (свойство Просмотр в правах) заблокирует его отображение в любых формах, отчетах и универсальных механизмах платформы.
После создания «ограничивающей» роли необходимо заменить типовые роли в профилях групп доступа на ваши скорректированные роли. Если вы используете типовые конфигурации (например, ЗУП, ERP или КА), важно следить за тем, чтобы не нарушить целостность системы:
Если вы столкнулись с необходимостью скрыть реквизит в типовом решении, следуйте этим рекомендациям:
Не пытайтесь «перехитрить» платформу кодом. Любые попытки управления интерфейсом через Если РольДоступна(...) Тогда ... будут лишь косметическими и не защитят данные на уровне доступа к объекту. Если пользователю нужно запретить видеть реквизит, это должно быть ограничение прав.
Используйте расширения для модификации прав. Это позволит вам вносить изменения, не снимая конфигурацию с поддержки и сохраняя возможность обновления системы. В расширении вы можете создать роль, дублирующую права типовой, но с отключенными правами на конкретный реквизит (галки Просмотр и Редактирование в дереве прав реквизита).
Тестируйте изменения под пользователем. После внесения изменений в права, обязательно войдите в систему под пользователем с ограниченными правами и проверьте, доступно ли поле в списке Изменить форму. В правильно настроенной системе реквизит либо будет отсутствовать в списке доступных полей, либо его выбор не приведет к отображению данных.
Таким образом, мы выяснили, что управление видимостью через настройки формы — это вопрос прав доступа, а не элементов управления. Исключение прав на уровне ролей является единственным инструментом, гарантирующим безопасность и целостность интерфейса в платформе 1С.