Как программно открыть форму внешней обработки в 1С?

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

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

Рассмотрим подробно, почему возникают подобные проблемы и как правильно организовать подключение обработки и открытие её формы в управляемом приложении.

Разбор основных причин ошибок при подключении внешней обработки

Проанализируем типичный сценарий: разработчик считывает двоичные данные внешней обработки, сохраняет их во временный файл на сервере и пытается подключить обработку. На этом пути возникают следующие технические нюансы:

  1. Вызов интерфейсных методов на сервере. Метод ПолучитьФорму().Открыть() нельзя выполнять в серверном контексте, так как формы доступны только на клиенте.
  2. Некорректная передача пути. Метод ВнешниеОбработки.Подключить() принимает путь к файлу на сервере, навигационную ссылку на реквизит типа ХранилищеЗначения или адрес во временном хранилище. Попытка передать некорректное имя или путь вызывает ошибку платформы.
  3. Исполнение в безопасном режиме. Метод ВнешниеОбработки.Создать() или ВнешниеОбработки.Подключить() по умолчанию включает безопасный режим (БезопасныйРежим = Истина). Передача параметра "БезопасныйРежим" через структуру параметров клиентской процедуры ОткрытьФорму() не отключает ограничения, так как режим исполнения задается строго в момент регистрации/создания объекта на сервере.

Способ 1. Подключение через временное хранилище и вызов `ОткрытьФорму`

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

Посмотрим на пример серверной функции подключения:


&НаСервере
Функция ПодключитьОбработкуНаСервере(СсылкаНаДопОбработку)
    
    // Получаем двоичные данные внешней обработки
    ДвоичныеДанные = СсылкаНаДопОбработку.ХранилищеОбработки.Получить();
    
    // Помещаем данные во временное хранилище
    АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, Новый УникальныйИдентификатор);
    
    // Подключаем обработку с отключенным безопасным режимом (третий параметр = Ложь)
    ИмяОбработки = ВнешниеОбработки.Подключить(АдресХранилища, , Ложь);
    
    Возврат ИмяОбработки;
    
КонецФункции

После этого на клиенте вызываем процедуру открытия формы:


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

Способ 2. Использование метода `ВнешниеОбработки.Создать()` с отключением безопасного режима

Если обработка уже физически находится на диске сервера по известному пути, проанализируем синтаксис метода ВнешниеОбработки.Создать().


// Вариант синтаксиса метода Создать
ВнешняяОбработка = ВнешниеОбработки.Создать(ПолноеИмяФайла, БезопасныйРежим);

Параметры метода:

  1. ПолноеИмяФайла (обязательный, тип Строка) — полный путь к файлу внешней обработки на сервере.
  2. БезопасныйРежим (необязательный, тип Булево или Строка) — режим выполнения обработки. Для отключения ограничений необходимо явно передать Ложь.

Способ 3. Использование функций Библиотеки Стандартных Подсистем (БСП)

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

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


&НаКлиенте
Процедура ОткрытьДопОбработкуЧерезБСП(СсылкаНаДопОбработку)
    
    // Вызываем серверный метод БСП для подключения обработки
    ИмяОбработки = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(СсылкаНаДопОбработку);
    
    // Открываем форму подключенной обработки
    ОткрытьФорму("ВнешняяОбработка." + ИмяОбработки + ".Форма");
    
КонецПроцедуры

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

← На главную