При настройке сложных процессов согласования в конфигурации 1С:Документооборот 3.0 часто возникает потребность интеграции с другими информационными базами. На определенном этапе обработки объекта нам может потребоваться создать документ или справочник во внешней системе. Встроенный механизм «Скрипты схем обработок объектов» отлично подходит для кастомной логики, однако при попытке инициировать внешнее подключение (например, через HTTPСоединение) мы сталкиваемся с системной защитой платформы.
Давайте подробно разберем ситуацию, проанализируем причину возникновения ошибки и посмотрим на доступные способы ее обхода.
Если мы напишем код выполнения HTTP-запроса прямо в скрипте схемы обработки, платформа 1С прервет выполнение с характерной ошибкой:
Ошибка при вызове конструктора (HTTPСоединение): Установлен безопасный режим. Выполнение операции запрещено
Выясним причину такого поведения. Платформа 1С:Предприятие 8 по умолчанию запускает все внешние обработки, скрипты и расширения в так называемом безопасном режиме. Это сделано для защиты системы от выполнения вредоносного кода. В безопасном режиме платформа жестко блокирует любые попытки взаимодействия программы с внешней средой. К запрещенным операциям относятся:
HTTPСоединение и ИнтернетПочта).Поскольку наш скрипт выполняется в изолированной среде, любое исходящее соединение падает в ошибку. Рассмотрим, как можно решить эту задачу программно.
Во-первых, выполнение длительных сетевых запросов напрямую в скрипте обработки — плохая практика, так как это происходит синхронно и замедляет проведение/запись объектов. Правильнее вынести эту логику в фоновое асинхронное выполнение.
Для этого мы создадим отдельное расширение конфигурации, где разместим общий модуль с процедурой отправки данных. В скрипте ДО 3.0 мы будем просто вызывать этот метод.
Чтобы метод успешно выполнился, нам потребуется выполнить следующие шаги в конфигураторе (в свойствах расширения):
Однако, просто снять галочки недостаточно. Платформа все равно может перестраховываться на уровне контекста фонового задания. Поэтому непосредственно перед созданием объекта HTTPСоединение мы должны программно выключить ограничения с помощью метода УстановитьОтключениеБезопасногоРежима.
Посмотрим на рабочий пример кода, который необходимо разместить в серверном общем модуле нашего расширения:
Процедура ОтправитьДанныеПоHTTPАсинхронно(ЗапросHTTP) Экспорт
// Отключаем безопасный режим для текущего контекста
УстановитьОтключениеБезопасногоРежима(Истина);
Попытка
// Инициализируем соединение (замените localhost на реальный адрес сервера)
HTTP = Новый HTTPСоединение("localhost", 80, "admin", "", , , );
// Отправляем запрос
ОтветHTTP = HTTP.ОтправитьДляОбработки(ЗапросHTTP);
Возврат ОтветHTTP.КодСостояния;
Исключение
// Логируем ошибку, если сервер недоступен
Возврат ОписаниеОшибки();
КонецПопытки;
КонецПроцедуры
Важное замечание: Метод УстановитьОтключениеБезопасногоРежима действует только в рамках той процедуры или функции, где он был вызван. Для его успешной отработки у пользователя, под которым запускается фоновое задание или скрипт, должны быть полные административные права.
Несмотря на то, что первый способ работает и часто применяется на практике, полное отключение безопасного режима является обходным путем и нарушает общую концепцию безопасности 1С. Поскольку 1С:Документооборот 3.0 построен на современной версии Библиотеки стандартных подсистем (БСП), рассмотрим более корректный способ — подсистему «Профили безопасности».
Вместо полного отключения защиты, мы запросим у системы точечное разрешение на доступ к конкретному сетевому ресурсу. Разберем по шагам, как это сделать:
РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса мы формируем техническое описание нужного нам доступа (указываем протокол HTTP или HTTPS, IP-адрес или доменное имя сервера, а также порт).Данный подход позволяет сохранить базу защищенной от неконтролируемых опасных действий, при этом легально "прорубая окно" для нашего конкретного HTTP-запроса.
В завершение проанализируем ситуацию на концептуальном уровне. Разработка собственных скриптов для работы с HTTP-протоколом влечет за собой необходимость самостоятельно обрабатывать обрывы связи, зависания ответов, строить очереди сообщений и логирование.
Если мы создаем объект в другой конфигурации 1С (например, 1С:ERP или 1С:Бухгалтерия), настоятельно рекомендуем отказаться от сырых скриптов в пользу встроенных механизмов интеграции Документооборота. В типовых решениях отлично работают штатные планы обмена через универсальный формат Enterprise Data, а также механизмы Бесшовной интеграции. Они уже "из коробки" умеют асинхронно переносить данные, не конфликтуют с безопасным режимом платформы и гарантируют доставку сообщений при временной недоступности базы-приемника.