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

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

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

Метод 1: Классический способ через временный файл

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

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


// Получаем ссылку на элемент справочника, где хранится обработка
ВнешОтчет = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("МояОбработка");

// Извлекаем двоичные данные из хранилища (имя реквизита может отличаться)
ДвоичныеДанные = ВнешОтчет.ХранилищеВнешнейОбработки.Получить();

// Генерируем уникальное имя временного файла с расширением .epf
ИмяФайла = ПолучитьИмяВременногоФайла("epf");

// Записываем данные на диск сервера
ДвоичныеДанные.Записать(ИмяФайла);

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

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

Метод 2: Вызов экспортного метода через объект внешних обработок

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

Рассмотрим, как вызвать функцию ВыполнитьДействие из модуля внешней обработки:


// 1. Находим ссылку на обработку в справочнике БСП
СсылкаНаОбработку = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("НаимОбработки");

// 2. Получаем объект обработки через стандартный механизм БСП
// Этот метод вернет готовый объект внешней обработки
пОбработка = ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(СсылкаНаОбработку);

// 3. Вызываем экспортный метод из модуля обработки
ПараметрыДействия = Новый Структура("Ключ", "Значение");
Результат = пОбработка.НазваниеФункцииОбработки(ПараметрыДействия);

Этот способ удобен тем, что нам не нужно вручную работать с временными файлами — БСП берет на себя все низкоуровневые операции по извлечению и подключению обработки в сеансе.

Метод 3: Использование программного интерфейса БСП (Выполнение команды)

В управляемом приложении наиболее правильным и современным подходом является использование клиентского программного интерфейса библиотеки стандартных подсистем. Для этого применяется процедура ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКоманду().

Выясним преимущества этого метода: платформа самостоятельно управляет контекстом выполнения, следит за правами доступа и позволяет выполнять длительные операции в фоновом режиме, не блокируя интерфейс пользователя.

Для вызова необходимо подготовить структуру параметров:

  1. Указать ссылку на команду обработки.
  2. Передать массив ОбъектыНазначения (например, ссылку на текущий документ ЭтаФорма.Объект.Ссылка).
  3. Определить оповещение после завершения.

Технические нюансы: Клиент и Сервер

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

Передача контекста: Чтобы обработка «увидела» данные вашего документа, обязательно передавайте ссылку на него. В методах БСП для этого используется массив ОбъектыНазначения. Внутри модуля внешней обработки в процедуре ВыполнитьКоманду этот массив будет доступен в параметрах.

Открытие формы внешней обработки с диска

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

Посмотрим на пример реализации:


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

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

Безопасный режим и профили безопасности

Проанализируем ситуацию с безопасностью. В современных версиях платформы 8.3 внешние обработки по умолчанию запускаются в безопасном режиме. Это накладывает ограничения на использование COMОбъектов, запись файлов на диск и запросы к сторонним сайтам. Если ваша обработка должна выполнять такие действия, убедитесь, что при регистрации её в справочнике указаны необходимые разрешения или профили безопасности.

Подводя итог, выбор метода зависит от вашей архитектуры: для типовых конфигураций на БСП лучше использовать ДополнительныеОтчетыИОбработки, а для нетиповых или простых задач — прямое создание объекта через временный файл на сервере.

← На главную