Как в 1С запретить просмотр элемента справочника, сохранив возможность его выбора в документах?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия
← На главную

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

Разберем подробно несколько методов реализации этой задачи, проанализируем их надежность и рассмотрим конкретные примеры кода и настроек, применимых в конфигурациях на базе 1С:Предприятие 8 (включая БП 2.0 на обычных формах и современные решения на управляемых формах).

Метод 1. Разграничение интерактивных и системных прав

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

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

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

Метод 2. Программный запрет в форме элемента

Если нам нужно оставить возможность открывать форму списка, но запретить открытие именно карточки (формы элемента), мы можем прибегнуть к программному методу. Рассмотрим ситуацию, когда мы создаем специальную роль-маркер, ограничивающую доступ.

Разберем по шагам реализацию в модуле формы элемента справочника:

  1. Создадим в конфигураторе роль с названием ЗапретПросмотраКарточки (без назначения прав на объекты, просто как флаг).
  2. В модуле формы элемента справочника (для обычных форм — событие ПередОткрытием, для управляемых — ПриСозданииНаСервере) напишем обработчик.

Для конфигурации «Бухгалтерия предприятия 2.0» (обычные формы) код будет выглядеть следующим образом:


Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Если РольДоступна("ЗапретПросмотраКарточки") Тогда
        Предупреждение("У вас недостаточно прав для просмотра детальной информации этого элемента.");
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры

Этот метод прост в реализации, однако он имеет существенный недостаток: пользователь все еще может считать данные реквизитов через отчеты, консоль запросов или обработку «Групповое изменение реквизитов», если у него есть право на «Чтение».

Метод 3. Использование механизма RLS (Ограничение на уровне записей и полей)

Рассмотрим более продвинутый и надежный способ — использование механизма RLS (Record Level Security). Этот метод позволяет ограничить доступ не только ко всей записи, но и к конкретным полям справочника. Это единственный способ, который защитит данные не только от открытия формы, но и от вывода в отчеты.

Выясним, как настроить такое ограничение в конфигураторе:

  1. Выберем нужную роль и перейдем к справочнику.
  2. В списке прав выберем «Чтение».
  3. В нижнем окне «Ограничение доступа к данным» добавим условие.
  4. Для полей Ссылка, Наименование и Код установим условие ГДЕ ИСТИНА. Это позволит пользователю видеть название элемента и выбирать его.
  5. Для всех остальных полей (например, ИНН, Спецификация, Комментарий) установим условие ГДЕ ЛОЖЬ.

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

Метод 4. Перехват события выбора в интерфейсе

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

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


Процедура СправочникСписокВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
    // Если форма открыта для выбора, разрешаем стандартную обработку
    Если ЭтаФорма.РежимВыбора Тогда
        Возврат;
    КонецЕсли;
    
    // Если просто просмотр - запрещаем
    Если РольДоступна("ОграниченныйДоступ") Тогда
        СтандартнаяОбработка = Ложь;
        Сообщить("Просмотр карточки запрещен политикой безопасности.");
    КонецЕсли;
КонецПроцедуры

Важные нюансы и риски «утечки» данных

При реализации любого из вышеперечисленных методов важно помнить о смежных механизмах системы, через которые данные могут стать доступны:

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

← На главную