При выполнении фоновых и регламентных заданий разработчики часто сталкиваются с ситуацией, когда внешняя обработка успешно работает в интерактивном сеансе, но завершается с ошибкой в фоновом режиме. Типичный пример — создание сетевого подключения через конструктор HTTPСоединение, которое аварийно прерывается сообщением: «Установлен безопасный режим. Выполнение операции запрещено». Разберем причины такого поведения платформы «1С:Предприятие» и рассмотрим все доступные способы решения этой задачи.
Выясним причину ошибки: по умолчанию платформа запускает внешние отчеты и обработки в изолированном контексте — безопасном режиме. В этом режиме накладываются строгие ограничения на действия, способные повлиять на серверную инфраструктуру. Платформа блокирует:
HTTPСоединение, FTPСоединение, работа с объектом ИнтернетПочта).ЗапуститьПриложение.Новый COMОбъект).Рассмотрим подробнее практические варианты обхода и отключения этих ограничений.
Если регламентное задание открывает внешнюю обработку напрямую из файла или из хранилища значений с помощью метода ВнешниеОбработки.Создать, платформа по умолчанию применяет к ней безопасный режим. Чтобы снять ограничения, необходимо явно передать второй параметр со значением Ложь.
Посмотрим на пример корректного программного создания объекта внешней обработки:
ИспользоватьБезопасныйРежим = Ложь;
Обработка = ВнешниеОбработки.Создать(ПутьКФайлу, ИспользоватьБезопасныйРежим);
Обработка.ВыполнитьДействие();
При таком вызове код обработки выполняется с полными серверными правами текущего сеанса, что позволяет без ошибок создавать HTTPСоединение, отправлять запросы и работать с внешними API.
Если регламентное задание запускается средствами типовой конфигурации через справочник «Дополнительные отчеты и обработки», механизм подключения отличается. Проанализируем два варианта настройки для подсистемы БСП.
1. Полное отключение безопасного режима при регистрации обработки.
В модуле объекта внешней обработки в экспортной функции СведенияОВнешнейОбработке() необходимо явно указать параметр безопасного режима:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Наименование = "Интеграция с внешним сервисом";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
// Определение команд обработки
// ...
Возврат ПараметрыРегистрации;
КонецФункции
Также администратор информационной базы может снять флаг безопасного режима вручную в карточке элемента справочника «Дополнительные отчеты и обработки».
2. Декларирование точечных разрешений на доступ к ресурсам (рекомендуемый подход).
Если отключение безопасного режима недопустимо политиками безопасности (например, при работе базы в модели сервиса или облаке), обработка может запросить конкретные разрешения. В функции СведенияОВнешнейОбработке() прописывается доступ к определенному веб-серверу:
ПараметрыРегистрации.Разрешения.Добавить(
РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(
"HTTP",
"api.service.com",
443,
"Синхронизация данных через HTTP REST API"
)
);
При обновлении обработки в базе данных система запросит у администратора подтверждение на предоставление указанных сетевых прав, после чего внешнее подключение будет разрешено даже при активном безопасном режиме.
Разберем еще один важный нюанс платформы «1С:Предприятие», начиная с версии 8.3.9. Механизм «Защита от опасных действий» может принудительно активировать безопасный режим для кода, запускаемого пользователем.
Для корректной работы регламентных заданий необходимо убедиться в выполнении следующих настроек:
Если специфика проекта не позволяет снимать безопасный режим с внешних обработок, рассмотрим альтернативные варианты переноса логики:
Безопасный режим и Защита от опасных действий.HTTPСоединение и отправки запроса выносится в общий модуль конфигурации со свойствами Сервер и Привилегированный. Внешняя обработка лишь передает параметры и вызывает функцию этого модуля.