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

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

При разработке серверных механизмов, таких как регламентные задания, программисты часто сталкиваются с необходимостью динамического подключения внешних обработок. Начиная с версии платформы 8.3.9, компания 1С внедрила механизм защиты от опасных действий. Этот механизм призван обезопасить систему от выполнения вредоносного кода, который может содержаться в файлах .epf или .erf. Однако при работе на сервере (особенно в фоновых заданиях) этот механизм создает проблему: система пытается вывести диалоговое окно с вопросом "Разрешить открывать данный файл?", но так как сеанс серверный, нажать на кнопку некому, и выполнение кода прерывается с ошибкой.

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

Причина возникновения ошибки на сервере

Рассмотрим ситуацию: нам нужно вызвать экспортную процедуру из внешней обработки внутри регламентного задания. Мы используем стандартный метод ВнешниеОбработки.Создать(ПутьКФайлу, Ложь). В журнале регистрации мы видим предупреждение безопасности. Проблема заключается в том, что по умолчанию параметр ЗащитаОтОпасныхДействий в методах платформы имеет значение, инициализирующее проверку. Если файл не внесен в список доверенных или у пользователя не отключена соответствующая настройка, серверная транзакция будет прервана.

Способ 1. Программное управление защитой через ОписаниеЗащитыОтОпасныхДействий

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

Сначала нам необходимо прочитать файл обработки в двоичные данные и поместить их во временное хранилище. Это позволит платформе работать с объектом в памяти сервера. Затем мы создадим специальный объект ОписаниеЗащитыОтОпасныхДействий, в котором явно укажем, что предупреждать пользователя не нужно.

Проанализируем пример кода:


// 1. Читаем файл обработки в двоичные данные
ДвоичныеДанныеОбработки = Новый ДвоичныеДанные(ПутьКФайлу);

// 2. Помещаем данные во временное хранилище
АдресВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеОбработки);

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

// 4. Подключаем обработку, передавая настройки защиты
// Третий параметр (Ложь) — это БезопасныйРежим
ИмяОбработки = ВнешниеОбработки.Подключить(АдресВХранилище, , Ложь, ОписаниеЗащиты);

// 5. Теперь создаем объект обработки по его внутреннему имени
ОбработкаОбъект = ВнешниеОбработки.Создать(ИмяОбработки);

// 6. Вызываем необходимую экспортную процедуру
ОбработкаОбъект.ИмяВашейПроцедуры();

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

Способ 2. Административное отключение защиты для пользователя

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

Рассмотрим пошагово действия в Конфигураторе:

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

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

Нюансы работы в безопасном режиме

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

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

Дополнительные методы настройки (для системных администраторов)

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

Пример записи в conf.cfg:

DisableDangerousActionProtection=my_server/my_base;another_server/.*

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

Особенности доступа на уровне операционной системы

Выясним еще одну важную деталь. Когда сервер 1С пытается открыть файл по пути ПутьКФайлу, он делает это от имени пользователя операционной системы, под которым запущена служба 1C:Enterprise 8.3 Server Agent (обычно это USR1CV8).

Рассмотрим контрольный список действий при возникновении ошибок доступа:

  1. Убедитесь, что файл .epf лежит в папке, к которой у пользователя USR1CV8 есть права на "Чтение" и "Выполнение".
  2. Если путь сетевой (например, \\Server\Share\File.epf), убедитесь, что служба запущена не от имени локальной системной учетной записи, а от имени доменного пользователя, имеющего доступ к этой шаре.
  3. Проверьте, что путь к файлу является абсолютным и доступным именно с сервера, а не с вашего локального компьютера.

Заключение и рекомендации

Мы проанализировали основные способы подключения внешних обработок на сервере. Резюмируем наши выводы:

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

← На главную