Как исправить ошибку «Установлен безопасный режим» при загрузке файлов через «Универсальный обмен данными XML»

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

При выполнении интеграционных задач, связанных с переносом данных между базами 1С (например, при переходе с УПП на ERP или обмене между филиалами), программисты часто сталкиваются с ситуацией, когда стандартная обработка Универсальный обмен данными XML отказывается загружать присоединенные файлы. Проблема проявляется на этапе записи файла в том хранения или при создании каталогов на диске. Система выдает критическую ошибку: «Установлен безопасный режим. Выполнение операции запрещено». Рассмотрим детально, почему это происходит и как обойти данное ограничение, сохранив работоспособность обмена.

Причина возникновения ошибки в контексте платформы и БСП

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

  1. Работа с файловой системой (чтение, запись, создание каталогов), особенно по сетевым путям (UNC).
  2. Использование COM-объектов.
  3. Выполнение внешних компонент.
  4. Установка соединений с интернет-ресурсами.

В современных конфигурациях, таких как 1С:ERP, Комплексная автоматизация или Управление торговлей, активно используется Библиотека стандартных подсистем (БСП). Особенность заключается в том, что внешние обработки, запущенные интерактивно, часто принудительно переводятся платформой или самой логикой БСП в безопасный режим. В случае с обработкой Универсальный обмен данными XML, ограничение может быть жестко прописано в коде самой обработки в модуле формы или в процедурах инициализации на сервере.

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Объект.БезопасныйРежим = Истина;
КонецПроцедуры

Эта установка приводит к тому, что весь последующий код, выполняемый в контексте этой обработки (включая обработчики событий в правилах обмена ПослеЗагрузки), будет запускаться с ограничениями безопасного режима.

Разбор стека ошибки при работе с файлами

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

{ОбщийМодуль.РаботаСФайламиСлужебныйКлиентСервер.Модуль(158)}: Ошибка при вызове конструктора (Файл): КаталогНаДиске = Новый Файл(ПолныйПодКаталог); по причине: Установлен безопасный режим. Выполнение операции запрещено.

Здесь важно понимать, что конструктор Новый Файл в безопасном режиме разрешен только для временных файлов. При попытке инициализировать объект Файл для пути к сетевому тому (например, \\srv-db10\erp_files\), платформа моментально блокирует операцию, так как это выходит за рамки разрешенного «песочницы» безопасного режима.

Метод 1: Программное отключение безопасного режима в коде обработки

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

Для этого в обработке или в коде правил обмена (если вы правите правила в КД) необходимо использовать метод УстановитьОтключениеБезопасногоРежима. Это позволит временно игнорировать ограничения платформы для выполнения файловых операций.

Пример реализации алгоритма:


// Сохраняем текущее состояние безопасного режима
ТекущийБезопасныйРежим = БезопасныйРежим();

// Отключаем безопасный режим для выполнения записи на диск
УстановитьОтключениеБезопасногоРежима(Истина);

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

// Возвращаем настройки в исходное состояние, если режим был включен
Если ТекущийБезопасныйРежим Тогда 
    УстановитьБезопасныйРежим(Истина); 
КонецЕсли;

Важный нюанс: Метод УстановитьОтключениеБезопасногоРежима(Истина) сработает только в том случае, если у пользователя есть соответствующие права администратора, и код выполняется на стороне сервера.

Метод 2: Использование подсистемы «Дополнительные отчеты и обработки»

Вместо того чтобы открывать обработку Универсальный обмен данными XML через меню «Файл — Открыть», мы рекомендуем зарегистрировать ее в справочнике Дополнительные отчеты и обработки. Это штатный механизм БСП, который позволяет управлять безопасностью внешнего кода более гибко.

Разберем шаги настройки:

  1. Перейдите в раздел Администрирование — Печатные формы, отчеты и обработки.
  2. Загрузите обработку в список дополнительных обработок.
  3. В карточке обработки найдите поле Режим выполнения.
  4. Установите значение Небезопасный режим (или снимите галочку «Безопасный режим» в зависимости от версии конфигурации).
  5. При сохранении система может запросить подтверждение и предупредить о рисках — подтвердите действие.

При таком запуске платформа создаст профиль безопасности (или использует существующий), который разрешит данной конкретной обработке обращаться к ресурсам операционной системы без дополнительных манипуляций с кодом SetSafeMode.

Метод 3: Настройка профилей безопасности в кластере 1С

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

Рассмотрим алгоритм действий системного администратора 1С:

  1. Откройте консоль администрирования кластера серверов 1С.
  2. Найдите вашу информационную базу и посмотрите, какой Профиль безопасности для нее назначен.
  3. Перейдите в ветку Профили безопасности и откройте свойства нужного профиля.
  4. В разделе Виртуальные ресурсы или Разрешенные каталоги добавьте путь к вашему тому хранения файлов (например, \\srv-db10\erp_files\).
  5. Обязательно установите флаг Включая подкаталоги и разрешите права на Чтение и Запись.

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

Типичные ошибки при обходе безопасного режима

Проанализируем ситуации, когда вышеописанные методы могут не сработать:

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

← На главную