Вариант 1
В общем виде процесс запуска и обработки результата длительной операции в модуле формы выглядит следующим образом:
- 1) Процедура, которая будет исполняться в фоне, располагается в модуле менеджера объекта или в серверном общем модуле:
- P.S. ОБЯЗАТЕЛЬО ДВА ПАРАМЕТРА ДОЛЖА ПРИНИМАТЬ ВІПОЛНЯЕМАЯ В ФОНЕ
Процедура ВыполнитьРасчет(Знач МойПараметр1, Знач МойПараметр2) Экспорт ... КонецПроцедуры
2) Запуск операции на сервере и подключение обработчика ожидания (при необходимости):
&НаКлиенте Процедура ВыполнитьРасчет() ДлительнаяОперация = НачатьВыполнениеНаСервере(); ОповещениеОЗавершении = Новый ОписаниеОповещения("ОбработатьРезультат", ЭтотОбъект); ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); КонецПроцедуры
&НаСервере Функция НачатьВыполнениеНаСервере() Возврат ДлительныеОперации.ВыполнитьПроцедуру(, "Обработки.МояОбработка.ВыполнитьРасчет", МойПараметр1, МойПараметр2); КонецФункции
3) Обработка результата длительной операции:
&НаКлиенте Процедура ОбработатьРезультат(Результат, ДополнительныеПараметры) Экспорт Если Результат = Неопределено Тогда Возврат; КонецЕсли; ПриЗавершенииРасчета(); КонецПроцедуры
&НаСервере Функция ЗапуститьФоновуюОтправкуФайлов() ОтправляемыеФайлы = Новый Массив; Для Каждого Файл Из Файлы.ПолучитьЭлементы() Цикл ОписаниеФайла = Новый Структура; ОписаниеФайла.Вставить("ИмяФайла", Файл.Наименование); ОписаниеФайла.Вставить("ДатаИзменения"); ОписаниеФайла.Вставить("Каталог"); ОписаниеФайла.Вставить("ДвоичныеДанные", ПолучитьИзВременногоХранилища(Файл.Адрес)); ОтправляемыеФайлы.Добавить(ОписаниеФайла); КонецЦикла; ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияПроцедуры(); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Отправка файлов в сервиса распознавания документов'"); ФоновоеЗадание = ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполнения, "Обработки.РаспознаваниеДокументов.ОтправитьФайлыНаРаспознавание", ОтправляемыеФайлы); Возврат ФоновоеЗадание; КонецФункции;
Вариант 2 (БСП. Для вызова с сервера без отслеживания выполнения)
1. Необходимая на выоплнение процедура должна быть экспортной и обязательно иметь два параметра
Процедура ОтправитьДанныеООтмеченныхВхНДПоЗаказам(знач парам1=Неопределено, знач парам2=Неопределено) Экспорт //код КонецПроцедуры
2. Где необходимо на сервере вызываем
&НаСервере Процедура тестАсинхроннойОтправкиНаСервере() результат = ДлительныеОперации.ВыполнитьВФоне("Доработки_Сервер.ОтправитьДанныеООтмеченныхВхНДПоЗаказам",Новый Структура,ДлительныеОперации.ПараметрыВыполненияВФоне(Неопределено)); КонецПроцедуры
Вариант 3
в БСП вместо длительных операций уже рекомендуется применять «ВыполнитьПроцедуру» или «ВыполнитьФункцию» еще не разбирал