Конфигурация "Бухгалтерия государственного учреждения, редакция 2.0 (2.0.44.18)", включено версионирование объектов.
У пользователя есть право на все действия с документом ТребованиеНакладная. Документ успешно создается, записывается и проводится этим пользователем, если это делать стандартными способом (через форму документа). Но если попытаться запустить обработку, которая программно создает этот документ то получим ошибку "Отказ в доступе". В журнале регистрации следующая ошибка:
Вот код Обработки:
Установка привелигированного режима перед записью не помогает.
Данная обработка из-под пользователя с полными правами успешно выполняется.
Видимо проблема в доступе к регстру сведений ВерсииОбъектов.
Разрешение на изменения в "РегистрСведений.ВерсииОбъектов" есть только у роли ПолныеПрава. Снимать конфигурацию с поддержки ради того, чтобы дать обычному пользователя право на изменение данного регистра не хочется.
Как быть? Почему, если записывать документ через форму документа такой проблемы нет?
У пользователя есть право на все действия с документом ТребованиеНакладная. Документ успешно создается, записывается и проводится этим пользователем, если это делать стандартными способом (через форму документа). Но если попытаться запустить обработку, которая программно создает этот документ то получим ошибку "Отказ в доступе". В журнале регистрации следующая ошибка:
Метаданные: Регистр сведений. Версии объектов
Отказ права: Изменение
Событие:Доступ. Отказ в доступе
Отказ права: Изменение
Событие:Доступ. Отказ в доступе
Вот код Обработки:
док=Документы.ТребованиеНакладная0315006.СоздатьДокумент();
док.Дата=ТекущаяДата();
док.Записать();
Установка привелигированного режима перед записью не помогает.
Данная обработка из-под пользователя с полными правами успешно выполняется.
Видимо проблема в доступе к регстру сведений ВерсииОбъектов.
Разрешение на изменения в "РегистрСведений.ВерсииОбъектов" есть только у роли ПолныеПрава. Снимать конфигурацию с поддержки ради того, чтобы дать обычному пользователя право на изменение данного регистра не хочется.
Как быть? Почему, если записывать документ через форму документа такой проблемы нет?
По теме из базы знаний
- Отчет по правам пользователей (по системе прав доступа) в 1С: 8.3
- Типичные ошибки при разработке прав доступа
- Устранение проблемы с правами доступа. Документооборот КОРП 2.1
- Обработка по настройке прав доступа пользователей в 1С 8 (ЗУП, КА, УТ, ЕРП, ERP, УНФ, Розница, Управление холдингом)
- Тестирование прав доступа к объектам с помощью xddTestRunner / Vanessa-ADD
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) 2PRV, в поддержке есть режим "объект редактируется с сохранением поддержки". Включите его, проблем с обновлением не возникнет.
Создайте дополнительную роль "ДоступДополнительно", разрешите ей изменение регистра сведений, в Предприятии выдайте роль пользователю.
Возникнет проблема с доступом ещё к чему-то, добавите к этой роли.
Дополнительная роль нужна для того, чтобы при обновлении точно не слетела галка у типовой роли на доступ.
Создайте дополнительную роль "ДоступДополнительно", разрешите ей изменение регистра сведений, в Предприятии выдайте роль пользователю.
Возникнет проблема с доступом ещё к чему-то, добавите к этой роли.
Дополнительная роль нужна для того, чтобы при обновлении точно не слетела галка у типовой роли на доступ.
(3) корум, Спасибо, про данный вариант решения проблемы я знаю, хотелось бы найти более другие способы чем давать разрешения на данный регистр. Ведь в типовой конфигурации как то реализована работа с этим регистром. Вот к примеру, создаю документ через типовую форму, записываю его, после этого в журнале регистрации появляется запись, что были внесены изменения в регистрсведений.ВерсииОбъектов из-под пользователя, у которого нет полных прав. Запускаю из-под этого пользователя обработку и фиг там - Отказано в доступе.
Пока докопался до следующего: при записи объекта происходит обращение к ОбщийМодуль.ВерсионированиеОбъектов. Выполняется следующий код:
При выполнении процедуры МенеджерЗаписи.Прочитать(); возникает ошибка
К регистру сведений у пользователя стоит право на чтение и просмотр.
МенеджерЗаписи = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект = Объект.Ссылка;
МенеджерЗаписи.НомерВерсии = НомерПредыдущейВерсии(Объект.Ссылка, СведенияОВерсииОбъекта.НомерВерсии);
МенеджерЗаписи.Прочитать();
При выполнении процедуры МенеджерЗаписи.Прочитать(); возникает ошибка
Ошибка при вызове метода контекста (Прочитать)
МенеджерЗаписи.Прочитать();
по причине:
У пользователя недостаточно прав на исполнение операции над базой данных.
МенеджерЗаписи.Прочитать();
по причине:
У пользователя недостаточно прав на исполнение операции над базой данных.
К регистру сведений у пользователя стоит право на чтение и просмотр.
Еще один нюанс: если код обработки
добавить в модуль формы документа, то он успешно исполняется!!! В чем разница? почему один и тот же код в одном случае выполняется, а в другом валится с ошибкой об Отсутствии прав???
&НаСервере
Процедура Команда1НаСервере()
док=Документы.НакладнаяНаОтпускМ15.СоздатьДокумент();
док.Дата=ТекущаяДата();
док.Записать(РежимЗаписиДокумента.Запись);
КонецПроцедуры
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
Показатьдобавить в модуль формы документа, то он успешно исполняется!!! В чем разница? почему один и тот же код в одном случае выполняется, а в другом валится с ошибкой об Отсутствии прав???
Пробовал дать пользователю Полные права (без административных функций) и не помогло - по прежнему валится с ошибкой. Методом тыка было выяснено, что для функционирования обработки необходимо дать пользователю право Администрирование. Может быть можно решить мою проблему как то еще??? На текущий момент у пользователя следующие роли: Бухгалтер, Интерактивное открытие внешних отчетов и обработок, Использование дополнительных отчетов и обработок.
(8) корум, Есть еще Вариант 4. Разобраться почему все таки оно не работает!) Как оказалось дело в том, что в 1С Предприятии существует безопасный режим исполнения программного кода. В этом режиме по-умолчанию запускаются все внешние обработки и отчеты для обеспечения безопасного исполнения кода и этот безопасный режим блокирует доступ к некоторому функционалу. В частности не срабатывает установка привелигированного режима.
Изменил ПараметрыРегистрации обработки и все заработало! Ура!
Изменил ПараметрыРегистрации обработки и все заработало! Ура!
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
ОбъектыНазначения = Новый Массив;
ПараметрыРегистрации.Вставить("Наименование", "Подбор имущества в личном пользовании");
ПараметрыРегистрации.Вставить("Версия", "1.1");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ПараметрыРегистрации.Вставить("Информация", "Подбор имущества в личном пользовании");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
"Подбор имущества в личном пользовании",
"ПодборИмуществаВЛичномПользовании",
"ОткрытиеФормы");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Показать
Большое спасибо автору, что докопался до сути. Была аналогичная проблема с внешней обработкой создания связанных объектов. Ругалось на права в момент записи версии.
Получается, что если обработка запущена в безопасном режиме, то ты не можешь далее в коде установить привилегированный режим. Из-за это и вся проблема.
Получается, что если обработка запущена в безопасном режиме, то ты не можешь далее в коде установить привилегированный режим. Из-за это и вся проблема.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот