При интерактивном открытии внешнего отчета или обработки через пункт меню «Файл — Открыть» пользователи и разработчики часто сталкиваются с сообщением об ошибке или ограничениями среды исполнения, связанными с включенным безопасным режимом. Разберем природу этого механизма, выясним, чем он отличается от диалога защиты от опасных действий, и рассмотрим практические способы запуска внешнего кода с необходимыми правами.
Для правильного решения проблемы важно разделять два механизма платформы 1С:Предприятие 8.3:
conf.cfg. Снятие этого флага убирает лишь предупреждающий диалог, но не снимает ограничения функционала.ЗначениеВФайл или сохранение табличных документов вне временного каталога);ЗапуститьПриложение() и КомандаСистемы();УстановитьПривилегированныйРежим(Истина) в безопасном режиме игнорируется платформой).Если пользователь без системных прав открывает внешний файл через «Файл — Открыть», платформа 1С по умолчанию принудительно изолирует его выполнение в безопасном режиме. Проанализируем способы обхода этих ограничений.
Стандартный и рекомендуемый способ запуска внешних обработок в типовых конфигурациях на базе БСП (Библиотеки Стандартных Подсистем) — использование механизма дополнительных отчетов и обработок вместо прямого чтения файлов с диска.
При добавлении внешней обработки в систему платформа считывает программный интерфейс. Чтобы обработка работала вне безопасного режима, в модуле объекта объявляется экспортная функция СведенияОВнешнейОбработке(), где явно указывается соответствующий параметр:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
// Явное отключение безопасного режима при выполнении команды
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Запуск обработки без ограничений";
НоваяКоманда.Идентификатор = "ВыполнитьДействие";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
Возврат ПараметрыРегистрации;
КонецФункции
При такой регистрации обработка будет выполняться без ограничений безопасного режима у всех пользователей, которым назначен доступ к данной команде.
Если специфика работы требует открывать файлы непосредственно с файлового диска или сетевой папки, интерактивное меню «Файл — Открыть» не позволит гибко управлять параметрами безопасности для обычного пользователя. В этом случае создают собственную встроенную команду или специальную обработку-загрузчик.
Посмотрим на пример серверного кода, где при создании объекта внешней обработки вторым параметром передается значение Ложь (отключение безопасного режима):
&НаСервере
Процедура ОткрытьВнешнийФайлБезБезопасногоРежима(ПутьКФайлу)
// Второй параметр метода - БезопасныйРежим (тип Булево)
// Значение Ложь отключает песочницу
ВнешнийОбъект = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
ВнешнийОбъект.ВыполнитьДействие();
КонецПроцедуры
Для работы этого метода контекст вызова должен обладать соответствующими правами или выполняться в привилегированном модуле.
Если обработка используется регулярно, перенос ее логики в расширение конфигурации позволяет полностью избавиться от проблем с открытием файлов с диска.
Разберем по шагам настройку расширения:
SafeMode) в значение Ложь.Ложь.После применения расширения пользователи смогут запускать алгоритмы без ограничений песочницы и без необходимости выдавать учетным записям административные права на всю базу данных.
При интерактивном открытии файла через «Файл — Открыть» платформа 1С отключает безопасный режим только в том случае, если текущий пользователь обладает правом Администрирование (или системной ролью АдминистраторСистемы). Роли Интерактивное открытие внешних отчетов и обработок достаточно лишь для самого факта запуска интерфейса, но системные вызовы внутри кода будут по-прежнему блокироваться песочницей.
Назначение роли Администрирование решает проблему безопасного режима напрямую, однако в рабочей среде данный способ рекомендуется применять исключительно для учетных записей разработчиков и системных администраторов ввиду критического расширения полномочий.