Разработка и Конфигурация · 11 мин
Как отключить безопасный режим во внешней обработке 1С
Как отключить безопасный режим при подключении внешней обработки в 1С: параметры ВыполнитьВБезопасномРежиме, разрешения пользователя, настройки профиля групп доступа и типичные ошибки.
Безопасный режим в 1С автоматически включается при открытии внешних обработок и отчётов — платформа ограничивает выполнение кода, чтобы недоверенный модуль не получил доступ к файловой системе, COM-объектам, внешним компонентам и привилегированным операциям. Иногда это мешает легитимной работе: обработка не может прочитать файл, обратиться к веб-сервису или выполнить запрос в привилегированном режиме. Тогда возникает задача отключить безопасный режим — полностью или точечно.
Способов несколько: параметр при программном подключении, флажок в диалоге открытия файла, разрешения в профиле групп доступа, настройка в справочнике дополнительных отчётов и обработок, а также отключение безопасного режима внутри самого кода. Выбор зависит от того, открываете вы обработку вручную, подключаете её через БСП или запускаете из своего кода.
Важно понимать: безопасный режим существует не для усложнения жизни разработчика, а для защиты данных. Отключать его стоит только для обработок из доверенных источников, код которых вы просмотрели или которым доверяет поставщик. Ниже разобраны все рабочие способы, их ограничения и типичные ошибки.
Что такое безопасный режим и когда он включается
Безопасный режим — это состояние исполнения кода, при котором платформа блокирует потенциально опасные операции: доступ к файловой системе сервера и клиента, запуск внешних приложений, загрузку внешних компонент, использование COM-объектов и OLE, выполнение кода через Выполнить() и Вычислить() вне ограничений, а также привилегированный режим. Полный перечень ограничений описан в синтакс-помощнике по методу УстановитьБезопасныйРежим().
Платформа включает безопасный режим автоматически в нескольких ситуациях: при открытии внешней обработки или отчёта через «Файл — Открыть», при выполнении кода из дополнительных отчётов и обработок БСП, при вызове веб-сервисов и HTTP-сервисов расширений без соответствующих разрешений, а также в регламентных заданиях, если разработчик явно установил режим. Кроме того, безопасный режим может наследоваться из вызывающего контекста.
Проверка, что обработка действительно работает в безопасном режиме
Прежде чем отключать режим, убедитесь, что проблема именно в нём. Характерные признаки: ошибки вида «Операция не разрешена в безопасном режиме», невозможность создать COMОбъект, сбой при чтении файла с диска, ошибка при установке привилегированного режима. Текст ошибки обычно прямо указывает на безопасный режим.
Программно проверить текущее состояние можно функцией БезопасныйРежим(), которая возвращает Истина, если режим включён. Добавьте временное сообщение в начало обработки — это самый надёжный способ диагностики:
Сообщить("Безопасный режим: " + БезопасныйРежим());Если функция возвращает Истина, а обработке нужны ограниченные операции — переходите к одному из способов отключения ниже. Если возвращает Ложь, а ошибка всё равно есть, причина в другом: правах пользователя, профиле безопасности кластера или логике самого кода.
Способ 1. Отключение в коде через УстановитьБезопасныйРежим
Метод УстановитьБезопасныйРежим(Ложь) отключает безопасный режим для текущего сеанса исполнения кода. Его можно вызвать только из кода, который сам выполняется не в безопасном режиме, либо из кода конфигурации — из недоверенного внешнего модуля вызов будет проигнорирован или вызовет ошибку, в зависимости от контекста.
Типовой сценарий — обернуть опасную операцию в попытку и вернуть режим обратно после выполнения, чтобы не оставлять сеанс незащищённым:
УстановитьБезопасныйРежим(Ложь);
Попытка
// операции с файлами, COM, привилегированный режим
УстановитьПривилегированныйРежим(Истина);
// ...
УстановитьПривилегированныйРежим(Ложь);
Исключение
УстановитьБезопасныйРежим(Истина);
ВызватьИсключение;
КонецПопытки;
УстановитьБезопасныйРежим(Истина);
Способ 2. Параметры при программном подключении обработки
Если вы подключаете внешнюю обработку из своего кода, безопасный режим задаётся параметрами методов платформы. У метода ВнешниеОбработки.Подключить() есть параметры, среди которых — имя подключения и признак безопасного режима. Аналогично метод Создать() у менеджера внешних обработок после подключения создаёт объект в том режиме, который был указан при подключении.
ИмяОбработки = ВнешниеОбработки.Подключить(
"C:\Обработки\МояОбработка.epf",
"МояОбработка",
Ложь); // БезопасныйРежим = Ложь
Обработка = ВнешниеОбработки.Создать(ИмяОбработки, Ложь);
Для внешних отчётов логика та же — используются ВнешниеОтчеты.Подключить() и ВнешниеОтчеты.Создать() с аналогичными параметрами. Учтите: в клиент-серверном варианте путь к файлу должен быть доступен с того компьютера, где выполняется код (сервер или клиент), иначе подключение завершится ошибкой ещё до вопроса о безопасном режиме.
Способ 3. Разрешения в профиле групп доступа и в БСП
В конфигурациях на Библиотеке стандартных подсистем (УТ, ERP, БП и другие) внешние обработки обычно подключаются через справочник «Дополнительные отчеты и обработки». При регистрации обработки система запрашивает разрешения — их можно подтвердить вручную. Если разрешения подтверждены администратором, обработка выполняется с нужным уровнем доступа, а запросы платформы не блокируются безопасным режимом.
Порядок действий: откройте «Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки», загрузите файл, в карточке перейдите на закладку разрешений и подтвердите требуемые. Если подтверждение запрещено политикой, понадобится администратор с правом интерактивного открытия внешних обработок.
На уровне прав пользователя проверьте профиль групп доступа: роль «Интерактивное открытие внешних отчетов и обработок» и соответствующие разрешения профиля. Без неё пользователь вообще не сможет открыть файл, и вопрос безопасного режима будет вторичен.
- 1Откройте Администрирование — Дополнительные отчеты и обработки
- 2Загрузите файл обработки и запишите карточку
- 3Перейдите к разрешениям и подтвердите необходимые
- 4Проверьте у пользователя роль интерактивного открытия внешних обработок
- 5Запустите обработку и убедитесь, что ошибка безопасного режима исчезла
Способ 4. Ручное открытие файла и диалог предупреждения
При открытии внешней обработки через «Файл — Открыть» платформа показывает предупреждение о безопасности. Даже после подтверждения код по умолчанию выполняется с ограничениями безопасного режима. Повлиять на это можно только со стороны вызывающего кода или настроек — сам пользовательский диалог режим не переключает.
Поэтому для ручного сценария рабочие варианты такие: обернуть запуск в небольшую свою обработку-запускатор, которая подключает нужный файл с безопасным режимом = Ложь; либо зарегистрировать обработку в справочнике дополнительных обработок с подтверждёнными разрешениями. Первый вариант быстрее для разовых задач, второй — правильнее для постоянного использования.
Сравнение способов
Подходит для точечного отключения внутри доверенного кода конфигурации. Не работает, если сам вызывающий код уже в безопасном режиме из недоверенного источника.
Удобен при программном запуске из своих механизмов. Требует доступности файла по указанному пути и прав на подключение.
Правильный путь для пользователей: разрешения подтверждает администратор один раз. Требует конфигурации на БСП.
Быстрое решение для разовых задач и тестирования. Не подходит как постоянный механизм для всех пользователей.
Ограничения и частые ошибки
Главное ограничение: код, выполняющийся в безопасном режиме, не может сам себя из него вывести. Если обработка открыта платформой в безопасном режиме, вызов УстановитьБезопасныйРежим(Ложь) внутри её модуля не сработает так, как ожидается, — режим должен быть снят снаружи, вызывающей стороной или настройками подключения.
В файловом и клиент-серверном вариантах поведение может отличаться: на сервере путь к файлу другой, а профили безопасности кластера могут дополнительно ограничивать файловый доступ независимо от безопасного режима встроенного языка. Если после отключения режима доступ к файлам всё равно запрещён, проверьте профили безопасности в консоли кластера.
Как проверить результат
Возвращает Ложь при отключённом режиме
Возвращает Истина — режим не снят, проверяйте способ подключения
Операция выполняется без ошибок
Ошибка «не разрешено в безопасном режиме» или отказ профиля безопасности кластера
Нет ошибок доступа и безопасности
Ошибки прав доступа — проблема в ролях, а не в безопасном режиме
Частые вопросы
Можно ли отключить безопасный режим для всех внешних обработок сразу?
Глобального переключателя в платформе нет. Режим задаётся контекстом вызова: параметрами подключения, настройками БСП или кодом. Массово управлять поведением можно через справочник дополнительных отчётов и обработок с подтверждёнными разрешениями.
Почему УстановитьБезопасныйРежим(Ложь) внутри обработки не помогает?
Код, уже исполняющийся в безопасном режиме, не может самостоятельно его снять — иначе защита не имела бы смысла. Снимать режим нужно в вызывающем коде конфигурации или через параметры подключения обработки.
Чем безопасный режим отличается от привилегированного?
Это разные механизмы. Привилегированный режим отключает проверку прав доступа к данным, безопасный — блокирует опасные операции (файлы, COM, внешние компоненты). Они могут сочетаться: например, в безопасном режиме установка привилегированного режима запрещена.
Обработка работает в файловой базе, но не в клиент-серверной. При чём тут безопасный режим?
Часто дело не в режиме, а в профилях безопасности кластера серверов 1С, которые ограничивают файловый доступ на сервере. Проверьте настройки профиля безопасности в консоли кластера и доступность пути к файлу именно с сервера.
Безопасно ли отключать режим для обработки от контрагента?
Только после просмотра кода модуля в конфигураторе. Внешняя обработка с отключённым режимом может читать любые данные базы и передавать их наружу. Для проверки запустите её сначала в копии базы.
Что важно запомнить
Безопасный режим снимается не изнутри обработки, а снаружи: параметром при подключении, вызовом УстановитьБезопасныйРежим(Ложь) в доверенном коде или подтверждением разрешений в дополнительных отчётах и обработках БСП. Диагностируйте режим функцией БезопасныйРежим(), возвращайте защиту после опасных операций и не отключайте режим для непроверенного кода.