Ошибка не достаточно прав для работы с утверждённым документом.

1. DrDrewAvenue 22.06.21 12:32 Сейчас в теме
Народ, доброго времени суток. Помогите разобраться. Обновился ЗУП с 3.1.14.500 до 3.1.18.46. Теперь табельщица не может проводить документ РаботаВВыходныеИПраздничныеДни. Пишет ошибку как на скриншоте. По данному документу есть пара ролей, которые его позволяют видоизменять - ПолныеПрава, ДобавлениеИзменениеРабочегоВремени. Еще роли на чтение. Все эти роли есть в соответсвующем профиле для табельщиков. В обновлённой и старой конфигурациях всё аналогично по данному документу. Но при этом выпадает ошибка. В обновленной конфе нашёл интересную роль УтверждениеДокументовУчетаРабочегоВремени. Но на этот документ она ни как не влияет.
Прикрепленные файлы:
Найденные решения
7. DrDrewAvenue 23.06.21 09:07 Сейчас в теме
Процедура ПроверитьПраваНаУтверждениеДокумента(ДокументОбъект, Отказ)
	Если ПривилегированныйРежим() Тогда
		Возврат;
	КонецЕсли;	
	
	МенеджерДокумента = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДокументОбъект.Ссылка);
	ОписаниеРазделовДанных = МенеджерДокумента.ОписаниеРазделовДанных(); 

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


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

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

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


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

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

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


Здесь я пока не разобрался о чём речь идёт вообще...
Это всё в типовом модуле МногофункциональныеДокументыБЗК,
В предыдущей сборке 3.1.14.500 весь этот код вообще в другом виде и модуле
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. Verdad 82 22.06.21 13:36 Сейчас в теме
(1)Можно попробовать установить константу "Использовать многофункциональность документов. Была похожая ошибка https://bugboard.v8.1c.ru/error/000107318
5. DrDrewAvenue 22.06.21 13:58 Сейчас в теме
(4) Такой флаг к сожалению уже есть...
2. puzo50 22.06.21 13:04 Сейчас в теме
через обслуживание - журнал регистрации посмотрите, на что конкретно у неё не хватает прав.
от этого и пляшите - можно давать права или куда
3. SerSh_Perm 22.06.21 13:34 Сейчас в теме
Судя по скриншоту это явно программная проверка каких-то прав и потом вызов исключения. Под рукой ЗУП нет, в ERP беглый поиск выдал вот такое в общем модуле ЗарплатаКадрыРасширенный, процедура ПередЗаписьюМногофункциональногоДокумента. Смотрите отладчиком, что там происходит.
		Если ДокументУтвержден И ИспользуетсяРасчетЗарплаты 
			И Не (ПолныеПраваНаДокумент И Не ЕстьОграниченияНаУровнеЗаписейПоВидуУчета("Изменение", ОписаниеДокумента.ВидУчета, ДанныеДляПроверкиОграничений, Отказ)) Тогда
			ТекстСообщения = НСтр("ru = '%1 - недостаточно прав для работы с утвержденным документом.';
									|en = '%1 - insufficient rights to work with the confirmed document.'");
			ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Объект);
			ВызватьИсключение(ТекстСообщения);
		КонецЕсли;
6. DrDrewAvenue 22.06.21 14:18 Сейчас в теме
Да, спасибо, уже пошёл таким путём..
7. DrDrewAvenue 23.06.21 09:07 Сейчас в теме
Процедура ПроверитьПраваНаУтверждениеДокумента(ДокументОбъект, Отказ)
	Если ПривилегированныйРежим() Тогда
		Возврат;
	КонецЕсли;	
	
	МенеджерДокумента = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДокументОбъект.Ссылка);
	ОписаниеРазделовДанных = МенеджерДокумента.ОписаниеРазделовДанных(); 

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


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

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

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


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

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

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


Здесь я пока не разобрался о чём речь идёт вообще...
Это всё в типовом модуле МногофункциональныеДокументыБЗК,
В предыдущей сборке 3.1.14.500 весь этот код вообще в другом виде и модуле
8. user1104791 23.09.21 15:33 Сейчас в теме
(7) Добрый день,
Как в итоге решили проблему?
9. DrDrewAvenue 24.09.21 04:26 Сейчас в теме
(8) Добрый! В модуле "МногофункциональныеДокументыБЗК" поменял код функции "ЕстьПравоНаРаздел" :

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

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

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

Показать


После этого возвращается истина и всё отрабатывается как нужно.
10. DrDrewAvenue 24.09.21 04:27 Сейчас в теме
Может стоило поиграться с ролями, но я таким образом решил проблему и больше с июня месяца к ней не возвращался.
11. Nadezhda_13 13.01.22 16:09 Сейчас в теме
Вдруг кому-то еще пригодится. Надо добавить роль "Редактирование кадровых данных в документах"
iandax; ANF-BR; volex; Dmitri93; +4 Ответить
12. ArtSamRus 20.01.22 15:12 Сейчас в теме
(11) Пригодилось, спасибо
13. gucci76 364 26.04.22 10:50 Сейчас в теме
У меня вылетает "Проверка доступа на уровне записей производится в привилегированном режиме", когда пытаюсь открыть в отпуске "данные расчета среднего заработка" ("карандашик"), НО ТОЛЬКО ЕСЛИ ПРЕДПРИЯТИЕ ОТКРЫТО В РежимОтладки

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

Как так то?
14. Vladimir-R 167 24.09.22 15:10 Сейчас в теме
всем, кто столкнулся с данной ошибкой проверить регистр "Кадровые данные редактирование организации (Регистры сведений)". Если записи нет, добавить
15. gucci76 364 21.04.23 10:24 Сейчас в теме
(14) Не было записи. Добавил.
Но не помогло.

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

Ошибку не зарегистрировали даже.
"ТЕХНИЧЕСКАЯ ОСОБЕННОСТЬ" - теперь это так называется (((((
16. Fil15 2 02.11.23 12:04 Сейчас в теме
ЗУП 3.1.27.111 Отладка показала, что человеку нужно было добавить права на один из этих регистров согласно этому коду
Функция РегистрДляПроверкиДоступаПоОрганизации(ВидПрава, РазделДанных)
	ВидыПрав = МногофункциональныеДокументыБЗККлиентСервер.ВидыПравНаРазделыДанных();
	РазделыДанных = МногофункциональныеДокументыБЗККлиентСервер.РазделыДанных();
	
	Если РазделДанных = РазделыДанных.КадровыеДанные
		И ВидПрава = ВидыПрав.Редактирование Тогда
			
		Возврат Метаданные.РегистрыСведений.КадровыеДанныеРедактированиеОрганизации
	ИначеЕсли РазделДанных = РазделыДанных.НачисленнаяЗарплата
		И ВидПрава = ВидыПрав.Редактирование Тогда	
		
		Возврат Метаданные.РегистрыСведений.НачисленнаяЗарплатаРедактированиеОрганизации;
	ИначеЕсли РазделДанных = РазделыДанных.НачисленнаяЗарплата
		И ВидПрава = ВидыПрав.Просмотр Тогда	
		
		Возврат Метаданные.РегистрыСведений.НачисленнаяЗарплатаПросмотрОрганизации;
	ИначеЕсли РазделДанных = РазделыДанных.ПлановыеНачисления
		И ВидПрава = ВидыПрав.Редактирование Тогда	
		
		Возврат Метаданные.РегистрыСведений.ПлановыеНачисленияРедактированиеОрганизации;
	ИначеЕсли РазделДанных = РазделыДанных.ПлановыеНачисления
		И ВидПрава = ВидыПрав.Просмотр Тогда	
		
		Возврат Метаданные.РегистрыСведений.ПлановыеНачисленияПросмотрОрганизации;
	Иначе
		Возврат Неопределено;
	КонецЕсли;	
КонецФункции	
Показать

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

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот