Как исправить ошибку «Установлен безопасный режим. Выполнение операции запрещено» при обмене с банком в 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При выполнении типовых операций (например, в обработке «Обмен с банком» или при выгрузке данных) в клиент-серверном режиме работы 1С:Предприятия может возникать исключительная ситуация: «Установлен безопасный режим. Выполнение операции запрещено». Ошибка чаще всего проявляется на серверных строках кода, связанных с обращением к файловой системе, например: ПотокВыгрузки.Записать(ИмяВременногоФайла, Кодир); или Текст.Записать(...).

Разберем детально, почему возникает данное ограничение платформы и какими способами можно локализовать и устранить эту проблему.

Попытка просто «снять» ограничение в месте падения с помощью вызова функции отключения приведет к новой ошибке:


// Попытка снять безопасный режим перед записью файла:
УстановитьБезопасныйРежим(Ложь);
ПотокВыгрузки.Записать(ИмяВременногоФайла, Кодир);
// Результат: Ошибка "В данной процедуре/функции не был установлен безопасный режим"

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

Способ 1. Проверка безопасного режима в расширениях конфигурации

Наиболее распространенная причина наложения безопасного режима на типовые механизмы — работа расширений (патчей или кастомных доработок). Если код типовой обработки вызывается через перехватчик расширения (аннотации &Вместо, &Перед, &После), и для расширения включен безопасный режим, весь вложенный контекст исполнения становится ограниченным.

  1. Откроем список установленных расширений в режиме «1С:Предприятие» через раздел «Администрирование» → «Печатные формы, отчеты и обработки» → «Расширения» (либо в Конфигураторе: «Конфигурация» → «Расширения конфигурации»).
  2. Найдем расширения, влияющие на функционал обмена или общие модули.
  3. Снимем для них флаг «Безопасный режим», а также флаг «Защита от опасных действий».
  4. Перезапустим сеанс пользователя и повторим операцию.

Способ 2. Проверка профилей безопасности в кластере серверов 1С

Если база работает в клиент-серверном варианте (SQL), безопасный режим может накладываться настройками самой информационной базы в кластере серверов.

  1. Запустим консоль администрирования кластера серверов 1С:Предприятия.
  2. Откроем ветку «Информационные базы» и перейдем в «Свойства» нужной базы.
  3. Проверим значения параметров «Профиль безопасности» и «Профиль безопасности безопасного режима».
  4. Если жесткая изоляция не требуется, очистим указанные поля.
  5. Если профили безопасности используются политикой предприятия, откроем соответствующий профиль и добавим виртуальный каталог с полным доступом к временным папкам сервера 1С, куда платформа генерирует файлы выгрузки.

Способ 3. Отключение «Защиты от опасных действий» для пользователя

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

  1. Откроем базу в режиме «Конфигуратор».
  2. Перейдем в меню «Администрирование» → «Пользователи».
  3. Откроем карточку пользователя, у которого воспроизводится ошибка, и снимем признак «Защита от опасных действий».
  4. Сохраним изменения.

Способ 4. Анализ стека вызовов и параметров фонового задания

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

  1. Включим отладку на сервере 1С.
  2. Установим точку останова в месте падения на строке записи файла.
  3. В момент остановки откроем окно «Стек вызовов» и пройдем вверх по цепочке вызовов до процедуры запуска фонового задания (обычно это модуль ДлительныеОперации и вызов функции ЗапуститьВыполнениеВФоне).
  4. Проверим структуру ПараметрыВыполнения: убедимся, что свойство БезопасныйРежим имеет значение Ложь или не инициализировано принудительно в Истина.

Способ 5. Корректное сохранение файлов через временный каталог

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


// Формирование корректного пути к временному файлу на сервере:
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("txt");
ПотокВыгрузки = Новый ЗаписьТекста(ИмяВременногоФайла, КодировкаТекста.ANSI);
ПотокВыгрузки.ЗаписатьСтроку(ТекстДанных);
ПотокВыгрузки.Закрыть();

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

← На главную