Рассмотрим ситуацию, когда пользователь пытается открыть внешнюю обработку (например, «Выгрузка и загрузка данных XML») через меню Файл -> Открыть, но платформа выдает сообщение о том, что установлен безопасный режим, и блокирует выполнение функционала.
Проанализируем основные причины такого поведения платформы 1С:
УстановитьБезопасныйРежим(Ложь) непосредственно внутри кода внешней обработки приводит к ошибке Ошибка при вызове метода контекста (УстановитьБезопасныйРежим), так как платформа принципиально запрещает снижать уровень безопасности из контекста, который уже запущен в безопасном режиме.Разберем самый простой вариант для разового запуска обработки. Если нет необходимости встраивать обработку в конфигурацию на постоянной основе, запустите 1С под учетной записью администратора (пользователя с ролью Полные права). При открытии файлов через меню Файл -> Открыть полноправный пользователь не сталкивается с ограничениями безопасного режима.
Посмотрим, как подключить обработку к информационной базе в системе «1С:Управление торговлей» или других конфигурациях на базе БСП:
БезопасныйРежим = Ложь в сведениях о внешней обработке).Выясним, как запустить внешнюю обработку программно из внешней консоли кода или другой обработки. Для этого используется менеджер внешних обработок с передачей параметра Ложь в качестве второго аргумента:
// Пример программного создания обработки без безопасного режима
ПутьКФайлу = "C:\Processors\ВыгрузкаЗагрузкаДанныхXML.epf";
ОбработкаОбъект = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
ОбработкаОбъект.ПолучитьФорму().Открыть();
Также можно использовать метод подключения обработки:
// Пример подключения внешней обработки без безопасного режима
ИмяОбработки = ВнешниеОбработки.Подключить(ПутьКФайлу, , Ложь);
Форма = ПолучитьФорму("ВнешняяОбработка." + ИмяОбработки + ".Форма");
Форма.Открыть();
Разберем ошибку, с которой часто сталкиваются разработчики при попытке обойти ограничение внутри самой обработки. Если в коде внешней обработки прописать:
УстановитьБезопасныйРежим(Ложь);
Платформа 1С сгенерирует исключение, так как метод УстановитьБезопасныйРежим предназначен исключительно для включения безопасного режима из обычного контекста или для его снятия только в том случае, если он был ранее явно установлен текущим блоком кода. Если же контекст изначально исполняется в безопасном режиме платформы (из-за интерактивного открытия неполноправным пользователем), отключить его изнутри исполнения невозможно из соображений безопасности.