При работе с современными версиями платформы 1С:Предприятие 8.3 (начиная с 8.3.9 и выше) разработчики часто сталкиваются с механизмом «Защиты от опасных действий». Этот механизм предназначен для предотвращения несанкционированного выполнения потенциально вредоносного кода, такого как запуск внешних программ, использование COM-объектов или загрузка внешних компонент. Однако в корпоративной среде, когда необходимо автоматизировать выгрузку данных в Excel через регламентные задания, эта защита может стать серьезным препятствием.
Рассмотрим ситуацию: регламентное задание запускает внешнюю обработку на сервере, которая должна создать объект Excel.Application. Вместо привычного результата мы получаем ошибку: «Ошибка при работе с регулярными выражениями. Код ошибки - 10301 (U_REGEX_RULE_SYNTAX)». Выясним причину этой проблемы и разберем несколько способов ее решения — от быстрого «обхода» до правильной системной настройки.
Проанализируем, почему возникает ошибка с кодом 10301. В платформе 1С настройка исключений для защиты от опасных действий выполняется в конфигурационном файле conf.cfg с помощью параметра DisableUnsafeActionProtection. Важно понимать, что значение этого параметра — это не просто список имен баз через запятую, а полноценное регулярное выражение.
Если в имени вашей информационной базы присутствуют спецсимволы (например, дефис, точка, нижнее подчеркивание в определенных позициях) и вы просто вписали имя базы в файл, движок регулярных выражений может выдать синтаксическую ошибку. Именно это и означает код 10301. Система пытается сопоставить имя текущей базы с паттерном в conf.cfg, но не может распарсить само выражение.
Если нам необходимо срочно восстановить работоспособность выгрузки и мы доверяем коду, исполняемому на сервере, мы можем использовать маску, разрешающую опасные действия для всех баз данного кластера. Рассмотрим этот способ подробнее.
conf.cfg. Обычно он располагается в каталоге установки платформы в папке conf (например, C:\Program Files\1cv8\conf\conf.cfg).DisableUnsafeActionProtection.Пример настройки в файле:
ConfLocation=C:\Program Files\1cv8\conf
DisableUnsafeActionProtection=.*
Важный нюанс: Использование .* отключает защиту для всех информационных баз, работающих на данном сервере. Если безопасность является приоритетом, рекомендуется вместо .* вписать конкретное имя базы, предварительно экранировав спецсимволы обратным слэшем (например, My\-Base\-Name).
Если ваша конфигурация построена на базе «1С:Библиотека стандартных подсистем» (БСП), правильнее будет не отключать защиту глобально, а предоставить конкретной внешней обработке необходимые права в момент её регистрации в справочнике «Дополнительные отчеты и обработки». Разберем, как это сделать в коде модуля внешней обработки.
В функции СведенияОВнешнейОбработке() необходимо заполнить таблицу разрешений. Посмотрим на пример кода:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
// ... заполнение основных параметров (вид, наименование и т.д.) ...
// Добавляем разрешение на создание COM-объекта Excel
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("Excel.Application", "{00024500-0000-0000-C000-000000000046}");
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
// Если обработка работает с файлами, добавим разрешение на временный каталог
РазрешениеВременныеФайлы = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина);
ПараметрыРегистрации.Разрешения.Добавить(РазрешениеВременныеФайлы);
Возврат ПараметрыРегистрации;
КонецФункции
После внесения этих изменений внешнюю обработку нужно обновить в справочнике. При записи система предложит применить указанные разрешения. Это позволит коду выполняться без возникновения окна предупреждения и без глобального отключения защитных механизмов платформы.
Для крупных систем наиболее правильным и безопасным методом является использование Профилей безопасности. Этот механизм настраивается в консоли администрирования кластера 1С.
Проанализируем пошагово процесс настройки:
Excel.Application.В этом случае платформа будет четко знать, что данной базе разрешено создавать конкретный COM-объект, и блокировка срабатывать не будет.
Даже если мы успешно отключили защиту 1С, запуск Excel под учетной записью службы (обычно USR1CV8) часто завершается неудачей. Это связано с тем, что Excel ожидает наличия определенных папок в профиле пользователя для инициализации графического интерфейса, даже если он запускается в невидимом режиме.
Проверим наличие следующих каталогов на сервере и создадим их вручную, если они отсутствуют:
C:\Windows\SysWOW64\config\systemprofile\DesktopC:\Windows\System32\config\systemprofile\DesktopВажно: Учетная запись, под которой запущен «Агент сервера 1С:Предприятие», должна иметь полные права доступа к этим папкам. Без этого создание объекта Новый COMОбъект("Excel.Application") может зависать или возвращать неочевидные ошибки доступа.
В некоторых случаях требуется дополнительная настройка прав в компонентах Windows. Для этого:
dcomcnfg (Службы компонентов).USR1CV8 (или того, под кем работает сервер) и предоставьте ему полные права.Подведем итог: проблема с защитой от опасных действий при запуске COM-объектов решается либо через тонкую настройку регулярных выражений в conf.cfg, либо (что более правильно) через использование механизмов БСП и профилей безопасности кластера 1С.