Как исправить проблему с правами доступа к документу Прогул неявка в ЗУП 3.1 после обновления

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

После обновления конфигурации 1С:Зарплата и управление персоналом 3.1 с релиза 3.1.7 на 3.1.8 и выше пользователи часто сталкиваются с неприятной ситуацией. Сотрудник с ролью Табельщик или Кадровик открывает документ Прогул, неявка, форма документа открывается, но все поля заблокированы для редактирования. При этом все необходимые роли в профиле групп доступа вроде бы назначены, а у пользователей с правами Расчетчик проблема отсутствует. В этой статье мы подробно разберем, почему так происходит и как вернуть доступ к редактированию данных.

Анализируем причину проблемы: концепция многофункциональных документов

Начиная с версии 3.1.8, разработчики 1С существенно пересмотрели архитектуру проверки прав доступа. В программе появилось понятие «многофункциональных документов». К ним относятся объекты, которые одновременно влияют и на кадровый учет (отсутствие сотрудника), и на расчет заработной платы (удержания, начисления). Документ Прогул, неявка — типичный представитель такого типа объектов.

Рассмотрим ситуацию глубже. В старых релизах проверка прав выполнялась линейно: если есть роль на изменение документа, значит, править можно все. В новых релизах система жестко разделяет «кадровый слой» и «расчетный слой». Если у пользователя нет прав на финансовую часть документа, система по умолчанию может заблокировать всю форму целиком, считая, что пользователь не имеет достаточных полномочий для работы с таким сложным объектом.

Центральным узлом этой проверки является функция ПраваНаМногофункциональныйДокумент(), расположенная в общем модуле ЗарплатаКадрыРасширенный. Именно в этом месте кода определяется, может ли текущий пользователь редактировать кадровые данные без доступа к расчетным.

Способ 1. Проверка состава ролей и регистра Права ролей

Прежде чем приступать к программированию, давайте разберем более простые методы диагностики. Иногда проблема кроется в том, что при обновлении типовые профили обновились, а ваши пользовательские (созданные копированием) — нет. Проанализируем состав прав:

  1. Откроем регистр сведений Права ролей. В нем хранятся актуальные соответствия прав доступа для различных ролей конфигурации.
  2. Проверим наличие роли Добавление и изменение прогулов и неявок.
  3. Убедимся, что для этой роли проставлены все необходимые флаги на чтение и изменение.
  4. Сравним ваш самописный профиль Табельщик с типовым профилем из поставки нового релиза. В новых версиях 1С могла добавить вспомогательные роли, такие как Работа с кадровыми данными или технические роли для чтения регистров расчета, без которых документ не может корректно открыться на запись.

Способ 2. Использование расширения для корректировки логики прав

Если стандартные настройки профилей не помогают, значит, мы столкнулись с жестким ограничением в коде. В релизах ветки 3.1.8 логика функции ПраваНаМногофункциональныйДокумент была реализована таким образом, что она не всегда корректно распознавала права Табельщика. Рассмотрим, как это исправить с помощью расширения.

Нам необходимо перехватить выполнение функции в общем модуле ЗарплатаКадрыРасширенный. Разберем по шагам создание расширения:

  1. Создаем новое расширение в конфигураторе.
  2. Добавляем в него роль (например, РасшА_ИзменениеДанныхСотрудников). Сама роль может быть пустой, она нам нужна как флаг-идентификатор для кода.
  3. Заимствуем общий модуль ЗарплатаКадрыРасширенный в расширение.
  4. Используем аннотацию &Вместо для функции ПраваНаМногофункциональныйДокумент.

Проанализируем пример кода, который позволит принудительно разрешить изменение кадровых данных для документа Прогул, неявка, если у пользователя есть соответствующая роль:


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

КонецФункции

Разберем, что делает этот код. Мы перехватываем результат типовой проверки и, если система ошибочно посчитала, что прав недостаточно, принудительно устанавливаем ИзменениеКадровыхДанных = Истина. Это «размораживает» поля формы для пользователя.

Проблема «Данные не включены в расчет зарплаты»

После того как мы добились возможности редактировать документ, может возникнуть вторая проблема: документ записывается, но при попытке проведения выдает сообщение «Данные не включены в расчет зарплаты» и не проводится окончательно. Выясним причину этого поведения.

В новых релизах ЗУП 3.1 для многофункциональных документов введена двухэтапная схема работы:

Если вы хотите, чтобы Табельщик мог проводить документ полностью в один этап, рассмотрите следующие настройки:

  1. Перейдите в раздел Настройка — Расчет зарплаты.
  2. Найдите флаг «Проверять соответствие кадровых и расчетных данных». Если этот флаг включен, система будет блокировать окончательное проведение кадровиком, пока расчетчик не «завизирует» свою часть. Попробуйте отключить эту проверку, чтобы упростить процесс.
  3. Убедитесь, что в профиле пользователя есть права на чтение регистров расчета. Даже если он не видит суммы, программе нужны эти права для выполнения технических алгоритмов вытеснения при проведении.

Обновление прав доступа через регламентные операции

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

Зайдите в Администрирование — Обслуживание — Регламентные операции. Найдите и запустите задание Обновление прав доступа. Также можно воспользоваться обработкой «Обновление вспомогательных данных». Это пересчитает ключи доступа в регистре Ключи доступа к объектам, что критично для корректной работы РЛС в версии 3.1.8+.

Подводя итог, отметим: проблема прав в Прогул, неявка — это следствие ужесточения контроля за разделением труда в программе. Использование расширения для корректировки ЗарплатаКадрыРасширенный.ПраваНаМногофункциональныйДокумент() является самым эффективным способом решения, если типовые настройки ролей не дают результата.

← На главную