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