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