|
Ошибка при вызове метода контекста (ПолучитьПользователей) | ☑ | ||
---|---|---|---|---|
0
Mikhail Volkov
01.10.13
✎
03:59
|
Ошибка при вызове метода контекста (ПолучитьПользователей)
Для Каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл по причине: Пользователю недостаточно прав для выполнения операции. Пользователь без полных прав принимает Заказ покупателя. Чтобы в качестве менеджера он выбирал ни кого попало, а только с ролью Менеджер, вставил проверку роли. А тут такая ошибка!? Как ее обойти? |
|||
1
Живой Ископаемый
01.10.13
✎
05:12
|
Выставить привелигерованный режим.
Не спрашивай что это такое, просто найди и сделай |
|||
2
Mikhail Volkov
01.10.13
✎
05:48
|
Этот привелигерованный режим на других пользователей не повлияет? Его только на короткое время можно влючать, для получения списка пользователей?
|
|||
3
mehfk
01.10.13
✎
06:08
|
Глобальный контекст.УстановитьПривилегированныйРежим (Global context.SetPrivilegedMode)
Глобальный контекст (Global context) УстановитьПривилегированныйРежим (SetPrivilegedMode) Синтаксис: УстановитьПривилегированныйРежим(<Включить>) Параметры: <Включить> (обязательный) Тип: Булево. Определяет, будет ли включен привилегированный режим: Истина - включить режим; Ложь - выключить режим. Описание: В файловом варианте информационной базы или на сервере в клиент-серверном варианте информационной базы управляет (включает или выключает) привилегированный режим исполнения кода, аналогичный режиму работы кода привилегированных модулей. В привилегированном режиме никакие проверки прав не выполняются и разрешены любые операции. В клиент-серверном варианте при выполнении на клиенте данный метод не выполняет никаких действий. Первое выполнение метода с параметром Истина в файловом варианте информационной базы или на сервере в клиент-серверном варианте информационной базы включает привилегированный режим. Для явного выключения привилегированного режима необходимо внутри процедуры или функции, в которой он был включен, вызвать метод с параметром Ложь столько же раз, сколько раз в этой же процедуре или функции был вызван метод с параметром Истина. Если этого сделано не было, то при возврате из процедуры/ функции, в которой был включен привилегированный режим, он будет выключен автоматически (неявно). Если в процедуре или функции вызовов метода с параметром Ложь сделано больше, чем вызовов с параметром Истина, то будет вызвано исключение. Доступность: Сервер, толстый клиент, внешнее соединение. Примечание: По умолчанию привилегированный режим выключен. См. также: Глобальный контекст, метод ПривилегированныйРежим |
|||
4
Живой Ископаемый
01.10.13
✎
06:55
|
2(2) этого я и боялся... вместо того чтобы тупо открыть букварь на нужной странице, или просто сделать и узнать как именно оно будет - куча вопросов.
|
|||
5
Mikhail Volkov
01.10.13
✎
07:18
|
Примечание:
В режиме "Клиент" показывает, установлен ли привилегированный режим. В клиент-серверном - всегда Ложь. Не катит, та же ошибка: // Список пользователей с ролью Менеджер // Функция СписокПользователейРольМенеджер(Подразделение = Неопределено) Экспорт СписокМенеджеров = Новый СписокЗначений; УстановитьПривилегированныйРежим(Истина); Попытка ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); Исключение Сообщить("Ошибка при получении списка пользователей информационной базы: " + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание); ПользователиИБ = Неопределено; КонецПопытки; Если ПользователиИБ = Неопределено Тогда Если РольДоступна(Метаданные.Роли.Менеджер) Тогда СписокМенеджеров.Добавить(ПараметрыСеанса.Пользователь); КонецЕсли; Возврат СписокМенеджеров; КонецЕсли; Для Каждого ПользовательИБ Из ПользователиИБ Цикл Если Не ПользовательИБ.Роли.Содержит(Метаданные.Роли.Менеджер) Тогда Продолжить; КонецЕсли; Пользователь = Справочники.Пользователи.НайтиПоКоду(Лев(Строка(ПользовательИБ), Найти(Строка(ПользовательИБ),";") - 1)); Если Не СписокМенеджеров.НайтиПоЗначению(ПользовательИБ) = Неопределено Тогда Продолжить; КонецЕсли; Если Не (Подразделение = Неопределено Или Пользователь.Подразделение = Подразделение) Тогда Продолжить; КонецЕсли; СписокМенеджеров.Добавить(Пользователь); КонецЦикла; УстановитьПривилегированныйРежим(Ложь); Возврат СписокМенеджеров; КонецФункции // СписокПользователейРольМенеджер() // Возращает Истину, если пользователю принадлежит роль Менеджер // Функция ПользовательРольМенеджер(Пользователь) Экспорт СписокМенеджеров = СписокПользователейРольМенеджер(); Возврат Не СписокМенеджеров.НайтиПоЗначению(Пользователь) = Неопределено; КонецФункции // ПользовательРольМенеджер() |
|||
6
Defender aka LINN
01.10.13
✎
07:51
|
(5) Прочитай втору строку своего поста
|
|||
7
Mikhail Volkov
01.10.13
✎
09:20
|
Функция СписокПользователейРольМенеджер(Подразделение = Неопределено) Экспорт - перенес в общий модуль для исполнения на сервере. Там УстановитьПривилегированныйРежим(Истина) работает! Но не может вернуть на клиент СписокЗначений пишет ошибку: Попытка передачи мутабельного значения результата метода СписокПользователейРольМенеджер ().
|
|||
8
Mikhail Volkov
01.10.13
✎
10:39
|
Пришлось СписокЗначений на Массив заменить.
А что &НаСервере и &НаКлиенте не рулят в обычном приложении? Чтобы не делать отдельный общий модуль для исполнения на сервере? |
|||
9
George Wheels
01.10.13
✎
10:52
|
#Если Клиент
... |
|||
10
George Wheels
01.10.13
✎
10:53
|
(9) к (8)
|
|||
11
Mikhail Volkov
02.10.13
✎
01:47
|
(9) Я не об этом, обе функции (5) были в общем модуле с галками "Сервер", "Клиент" и "Вызов с сервера". Функции СписокПользователейРольМенеджер() указал &НаСервере, тогда ее перестала видеть Функция ПользовательРольМенеджер()!? Поэтому пришлось переносить в модуль, у которого только галка "Сервер".
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |