Как разрешить чтение XML файлов во внешних обработках 1С и обойти ограничения безопасного режима

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

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

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

Разбор механизма безопасного режима

Для начала проанализируем ситуацию: почему возникает эта ошибка? В 1С БезопасныйРежим — это специальное состояние сеанса или конкретного блока кода, в котором ограничиваются действия, способные нанести вред системе. Когда вы открываете внешнюю обработку через меню "Файл — Открыть", платформа автоматически может запускать её в этом режиме, если в настройках пользователя не сняты определенные флаги или если сама информационная база работает в строгом режиме безопасности.

Выясним причину, почему обычного права на "Администрирование" недостаточно или почему оно является избыточным. Давать полные административные права рядовому пользователю для загрузки XML — плохая практика. Нам необходимо точечное решение.

Способ 1. Настройка параметров регистрации в БСП

Если ваша конфигурация использует БСП (например, УТ 11, БП 3.0, ERP), то наиболее правильным решением будет интеграция обработки в справочник "Дополнительные отчеты и обработки". Рассмотрим подробнее, как изменить код обработки, чтобы система разрешила ей доступ к файлам.

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


Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
    ПараметрыРегистрации.Вставить("Наименование", "Загрузка данных из XML");
    ПараметрыРегистрации.Вставить("Версия", "1.1");
    
    // Ключевой параметр: устанавливаем Ложь, чтобы снять ограничения
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    
    // Добавление команды
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, "Загрузить XML", "ЗагрузитьXML", "ОткрытиеФормы", Истина);
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

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

Способ 2. Отключение защиты от опасных действий

Начиная с версии платформы 8.3.11, в 1С появился механизм "Защита от опасных действий". Даже если обработка не в безопасном режиме, при попытке обращения к файлу пользователю может выводиться предупреждение. Разберем, как это регулируется в Конфигураторе:

  1. Зайдем в Конфигуратор и откроем список пользователей.
  2. Найдем нужного пользователя и откроем его свойства.
  3. На вкладке "Основные" найдем флажок "Защита от опасных действий".
  4. Для тестирования или в доверенной среде этот флажок можно снять.

Однако помните, что в последних версиях БСП (как отмечают участники форума), этот механизм стал более жестким, и простого снятия галочки может быть недостаточно. Платформа все равно может блокировать программный вызов Новый ЧтениеXML, если сеанс находится в защищенном контексте.

Способ 3. Использование программных разрешений (Security Profiles)

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

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


// В функции СведенияОВнешнейОбработке
Разрешения = Новый Массив;
// Разрешаем доступ к временным файлам или конкретной папке
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина);
Разрешения.Добавить(Разрешение);

ПараметрыРегистрации.Вставить("Разрешения", Разрешения);

Это более профессиональный и безопасный подход, так как обработка остается в безопасном режиме, но получает легитимное "окно" для работы с файлами XML.

Способ 4. Настройка профилей безопасности в кластере

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

В этом профиле можно явно указать, какие внешние обработки (по их хэш-сумме или расположению) имеют право игнорировать безопасный режим или к каким ресурсам (диски, сайты) сервер имеет доступ. Это решение актуально для крупных корпоративных систем.

Технические нюансы работы с XML и временными файлами

Часто проблема кроется не в самом XML, а в том, куда 1С пытается его сохранить перед чтением. Рассмотрим подробнее работу парсера. Объект ЧтениеXML может инициализироваться как из строки, так и из файла на диске. Если вы загружаете файл через форму (метод ПоместитьФайл), он попадает во временное хранилище.

Для стабильной работы в безопасном режиме рекомендуем использовать следующую последовательность:

  1. Поместить файл во временное хранилище на клиенте.
  2. Передать адрес хранилища на сервер.
  3. На сервере получить временное имя файла через ПолучитьИмяВременногоФайла("xml").
  4. Использовать метод ПолучитьФайлИзХранилища для сохранения во временный каталог, к которому у системы 1С обычно есть права даже в ограниченном режиме.
  5. Произвести чтение через ЧтениеXML.ОткрытьФайл().

Влияние версии платформы и файла conf.cfg

Проанализируем еще один глубокий уровень настройки — файл conf.cfg. В некоторых случаях, особенно начиная с платформы 8.3.15+, для работы внешних модулей требуется добавление их путей в список доверенных. Это делается путем добавления параметра TrustedExternalModules в конфигурационный файл платформы на сервере или локальной машине.

Это позволяет "легализовать" внешние обработки, запускаемые методом "Файл — Открыть", без необходимости их встраивания в справочники БСП. Однако этот метод требует прав администратора ОС и внесения правок в системные файлы 1С.

Заключение и рекомендации

Подводя итог, можно выделить наиболее эффективный путь решения проблемы:

1. Для продуктовых баз: Однозначно используйте механизм дополнительных обработок БСП. Установите БезопасныйРежим = Ложь в параметрах регистрации или настройте массив разрешений через РаботаВБезопасномРежиме. Это позволит пользователю работать без прав администратора, сохраняя контроль над системой.
2. Для разработчиков: При отладке используйте запуск под пользователем со снятым флагом "Защита от опасных действий", но всегда тестируйте итоговый код в условиях включенного безопасного режима, чтобы гарантировать работоспособность решения у клиента.
3. Для файловых версий: Если база локальная и обработка запускается просто через "Файл — Открыть", проверьте настройки в conf.cfg и убедитесь, что у пользователя Windows есть физические права на чтение папки, где лежит XML-файл.

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

← На главную