Как отключить безопасный режим при открытии внешней обработки с диска в 1С:Предприятие 8.3?

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

При интерактивном открытии внешнего отчета или обработки через пункт меню «Файл — Открыть» пользователи и разработчики часто сталкиваются с сообщением об ошибке или ограничениями среды исполнения, связанными с включенным безопасным режимом. Разберем природу этого механизма, выясним, чем он отличается от диалога защиты от опасных действий, и рассмотрим практические способы запуска внешнего кода с необходимыми правами.

В чем разница между защитой от опасных действий и безопасным режимом

Для правильного решения проблемы важно разделять два механизма платформы 1С:Предприятие 8.3:

  1. Защита от опасных действий. Это интерактивное окно с вопросом пользователю: действительно ли он доверяет открываемой обработке или запускаемой внешней программе. Этот флаг отключается в карточке пользователя в Конфигураторе или через файл conf.cfg. Снятие этого флага убирает лишь предупреждающий диалог, но не снимает ограничения функционала.
  2. Безопасный режим (Sandbox / Песочница). Это программное ограничение среды выполнения. Если обработка запущена в безопасном режиме, платформа блокирует выполнение потенциально опасных операций:
    • запись и сохранение файлов на диск на стороне сервера (например, метод ЗначениеВФайл или сохранение табличных документов вне временного каталога);
    • создание COM-соединений и внешних объектов;
    • загрузку и подключение внешних компонент;
    • вызовы команд операционной системы через ЗапуститьПриложение() и КомандаСистемы();
    • выход в сеть Интернет;
    • переход в привилегированный режим (вызов УстановитьПривилегированныйРежим(Истина) в безопасном режиме игнорируется платформой).

Если пользователь без системных прав открывает внешний файл через «Файл — Открыть», платформа 1С по умолчанию принудительно изолирует его выполнение в безопасном режиме. Проанализируем способы обхода этих ограничений.

Решение 1. Подключение через справочник «Дополнительные отчеты и обработки»

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

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


Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
    
    // Явное отключение безопасного режима при выполнении команды
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Запуск обработки без ограничений";
    НоваяКоманда.Идентификатор = "ВыполнитьДействие";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.ПоказыватьОповещение = Истина;
    
    Возврат ПараметрыРегистрации;

КонецФункции

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

Решение 2. Программное создание объекта с отключением безопасного режима

Если специфика работы требует открывать файлы непосредственно с файлового диска или сетевой папки, интерактивное меню «Файл — Открыть» не позволит гибко управлять параметрами безопасности для обычного пользователя. В этом случае создают собственную встроенную команду или специальную обработку-загрузчик.

Посмотрим на пример серверного кода, где при создании объекта внешней обработки вторым параметром передается значение Ложь (отключение безопасного режима):


&НаСервере
Процедура ОткрытьВнешнийФайлБезБезопасногоРежима(ПутьКФайлу)
    
    // Второй параметр метода - БезопасныйРежим (тип Булево)
    // Значение Ложь отключает песочницу
    ВнешнийОбъект = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
    ВнешнийОбъект.ВыполнитьДействие();

КонецПроцедуры

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

Решение 3. Использование расширений конфигурации (.cfe)

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

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

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

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

Решение 4. Назначение административных прав

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

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

← На главную