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