Почему не работают фоновые задания из внешних обработок в 1С 8.3.9 и как их разрешить?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

После обновления платформы «1С:Предприятие» до версии 8.3.9 (и выше) многие специалисты сталкиваются с ситуацией, когда фоновые или регламентные задания, вызывающие код из внешних обработок или использующие COM-подключения, перестают выполняться. Проанализируем, почему возникает эта проблема и какими способами можно ее решить.

Причины блокировки фоновых заданий в 1С 8.3.9

Основной причиной блокировки выполнения кода является введенный разработчиками платформы механизм «Защита от опасных действий». Начиная с версии 8.3.9, платформа по умолчанию считает потенциально небезопасными следующие операции:

  1. Запуск внешних обработок и отчетов;
  2. Работа с COM-объектами и внешними соединениями;
  3. Выполнение команд операционной системы;
  4. Загрузка внешних компонент и динамических библиотек;
  5. Управление пользователями информационной базы;
  6. Запись и обновление расширений конфигурации.

Если опасное действие вызывается в обычным интерактивном сеансе, платформа выводит пользователю предупреждающий диалог с запросом подтверждения. Однако при исполнении кода в контексте фонового или регламентного задания интерактивный диалог выводиться не может. В результате платформа автоматически прерывает выполнение операции и генерирует ошибку безопасности.

Способ 1. Отключение защиты для служебного пользователя

Рассмотрим наименее трудоемкий вариант решения проблемы в пользовательском режиме или Конфигураторе. Если фоновое задание выполняется от имени конкретного пользователя информационной базы, достаточно снять для него ограничение безопасности.

  1. Разберем по шагам настройку в конфигураторе: откроем список пользователей информационной базы через меню Администрирование — Пользователи.
  2. Найдем служебного пользователя, под которым запускаются регламентные и фоновые задания (или создадим для этих целей отдельную учетную запись).
  3. Откроем свойства этого пользователя и снимем флажок Защита от опасных действий.
  4. Сохраним изменения.

После этого фоновые задания, исполняемые под данным пользователем, смогут беспятственно подключать внешние обработки и работать с COM-объектами.

Способ 2. Глобальное отключение защиты через файл conf.cfg

Посмотрим на способ, который позволяет отключить механизма контроля потенциально опасных действий на уровне всего сервера или конкретных информационных баз без изменения настроек пользователей.

Для этого используется файл конфигурации платформы conf.cfg, расположенный в каталоге установки conf на сервере 1С:Предприятия.

  1. Откроем или создадим файл conf.cfg в каталоге параметров платформы.
  2. Добавим параметр с указанием маски информационных баз:

DisableUnsafeActionProtection=.*;

Важный момент: в клиент-серверном режиме данный параметр необходимо прописывать именно в conf.cfg на стороне сервера 1С:Предприятия, поскольку фоновые задания выполняются в контексте кластера серверов. В файловом режиме файл конфигурации настраивается на рабочей станции, выполняющей обработку фоновых задач.

Способ 3. Программное отключение защиты для всех пользователей

Проанализируем ситуацию, когда необходимо программно отключить предупреждения безопасности для всех существующих пользователей информационной базы. Для этого можно использовать следующий фрагмент кода на встроенном языке 1С:


Для Каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
    ПользовательИБ.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь;
    ПользовательИБ.Записать();
КонецЦикла;

Данный код выполняет обход массива объектов ПользовательИнформационнойБазы и сбрасывает свойство ПредупреждатьОбОпасныхДействиях у каждого из них.

Способ 4. Отключение защиты при программном подключении обработки

Если внешняя обработка подключается программно с помощью объекта ВнешниеОбработки, защитный режим можно отключить непосредственно в моменте вызова метода Подключить().

Выясним, как передать нужный параметр: при вызове ВнешниеОбработки.Подключить() передается параметр ЗащитаОтОпасныхДействий со значением Ложь. Это позволяет системе доверять подключаемому модулю без выдачи предупреждений.

Ограничения 64-разрядной платформы и работы с COM

Отдельно разберем проблему, возникающую при переходе на 64-разрядную версию сервера 1С:Предприятия. Некоторые внешние библиотеки и COM-компоненты (например, библиотека печати штрихкодов PDF-417 от ГНИВЦ ФНС РФ) существуют исключительно в 32-разрядном исполнении.

В 64-разрядном процессе сервера 1С прямое подключение 32-разрядных COM-объектов невозможно. Если внешняя обработка в фоновом задании использует такие библиотеки, потребуется вынести их выполнение в отдельный 32-разрядный процесс (например, через COM+ Application / dllhost или запуск стороннего 32-битного клиента).

← На главную