Народ, доброго времени суток. Помогите разобраться. Обновился ЗУП с 3.1.14.500 до 3.1.18.46. Теперь табельщица не может проводить документ РаботаВВыходныеИПраздничныеДни. Пишет ошибку как на скриншоте. По данному документу есть пара ролей, которые его позволяют видоизменять - ПолныеПрава, ДобавлениеИзменениеРабочегоВремени. Еще роли на чтение. Все эти роли есть в соответсвующем профиле для табельщиков. В обновлённой и старой конфигурациях всё аналогично по данному документу. Но при этом выпадает ошибка. В обновленной конфе нашёл интересную роль УтверждениеДокументовУчетаРабочегоВремени. Но на этот документ она ни как не влияет.
Судя по скриншоту это явно программная проверка каких-то прав и потом вызов исключения. Под рукой ЗУП нет, в ERP беглый поиск выдал вот такое в общем модуле ЗарплатаКадрыРасширенный, процедура ПередЗаписьюМногофункциональногоДокумента. Смотрите отладчиком, что там происходит.
Если ДокументУтвержден И ИспользуетсяРасчетЗарплаты
И Не (ПолныеПраваНаДокумент И Не ЕстьОграниченияНаУровнеЗаписейПоВидуУчета("Изменение", ОписаниеДокумента.ВидУчета, ДанныеДляПроверкиОграничений, Отказ)) Тогда
ТекстСообщения = НСтр("ru = '%1 - недостаточно прав для работы с утвержденным документом.';
|en = '%1 - insufficient rights to work with the confirmed document.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Объект);
ВызватьИсключение(ТекстСообщения);
КонецЕсли;
Процедура ПроверитьПраваНаУтверждениеДокумента(ДокументОбъект, Отказ)
Если ПривилегированныйРежим() Тогда
Возврат;
КонецЕсли;
МенеджерДокумента = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДокументОбъект.Ссылка);
ОписаниеРазделовДанных = МенеджерДокумента.ОписаниеРазделовДанных();
ПравоРедактирование = МногофункциональныеДокументыБЗККлиентСервер.ВидыПравНаРазделыДанных().Редактирование;
ПредыдущееСостояниеДокумента = Неопределено;
ЗначенияДоступа = Неопределено;
Для Каждого ОписаниеРаздела Из ОписаниеРазделовДанных Цикл
Если ОписаниеРаздела.Значение.РеквизитСостояние = Неопределено Тогда
Продолжить;
КонецЕсли;
ТребуетсяПроверка = Ложь;
Если ОписаниеРаздела.Значение.РеквизитСостояние = "Проведен"
Или ДокументОбъект[ОписаниеРаздела.Значение.РеквизитСостояние] Тогда
ТребуетсяПроверка = Истина;
ИначеЕсли Не ДокументОбъект[ОписаниеРаздела.Значение.РеквизитСостояние]Тогда
Если ПредыдущееСостояниеДокумента = Неопределено Тогда
ПредыдущееСостояниеДокумента = СостоянияРазделовДокументаВИБ(ДокументОбъект.Ссылка, ОписаниеРазделовДанных);
КонецЕсли;
ТребуетсяПроверка = ПредыдущееСостояниеДокумента[ОписаниеРаздела.Значение.РеквизитСостояние];
КонецЕсли;
Если ТребуетсяПроверка Тогда
Если ЗначенияДоступа = Неопределено Тогда
ЗначенияДоступа = МенеджерДокумента.ЗначенияДоступа(ДокументОбъект);
КонецЕсли;
Если Не ЕстьПравоНаРаздел(ПравоРедактирование, ОписаниеРаздела.Ключ, ЗначенияДоступа) Тогда
ТекстСообщения = НСтр("ru = '%1 - недостаточно прав для работы с утвержденным документом.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДокументОбъект);
ВызватьИсключение(ТекстСообщения);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
В этой процедуре есть функция ЕстьПравоНаРаздел. В неё подается параметр ПравоРедактирования
Функция ЕстьПравоНаРаздел(ВидПрава, РазделДанных, ЗначенияДоступа = Неопределено) Экспорт
Если ПривилегированныйРежим() И ОбщегоНазначения.РежимОтладки() Тогда
ВызватьИсключение НСтр("ru = 'Проверка доступа на уровне записей производится в привилегированном режиме'");
КонецЕсли;
ВидыПрав = МногофункциональныеДокументыБЗККлиентСервер.ВидыПравНаРазделыДанных();
РазделыДанных = МногофункциональныеДокументыБЗККлиентСервер.РазделыДанных();
// Для рабочего времени не проверяем ограничения на уровне записей.
// достаточно наличия роли-флага
Если РазделДанных = РазделыДанных.РабочееВремя
И УправлениеДоступом.ЕстьРоль(Метаданные.Роли.УтверждениеДокументовУчетаВремени.Имя) Тогда
Возврат Истина;
КонецЕсли;
// Просмотр кадровых данных доступен всегда, считаем что если доступен документ (определяется отдельной ролью),
// то доступны и кадровые данные
Если ВидПрава = ВидыПрав.Просмотр
Если ВидПрава = ВидыПрав.Редактирование
И РазделДанных = РазделыДанных.КадровыеДанные Тогда
Возврат Истина;
КонецЕсли;
Если ЗначенияДоступа = Неопределено Тогда
ЗначенияДоступа = НовыйЗначенияДоступа();
КонецЕсли;
ЕстьПравоПоОрганизации = ЕстьПраваНаДоступПоОрганизации(ВидПрава, РазделДанных, ЗначенияДоступа.Организации);
ЕстьПравоПоФизическимЛицам = ЕстьПраваНаДоступПоФизическимЛицам(
ВидПрава,
РазделДанных,
ЗначенияДоступа.ФизическиеЛица);
Возврат ЕстьПравоПоОрганизации И ЕстьПравоПоФизическимЛицам;
КонецФункции
Показать
И вот тут самое интересное. Блок про раздел кадровые данные. Условие не выполняется:
Если ВидПрава = ВидыПрав.Просмотр
И РазделДанных = РазделыДанных.КадровыеДанные Тогда
Требуется просмотр, а у нас редактирование...
Дальше идет блок
Здесь я пока не разобрался о чём речь идёт вообще...
Это всё в типовом модуле МногофункциональныеДокументыБЗК,
В предыдущей сборке 3.1.14.500 весь этот код вообще в другом виде и модуле
(8) Добрый! В модуле "МногофункциональныеДокументыБЗК" поменял код функции "ЕстьПравоНаРаздел" :
Функция ЕстьПравоНаРаздел(ВидПрава, РазделДанных, ЗначенияДоступа = Неопределено) Экспорт
Если ПривилегированныйРежим() И ОбщегоНазначения.РежимОтладки() Тогда
ВызватьИсключение НСтр("ru = 'Проверка доступа на уровне записей производится в привилегированном режиме'");
КонецЕсли;
ВидыПрав = МногофункциональныеДокументыБЗККлиентСервер.ВидыПравНаРазделыДанных();
РазделыДанных = МногофункциональныеДокументыБЗККлиентСервер.РазделыДанных();
// Для рабочего времени не проверяем ограничения на уровне записей.
// достаточно наличия роли-флага
Если РазделДанных = РазделыДанных.РабочееВремя
И УправлениеДоступом.ЕстьРоль(Метаданные.Роли.УтверждениеДокументовУчетаВремени.Имя) Тогда
Возврат Истина;
КонецЕсли;
// Просмотр кадровых данных доступен всегда, считаем что если доступен документ (определяется отдельной ролью),
// то доступны и кадровые данные
// Мой комментарий ++
// После обновления до версии 3.1.18.46 стала выпадать ошибка проведения документа -
// недостаточно прав для работы с утвержденным документом. Поэтому заменили на ВидыПрав.Редактирование,
// т.к. в процедуре "ПроверитьПраваНаУтверждениеДокумента" берется вид права Редактирование.
//Если ВидПрава = ВидыПрав.Просмотр
// Мой комментарий --
Если ВидПрава = ВидыПрав.Редактирование
И РазделДанных = РазделыДанных.КадровыеДанные Тогда
Возврат Истина;
КонецЕсли;
Если ЗначенияДоступа = Неопределено Тогда
ЗначенияДоступа = НовыйЗначенияДоступа();
КонецЕсли;
ЕстьПравоПоОрганизации = ЕстьПраваНаДоступПоОрганизации(ВидПрава, РазделДанных, ЗначенияДоступа.Организации);
ЕстьПравоПоФизическимЛицам = ЕстьПраваНаДоступПоФизическимЛицам(
ВидПрава,
РазделДанных,
ЗначенияДоступа.ФизическиеЛица);
Возврат ЕстьПравоПоОрганизации И ЕстьПравоПоФизическимЛицам;
КонецФункции
Показать
После этого возвращается истина и всё отрабатывается как нужно.
У меня вылетает "Проверка доступа на уровне записей производится в привилегированном режиме", когда пытаюсь открыть в отпуске "данные расчета среднего заработка" ("карандашик"),НО ТОЛЬКО ЕСЛИ ПРЕДПРИЯТИЕ ОТКРЫТО ВРежимОтладки
Если открываю предприятие без этого режима, то "карандашик" в отпуске открывает форму.
Вот что ответили в 1С
1С Линия консультации <v8@1c.ru>
23 июня 2022, 9:52
"Добрый день,
По результатам расследования в отделе разработки:
Спасибо, понятно. Это техническая особенность, задача по устранению которой записана, но очередь до неё в обозримом будущем не дойдёт."
Ошибку не зарегистрировали даже.
"ТЕХНИЧЕСКАЯ ОСОБЕННОСТЬ" - теперь это так называется (((((