При автоматизации рутинных задач в 1С часто требуется запускать внешние обработки по расписанию через справочник дополнительных отчетов и обработок или механизм регламентных заданий. Однако при выполнении фонового задания разработчики и администраторы нередко сталкиваются с ситуацией, когда обработка не отрабатывает, а в журнале регистрации появляется запись с ошибкой Предупреждение безопасности: Открывается "ИмяОбработки"... Рекомендуется обращать внимание на источник... Разрешить открывать данный файл?
Поскольку регламентное задание выполняется в фоновом неинтерактивном сеансе, система не может показать модальное окно с вопросом пользователю. В результате платформа 1С аварийно прерывает выполнение операции. Разберем причины возникновения этой ошибки и детально рассмотрим все способы её решения.
Проанализируем механизм работы платформы 1С:Предприятие 8.3. Защита от опасных действий была внедрена для предотвращения несанкционированного выполнения внешнего кода (подключение внешних обработок, внешних компонент, запуск исполняемых файлов ОС). По умолчанию данный механизм включен для всех пользователей и требует интерактивного подтверждения действия.
В случае фонового выполнения регламентного задания интерактивный диалог невозможен. Если для сеанса регламентного задания не отключен контроль опасных действий, платформа блокирует подключение внешнего файла. Рассмотрим подробнее основные способы устранения этой проблемы.
Это классический и самый надежный способ настройки выполнения регламентных процедур без необходимости правки конфигурационных файлов сервера.
Разберем по шагам порядок действий:
РегламентныйПользователь) или выберем существующую техническую учетную запись.Теперь фоновое задание будет стартовать в контексте учетной записи с отключенной защитой и успешно выполнять подключение внешней обработки.
Если пользователей много или требуется массово снять флаг предупреждений для служебных учетных записей, воспользуемся программным методом через объектную модель платформы.
Посмотрим на пример программного кода для пакетного отключения защиты:
Для Каждого ТекПользователь Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
ТекПользователь.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь;
ТекПользователь.Записать();
КонецЦикла;
После выполнения данного кода в привилегированном режиме у всех учетных записей свойство ПредупреждатьОбОпасныхДействиях примет значение Ложь.
Если используется клиент-серверный вариант работы, регламентные задания исполняются рабочими процессами rphost непосредственно на сервере 1С. Внесение изменений в локальный файл conf.cfg на рабочей станции администратора не окажет влияния на серверные фоновые задания.
Разберем, как настроить серверный конфигурационный файл:
conf.cfg на сервере 1С:Предприятия. Обычно он располагается в каталоге конкретной версии (например, C:\Program Files\1cv8\8.3.XX.XXXX\bin\conf\) или в общем каталоге конфигурации сервера (C:\Program Files\1cv8\conf\).DisableUnsafeActionProtection. Для полного отключения проверки по регулярному выражению для всех баз укажем:
DisableUnsafeActionProtection=.*
Если требуется отключить проверку только для конкретной информационной базы, укажем её имя:
DisableUnsafeActionProtection=ИмяБазы;
1C:Enterprise 8.3 Server Agent.Если запуск внешней обработки выполняется из собственного программного кода регламентного задания или общего модуля, мы можем явно передать параметры защиты при вызове менеджера внешних обработок.
Посмотрим на пример использования объекта ОписаниеЗащитыОтОпасныхДействий:
Защита = Новый ОписаниеЗащитыОтОпасныхДействий;
Защита.ПредупреждатьОбОпасныхДействиях = Ложь;
// Вариант 1: Создание объекта из файла на диске
ОбработкаОбъект = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь, Защита);
// Вариант 2: Подключение обработки из временного хранилища
ИмяПодключенной = ВнешниеОбработки.Подключить(АдресВХранилище, , Ложь, Защита);
ОбработкаОбъект = ВнешниеОбработки.Создать(ИмяПодключенной);
Использование третьего параметра в методе ВнешниеОбработки.Создать() или четвертого параметра в ВнешниеОбработки.Подключить() позволяет безопасно инициализировать внешние модули в автоматическом режиме без прерывания сеанса.