Как решить проблему с правами доступа табельщика при проведении документа «Отсутствие (болезнь, прогул, неявка)» в 1С:ЗУП 3.1

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

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

Выясним причину конфликта прав доступа

Первым делом рассмотрим архитектурную особенность документа Отсутствие (болезнь, прогул, неявка). В системе 1С:ЗУП этот документ выполняет двойную функцию: кадровый учет (фиксация факта отсутствия) и подготовку данных для расчета зарплаты. Типовая роль Табельщик задумана разработчиками как максимально ограниченная. Она позволяет регистрировать явки и неявки в табеле, но при проведении документа «Отсутствие» система пытается сделать записи в защищенные регистры, к которым у табельщика по умолчанию нет доступа.

Проанализируем список объектов, запись в которые обычно блокирует проведение:

  1. Регистр сведений «Данные оперативного учета рабочего времени»: сюда записываются сведения, на основании которых потом автоматически заполняется документ Табель.
  2. Регистр сведений «Состояния сотрудников»: это ключевой регистр, определяющий статус работника. Без прав на запись в него документ не может быть проведен, так как система должна «знать», что сотрудник в данный момент отсутствует.
  3. Регистр расчета «Начисления»: даже если документ не делает фактических расчетов в рублях, он может пытаться взаимодействовать с механизмами вытеснения видов расчета.

Шаг 1. Диагностика через Журнал регистрации и отладку

Прежде чем вносить изменения в код, проверим, на какой именно объект не хватает прав. Рассмотрим стандартный механизм диагностики. Откроем Журнал регистрации (Администрирование — Обслуживание — Журнал регистрации) и установим фильтр по пользователю и событию «Отказ в доступе».

Если Журнал регистрации не дает подробного описания (например, пишет общую ошибку), воспользуемся инструментами разработчика. Запустим конфигуратор и выполним следующие действия:

  1. Установим признак Остановка по ошибке (в меню «Отладка» — «Настройка параметров отладки»).
  2. Запустим сеанс под пользователем с ролью Табельщик.
  3. Попытаемся провести документ.
  4. При возникновении исключения конфигуратор остановится на той строке кода, где происходит обращение к защищенному объекту.

Шаг 2. Настройка прав через профили доступа

Посмотрим на решение проблемы через стандартные настройки. Иногда бывает достаточно создать копию типовой роли и добавить недостающие права. Рассмотрим этот процесс подробнее:

Перейдем в раздел «Администрирование» — «Настройки пользователей и прав» — «Профили групп доступа». Найдем профиль табельщика и создадим его копию. В списке ролей попробуем найти и добавить следующие роли:

Важно: если даже после добавления этих ролей ошибка сохраняется, значит, ограничение заложено на уровне RLS (Ограничение доступа на уровне записей). Если сотрудник переведен в подразделение, на которое у табельщика нет прав, проведение документа будет заблокировано системно.

Шаг 3. Решение через изменение общего модуля

Разберем способ, которым часто пользуются программисты для быстрого решения проблемы — внесение правок в общие модули. Обычно проверка прав происходит в модуле УправлениеДоступом или специализированных модулях блока ЗарплатаКадры.

Суть метода заключается в том, чтобы принудительно разрешить запись в регистр СостоянияСотрудников, если инициатором является документ отсутствия. Для этого можно найти функцию проверки прав и добавить в неё исключение. Однако прямое изменение типовой конфигурации затрудняет дальнейшие обновления. Рассмотрим более современный подход.

Шаг 4. Использование расширения конфигурации (Рекомендуемый метод)

Чтобы не снимать программу с поддержки и корректно решить вопрос с правами, создадим расширение. Наша задача — заставить систему выполнять запись в регистры в привилегированном режиме, когда документ проводит табельщик.

Рассмотрим пример кода, который можно разместить в расширении для модуля объекта документа ОтсутствиеБолезньПрогулНеявка:


&Вместо("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	// Включаем привилегированный режим, чтобы обойти проверку прав на регистры
	УстановитьПривилегированныйРежим(Истина);
	
	// Вызываем стандартную логику проведения
	ПродолжитьВызов(Отказ, РежимЗаписи, РежимПроведения);
КонецПроцедуры

При использовании метода УстановитьПривилегированныйРежим(Истина) система перестает проверять права текущего пользователя на все операции с базой данных в рамках текущего потока выполнения. Это позволяет табельщику успешно записать данные в РегистрСведений.СостоянияСотрудников и другие объекты, доступ к которым ему закрыт в обычном режиме.

Проанализируем влияние RLS

Если в вашей базе включено ограничение доступа по подразделениям или организациям, обязательно проверьте, имеет ли табельщик доступ к тому подразделению, где числится сотрудник. Часто ошибка возникает из-за того, что документ Отсутствие пытается прочитать данные о последнем кадровом перемещении сотрудника. Если это перемещение было совершено в подразделение, к которому у табельщика нет доступа, система выдаст ошибку прав доступа, даже если сам документ ему «разрешен».

В таких случаях необходимо либо расширить область доступа табельщика в настройках группы доступа, либо использовать механизм привилегированного модуля для обхода проверок RLS при чтении кадровой истории в момент проведения документа.

Итоги

Подводя итог, можно сказать, что проблема прав табельщика в ЗУП 3.1 — это следствие жесткого разделения прав между кадровиками и расчетчиками. Для её решения мы рекомендуем:

  1. Проверить Журнал регистрации для уточнения объекта, на который не хватает прав.
  2. Попробовать расширить права в профиле доступа, добавив роль Чтение кадровых данных.
  3. Если это не помогает, создать расширение и использовать УстановитьПривилегированныйРежим в процедуре ПередЗаписью или ОбработкаПроведения.

Такой подход позволит сохранить чистоту типовой конфигурации и обеспечит стабильную работу пользователей без лишних сообщений об ошибках.

← На главную