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

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

При разработке и сопровождении конфигураций 1С часто возникает задача работы с внешними файлами обработок (формат .epf) или отчетов (.erf). Например, когда необходимо подключить обработку "на лету" из файловой системы, не добавляя её в справочник "Дополнительные отчеты и обработки", или когда требуется открыть форму обработки, хранящейся в макете. Разберем детально, как реализовать это программно в управляемом приложении.

Основные механизмы платформы

Для работы с внешними файлами в платформе 1С:Предприятие 8.3 существует специальный менеджер — ВнешниеОбработки. Нам предстоит работать именно с ним. Процесс открытия формы можно разделить на два логических этапа:

  1. Подключение файла обработки к сеансу (регистрация в системе).
  2. Получение и открытие формы подключенной обработки.

Рассмотрим, как это делается на практике.

Алгоритм открытия обработки из файла

Предположим, у нас есть путь к файлу обработки на диске. Чтобы открыть её основную форму, выполним следующую последовательность действий.

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

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

Разберем пример кода, который выполняет эту задачу:


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

&НаКлиенте
Процедура ОткрытьВнешнююОбработку(Команда)
    
    ПутьКФайлу = "C:\Exchange\MyProcessing.epf";
    
    // 1. Подключаем обработку и получаем её имя в метаданных
    ИмяОбработки = ПодключитьОбработкуНаСервере(ПутьКФайлу);
    
    // 2. Формируем навигационную ссылку
    // Формат: "ВнешняяОбработка.<ИмяОбработки>.Форма.<ИмяФормы>"
    // Если имя формы не указано, откроется основная форма.
    НавигационнаяСсылка = "ВнешняяОбработка." + ИмяОбработки + ".Форма";
    
    // 3. Передаем путь к файлу в параметрах, чтобы платформа знала, 
    // какой именно файл открывать для этого имени.
    ПараметрыФормы = Новый Структура("Ключ", ПутьКФайлу);
    
    // 4. Открываем форму
    ОткрытьФорму(НавигационнаяСсылка, ПараметрыФормы);
    
КонецПроцедуры

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

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

Посмотрим на пример, когда файл сначала помещается во временное хранилище, а затем подключается:


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

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

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

Особенности безопасного режима

При программном подключении обработок обратите внимание на параметр БезопасныйРежим. Если ваша внешняя обработка должна выполнять действия с файловой системой, COM-объектами или другими потенциально опасными ресурсами, этот параметр необходимо устанавливать в Ложь.

В синтаксисе метода ВнешниеОбработки.Создать() это второй параметр:

ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);

В методе ВнешниеОбработки.Подключить() это третий параметр:

ВнешниеОбработки.Подключить(Адрес, , Ложь);

Передача параметров в открываемую форму

Часто требуется не просто открыть форму, но и передать в неё какие-то данные. Для этого используем второй параметр метода ОткрытьФорму — структуру параметров. В модуле формы внешней обработки эти данные можно будет обработать в процедуре ПриСозданииНаСервере.


// На клиенте, при открытии
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("ДатаНачала", ТекущаяДата());
ПараметрыОткрытия.Вставить("Организация", Объект.Организация);

// Передаем структуру при открытии
ОткрытьФорму("ВнешняяОбработка." + Имя + ".Форма", ПараметрыОткрытия);

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

← На главную