При работе с внешними обработками в среде 1С:Предприятие 8.3 программисты часто сталкиваются с ошибкой: "Установлен безопасный режим. Выполнение операции запрещено". Эта ситуация возникает при попытке выполнения потенциально небезопасных, с точки зрения системы, операций, таких как чтение файлов с диска, работа с COM-объектами или сетевые запросы. Особенно актуально это становится при использовании современных конфигураций на базе БСП (Библиотеки стандартных подсистем), где механизмы безопасности работают наиболее строго.
В данной статье мы подробно разберем, как правильно настроить права и изменить программный код, чтобы пользователь мог беспрепятственно читать XML-файлы, не нарушая при этом общую архитектуру безопасности системы.
Для начала проанализируем ситуацию: почему возникает эта ошибка? В 1С БезопасныйРежим — это специальное состояние сеанса или конкретного блока кода, в котором ограничиваются действия, способные нанести вред системе. Когда вы открываете внешнюю обработку через меню "Файл — Открыть", платформа автоматически может запускать её в этом режиме, если в настройках пользователя не сняты определенные флаги или если сама информационная база работает в строгом режиме безопасности.
Выясним причину, почему обычного права на "Администрирование" недостаточно или почему оно является избыточным. Давать полные административные права рядовому пользователю для загрузки XML — плохая практика. Нам необходимо точечное решение.
Если ваша конфигурация использует БСП (например, УТ 11, БП 3.0, ERP), то наиболее правильным решением будет интеграция обработки в справочник "Дополнительные отчеты и обработки". Рассмотрим подробнее, как изменить код обработки, чтобы система разрешила ей доступ к файлам.
Нам необходимо найти в модуле объекта внешней обработки функцию СведенияОВнешнейОбработке(). Именно в ней описываются правила взаимодействия обработки с системой. Посмотрим на пример кода, который позволяет отключить безопасный режим для конкретной обработки:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
ПараметрыРегистрации.Вставить("Наименование", "Загрузка данных из XML");
ПараметрыРегистрации.Вставить("Версия", "1.1");
// Ключевой параметр: устанавливаем Ложь, чтобы снять ограничения
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
// Добавление команды
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Загрузить XML", "ЗагрузитьXML", "ОткрытиеФормы", Истина);
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
После внесения этих изменений обработку нужно переподключить в разделе "Администрирование — Печатные формы, отчеты и обработки". При регистрации система может выдать предупреждение о том, что обработка запрашивает разрешение на небезопасные действия. Нам нужно согласиться с этим, так как мы доверяем коду обработки.
Начиная с версии платформы 8.3.11, в 1С появился механизм "Защита от опасных действий". Даже если обработка не в безопасном режиме, при попытке обращения к файлу пользователю может выводиться предупреждение. Разберем, как это регулируется в Конфигураторе:
Однако помните, что в последних версиях БСП (как отмечают участники форума), этот механизм стал более жестким, и простого снятия галочки может быть недостаточно. Платформа все равно может блокировать программный вызов Новый ЧтениеXML, если сеанс находится в защищенном контексте.
Если политика безопасности компании запрещает полную установку БезопасныйРежим = Ложь, мы можем пойти по пути предоставления точечных разрешений. В современных версиях БСП предусмотрен механизм запроса разрешений на доступ к конкретным каталогам. Проанализируем, как это реализовать.
В той же функции СведенияОВнешнейОбработке() мы можем заполнить массив разрешений, используя методы программного интерфейса БСП. Вместо полного отключения защиты, мы просим доступ только к файловой системе:
// В функции СведенияОВнешнейОбработке
Разрешения = Новый Массив;
// Разрешаем доступ к временным файлам или конкретной папке
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина);
Разрешения.Добавить(Разрешение);
ПараметрыРегистрации.Вставить("Разрешения", Разрешения);
Это более профессиональный и безопасный подход, так как обработка остается в безопасном режиме, но получает легитимное "окно" для работы с файлами XML.
Если база данных работает в клиент-серверном варианте, ограничения могут накладываться на уровне кластера серверов 1С. Рассмотрим ситуацию, когда база локальная, но используется сервер приложений. В консоли администрирования кластера можно создать Профиль безопасности.
В этом профиле можно явно указать, какие внешние обработки (по их хэш-сумме или расположению) имеют право игнорировать безопасный режим или к каким ресурсам (диски, сайты) сервер имеет доступ. Это решение актуально для крупных корпоративных систем.
Часто проблема кроется не в самом XML, а в том, куда 1С пытается его сохранить перед чтением. Рассмотрим подробнее работу парсера. Объект ЧтениеXML может инициализироваться как из строки, так и из файла на диске. Если вы загружаете файл через форму (метод ПоместитьФайл), он попадает во временное хранилище.
Для стабильной работы в безопасном режиме рекомендуем использовать следующую последовательность:
ПолучитьИмяВременногоФайла("xml").ПолучитьФайлИзХранилища для сохранения во временный каталог, к которому у системы 1С обычно есть права даже в ограниченном режиме.ЧтениеXML.ОткрытьФайл().Проанализируем еще один глубокий уровень настройки — файл conf.cfg. В некоторых случаях, особенно начиная с платформы 8.3.15+, для работы внешних модулей требуется добавление их путей в список доверенных. Это делается путем добавления параметра TrustedExternalModules в конфигурационный файл платформы на сервере или локальной машине.
Это позволяет "легализовать" внешние обработки, запускаемые методом "Файл — Открыть", без необходимости их встраивания в справочники БСП. Однако этот метод требует прав администратора ОС и внесения правок в системные файлы 1С.
Подводя итог, можно выделить наиболее эффективный путь решения проблемы:
1. Для продуктовых баз: Однозначно используйте механизм дополнительных обработок БСП. Установите БезопасныйРежим = Ложь в параметрах регистрации или настройте массив разрешений через РаботаВБезопасномРежиме. Это позволит пользователю работать без прав администратора, сохраняя контроль над системой.
2. Для разработчиков: При отладке используйте запуск под пользователем со снятым флагом "Защита от опасных действий", но всегда тестируйте итоговый код в условиях включенного безопасного режима, чтобы гарантировать работоспособность решения у клиента.
3. Для файловых версий: Если база локальная и обработка запускается просто через "Файл — Открыть", проверьте настройки в conf.cfg и убедитесь, что у пользователя Windows есть физические права на чтение папки, где лежит XML-файл.
Используя эти методы, вы сможете настроить корректную работу с XML-файлами, обеспечив при этом необходимый уровень безопасности и удобство работы пользователя.