Народ, доброго времени суток. Помогите разобраться. Обновился ЗУП с 3.1.14.500 до 3.1.18.46. Теперь табельщица не может проводить документ РаботаВВыходныеИПраздничныеДни. Пишет ошибку как на скриншоте. По данному документу есть пара ролей, которые его позволяют видоизменять - ПолныеПрава, ДобавлениеИзменениеРабочегоВремени. Еще роли на чтение. Все эти роли есть в соответсвующем профиле для табельщиков. В обновлённой и старой конфигурациях всё аналогично по данному документу. Но при этом выпадает ошибка. В обновленной конфе нашёл интересную роль УтверждениеДокументовУчетаРабочегоВремени. Но на этот документ она ни как не влияет.
---
```1c
    Процедура ПроверитьПраваНаУтверждениеДокумента(ДокументОбъект, Отказ)
    Если ПривилегированныйРежим() Тогда
    Возврат;
    КонецЕсли;

    МенеджерДокумента = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДокументОбъект.Ссылка);
    ОписаниеРазделовДанных = МенеджерДокумента.ОписаниеРазделовДанных();

    ПравоРедактирование = МногофункциональныеДокументыБЗККлиентСервер.ВидыПравНаРазделыДанных().Редактирование;
    ПредыдущееСостояниеДокумента = Неопределено;
    ЗначенияДоступа = Неопределено;

    Для Каждого ОписаниеРаздела Из ОписаниеРазделовДанных Цикл
    Если ОписаниеРаздела.Значение.РеквизитСостояние = Неопределено Тогда
    Продолжить;
    КонецЕсли;

    ТребуетсяПроверка = Ложь;
    Если ОписаниеРаздела.Значение.РеквизитСостояние = "Проведен"
    Или ДокументОбъект[ОписаниеРаздела.Значение.РеквизитСостояние] Тогда

    ТребуетсяПроверка = Истина;
    ИначеЕсли Не ДокументОбъект[ОписаниеРаздела.Значение.РеквизитСостояние]Тогда
    Если ПредыдущееСостояниеДокумента = Неопределено Тогда
    ПредыдущееСостояниеДокумента = СостоянияРазделовДокументаВИБ(ДокументОбъект.Ссылка, ОписаниеРазделовДанных);
    КонецЕсли;
    ТребуетсяПроверка = ПредыдущееСостояниеДокумента[ОписаниеРаздела.Значение.РеквизитСостояние];
    КонецЕсли;

    Если ТребуетсяПроверка Тогда
    Если ЗначенияДоступа = Неопределено Тогда
    ЗначенияДоступа = МенеджерДокумента.ЗначенияДоступа(ДокументОбъект);
    КонецЕсли;

    Если Не ЕстьПравоНаРаздел(ПравоРедактирование, ОписаниеРаздела.Ключ, ЗначенияДоступа) Тогда
    ТекстСообщения = НСтр("ru = '%1 - недостаточно прав для работы с утвержденным документом.'");
    ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДокументОбъект);
    ВызватьИсключение(ТекстСообщения);
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
```

В этой процедуре есть функция ЕстьПравоНаРаздел. В неё подается параметр ПравоРедактирования

```1c
    Функция ЕстьПравоНаРаздел(ВидПрава, РазделДанных, ЗначенияДоступа = Неопределено) Экспорт
    Если ПривилегированныйРежим() И ОбщегоНазначения.РежимОтладки() Тогда
    ВызватьИсключение НСтр("ru = 'Проверка доступа на уровне записей производится в привилегированном режиме'");
    КонецЕсли;

    ВидыПрав = МногофункциональныеДокументыБЗККлиентСервер.ВидыПравНаРазделыДанных();
    РазделыДанных = МногофункциональныеДокументыБЗККлиентСервер.РазделыДанных();

    // Для рабочего времени не проверяем ограничения на уровне записей.
    // достаточно наличия роли-флага
    Если РазделДанных = РазделыДанных.РабочееВремя
    И УправлениеДоступом.ЕстьРоль(Метаданные.Роли.УтверждениеДокументовУчетаВремени.Имя) Тогда

    Возврат Истина;
    КонецЕсли;

    // Просмотр кадровых данных доступен всегда, считаем что если доступен документ (определяется отдельной ролью),
    // то доступны и кадровые данные

    Если ВидПрава = ВидыПрав.Просмотр

    Если ВидПрава = ВидыПрав.Редактирование
    И РазделДанных = РазделыДанных.КадровыеДанные Тогда

    Возврат Истина;
    КонецЕсли;

    Если ЗначенияДоступа = Неопределено Тогда
    ЗначенияДоступа = НовыйЗначенияДоступа();
    КонецЕсли;

    ЕстьПравоПоОрганизации = ЕстьПраваНаДоступПоОрганизации(ВидПрава, РазделДанных, ЗначенияДоступа.Организации);
    ЕстьПравоПоФизическимЛицам = ЕстьПраваНаДоступПоФизическимЛицам(
    ВидПрава,
    РазделДанных,
    ЗначенияДоступа.ФизическиеЛица);

    Возврат ЕстьПравоПоОрганизации И ЕстьПравоПоФизическимЛицам;
    КонецФункции
```

И вот тут самое интересное. Блок про раздел кадровые данные. Условие не выполняется:
Если ВидПрава = ВидыПрав.Просмотр
  И РазделДанных = РазделыДанных.КадровыеДанные Тогда

Требуется просмотр, а у нас редактирование...
Дальше идет блок

```1c
    ЕстьПравоПоОрганизации = ЕстьПраваНаДоступПоОрганизации(ВидПрава, РазделДанных, ЗначенияДоступа.Организации);
    ЕстьПравоПоФизическимЛицам = ЕстьПраваНаДоступПоФизическимЛицам(
    ВидПрава,
    РазделДанных,
    ЗначенияДоступа.ФизическиеЛица);
    Возврат ЕстьПравоПоОрганизации И ЕстьПравоПоФизическимЛицам;
```

Здесь я пока не разобрался о чём речь идёт вообще...
Это всё в типовом модуле МногофункциональныеДокументыБЗК,
В предыдущей сборке 3.1.14.500 весь этот код вообще в другом виде и модуле
---
Можно попробовать установить константу "Использовать многофункциональность документов. Была похожая ошибка https://bugboard.v8.1c.ru/error/000107318
---
Такой флаг к сожалению уже есть...
---
через обслуживание - журнал регистрации посмотрите, на что конкретно у неё не хватает прав.
от этого и пляшите - можно давать права или куда
---
Судя по скриншоту это явно программная проверка каких-то прав и потом вызов исключения. Под рукой ЗУП нет, в ERP беглый поиск выдал вот такое в общем модуле ЗарплатаКадрыРасширенный, процедура ПередЗаписьюМногофункциональногоДокумента. Смотрите отладчиком, что там происходит.

```1c
    Если ДокументУтвержден И ИспользуетсяРасчетЗарплаты
    И Не (ПолныеПраваНаДокумент И Не ЕстьОграниченияНаУровнеЗаписейПоВидуУчета("Изменение", ОписаниеДокумента.ВидУчета, ДанныеДляПроверкиОграничений, Отказ)) Тогда
    ТекстСообщения = НСтр("ru = '%1 - недостаточно прав для работы с утвержденным документом.';
    |en = '%1 - insufficient rights to work with the confirmed document.'");
    ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Объект);
    ВызватьИсключение(ТекстСообщения);
    КонецЕсли;
```
---
Да, спасибо, уже пошёл таким путём..
---
```1c
    Процедура ПроверитьПраваНаУтверждениеДокумента(ДокументОбъект, Отказ)
    Если ПривилегированныйРежим() Тогда
    Возврат;
    КонецЕсли;

    МенеджерДокумента = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДокументОбъект.Ссылка);
    ОписаниеРазделовДанных = МенеджерДокумента.ОписаниеРазделовДанных();

    ПравоРедактирование = МногофункциональныеДокументыБЗККлиентСервер.ВидыПравНаРазделыДанных().Редактирование;
    ПредыдущееСостояниеДокумента = Неопределено;
    ЗначенияДоступа = Неопределено;

    Для Каждого ОписаниеРаздела Из ОписаниеРазделовДанных Цикл
    Если ОписаниеРаздела.Значение.РеквизитСостояние = Неопределено Тогда
    Продолжить;
    КонецЕсли;

    ТребуетсяПроверка = Ложь;
    Если ОписаниеРаздела.Значение.РеквизитСостояние = "Проведен"
    Или ДокументОбъект[ОписаниеРаздела.Значение.РеквизитСостояние] Тогда

    ТребуетсяПроверка = Истина;
    ИначеЕсли Не ДокументОбъект[ОписаниеРаздела.Значение.РеквизитСостояние]Тогда
    Если ПредыдущееСостояниеДокумента = Неопределено Тогда
    ПредыдущееСостояниеДокумента = СостоянияРазделовДокументаВИБ(ДокументОбъект.Ссылка, ОписаниеРазделовДанных);
    КонецЕсли;
    ТребуетсяПроверка = ПредыдущееСостояниеДокумента[ОписаниеРаздела.Значение.РеквизитСостояние];
    КонецЕсли;

    Если ТребуетсяПроверка Тогда
    Если ЗначенияДоступа = Неопределено Тогда
    ЗначенияДоступа = МенеджерДокумента.ЗначенияДоступа(ДокументОбъект);
    КонецЕсли;

    Если Не ЕстьПравоНаРаздел(ПравоРедактирование, ОписаниеРаздела.Ключ, ЗначенияДоступа) Тогда
    ТекстСообщения = НСтр("ru = '%1 - недостаточно прав для работы с утвержденным документом.'");
    ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДокументОбъект);
    ВызватьИсключение(ТекстСообщения);
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
```

В этой процедуре есть функция ЕстьПравоНаРаздел. В неё подается параметр ПравоРедактирования

```1c
    Функция ЕстьПравоНаРаздел(ВидПрава, РазделДанных, ЗначенияДоступа = Неопределено) Экспорт
    Если ПривилегированныйРежим() И ОбщегоНазначения.РежимОтладки() Тогда
    ВызватьИсключение НСтр("ru = 'Проверка доступа на уровне записей производится в привилегированном режиме'");
    КонецЕсли;

    ВидыПрав = МногофункциональныеДокументыБЗККлиентСервер.ВидыПравНаРазделыДанных();
    РазделыДанных = МногофункциональныеДокументыБЗККлиентСервер.РазделыДанных();

    // Для рабочего времени не проверяем ограничения на уровне записей.
    // достаточно наличия роли-флага
    Если РазделДанных = РазделыДанных.РабочееВремя
    И УправлениеДоступом.ЕстьРоль(Метаданные.Роли.УтверждениеДокументовУчетаВремени.Имя) Тогда

    Возврат Истина;
    КонецЕсли;

    // Просмотр кадровых данных доступен всегда, считаем что если доступен документ (определяется отдельной ролью),
    // то доступны и кадровые данные

    Если ВидПрава = ВидыПрав.Просмотр

    Если ВидПрава = ВидыПрав.Редактирование
    И РазделДанных = РазделыДанных.КадровыеДанные Тогда

    Возврат Истина;
    КонецЕсли;

    Если ЗначенияДоступа = Неопределено Тогда
    ЗначенияДоступа = НовыйЗначенияДоступа();
    КонецЕсли;

    ЕстьПравоПоОрганизации = ЕстьПраваНаДоступПоОрганизации(ВидПрава, РазделДанных, ЗначенияДоступа.Организации);
    ЕстьПравоПоФизическимЛицам = ЕстьПраваНаДоступПоФизическимЛицам(
    ВидПрава,
    РазделДанных,
    ЗначенияДоступа.ФизическиеЛица);

    Возврат ЕстьПравоПоОрганизации И ЕстьПравоПоФизическимЛицам;
    КонецФункции
```

И вот тут самое интересное. Блок про раздел кадровые данные. Условие не выполняется:
Если ВидПрава = ВидыПрав.Просмотр
  И РазделДанных = РазделыДанных.КадровыеДанные Тогда

Требуется просмотр, а у нас редактирование...
Дальше идет блок

```1c
    ЕстьПравоПоОрганизации = ЕстьПраваНаДоступПоОрганизации(ВидПрава, РазделДанных, ЗначенияДоступа.Организации);
    ЕстьПравоПоФизическимЛицам = ЕстьПраваНаДоступПоФизическимЛицам(
    ВидПрава,
    РазделДанных,
    ЗначенияДоступа.ФизическиеЛица);
    Возврат ЕстьПравоПоОрганизации И ЕстьПравоПоФизическимЛицам;
```

Здесь я пока не разобрался о чём речь идёт вообще...
Это всё в типовом модуле МногофункциональныеДокументыБЗК,
В предыдущей сборке 3.1.14.500 весь этот код вообще в другом виде и модуле
---
Добрый день,
Как в итоге решили проблему?
---
Добрый! В модуле "МногофункциональныеДокументыБЗК" поменял код функции "ЕстьПравоНаРаздел" :

```1c
    Функция ЕстьПравоНаРаздел(ВидПрава, РазделДанных, ЗначенияДоступа = Неопределено) Экспорт
    Если ПривилегированныйРежим() И ОбщегоНазначения.РежимОтладки() Тогда
    ВызватьИсключение НСтр("ru = 'Проверка доступа на уровне записей производится в привилегированном режиме'");
    КонецЕсли;

    ВидыПрав = МногофункциональныеДокументыБЗККлиентСервер.ВидыПравНаРазделыДанных();
    РазделыДанных = МногофункциональныеДокументыБЗККлиентСервер.РазделыДанных();

    // Для рабочего времени не проверяем ограничения на уровне записей.
    // достаточно наличия роли-флага
    Если РазделДанных = РазделыДанных.РабочееВремя
    И УправлениеДоступом.ЕстьРоль(Метаданные.Роли.УтверждениеДокументовУчетаВремени.Имя) Тогда

    Возврат Истина;
    КонецЕсли;

    // Просмотр кадровых данных доступен всегда, считаем что если доступен документ (определяется отдельной ролью),
    // то доступны и кадровые данные

    // Мой комментарий ++
    // После обновления до версии 3.1.18.46 стала выпадать ошибка проведения документа -
    // недостаточно прав для работы с утвержденным документом. Поэтому заменили на ВидыПрав.Редактирование,
    // т.к. в процедуре "ПроверитьПраваНаУтверждениеДокумента" берется вид права Редактирование.
    //Если ВидПрава = ВидыПрав.Просмотр
    // Мой комментарий --

    Если ВидПрава = ВидыПрав.Редактирование
    И РазделДанных = РазделыДанных.КадровыеДанные Тогда

    Возврат Истина;
    КонецЕсли;

    Если ЗначенияДоступа = Неопределено Тогда
    ЗначенияДоступа = НовыйЗначенияДоступа();
    КонецЕсли;

    ЕстьПравоПоОрганизации = ЕстьПраваНаДоступПоОрганизации(ВидПрава, РазделДанных, ЗначенияДоступа.Организации);
    ЕстьПравоПоФизическимЛицам = ЕстьПраваНаДоступПоФизическимЛицам(
    ВидПрава,
    РазделДанных,
    ЗначенияДоступа.ФизическиеЛица);

    Возврат ЕстьПравоПоОрганизации И ЕстьПравоПоФизическимЛицам;
    КонецФункции
```

После этого возвращается истина и всё отрабатывается как нужно.
---
Может стоило поиграться с ролями, но я таким образом решил проблему и больше с июня месяца к ней не возвращался.
---
Вдруг кому-то еще пригодится. Надо добавить роль "Редактирование кадровых данных в документах"
---
Пригодилось, спасибо
---
У меня вылетает "Проверка доступа на уровне записей производится в привилегированном режиме", когда пытаюсь открыть в отпуске "данные расчета среднего заработка" ("карандашик"), НО ТОЛЬКО ЕСЛИ ПРЕДПРИЯТИЕ ОТКРЫТО В РежимОтладки

Если открываю предприятие без этого режима, то "карандашик" в отпуске открывает форму.

Как так то?
---
всем, кто столкнулся с данной ошибкой проверить регистр "Кадровые данные редактирование организации (Регистры сведений)". Если записи нет, добавить
---
Не было записи. Добавил.
Но не помогло.

Вот что ответили в 1С
1С Линия консультации <v8@1c.ru>
23 июня 2022, 9:52
"Добрый день,
По результатам расследования в отделе разработки:
Спасибо, понятно. Это техническая особенность, задача по устранению которой записана, но очередь до неё в обозримом будущем не дойдёт."

Ошибку не зарегистрировали даже.
"ТЕХНИЧЕСКАЯ ОСОБЕННОСТЬ" - теперь это так называется (((((
---
ЗУП 3.1.27.111 Отладка показала, что человеку нужно было добавить права на один из этих регистров согласно этому коду

```1c
    Функция РегистрДляПроверкиДоступаПоОрганизации(ВидПрава, РазделДанных)
    ВидыПрав = МногофункциональныеДокументыБЗККлиентСервер.ВидыПравНаРазделыДанных();
    РазделыДанных = МногофункциональныеДокументыБЗККлиентСервер.РазделыДанных();

    Если РазделДанных = РазделыДанных.КадровыеДанные
    И ВидПрава = ВидыПрав.Редактирование Тогда

    Возврат Метаданные.РегистрыСведений.КадровыеДанныеРедактированиеОрганизации
    ИначеЕсли РазделДанных = РазделыДанных.НачисленнаяЗарплата
    И ВидПрава = ВидыПрав.Редактирование Тогда

    Возврат Метаданные.РегистрыСведений.НачисленнаяЗарплатаРедактированиеОрганизации;
    ИначеЕсли РазделДанных = РазделыДанных.НачисленнаяЗарплата
    И ВидПрава = ВидыПрав.Просмотр Тогда

    Возврат Метаданные.РегистрыСведений.НачисленнаяЗарплатаПросмотрОрганизации;
    ИначеЕсли РазделДанных = РазделыДанных.ПлановыеНачисления
    И ВидПрава = ВидыПрав.Редактирование Тогда

    Возврат Метаданные.РегистрыСведений.ПлановыеНачисленияРедактированиеОрганизации;
    ИначеЕсли РазделДанных = РазделыДанных.ПлановыеНачисления
    И ВидПрава = ВидыПрав.Просмотр Тогда

    Возврат Метаданные.РегистрыСведений.ПлановыеНачисленияПросмотрОрганизации;
    Иначе
    Возврат Неопределено;
    КонецЕсли;
    КонецФункции
```

В моем случае это был "РегистрыСведений.НачисленнаяЗарплатаРедактированиеОрганизации" т.к. не хотел распроводиться документ "Отпуск".

Посмотрел в правах на этот регистр и увидел на него такие права "Редактирвоание начисленной зарплаты в документах".
Добавил эту роль для пользователя и все пошло!
Надеюсь кому поможет, без правки кода.