В практике администратора или программиста 1С нередко возникает задача: ограничить доступ пользователя к конфиденциальным данным справочника так, чтобы он мог выбирать элементы в документах, но не имел возможности «провалиться» внутрь карточки и увидеть детали. Это актуально для справочников контрагентов, сотрудников или ценных бумаг, где часть информации не должна быть доступна рядовому персоналу.
Разберем подробно несколько методов реализации этой задачи, проанализируем их надежность и рассмотрим конкретные примеры кода и настроек, применимых в конфигурациях на базе 1С:Предприятие 8 (включая БП 2.0 на обычных формах и современные решения на управляемых формах).
Первым делом проанализируем стандартную систему прав в конфигураторе. Платформа 1С разделяет право на программное чтение данных и право на интерактивный просмотр. Это базовый механизм, который позволяет решить задачу в некоторых случаях без программирования.
Если мы снимем у роли флажок «Просмотр», но оставим «Чтение», пользователь технически сможет работать с ссылкой в документах, но не сможет открыть саму карточку элемента. Однако стоит учитывать, что при таком подходе может перестать работать стандартная кнопка выбора (три точки), и пользователю придется выбирать элемент через автоподбор (ввод текста в поле) или из выпадающего списка. Для настройки этого механизма необходимо открыть конфигуратор, найти нужную роль и на закладке «Права» соответствующего справочника снять галочку «Просмотр».
Если нам нужно оставить возможность открывать форму списка, но запретить открытие именно карточки (формы элемента), мы можем прибегнуть к программному методу. Рассмотрим ситуацию, когда мы создаем специальную роль-маркер, ограничивающую доступ.
Разберем по шагам реализацию в модуле формы элемента справочника:
ЗапретПросмотраКарточки (без назначения прав на объекты, просто как флаг).ПередОткрытием, для управляемых — ПриСозданииНаСервере) напишем обработчик.Для конфигурации «Бухгалтерия предприятия 2.0» (обычные формы) код будет выглядеть следующим образом:
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Если РольДоступна("ЗапретПросмотраКарточки") Тогда
Предупреждение("У вас недостаточно прав для просмотра детальной информации этого элемента.");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Этот метод прост в реализации, однако он имеет существенный недостаток: пользователь все еще может считать данные реквизитов через отчеты, консоль запросов или обработку «Групповое изменение реквизитов», если у него есть право на «Чтение».
Рассмотрим более продвинутый и надежный способ — использование механизма RLS (Record Level Security). Этот метод позволяет ограничить доступ не только ко всей записи, но и к конкретным полям справочника. Это единственный способ, который защитит данные не только от открытия формы, но и от вывода в отчеты.
Выясним, как настроить такое ограничение в конфигураторе:
Ссылка, Наименование и Код установим условие ГДЕ ИСТИНА. Это позволит пользователю видеть название элемента и выбирать его.ИНН, Спецификация, Комментарий) установим условие ГДЕ ЛОЖЬ.В результате, если пользователь попытается «провалиться» в элемент, он увидит пустую форму (реквизиты будут скрыты системой) или получит сообщение об ошибке доступа. При попытке вывести закрытые реквизиты в отчет, в соответствующих колонках будет пусто. Это наиболее профессиональный подход к безопасности данных.
Иногда требуется запретить именно действие «проваливания» из формы документа или формы списка. Проанализируем, как это сделать в обычных формах (БП 2.0) через обработку событий табличного поля.
В форме списка справочника мы можем перехватить событие Выбор. Если пользователь дважды щелкает по строке, чтобы открыть её, мы можем прервать это действие, не мешая при этом процессу выбора значения в документ.
Процедура СправочникСписокВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
// Если форма открыта для выбора, разрешаем стандартную обработку
Если ЭтаФорма.РежимВыбора Тогда
Возврат;
КонецЕсли;
// Если просто просмотр - запрещаем
Если РольДоступна("ОграниченныйДоступ") Тогда
СтандартнаяОбработка = Ложь;
Сообщить("Просмотр карточки запрещен политикой безопасности.");
КонецЕсли;
КонецПроцедуры
При реализации любого из вышеперечисленных методов важно помнить о смежных механизмах системы, через которые данные могут стать доступны:
F9 (копирование) в списке. В этом случае откроется форма создания нового элемента, но она будет заполнена данными старого, который мы пытаемся скрыть. Проверяйте наличие права на добавление или пишите код в событии ПриКопировании.Таким образом, для достижения максимальной безопасности мы рекомендуем комбинировать RLS на уровне конфиденциальных полей с программным запретом открытия формы. Это обеспечит и удобство работы пользователя (он сможет выбирать элементы), и надежную защиту информации.