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