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