|
У пользователя недостаточно прав на исполнение операции над базой данных | ☑ | ||
---|---|---|---|---|
0
EndUser2022
16.09.22
✎
09:11
|
Доброго дня, коллеги!
1С:Предприятие 8.3 (8.3.20.1710) Конфигурация ДАЛИОН: ТРЕНД, редакция 3.0 (3.0.20.24). Задачу решаем на файловой базе. Суть проблемы: Делаем для клиента обработку. В конечном итоге обработка должна открывать форму приходной накладной, для дальнейшей работы. У клиента несколько объектов (складов), каждый товаровед (Оператор) видит только свой склад. Если попытаться обработкой открыть форму приходной накладной - появляется ошибка "У пользователя недостаточно прав на исполнение операции над базой данных". Конфигуратор перекидывает на строку кода обработки "ОбъектПриемник.Записать(РежимЗаписиДокумента.Запись);", Err: Ошибка при вызове метода контекста (Записать). У Оператора включена роль "ДобавлениеИзменениеДокументаПриходнаяНакладная", где на правах приходной накладной "Чтение", "Добавление", "Изменение" стоят ограничения доступа к данным, например для "Чтение": #ПоЗначениям( "Документ.ПриходнаяНакладная","Чтение","", "Организации","Организация", "ТорговыеОбъекты","Склад.ТорговыйОбъект", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" ) . Если данные ограничения удалить - приходная накладная открывается, однако, оператор видит тогда все склады. Задачу пытаемся решить следующим способом. Создаем профиль, у которого включена новая роль, которая даёт доступ к приходным накладным без ограничений. Включаем этот профиль следующим кодом (пока что отдельной независимой обработкой в другом окне): УстановитьПривилегированныйРежим(ИСТИНА); НовыйПрофиль = Справочники.ПрофилиГруппДоступа.НайтиПоНаименованию("НовыйПрофиль"); УправлениеДоступом.ВключитьПрофильПользователю(ПользователиКлиентСервер.ТекущийПользователь(), "НовыйПрофиль"); Справочники.ГруппыДоступа.ОбновитьГруппыДоступаПрофиля(НовыйПрофиль); Результат: теперь Оператор видит все склады, но ошибка так и не уходит, форма приходной накладной не открывается. Ошибка исчезает при перезапуске программы, но Оператор видит все склады (ну это понятно). Вопрос: принципиально можно-ли обойти эти ограничения #ПоЗначениям без перезапуска программы, в одном сеансе? Т.е. "выключить" ограничения #ПоЗначениям на момент открытия формы, а потом снова "включить" (пока других идей в голову не приходит). Или мы вообще не туда смотрим и нужно копать БСП и разбираться там? Или еще что? |
|||
1
vicof
16.09.22
✎
09:19
|
Запустить БСПшную обработку по изменению прав доступа?
|
|||
2
Фрэнки
16.09.22
✎
09:23
|
хм. БСП копать всегда полезно. И разбираться там тоже. Только это тут мало поможет, имхо.
Для обхода заполненных РЛС я бы попробовал применить повышение прав https://its.1c.ru/db/v8std/content/485/hdoc Использование привилегированного режима |
|||
3
Dmitrii
гуру
16.09.22
✎
09:45
|
Очень много слов, но ничего не сказано о том какой склад указан в приходной накладной.
Склад в накладной входит в число доступных пользователю? Может склад в накладной пустой (не указан)? Уверены ли в том, что не срабатывает ограничение по другим полям (Организация, Подразделения, ...) >> Включаем этот профиль следующим кодом. Это вообще дичь. После корректировки профилей и ролей пользователя необходимо, чтобы как минимум пользователь перезашел в программу. В идеале запускать БСП-ное обновление подсистемы прав доступа. >> можно-ли обойти эти ограничения #ПоЗначениям без перезапуска программы, в одном сеансе? Нет. Разбирайтесь - на что именно срабатывает ограничение. Вероятнее всего либо в накладной недоступный пользователю склад указан (или вообще никакой не указан), либо ограничение срабатывает на какое-то другое поле, а не на склад. В привилегированном режиме можно записать документ или прочитать из него данные. Но не открыть форму. УстановитьПривилегированныйРежим(<Включить>) Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер. |
|||
4
Ногаминебить
16.09.22
✎
09:51
|
Ставлю на пустую Организацию.
|
|||
5
PaulBC
16.09.22
✎
09:55
|
(0) что такое ОбъектПриемник.Записать( при открытии формы накладной? Ограничение срабатывает на него похоже, а не на склад.
|
|||
6
EndUser2022
16.09.22
✎
10:13
|
(2) Видел эту статью, но не углублялся. Ограничивался одной директивой "УстановитьПривилегированныйРежим(Истина);". Попробую изучить внимательнее, спасибо.
|
|||
7
EndUser2022
16.09.22
✎
10:17
|
(3) Склад в накладной пустой. Я тоже об этом думал. За остальные советы - спасибо!
|
|||
8
Фрэнки
16.09.22
✎
10:30
|
(7) э... если склад пустой и это корректно отрабатывается по тексту модулей или запросов, то означает, что обработаны будут _все_
т.е. нужно тогда текст запроса дополнять _все_разрешенные_ И насчет открытия формы ... ПриСозданииНаСервере - там же есстественно нужно расписать получение большинства данных для их установки в реквизиты формы. Есстественно, что часть кода для такого получения данных можно выполнить где-то под УстановитьПривилегированныйРежим Только следующие ожидаемые грабли будут уже передзаписью данных объекта, если что-то законфликтует с РЛС |
|||
9
Dmitrii
гуру
16.09.22
✎
11:19
|
(8) >> ПриСозданииНаСервере - там же естественно нужно расписать получение большинства данных для их установки в реквизиты формы... часть кода для такого получения данных можно выполнить где-то под УстановитьПривилегированныйРежим
Это всё так. Но автор нам не рассказывает о том что реально делает его обработка. Приходится исходить из того, что открывается пользователю форма того документа, права на который у него есть. В противном случае получается странная логика - пользователь должен открыть любой документ и в нём в ПриСозданииНаСервере должны меняться какие-то реквизиты под требования ограничения прав. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |