Как открыть внешнюю обработку через файл-открыть в небезопасном режиме?

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

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

Почему возникает безопасный режим?

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

Важно различать два механизма защиты:

  1. Защита от опасных действий — это диалоговое окно с вопросом «Вы доверяете этому поставщику?». Его можно отключить в профиле пользователя или в конфигураторе, но это лишь уберет предупреждение, а не снимет ограничения безопасного режима.
  2. Безопасный режим (Safe Mode) — это состояние окружения исполнения кода, при котором запрещены потенциально опасные операции (запись файлов, работа с реестром, использование внешних компонент и т.д.).

Рассмотрим подробнее способы, которые помогут запустить обработку в небезопасном режиме.

Способ 1. Регистрация в справочнике «Дополнительные отчеты и обработки»

Для конфигураций, использующих Библиотеку стандартных подсистем (БСП), таких как ЗУП 3, ERP или Бухгалтерия 3.0, это самый правильный и штатный путь. Вместо того чтобы открывать файл напрямую, мы регистрируем его в системе.

Разберем по шагам:

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

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

Способ 2. Программное открытие без безопасного режима

Если нам нужно именно отладить конкретный файл «на лету», не регистрируя его в справочниках, мы можем воспользоваться методом Создать менеджера внешних обработок. Этот метод позволяет явно указать, должен ли объект работать в безопасном режиме.

Проанализируем пример кода, который можно выполнить, например, во внешней консоли кода или в другой «доверенной» обработке:


ПутьКФайлу = "C:\MyFolder\MyProcessing.epf";
БезопасныйРежим = Ложь; // Указываем, что режим НЕ безопасный
ОбъектОбработки = ВнешниеОбработки.Создать(ПутьКФайлу, БезопасныйРежим);

Однако здесь есть важный нюанс, с которым столкнулись участники обсуждения: метод Создать возвращает объект обработки, но не открывает ее форму автоматически. Если вам нужно отладить именно интерфейсную часть, необходимо получить форму и открыть ее программно.

Способ 3. Создание «Загрузчика» для отладки

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

Рассмотрим пример кода для кнопки загрузчика:


&НаКлиенте
Процедура ОткрытьВыбранныйФайл(Команда)
    ПараметрыВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ПараметрыВыбора.Фильтр = "Внешняя обработка (*.epf)|*.epf";
    
    Если ПараметрыВыбора.Выбрать() Тогда
        ВыполнитьОткрытиеНаСервере(ПараметрыВыбора.ПолноеИмяФайла);
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ВыполнитьОткрытиеНаСервере(ПутьКФайлу)
    // Создаем объект в небезопасном режиме
    ОбработкаОбъект = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
    
    // Получаем имя формы (обычно "Форма" или имя основной формы в метаданных)
    ИмяФормы = "ВнешняяОбработка." + ОбработкаОбъект.Метаданные().Имя + ".Форма.Форма";
    
    // Открываем форму программно
    ОткрытьФорму(ИмяФормы, , ЭтаФорма);
КонецПроцедуры

При таком подходе созданная форма унаследует контекст выполнения объекта, который был создан с параметром БезопасныйРежим = Ложь.

Важные замечания по правам доступа

Выясним причину, по которой даже при программном открытии могут возникать ошибки. Для того чтобы метод ВнешниеОбработки.Создать() с параметром Ложь сработал, у пользователя обязательно должно быть право «Интерактивное открытие внешних обработок» и право на «Использование внешних отчетов и обработок».

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

Итоги

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

← На главную