Как отключить защиту от опасных действий для регламентного задания в 1С:Предприятие?

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

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

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

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

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

Когда интерактивный пользователь пытается выполнить такое действие (например, вручную открывает внешнюю обработку), система показывает предупреждающее диалоговое окно с вопросом: «Вы доверяете этому источнику?». Если действие инициировано регламентным заданием, интерактивный диалог невозможен. Платформа расценивает отсутствие ответа как отказ и немедленно прерывает выполнение потока фонового сеанса, генерируя ошибку. Наша задача — объяснить платформе, что выполняемый код безопасен и не требует интерактивного подтверждения.

---

Способ 1. Назначение специального пользователя для регламентного задания (Рекомендуемый метод)

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

Шаг 1. Создание служебного пользователя в Конфигураторе

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

Шаг 2. Привязка пользователя к регламентному заданию

Теперь нам необходимо указать созданного пользователя в свойствах нашего регламентного задания. Это можно сделать двумя способами:

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


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

---

Способ 2. Программное отключение защиты при подключении внешней обработки

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

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

Пример 1. Создание объекта внешней обработки из файла на диске:


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

// Передаем ОписаниеЗащиты третьим параметром в метод Создать()
ПутьКФайлу = "C:\ExternalReports\MyProcess.epf";
ОбработкаОбъект = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь, ОписаниеЗащиты);
ОбработкаОбъект.ВыполнитьКоманду();

Пример 2. Подключение внешней обработки через менеджер внешних обработок:


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

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

Если ваша конфигурация построена на базе БСП (Библиотека Стандартных Подсистем), рекомендуется использовать встроенные методы библиотеки. Например, функция ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений() возвращает уже готовый и преднастроенный объект защиты. Это позволяет избежать ошибок совместимости при обновлении платформы:


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

---

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

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

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

Проанализируем шаги по настройке файла conf.cfg:

Шаг 1. Поиск конфигурационного файла

Расположение файла зависит от операционной системы, под управлением которой работает сервер «1С:Предприятие»:

Шаг 2. Редактирование файла conf.cfg

Откроем файл текстовым редактором с правами администратора (или суперпользователя root в Linux) и добавим параметр DisableUnsafeActionProtection. Этот параметр принимает строку, содержащую регулярные выражения (разделенные точкой с запятой), определяющие маски имен или путей к базам данных, для которых защиту нужно отключить.

Рассмотрим примеры настройки параметра:

Внимание! Избегайте синтаксических ошибок в регулярных выражениях. Если вы некорректно укажете маску (например, забудете экранировать спецсимволы или оставите висячую точку), сервер 1С при обращении к базе выдаст критическую ошибку следующего вида: Ошибка при работе с регулярными выражениями. Код ошибки - 10301 (U_REGEX_RULE_SYNTAX). Наиболее универсальным и безопасным шаблоном для полного отключения защиты является строка:

DisableUnsafeActionProtection=.*;

После внесения изменений в файл conf.cfg перезапуск службы сервера «1С:Предприятие» обычно не требуется, изменения вступают в силу для всех новых сеансов и фоновых заданий автоматически.

---

Особый случай: Опасные действия внутри самой внешней обработки

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

Если это происходит, проанализируем следующие варианты решения:

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

Резюме

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

← На главную