К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как отключить безопасный режим во внешней обработке 1С

Как отключить безопасный режим при подключении внешней обработки в 1С: параметры ВыполнитьВБезопасномРежиме, разрешения пользователя, настройки профиля групп доступа и типичные ошибки.

Безопасный режим в 1С автоматически включается при открытии внешних обработок и отчётов — платформа ограничивает выполнение кода, чтобы недоверенный модуль не получил доступ к файловой системе, COM-объектам, внешним компонентам и привилегированным операциям. Иногда это мешает легитимной работе: обработка не может прочитать файл, обратиться к веб-сервису или выполнить запрос в привилегированном режиме. Тогда возникает задача отключить безопасный режим — полностью или точечно.

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

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

Что такое безопасный режим и когда он включается

Безопасный режим — это состояние исполнения кода, при котором платформа блокирует потенциально опасные операции: доступ к файловой системе сервера и клиента, запуск внешних приложений, загрузку внешних компонент, использование COM-объектов и OLE, выполнение кода через Выполнить() и Вычислить() вне ограничений, а также привилегированный режим. Полный перечень ограничений описан в синтакс-помощнике по методу УстановитьБезопасныйРежим().

Платформа включает безопасный режим автоматически в нескольких ситуациях: при открытии внешней обработки или отчёта через «Файл — Открыть», при выполнении кода из дополнительных отчётов и обработок БСП, при вызове веб-сервисов и HTTP-сервисов расширений без соответствующих разрешений, а также в регламентных заданиях, если разработчик явно установил режим. Кроме того, безопасный режим может наследоваться из вызывающего контекста.

Проверка, что обработка действительно работает в безопасном режиме

Прежде чем отключать режим, убедитесь, что проблема именно в нём. Характерные признаки: ошибки вида «Операция не разрешена в безопасном режиме», невозможность создать COMОбъект, сбой при чтении файла с диска, ошибка при установке привилегированного режима. Текст ошибки обычно прямо указывает на безопасный режим.

Программно проверить текущее состояние можно функцией БезопасныйРежим(), которая возвращает Истина, если режим включён. Добавьте временное сообщение в начало обработки — это самый надёжный способ диагностики:

bsl
Сообщить("Безопасный режим: " + БезопасныйРежим());

Если функция возвращает Истина, а обработке нужны ограниченные операции — переходите к одному из способов отключения ниже. Если возвращает Ложь, а ошибка всё равно есть, причина в другом: правах пользователя, профиле безопасности кластера или логике самого кода.

Способ 1. Отключение в коде через УстановитьБезопасныйРежим

Метод УстановитьБезопасныйРежим(Ложь) отключает безопасный режим для текущего сеанса исполнения кода. Его можно вызвать только из кода, который сам выполняется не в безопасном режиме, либо из кода конфигурации — из недоверенного внешнего модуля вызов будет проигнорирован или вызовет ошибку, в зависимости от контекста.

Типовой сценарий — обернуть опасную операцию в попытку и вернуть режим обратно после выполнения, чтобы не оставлять сеанс незащищённым:

УстановитьБезопасныйРежим(Ложь);

Попытка

// операции с файлами, COM, привилегированный режим

УстановитьПривилегированныйРежим(Истина);

// ...

УстановитьПривилегированныйРежим(Ложь);

Исключение

УстановитьБезопасныйРежим(Истина);

ВызватьИсключение;

КонецПопытки;

УстановитьБезопасныйРежим(Истина);

Способ 2. Параметры при программном подключении обработки

Если вы подключаете внешнюю обработку из своего кода, безопасный режим задаётся параметрами методов платформы. У метода ВнешниеОбработки.Подключить() есть параметры, среди которых — имя подключения и признак безопасного режима. Аналогично метод Создать() у менеджера внешних обработок после подключения создаёт объект в том режиме, который был указан при подключении.

ИмяОбработки = ВнешниеОбработки.Подключить(

"C:\Обработки\МояОбработка.epf",

"МояОбработка",

Ложь); // БезопасныйРежим = Ложь

Обработка = ВнешниеОбработки.Создать(ИмяОбработки, Ложь);

Для внешних отчётов логика та же — используются ВнешниеОтчеты.Подключить() и ВнешниеОтчеты.Создать() с аналогичными параметрами. Учтите: в клиент-серверном варианте путь к файлу должен быть доступен с того компьютера, где выполняется код (сервер или клиент), иначе подключение завершится ошибкой ещё до вопроса о безопасном режиме.

Способ 3. Разрешения в профиле групп доступа и в БСП

В конфигурациях на Библиотеке стандартных подсистем (УТ, ERP, БП и другие) внешние обработки обычно подключаются через справочник «Дополнительные отчеты и обработки». При регистрации обработки система запрашивает разрешения — их можно подтвердить вручную. Если разрешения подтверждены администратором, обработка выполняется с нужным уровнем доступа, а запросы платформы не блокируются безопасным режимом.

Порядок действий: откройте «Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки», загрузите файл, в карточке перейдите на закладку разрешений и подтвердите требуемые. Если подтверждение запрещено политикой, понадобится администратор с правом интерактивного открытия внешних обработок.

На уровне прав пользователя проверьте профиль групп доступа: роль «Интерактивное открытие внешних отчетов и обработок» и соответствующие разрешения профиля. Без неё пользователь вообще не сможет открыть файл, и вопрос безопасного режима будет вторичен.

Порядок действий для обработки из БСП
  1. 1
    Откройте Администрирование — Дополнительные отчеты и обработки
  2. 2
    Загрузите файл обработки и запишите карточку
  3. 3
    Перейдите к разрешениям и подтвердите необходимые
  4. 4
    Проверьте у пользователя роль интерактивного открытия внешних обработок
  5. 5
    Запустите обработку и убедитесь, что ошибка безопасного режима исчезла

Способ 4. Ручное открытие файла и диалог предупреждения

При открытии внешней обработки через «Файл — Открыть» платформа показывает предупреждение о безопасности. Даже после подтверждения код по умолчанию выполняется с ограничениями безопасного режима. Повлиять на это можно только со стороны вызывающего кода или настроек — сам пользовательский диалог режим не переключает.

Поэтому для ручного сценария рабочие варианты такие: обернуть запуск в небольшую свою обработку-запускатор, которая подключает нужный файл с безопасным режимом = Ложь; либо зарегистрировать обработку в справочнике дополнительных обработок с подтверждёнными разрешениями. Первый вариант быстрее для разовых задач, второй — правильнее для постоянного использования.

Сравнение способов

УстановитьБезопасныйРежим(Ложь) в коде

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

Параметр при Подключить()

Удобен при программном запуске из своих механизмов. Требует доступности файла по указанному пути и прав на подключение.

Дополнительные отчеты и обработки БСП

Правильный путь для пользователей: разрешения подтверждает администратор один раз. Требует конфигурации на БСП.

Обработка-запускатор

Быстрое решение для разовых задач и тестирования. Не подходит как постоянный механизм для всех пользователей.

Ограничения и частые ошибки

Главное ограничение: код, выполняющийся в безопасном режиме, не может сам себя из него вывести. Если обработка открыта платформой в безопасном режиме, вызов УстановитьБезопасныйРежим(Ложь) внутри её модуля не сработает так, как ожидается, — режим должен быть снят снаружи, вызывающей стороной или настройками подключения.

В файловом и клиент-серверном вариантах поведение может отличаться: на сервере путь к файлу другой, а профили безопасности кластера могут дополнительно ограничивать файловый доступ независимо от безопасного режима встроенного языка. Если после отключения режима доступ к файлам всё равно запрещён, проверьте профили безопасности в консоли кластера.

Типичные ошибки
01
Вызов УстановитьБезопасныйРежим(Ложь) внутри модуля самой внешней обработки — режим не снимается изнутри недоверенного кода
02
Забытый возврат УстановитьБезопасныйРежим(Истина) — весь последующий код сеанса работает без защиты
03
Путь к файлу обработки на клиенте при выполнении кода на сервере — ошибка подключения, которую путают с безопасным режимом
04
Игнорирование профилей безопасности кластера — файловый доступ блокируется даже при выключенном безопасном режиме
05
Отключение режима для непроверенной обработки из интернета — риск утечки данных базы
Контрольные точки

Как проверить результат

Значение функции БезопасныйРежим() в начале обработки
Норма

Возвращает Ложь при отключённом режиме

Тревожный признак

Возвращает Истина — режим не снят, проверяйте способ подключения

Выполнение целевой операции (файл, COM, привилегированный режим)
Норма

Операция выполняется без ошибок

Тревожный признак

Ошибка «не разрешено в безопасном режиме» или отказ профиля безопасности кластера

Журнал регистрации после запуска
Норма

Нет ошибок доступа и безопасности

Тревожный признак

Ошибки прав доступа — проблема в ролях, а не в безопасном режиме

Частые вопросы

Можно ли отключить безопасный режим для всех внешних обработок сразу?

Глобального переключателя в платформе нет. Режим задаётся контекстом вызова: параметрами подключения, настройками БСП или кодом. Массово управлять поведением можно через справочник дополнительных отчётов и обработок с подтверждёнными разрешениями.

Почему УстановитьБезопасныйРежим(Ложь) внутри обработки не помогает?

Код, уже исполняющийся в безопасном режиме, не может самостоятельно его снять — иначе защита не имела бы смысла. Снимать режим нужно в вызывающем коде конфигурации или через параметры подключения обработки.

Чем безопасный режим отличается от привилегированного?

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

Обработка работает в файловой базе, но не в клиент-серверной. При чём тут безопасный режим?

Часто дело не в режиме, а в профилях безопасности кластера серверов 1С, которые ограничивают файловый доступ на сервере. Проверьте настройки профиля безопасности в консоли кластера и доступность пути к файлу именно с сервера.

Безопасно ли отключать режим для обработки от контрагента?

Только после просмотра кода модуля в конфигураторе. Внешняя обработка с отключённым режимом может читать любые данные базы и передавать их наружу. Для проверки запустите её сначала в копии базы.

Итог

Что важно запомнить

Безопасный режим снимается не изнутри обработки, а снаружи: параметром при подключении, вызовом УстановитьБезопасныйРежим(Ложь) в доверенном коде или подтверждением разрешений в дополнительных отчётах и обработках БСП. Диагностируйте режим функцией БезопасныйРежим(), возвращайте защиту после опасных операций и не отключайте режим для непроверенного кода.