Как устранить предупреждение «Модуль выполняет подключение исполнимого бинарного файла» при работе с COM-объектами в 1С?

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

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

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

Выясняем причину: почему возникает предупреждение безопасности?

Начиная с версии платформы 8.3.9, в 1С:Предприятии реализован встроенный механизм защиты от выполнения потенциально опасных действий. К таким действиям система относит:

  1. Подключение внешних отчетов и обработок.
  2. Запуск внешних приложений и команд операционной системы.
  3. Создание COM-объектов (вызовы Новый COMОбъект или ПолучитьCOMОбъект). Это действие расценивается платформой как подключение стороннего исполняемого бинарного файла, который может содержать вредоносный код.

Многие разработчики ошибочно полагают, что для отключения предупреждений достаточно использовать объект ОписаниеЗащитыОтОпасныхДействий при создании объекта обработки через метод Создать(). Однако, если обработка загружается динамически, платформа проверяет безопасность не в момент инициализации объекта, а в момент регистрации самого файла во временном расширении. Если защита не была отключена при регистрации (подключении), последующие вызовы создания COM-объектов внутри модуля обработки будут заблокированы.


Решение 1. Программное отключение защиты при правильном подключении обработки

Рассмотрим самый элегантный и гибкий способ решения проблемы. Главный секрет заключается в том, что объект ОписаниеЗащитыОтОпасныхДействий необходимо передавать именно в метод Подключить() менеджера внешних обработок (или внешних отчетов), а не только в метод Создать().

Также важно учитывать логику работы Библиотеки стандартных подсистем (БСП). БСП кэширует подключенные обработки по их именам. Чтобы избежать коллизий и гарантировать, что платформа применит новые параметры защиты к вашей обработке, необходимо генерировать уникальное имя при каждом подключении (например, на основе текущего времени в миллисекундах).

Давайте разберем рабочий пример программного кода для безопасного подключения и запуска внешней обработки из фонового задания без вывода предупреждений:


// Шаг 1. Инициализируем настройки защиты от опасных действий
ОписаниеЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий;
ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь; // Полностью отключаем предупреждения для этого модуля

// Шаг 2. Генерируем уникальное имя для регистрации внешней обработки в системе
// Это предотвратит наложение на кэшированные БСП версии
УникальныйСуффикс = СтрЗаменить(Строка(ТекущаяУниверсальнаяДатаВМиллисекундах()), Символы.НПП, "");
ИмяОбработкиДляРегистрации = "ВнешняяОбработка_" + УникальныйСуффикс;

// Шаг 3. Подключаем обработку, передавая описание защиты в метод Подключить()
// Третий параметр (Ложь) отключает безопасный режим выполнения кода
ПутьКФайлуОбработки = "C:\ExternalDataProcessors\MyProcessor.epf";
ИмяПодключеннойОбработки = ВнешниеОбработки.Подключить(ПутьКФайлуОбработки, ИмяОбработкиДляРегистрации, Ложь, ОписаниеЗащиты);

// Шаг 4. Создаем экземпляр обработки и выполняем её экспортный метод
ОбработкаОбъект = ВнешниеОбработки.Создать(ИмяПодключеннойОбработки, Ложь);
ОбработкаОбъект.ВыполнитьПолезнуюРаботуWithCOM();

Проанализируем этот код подробнее. Передавая ОписаниеЗащиты в четвертый параметр метода ВнешниеОбработки.Подключить(), мы явно указываем платформе, что данный конкретный модуль является доверенным. Когда внутри метода ВыполнитьПолезнуюРаботуWithCOM() будет вызван конструктор Новый COMОбъект("Excel.Application"), платформа проигнорирует проверку безопасности, так как модуль был зарегистрирован с флагом ПредупреждатьОбОпасныхДействиях = Ложь.


Решение 2. Использование профилей безопасности и механизмов БСП (Enterprise-подход)

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

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

  1. Откроем модуль внешней обработки.
  2. Найдем (или создадим) экспортную функцию СведенияОВнешнейОбработке().
  3. Добавим запрос на доступ к конкретному COM-объекту с помощью программного интерфейса БСП.

Рассмотрим пример реализации функции СведенияОВнешнейОбработке() с запросом разрешения на работу с Excel:


Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.4.1");
    ПараметрыРегистрации.Информация = "Обработка для интеграции с внешними системами через COM";
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработки.ВидВнешнегоОтчетаИлиОбработки();
    
    // Запрашиваем разрешение на создание конкретного COM-класса Excel
    // Первый параметр - ProgID класса, второй - CLSID класса из реестра Windows
    РазрешениеCOM = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса(
        "Excel.Application", 
        "{00024500-0000-0000-C000-000000000046}"
    );
    
    ПараметрыРегистрации.Разрешения.Добавить(РазрешениеCOM);
    
    Возврат ПараметрыРегистрации;

КонецФункции

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


Решение 3. Назначение специального пользователя для регламентного задания

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

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

  1. Откроем базу данных в режиме Конфигуратор.
  2. Перейдем в список пользователей (меню «Администрирование» — «Пользователи»).
  3. Создадим нового служебного пользователя (например, с именем ИсполнительРегламентныхЗаданий).
  4. На вкладке «Основные» снимем флаг «Защита от опасных действий».
  5. Назначим пользователю необходимые права для выполнения регламентных процедур (например, роль «Администратор систем» или точечные роли на чтение/запись необходимых объектов).
  6. Сохраним изменения.
  7. В режиме «1С:Предприятие» откроем консоль регламентных заданий и укажем созданного пользователя в свойствах нужного задания.

Теперь фоновый процесс будет выполняться в контексте сеанса этого пользователя. Поскольку у него отключена «Защита от опасных действий» на уровне настроек учетной записи, вызовы создания COM-объектов внутри регламентного задания будут выполняться беспрепятственно и без генерации диалоговых окон.


Решение 4. Точечная настройка файла conf.cfg (Для системных администраторов)

Иногда требуется отключить защиту от опасных действий сразу для всей базы данных или для группы баз на сервере без изменения конфигурации и программного кода обработок. Для этого существует системный параметр DisableUnsafeActionProtection в конфигурационном файле conf.cfg.

Многие ошибочно полагают, что этот параметр отключает защиту глобально для всего сервера. На самом деле, он поддерживает регулярные выражения, что позволяет гибко настроить исключения только для целевых баз данных.

Разберем по шагам, как настроить данный файл:

  1. Найдем файл conf.cfg на сервере 1С. Обычно он располагается по пути:
    • Для Windows: C:\Program Files\1cv8\conf\conf.cfg
    • Для Linux: /opt/1C/v8.3/x86_64/conf/conf.cfg
  2. Откроем файл текстовым редактором с правами администратора.
  3. Добавим строку с перечислением баз данных, для которых необходимо отключить защиту. Например, если наши рабочие базы называются trade_production и erp_production, запись будет выглядеть следующим образом:

DisableUnsafeActionProtection=trade_production;erp_production

Если требуется отключить защиту для всех тестовых баз, имя которых начинается на "test", можно использовать регулярное выражение:

DisableUnsafeActionProtection=test_.*

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

Резюме и рекомендации

Мы подробно проанализировали проблему возникновения предупреждения безопасности при работе с внешними бинарными файлами и COM-объектами в фоновых заданиях 1С и изучили четыре практических метода ее решения. Выбор конкретного подхода зависит от требований к безопасности вашей информационной системы:

← На главную