Как отключить предупреждение «Защита от опасных действий» при создании COM-объекта Excel.Application в 1С 8.3?

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

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

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

Выясним причину срабатывания предупреждения

Начиная с версии 8.3.8, в платформу 1С:Предприятие встроен специальный механизм — Защита от опасных действий. Этот механизм предназначен для предотвращения несанкционированного запуска вредоносного кода через внешние модули.

К потенциально опасным операциям платформа 1С относит:

  1. Создание COM-объектов (включая Excel.Application, WScript.Shell и другие).
  2. Загрузку и подключение внешних компонент.
  3. Запуск внешних обработок и отчетов.
  4. Выполнение команд операционной системы.

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

Способ 1. Отключение защиты в свойствах пользователя 1С

Рассмотрим самый простой интерактивный способ. Если регламентное задание или VBS-скрипт подключается под определенной учетной записью пользователя 1С, мы можем отключить проверку безопасности лично для этого пользователя.

Разберем по шагам, как это сделать через режим Конфигуратора:

  1. Откроем информационную базу в режиме Конфигуратор.
  2. В меню выберем пункт Администрирование > Пользователи.
  3. Найдем в списке учетную запись пользователя, под которой происходит авторизация автоматизированного скрипта.
  4. Откроем свойства пользователя и в окне настроек снимем флажок Защита от опасных действий.
  5. Сохраним изменения.

Если требуется отключить данный флаг программно (например, при развертывании базы или первоначальной настройке), воспользуемся объектом ПользователиИнформационнойБазы:


ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("ИмяСлужебногоПользователя");
Если ПользовательИБ <> Неопределено Тогда
    ПользовательИБ.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь;
    ПользовательИБ.Записать();
КонецЕсли;

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

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

Для этого используется параметр DisableUnsafeActionProtection в конфигурационном файле conf.cfg.

Разберем порядок действий:

  1. Найдем файл conf.cfg в каталоге установленной платформы. Обычное расположение файла: C:\Program Files\1cv8\conf\conf.cfg (или каталог bin\conf).
  2. Откроем файл любым текстовым редактором от имени администратора.
  3. Добавим строку с указанием маски баз, для которых требуется отменить проверку.

Для отключения защиты абсолютно во всех информационных базах пропишем строку:

DisableUnsafeActionProtection=.*

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

DisableUnsafeActionProtection=ИмяИнформационнойБазы.*

После сохранения файла conf.cfg платформа перестанет выводить предупреждения при создании COM-объекта Excel.Application для совпавших по маске информационных баз.

Способ 3. Программная загрузка внешних обработок без защиты

Если одна внешняя обработка программно запускает другую внешнюю обработку, которая создает Excel.Application, мы можем настроить параметры подключения прямо в коде 1С.

Посмотрим, как передать объект ОписаниеЗащитыОтОпасныхДействий при создании или подключении внешнего модуля:


ОписаниеЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий;
ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь;

// Создание объекта внешней обработки с отключенной защитой
ОбработкаОбъект = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь, ОписаниеЗащиты);

При использовании метода Подключить() у менеджера внешних обработок также можно передать соответствующий параметр безопасности.

Способ 4. Встраивание обработки в конфигурацию или отказ от COM

Проанализируем альтернативные варианты решения проблемы, которые повышают надежность и скорость работы всей системы.

  1. Перенос кода во встроенную обработку: Если код выгрузки в Excel будет находиться внутри самой конфигурации (или в составе расширения), платформа не считает его внешним источником, и диалог защиты при вызове Новый COMОбъект("Excel.Application") появляться не будет.
  2. Сохранение без использования MS Excel: Если задача состоит только в том, чтобы сформировать XLS/XLSX файл и отправить его по почте, рекомендуется отказаться от COM-объекта Excel.Application в пользу штатных возможностей 1С. Для этого сформированный табличный документ сохраняется напрямую методом ТабличныйДокумент.Записать(): ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX); Это решение работает значительно быстрее, не требует наличия установленного Microsoft Excel на сервере и полностью исключает проблемы с правами и диалоговыми окнами защиты.
  3. Отправка почты средствами 1С: Для рассылки готовых файлов по электронной почте лучше задействовать встроенные объекты 1С ИнтернетПочта и ИнтернетПочтовоеСообщение вместо автоматизации макросов Outlook или Excel.
← На главную