Имя: Пароль:
1C
 
ПривилегированныйРежим() то истина, то ложь
,
0 iceman2112
 
03.07.18
10:10
Доброе утро, граждане.

В коде есть строчка, код вызывается из формы списка документа и формы документа
УстановитьПривилегированныйРежим(Истина)

Так вот сразу после этой строчки в табло пишу ПривилегированныйРежим() и при вызове из Формы списка, всегда ПривилегированныйРежим() = Истина, при открытие первый раз из формы документа ПривилегированныйРежим() = Истина, а потом = Ложь.

В результате чего у пользователя не открывается форма документа с ошибкой прав доступа, потому что

Если НЕ Пользователи.ЭтоПолноправныйПользователь(, ПроверятьПраваАдминистрированияСистемы) Тогда
        ВызватьИсключение НСтр("ru = 'Нарушение прав доступа.'");
    КонецЕсли;

Почему ПривилегированныйРежим() = Ложь, сразу после установки УстановитьПривилегированныйРежим(Истина)
1 Вафель
 
03.07.18
10:19
Этот метод действует в пределах вызова 1 процедуры
2 vde69
 
03.07.18
10:26
(1) и только в контексте &НаСервере
3 iceman2112
 
03.07.18
10:40
(1) Это тут причем?
(2) Все на сервере.

Нетронутая
УНФ 1.6 (1.6.14.81) при открытие заказ покупателя ищет регламентную процедура для обмена ЭДО, и вызывается исключение если нет прав Админа или не стоит ПривилегированныйРежим
4 Tonik992
 
03.07.18
11:10
ПривилегированныйРежим() не дает права Администрирования
5 Tonik992
 
03.07.18
11:11
Посмотрите как работает Пользователи.ЭтоПолноправныйПользователь()
6 iceman2112
 
03.07.18
11:24
(4) Я это и не утверждал, Вопрос не в этом стоит.

Он заходит в Пользователи.ЭтоПолноправныйПользователь() в одном случае у него проскакивает, а в другом случае нет. Потому что УстановитьПривилегированныйРежим(Истина) дает Ложь.

Это код в Пользователи.ЭтоПолноправныйПользователь(), перед вызовом этой процедуры УстановитьПривилегированныйРежим(Истина)


Если УчитыватьПривилегированныйРежим И ПривилегированныйРежимУстановлен Тогда
        Возврат Истина;
    КонецЕсли;
7 iceman2112
 
03.07.18
11:33

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


В этой строчке он через раз падает

РегламентныеЗаданияСервер.РегламентноеЗаданиеИспользуется(ЗаданиеПроверкаНовыхЭлектронныхДокументов);

А если глубже копнуть, то внутри


Если НЕ Пользователи.ЭтоПолноправныйПользователь(, ПроверятьПраваАдминистрированияСистемы) Тогда
        ВызватьИсключение НСтр("ru = 'Нарушение прав доступа.'");
    КонецЕсли;



Идем в нее


Функция ЭтоПолноправныйПользователь(Пользователь = Неопределено,
                                    ПроверятьПраваАдминистрированияСистемы = Ложь,
                                    УчитыватьПривилегированныйРежим = Истина) Экспорт
    
    ПривилегированныйРежимУстановлен = ПривилегированныйРежим(); // ВОТ ТУТ ТО ИСТИНА, ТО ЛОЖЬ, хотя выше вызывается УстановитьПривилегированныйРежим(Истина)
    
    УстановитьПривилегированныйРежим(Истина);

8 Tonik992
 
03.07.18
14:23
"То истина, то ложь" - как наблюдается, запускаете со своего компьютера в режиме отладки периодически?

В каком режиме запускаете? (тонкий/толстый клиент, обычное приложение)
9 iceman2112
 
03.07.18
14:35
(8) Тонкий клиент, один и тот же компьютер, один пользователь 1с.

Запускаешь список заказов клиента = Истина, Открываешь Форму заказ или создаешь истина (первый раз), дальнейшие открытие или создание заказа = ложь = ошибка.

На копию 2 месячной давности этой ошибки не наблюдается.

Я думаю тестирование и иправление провести
10 Buster007
 
03.07.18
14:45
Расширения кажись подключил?
11 iceman2112
 
03.07.18
14:49
(10) было дело, была проблема с моим расширением при обновление. из конфигуратора не обновлялся. пришлось в предприятие удалить и добавить.
12 RomaH
 
naïve
03.07.18
14:50
(0) ИМХО баг платформы

в БСП есть код

УстановитьПривилегированныйРежим(Истина);

куча кода

Если ПривилегированныйРежим() Тогда
УстановитьПривилегированныйРежим(Ложь);
КОнецесли;


и иногда выпадает в исключение, ибо если нет ПР - то попытка  снять его дает исключение

пришлось вообще отказаться от УстановитьПривилегированныйРежим(Ложь);

ибо она работает в рамках одной процедуры - нафига его отключать практически на выходе из неё
13 iceman2112
 
03.07.18
14:52
(12)  (8.3.12.1412)
14 Tonik992
 
03.07.18
14:56
(12) не факт, процедура может вызываться на клиенте. И тогда УстановитьПривилегированныйРежим(Истина) в клиент-серверном варианте не даст эффекта никакого
15 RomaH
 
naïve
03.07.18
15:30
(14)
Если ПривилегированныйРежим() Тогда
УстановитьПривилегированныйРежим(Ложь);
КОнецесли;
16 Buster007
 
03.07.18
15:33
(11) у расширения выключил безопасный режим?
17 Tonik992
 
03.07.18
15:51
(15) все верно, поэтому если УстановитьПривилегированныйРежим(Истина) не дает никакого эффекта, то проверка

Если ПривилегированныйРежим() Тогда
УстановитьПривилегированныйРежим(Ложь);
КОнецесли;

просто необходима
18 RomaH
 
naïve
03.07.18
15:54
(17) чукча не читатель?
Если ПривилегированныйРежим() Тогда
УстановитьПривилегированныйРежим(Ложь);
КОнецесли;

просто необходима
но она дает истину и УстановитьПривилегированныйРежим(Ложь); вываливает исключение
19 iceman2112
 
03.07.18
16:32
(16) Неа, нужно выкл.?
20 iceman2112
 
03.07.18
16:39
(16) Ты телепат?))) все заработало. Можешь пояснить?
21 Buster007
 
03.07.18
17:31
(20) Почитай на ИТС как работает безопасный режим ))
22 iceman2112
 
03.07.18
17:56
(21) Понял, спасибо всем
23 Mankubus
 
03.07.18
18:29
(22) а можно подробнее?
24 Вафель
 
03.07.18
18:41
Безопасный режим не позволяет включать Привелигерованный
25 iceman2112
 
03.07.18
18:42
(23) Отключение безопасного режима у расширения решило проблему, хотя код выше в конфигурации находиться.
А почему это решило проблему, я пока не понял, позже почитаю
26 Вафель
 
03.07.18
18:44
(25) это не важно где код находится
27 iceman2112
 
03.07.18
18:52
(26) и примерно понял, после вашего сообщения, что происходит.