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