При разработке и отладке в среде 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда внешняя обработка, запущенная под пользователем с ограниченными правами, отказывается выполнять определенные операции (например, работу с файловой системой, COM-объектами или записью бинарных данных). Платформа выдает ошибку, сообщая, что операция запрещена, так как установлен безопасный режим. Давайте разберем, почему это происходит и как обойти данное ограничение для полноценной отладки.
Прежде всего, проанализируем поведение платформы. В 1С 8.3 заложено жесткое правило безопасности: если у текущего пользователя отсутствует роль ПолныеПрава, то любая внешняя обработка или отчет, открытые интерактивно через меню «Файл — Открыть», автоматически запускаются в безопасном режиме. Это сделано для того, чтобы пользователи не могли случайно или намеренно повредить данные системы или получить доступ к файловой системе сервера через непроверенный код.
Важно различать два механизма защиты:
Рассмотрим подробнее способы, которые помогут запустить обработку в небезопасном режиме.
Для конфигураций, использующих Библиотеку стандартных подсистем (БСП), таких как ЗУП 3, ERP или Бухгалтерия 3.0, это самый правильный и штатный путь. Вместо того чтобы открывать файл напрямую, мы регистрируем его в системе.
Разберем по шагам:
АдминистрированиеДанных.После этого пользователь сможет запускать обработку из интерфейса программы, и она будет работать с его обычными правами, но без ограничений безопасного режима.
Если нам нужно именно отладить конкретный файл «на лету», не регистрируя его в справочниках, мы можем воспользоваться методом Создать менеджера внешних обработок. Этот метод позволяет явно указать, должен ли объект работать в безопасном режиме.
Проанализируем пример кода, который можно выполнить, например, во внешней консоли кода или в другой «доверенной» обработке:
ПутьКФайлу = "C:\MyFolder\MyProcessing.epf";
БезопасныйРежим = Ложь; // Указываем, что режим НЕ безопасный
ОбъектОбработки = ВнешниеОбработки.Создать(ПутьКФайлу, БезопасныйРежим);
Однако здесь есть важный нюанс, с которым столкнулись участники обсуждения: метод Создать возвращает объект обработки, но не открывает ее форму автоматически. Если вам нужно отладить именно интерфейсную часть, необходимо получить форму и открыть ее программно.
Чтобы иметь возможность открывать любую внешнюю обработку в небезопасном режиме под обычным пользователем, можно создать простую обработку-загрузчик. Загрузчик должен быть запущен один раз (например, через механизм дополнительных обработок без безопасного режима), и в нем будет кнопка для выбора вашего рабочего файла.
Рассмотрим пример кода для кнопки загрузчика:
&НаКлиенте
Процедура ОткрытьВыбранныйФайл(Команда)
ПараметрыВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ПараметрыВыбора.Фильтр = "Внешняя обработка (*.epf)|*.epf";
Если ПараметрыВыбора.Выбрать() Тогда
ВыполнитьОткрытиеНаСервере(ПараметрыВыбора.ПолноеИмяФайла);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ВыполнитьОткрытиеНаСервере(ПутьКФайлу)
// Создаем объект в небезопасном режиме
ОбработкаОбъект = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
// Получаем имя формы (обычно "Форма" или имя основной формы в метаданных)
ИмяФормы = "ВнешняяОбработка." + ОбработкаОбъект.Метаданные().Имя + ".Форма.Форма";
// Открываем форму программно
ОткрытьФорму(ИмяФормы, , ЭтаФорма);
КонецПроцедуры
При таком подходе созданная форма унаследует контекст выполнения объекта, который был создан с параметром БезопасныйРежим = Ложь.
Выясним причину, по которой даже при программном открытии могут возникать ошибки. Для того чтобы метод ВнешниеОбработки.Создать() с параметром Ложь сработал, у пользователя обязательно должно быть право «Интерактивное открытие внешних обработок» и право на «Использование внешних отчетов и обработок».
Также стоит помнить о Профилях безопасности в кластере серверов 1С. Если на уровне сервера 1С настроены профили безопасности для информационной базы, то любые попытки работы с внешними файлами могут блокироваться настройками самого кластера, независимо от параметров в коде 1С. В этом случае администратору сервера необходимо добавить исключения для путей файловой системы, к которым обращается ваша обработка.
Подведем итог: штатный механизм «Файл — Открыть» всегда накладывает ограничения на пользователей без полных прав. Для полноценной работы и отладки следует использовать либо механизм «Дополнительных отчетов и обработок» с выключенным флажком безопасного режима, либо использовать программный метод ВнешниеОбработки.Создать(Путь, Ложь) через специальную обработку-загрузчик.