При автоматизации процессов в 1С, например, в конфигурации Управление производственным предприятием (УПП), разработчики часто сталкиваются с механизмом «Защиты от опасных действий». Этот механизм, внедренный в платформу начиная с версии 8.3.9, блокирует программное открытие внешних обработок и отчетов, выводя интерактивное диалоговое окно. Поскольку у фонового задания нет интерфейса и пользователя, способного нажать кнопку «Да», выполнение кода прерывается ошибкой. В этой статье мы подробно разберем, как победить эту «долбаную безопасность» и обеспечить стабильную работу регламентных заданий.
Прежде чем переходить к решениям, проанализируем ситуацию. Платформа 1С считает «опасным действием» любое обращение к внешним ресурсам: открытие файлов .epf или .erf, использование COM-объектов, запуск внешних приложений. Для интерактивного сеанса это оправдано защитой от вредоносного кода, но для серверных процессов это становится непреодолимым барьером. Установить УстановитьПривилегированныйРежим(Истина) в данном случае не помогает, так как защита срабатывает на более высоком уровне платформы, проверяя настройки конкретного пользователя или всей информационной базы.
Самый простой и правильный с точки зрения архитектуры способ — это управление флагами безопасности в карточке пользователя. Если ваше регламентное задание выполняется «от имени» конкретного пользователя, мы можем точечно отключить для него проверку.
Выполним следующие шаги:
Robot_Reports).Проанализируем ситуацию: теперь, когда регламентное задание стартует под этим пользователем, платформа будет доверять его действиям и не станет выбрасывать окно предупреждения. Это наиболее безопасный метод, так как защита отключается не для всей системы, а только для одного доверенного процесса.
Если пользователей много или регламентные задания запускаются без привязки к конкретному пользователю информационной базы (под системной учетной записью), можно применить радикальный метод — редактирование конфигурационного файла платформы 1С.
Рассмотрим порядок действий:
C:\Program Files\1cv8\conf).conf.cfg.
DisableUnsafeActionProtection=.*
Разберем, что это дает. Параметр DisableUnsafeActionProtection позволяет перечислить через запятую маски имен информационных баз, для которых защита будет полностью отключена. Символ .* означает «для всех баз». Если мы хотим отключить защиту только для конкретной базы WorkBase, код будет выглядеть так:
DisableUnsafeActionProtection=WorkBase
Важный момент: на сервере 1С:Предприятия этот файл должен располагаться в папке conf именно того экземпляра платформы, который обслуживает вашу базу.
Для систем, работающих в клиент-серверном варианте, наиболее профессиональным решением будет использование Профилей безопасности. Это позволяет тонко настроить разрешения на уровне кластера серверов.
Посмотрим, как это настроить в консоли администрирования кластера:
UnrestrictedReports).После этого любые программные действия, выполняемые в рамках этой базы, будут считаться доверенными, если они разрешены настройками профиля.
Если в вашей конфигурации (даже в старой УПП) внедрена БСП (Библиотека стандартных подсистем), мы рекомендуем не обращаться к внешним файлам по прямым путям. Вместо этого лучше использовать механизм дополнительных отчетов.
Проанализируем пример кода для запуска отчета, который уже загружен в систему и поэтому считается доверенным:
// Ссылка на элемент справочника ДополнительныеОтчетыИОбработки
СсылкаНаОтчет = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("МойОтчетДляРассылки");
// Получаем объект обработки через механизмы БСП
ВнешнийОбъект = ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(СсылкаНаОтчет);
// Вызываем метод формирования
ВнешнийОбъект.СформироватьОтчет();
В этом случае платформа понимает, что файл уже был «одобрен» администратором при загрузке в справочник, и не задает лишних вопросов при выполнении регламентного задания.
Как отмечают опытные разработчики, иногда достаточно один раз «подружиться» с файлом. Если зайти в систему под тем же пользователем, под которым работает регламентное задание, и вручную открыть этот внешний отчет, платформа выведет окно с вопросом. Если в этом окне нажать «Разрешить» (и, если есть возможность, установить флаг «Больше не спрашивать»), система запомнит выбор для данной пары «Пользователь - Путь к файлу».
Однако этот метод ненадежен: при изменении версии платформы, переносе базы или даже простом перемещении файла в другую папку защита сработает снова. Поэтому мы рекомендуем использовать Решение 1 или Решение 2 как основные.
Подводя итог нашему разбору, можно выделить следующую стратегию действий:
conf.cfg. Это самый быстрый способ.РегламентныхЗаданий и снимите у него флаг «Защита от опасных действий» в конфигураторе.Помните, что безопасность в 1С — это не препятствие, а инструмент, который требует правильной настройки. Правильно сконфигурированная система позволит вашим фоновым заданиям работать как часы, не отвлекаясь на интерактивные запросы.