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