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

Сразу оговорюсь: это скрытие в интерфейсе, а не защита данных, и опирается оно на недокументированное поведение платформы. Ниже — когда приём уместен, как его реализовать и какие проверки обязательны.

Задача и почему стандартные средства не подходят

Типовая ситуация: в карточке контрагента есть дополнительные реквизиты «Кредитный лимит», «Внутренний рейтинг», «Комментарий службы безопасности». Менеджеры по продажам не должны видеть часть из них в списках и отчётах. Условие заказчика — без ограничения доступа на уровне записей (RLS): его не хотят усложнять или боятся за производительность.

Что такое дополнительный реквизит в современных конфигурациях на БСП: элемент плана видов характеристик ДополнительныеРеквизитыИСведения плюс строки табличной части ДополнительныеРеквизиты у объекта (свойство и значение). Отсюда ограничения стандартных инструментов:

ИнструментПочему не подходит
Функциональные опцииРаботают на уровне объектов метаданных, а не отдельных элементов ПВХ
Права ролейДаются на всю табличную часть дополнительных реквизитов, а не на конкретное свойство
Видимость в форме (зависимости реквизитов БСП)Влияет на форму объекта, но не на динамические списки и отчёты
RLSПодходит для запрета чтения, но исключено условием задачи

Приём: пустое представление свойства

Платформа получает представление элемента ПВХ через ОбработкаПолученияПредставления модуля менеджера. Если для свойства вернуть Неопределено, такое свойство, по наблюдениям на практике, перестаёт показываться в списке доступных полей: в отборах, в настройке колонок динамических списков и в полях отчётов на СКД. Свойство как будто исчезает для пользователя, хотя в базе оно есть.

Это поведение не описано в документации платформы. Поэтому:

  • проверяйте его на своей версии платформы и конфигурации до внедрения;
  • после каждого обновления платформы прогоняйте проверку повторно;
  • не обещайте заказчику «защиту» — это скрытие.
Ограничение доступа к дополнительным реквизитам 1С: часть свойств отфильтрована для пользователя
Ограничение доступа к дополнительным реквизитам 1С: часть свойств отфильтрована для пользователя

Реализация

Шаг 1. Параметр сеанса со списком скрытых свойств

Обработчик представления вызывается очень часто — на каждое свойство при каждом построении списка полей. Запрос внутри него недопустим. Создайте параметр сеанса, например доп_СкрытыеДополнительныеРеквизиты, с типом ФиксированноеСоответствие, и заполняйте его при начале сеанса.

В конфигурациях на БСП обработчик установки параметра сеанса регистрируется в ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса:

1С
Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт

	Обработчики.Вставить("доп_СкрытыеДополнительныеРеквизиты",
		"доп_ДоступКДополнительнымРеквизитам.УстановкаПараметровСеанса");

КонецПроцедуры

Сам обработчик в серверном общем модуле:

1С
// Заполняет параметр сеанса со свойствами, скрытыми от текущего пользователя.
Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт

	Скрытые = Новый Соответствие;
	Для Каждого Свойство Из СкрытыеСвойстваТекущегоПользователя() Цикл
		Скрытые.Вставить(Свойство, Истина);
	КонецЦикла;

	ПараметрыСеанса[ИмяПараметра] = Новый ФиксированноеСоответствие(Скрытые);
	УстановленныеПараметры.Добавить(ИмяПараметра);

КонецПроцедуры

СкрытыеСвойстваТекущегоПользователя() — ваша функция. Где хранить настройку, решайте по задаче: регистр сведений «Пользователь или группа — Свойство», или проще — роль-маркер: у кого нет роли «Просмотр закрытых свойств», тому скрывается заранее заданный список. Второй вариант проще администрировать.

Шаг 2. Подмена представления

В модуле менеджера ПВХ ДополнительныеРеквизитыИСведения типовой обработчик уже есть: он формирует представление с учётом мультиязычности и набора свойств. Не переписывайте его — добавьте свой код после типового через расширение:

1С
&После("ОбработкаПолученияПредставления")
Процедура доп_ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
	Скрытые = ПараметрыСеанса.доп_СкрытыеДополнительныеРеквизиты;
	Если Скрытые.Получить(Данные.Ссылка) = Истина Тогда
		Представление = Неопределено;
		СтандартнаяОбработка = Ложь;
	КонецЕсли;
#КонецЕсли

КонецПроцедуры

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

Данные.Ссылка доступна, если ссылка входит в поля представления ПВХ — в типовом модуле это обеспечено обработчиком ОбработкаПолученияПолейПредставления. Проверьте его в своей конфигурации.

Чего этот приём не делает

Важно объяснить заказчику границы решения:

  • Данные не защищены. Значения свойств лежат в табличной части объекта и в регистре дополнительных сведений. Их видно через консоль запросов, выгрузку в Excel из формы объекта, внешнюю обработку, обмен.
  • Форма объекта. В карточке контрагента свойство может остаться видимым — там работают механизмы БСП для дополнительных реквизитов. Скрывайте его там отдельно, через видимость в настройках свойства или программно в форме.
  • Сохранённые настройки. Если пользователь заранее вывел колонку в список и сохранил настройку, поведение после включения скрытия нужно проверить отдельно.

Если требование звучит как «менеджер не должен иметь возможности узнать кредитный лимит», это задача на права и ограничение доступа, а не на представление. Здесь честнее сделать RLS через подсистему «Управление доступом» БСП или вынести чувствительные данные в отдельный регистр с отдельными правами.

Как проверить решение

Перед передачей в работу я прохожу такой список под пользователем с ограничениями:

  1. Динамический список контрагентов: «Ещё» → «Изменить форму» / настройка списка — скрытых свойств нет в доступных полях.
  2. Отборы списка — свойство не предлагается.
  3. Универсальный отчёт и отчёты на СКД с дополнительными реквизитами — свойства нет в полях.
  4. Форма объекта — видимость соответствует требованиям.
  5. Пользователь с полными правами — видит всё как раньше.
  6. Время открытия списка не изменилось (обработчик не делает запросов).

Типичные ошибки

  • Запрос в ОбработкаПолученияПредставления. Списки и отчёты начинают тормозить.
  • Обращение к ПараметрыСеанса без #Если Сервер. Ошибка на клиенте.
  • Правка типового модуля ПВХ. Делайте через расширение с &После.
  • Не добавили имя в УстановленныеПараметры. БСП посчитает параметр неустановленным.
  • Скрытие продано как безопасность. Это источник претензий, когда данные «утекут» через выгрузку.
Пустое представление — удобный способ убрать лишние свойства из интерфейса. Защищать данные им нельзя.

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

Итог

  • Функциональные опции и права ролей не умеют скрывать отдельные дополнительные реквизиты.
  • Пустое представление свойства в ОбработкаПолученияПредставления убирает его из полей списков и отчётов — это недокументированное поведение, проверяйте его.
  • Список скрытых свойств храните в параметре сеанса типа ФиксированноеСоответствие.
  • Код добавляйте через расширение и только в серверной ветке.
  • Для реального запрета чтения используйте права и ограничение доступа на уровне записей.