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