Имя: Пароль:
1C
1С v8
Ошибка при вызове метода контекста (ПолучитьПользователей)
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) были в общем модуле с галками "Сервер", "Клиент" и "Вызов с сервера". Функции СписокПользователейРольМенеджер() указал &НаСервере, тогда ее перестала видеть Функция ПользовательРольМенеджер()!? Поэтому пришлось переносить в модуль, у которого только галка "Сервер".