При переходе с платформы 1С 8.2 на 8.3 (начиная с версии 8.3.8 и выше) многие разработчики и администраторы сталкиваются со следующей проблемой: ночные регламентные задачи или автоматические VBS-скрипты, вызывающие 1С в неинтерактивном режиме, прекращают нормально работать. В момент, когда внешняя обработка пытается инициализировать COM-объект Excel.Application, платформа блокирует выполнение и запрашивает интерактивное подтверждение пользователя: «Разрешить подключать исполнимые бинарные файлы для данного модуля?».
Так как вызов происходит автоматически в ночное время и без участия человека, ответить на данный диалог невозможно, из-за чего сценарий завершается ошибкой. Проанализируем причину такого поведения и подробно рассмотрим все доступные способы решения этой проблемы.
Начиная с версии 8.3.8, в платформу 1С:Предприятие встроен специальный механизм — Защита от опасных действий. Этот механизм предназначен для предотвращения несанкционированного запуска вредоносного кода через внешние модули.
К потенциально опасным операциям платформа 1С относит:
Excel.Application, WScript.Shell и другие).Если код выполняется во внешнем файле и запускается под пользователем, у которого включена проверка безопасности, платформа требует явного подтверждения от пользователя. Ниже мы разберем несколько проверенных способов обойти или отключить данную защиту для служебных задач.
Рассмотрим самый простой интерактивный способ. Если регламентное задание или VBS-скрипт подключается под определенной учетной записью пользователя 1С, мы можем отключить проверку безопасности лично для этого пользователя.
Разберем по шагам, как это сделать через режим Конфигуратора:
Если требуется отключить данный флаг программно (например, при развертывании базы или первоначальной настройке), воспользуемся объектом ПользователиИнформационнойБазы:
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("ИмяСлужебногоПользователя");
Если ПользовательИБ <> Неопределено Тогда
ПользовательИБ.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь;
ПользовательИБ.Записать();
КонецЕсли;
Посмотрим на решение, которое подходит для системных администраторов, когда необходимо отключить проверку безопасности на уровне всей платформы или сервера приложений без редактирования каждого пользователя.
Для этого используется параметр DisableUnsafeActionProtection в конфигурационном файле conf.cfg.
Разберем порядок действий:
conf.cfg в каталоге установленной платформы. Обычное расположение файла: C:\Program Files\1cv8\conf\conf.cfg (или каталог bin\conf).Для отключения защиты абсолютно во всех информационных базах пропишем строку:
DisableUnsafeActionProtection=.*
Если необходимо отключить защиту только для конкретной информационной базы, проанализируем пример с указанием ее имени в маске регулярного выражения:
DisableUnsafeActionProtection=ИмяИнформационнойБазы.*
После сохранения файла conf.cfg платформа перестанет выводить предупреждения при создании COM-объекта Excel.Application для совпавших по маске информационных баз.
Если одна внешняя обработка программно запускает другую внешнюю обработку, которая создает Excel.Application, мы можем настроить параметры подключения прямо в коде 1С.
Посмотрим, как передать объект ОписаниеЗащитыОтОпасныхДействий при создании или подключении внешнего модуля:
ОписаниеЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий;
ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь;
// Создание объекта внешней обработки с отключенной защитой
ОбработкаОбъект = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь, ОписаниеЗащиты);
При использовании метода Подключить() у менеджера внешних обработок также можно передать соответствующий параметр безопасности.
Проанализируем альтернативные варианты решения проблемы, которые повышают надежность и скорость работы всей системы.
Новый COMОбъект("Excel.Application") появляться не будет.Excel.Application в пользу штатных возможностей 1С. Для этого сформированный табличный документ сохраняется напрямую методом ТабличныйДокумент.Записать():
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
Это решение работает значительно быстрее, не требует наличия установленного Microsoft Excel на сервере и полностью исключает проблемы с правами и диалоговыми окнами защиты.ИнтернетПочта и ИнтернетПочтовоеСообщение вместо автоматизации макросов Outlook или Excel.