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