- В этой теме 1 ответ, 2 участника, последнее обновление 3 часа, 24 минуты назад сделано .
Просмотр 1 ветки ответов
Просмотр 1 ветки ответов
- Для ответа в этой теме необходимо авторизоваться.
Программирование и администрирование в 1С
База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как правильно сбалансировать привилегированный режим в коде 1С?
правильно ли установлен привилегированный режим
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос();
Запрос.Текст =
«ВЫБРАТЬ
| Подразделения.Ссылка
|ИЗ
| Справочник.СтруктураПредприятия КАК Подразделения
|ГДЕ
| Подразделения.Руководитель = &АвторДокумента»;
Запрос.УстановитьПараметр(«АвторДокумента», Предмет.Подготовил);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Результат = Истина;
Иначе
Результат = Ложь;
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
Код с точки зрения установки привилегированного режима написан правильно: сначала вызывается УстановитьПривилегированныйРежим(Истина), затем выполняется запрос, после чего режим отключается вызовом УстановитьПривилегированныйРежим(Ложь).
Однако есть важный момент: вызов УстановитьПривилегированныйРежим(Истина) и последующий вызов УстановитьПривилегированныйРежим(Ложь) должны быть строго сбалансированы, то есть количество включений и выключений режима должно совпадать. В вашем коде это соблюдено.
Рекомендация: чтобы избежать проблем с исключениями и гарантировать выключение привилегированного режима, лучше обернуть выполнение запроса в конструкцию Попытка…Исключение…КонецПопытки, например:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Попытка УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | Подразделения.Ссылка |ИЗ | Справочник.СтруктураПредприятия КАК Подразделения |ГДЕ | Подразделения.Руководитель = &АвторДокумента"; Запрос.УстановитьПараметр("АвторДокумента", Предмет.Подготовил); РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Возврат Истина; Иначе Возврат Ложь; КонецЕсли; Исключение ВызватьИсключение; КонецПопытки; УстановитьПривилегированныйРежим(Ложь); |
Это гарантирует, что привилегированный режим будет выключен даже при ошибках.
Итог: в вашем коде привилегированный режим установлен и выключен корректно, но для надежности лучше использовать обработку исключений.