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