Как отключить защиту от опасных действий при запуске COM-объекта Excel из внешней обработки

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

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

Рассмотрим ситуацию: регламентное задание запускает внешнюю обработку на сервере, которая должна создать объект Excel.Application. Вместо привычного результата мы получаем ошибку: «Ошибка при работе с регулярными выражениями. Код ошибки - 10301 (U_REGEX_RULE_SYNTAX)». Выясним причину этой проблемы и разберем несколько способов ее решения — от быстрого «обхода» до правильной системной настройки.

Разбор причины ошибки 10301

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

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

Решение 1: Быстрое отключение защиты через conf.cfg

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

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

Пример настройки в файле:


ConfLocation=C:\Program Files\1cv8\conf
DisableUnsafeActionProtection=.*

Важный нюанс: Использование .* отключает защиту для всех информационных баз, работающих на данном сервере. Если безопасность является приоритетом, рекомендуется вместо .* вписать конкретное имя базы, предварительно экранировав спецсимволы обратным слэшем (например, My\-Base\-Name).

Решение 2: Программное управление разрешениями (БСП)

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

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


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
    
    // ... заполнение основных параметров (вид, наименование и т.д.) ...

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

    Возврат ПараметрыРегистрации;
КонецФункции

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

Решение 3: Профили безопасности (для КОРП версий)

Для крупных систем наиболее правильным и безопасным методом является использование Профилей безопасности. Этот механизм настраивается в консоли администрирования кластера 1С.

Проанализируем пошагово процесс настройки:

  1. В консоли администрирования кластера перейдем в раздел «Профили безопасности».
  2. Создадим новый профиль и в подразделе «COM-классы» добавим разрешение для Excel.Application.
  3. В свойствах информационной базы укажем созданный профиль безопасности в поле «Профиль безопасности».

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

Важные технические нюансы при работе с Excel на сервере

Даже если мы успешно отключили защиту 1С, запуск Excel под учетной записью службы (обычно USR1CV8) часто завершается неудачей. Это связано с тем, что Excel ожидает наличия определенных папок в профиле пользователя для инициализации графического интерфейса, даже если он запускается в невидимом режиме.

Проверим наличие следующих каталогов на сервере и создадим их вручную, если они отсутствуют:

Важно: Учетная запись, под которой запущен «Агент сервера 1С:Предприятие», должна иметь полные права доступа к этим папкам. Без этого создание объекта Новый COMОбъект("Excel.Application") может зависать или возвращать неочевидные ошибки доступа.

Настройка DCOM

В некоторых случаях требуется дополнительная настройка прав в компонентах Windows. Для этого:

  1. Запустите dcomcnfg (Службы компонентов).
  2. Перейдите в «Настройка DCOM» и найдите «Microsoft Excel Application».
  3. В свойствах на вкладке «Безопасность» установите переключатели в положение «Настроить» для пунктов «Разрешения на запуск и активацию» и «Разрешения на доступ».
  4. Добавьте пользователя USR1CV8 (или того, под кем работает сервер) и предоставьте ему полные права.

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

← На главную