Как запретить пользователю выбирать определенные реквизиты ссылки при настройке управляемой формы?

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

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

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

Особенности платформы: почему нельзя перехватить изменение формы кодом

Проанализируем архитектуру работы управляемых форм. В интерфейсе платформы «1С:Предприятие 8.3» не предусмотрено событий вроде «ПередИзменениемНастроекФормы» или «ПриПримененииНастроекФормы». Диалог настройки формы выполняется платформенным механизмом изолированно от клиентского контекста модуля формы.

Кроме того, пользовательские настройки элементов сохраняются автоматически в ХранилищеСистемныхНастроек в обход процедур формы. Также важно отметить, что программные методы динамического списка, такие как УстановитьОграниченияИспользованияВОтборе() или УстановитьОграниченияИспользованияВПорядке(), действуют исключительно на стандартное окно «Настроить список» (отборы, группировки, сортировки) и не оказывают никакого влияния на окно «Изменить форму».

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

Способ 1. Ограничение прав на уровне ролей (снятие права «Просмотр»)

Самый надежный и правильный способ защиты информации — настройка прав доступа в метаданных конфигурации. В системе «1С:Предприятие» права на каждый реквизит разделены на «Чтение» и «Просмотр».

Разберем по шагам, как это работает:

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

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

Способ 2. Удаление элемента «Ссылка» из таблицы формы

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

Рассмотрим, как убрать возможность разворачивания ссылки без нарушения логики работы формы:

  1. Проверяем текст запроса динамического списка. Поле Ссылка обязательно должно присутствовать в запросе (оно необходимо для корректного позиционирования, работы стандартных команд открытия и контекстного меню).
  2. Переходим на закладку «Элементы» управляемой формы и находим элемент таблицы, отображающий ссылку.
  3. Удаляем этот элемент из таблицы или отключаем у него свойство «Пользовательская видимость».
  4. Вместо ссылки выводим в таблицу только разрешенные для просмотра поля: Список.Наименование, Список.Код, Список.Номер или Список.Дата.

Так как элемента с типом Ссылка больше нет в составе колонок таблицы, пользователь физически не сможет нажать кнопку «Добавить поля» и выбрать скрытые реквизиты объекта.

Способ 3. Применение функциональных опций

Если доступ к реквизитам зависит не только от ролей, но и от функциональности системы или параметров сеанса, используем механизм функциональных опций.

Разберем по шагам логику настройки:

  1. Создаем или выбираем существующую функциональную опцию в конфигураторе.
  2. Включаем в состав опции те реквизиты объекта, которые должны быть скрыты.
  3. Управляем значением опции в зависимости от контекста учетной политики или параметров текущего сеанса.

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

Способ 4. Использование произвольного запроса без указания основной таблицы

Посмотрим на поведение динамического списка с произвольным запросом. Когда в свойствах списка свойство ОсновнаяТаблица не заполнено, платформа перестает автоматически связывать список с таблицей базы данных.

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

Способ 5. Отключение команды «Изменить форму» и сброс настроек

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

Рассмотрим административные и программные способы:

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ХранилищеСистемныхНастроек.Удалить("Общая/НастройкиФорм/" + ИмяФормы, "", ИмяПользователя());
КонецПроцедуры

Сочетание ограничения прав на уровне «Просмотр» и исключения поля Ссылка из состава элементов таблицы является наиболее надежным и безопасным решением поставленной задачи.

← На главную