В процессе разработки на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с механизмом «Защиты от опасных действий». Особенно остро эта проблема встает при вызове внешних обработок из серверных процедур или регламентных заданий, где интерактивный диалог пользователя невозможен. Рассмотрим, почему это происходит и как правильно настроить систему.
Механизм защиты от опасных действий был внедрен для предотвращения выполнения вредоносного кода. Система считает потенциально опасными действия, связанные с доступом к файловой системе, запуском внешних компонент (например, COMObject), или вызовом сторонних внешних обработок. Когда код исполняется в серверном контексте, платформа лишена возможности вывести пользователю интерактивное окно с кнопкой «Разрешить», поэтому выполнение операции блокируется с ошибкой.
Самым элегантным способом решения проблемы является использование параметров метода ВнешниеОбработки.Создать(). Если вы доверяете коду своей обработки, вы можете явно указать платформе не применять ограничения безопасности для конкретного экземпляра объекта.
Рассмотрим пример правильного вызова:
// Третий параметр отвечает за отключение защиты от опасных действий
// Второй параметр - за безопасный режим
лкОбработка = ВнешниеОбработки.Создать(ИмяВремФайла, Ложь, Ложь);
лкОбработка.лкДокумент = Ссылка;
лкОбработка.Сформировать();
Использование этого подхода позволяет избежать глобального снижения уровня безопасности всей системы и точечно разрешить выполнение нужного функционала.
Если код выполняется под конкретной учетной записью пользователя (например, интерактивно), вы можете изменить настройки безопасности в конфигураторе или режиме «1С:Предприятие». В карточке пользователя предусмотрен флаг «Защита от опасных действий». Снятие этого флага для доверенного пользователя отключит проверки для всех операций, выполняемых в его сеансе.
Для серверных процессов или регламентных заданий, которые выполняются под системными учетными записями, часто применяется глобальная настройка на уровне сервера 1С. Вы можете отредактировать файл conf.cfg, расположенный в директории установки платформы (папка conf).
Добавьте следующую строку для отключения проверок:
DisableUnsafeActionProtection=.*
Важно: Данный метод является радикальным, так как отключает защиту для всей информационной базы. После внесения изменений необходимо обязательно выполнить перезапуск службы сервера 1С.
Разберемся, почему возникают разные пути к временным файлам (например, \ZAVA\ и \PEASANT\). Проблема заключается в том, что при вызове обработки из клиентского модуля код исполняется в сеансе пользователя, а при вызове из серверного модуля или фонового задания — в сеансе пользователя ОС, от имени которого запущена служба сервера 1С (обычно это USRV1CV8).
Рекомендуем придерживаться следующих правил:
#Если Сервер Тогда.V83.COMConnector, убедитесь, что они инициализируются в безопасном режиме или что для сервера настроены соответствующие права доступа.Проанализировав ситуацию, мы пришли к выводу, что временное отключение защиты вручную — не лучший способ. Наиболее надежным решением для постоянной работы является либо программное управление параметрами метода Создать(), либо тонкая настройка прав в БСП (Библиотеке стандартных подсистем), если ваша конфигурация её поддерживает. Это позволит сохранить высокий уровень безопасности системы, предоставив при этом необходимый доступ доверенным обработкам.