Демонстрации работы асинхронного выполнения длительной операции, будем использовать конфигурацию Управление торговлей, редакция 11 (11.4.13.99), БСП 3.1.3.353.
Допустим нам нужно выполнить длительную операцию на сервере из управляемой формы без блокировки интерфейса.
Для примера создадим справочник "РаботаВФоне":
В форме справочника добавим команду "ВыполнитьРасчет":
Код модуля формы будет следующим:
&НаКлиенте
Процедура ВыполнитьРасчет()
ДлительнаяОперация = НачатьВыполнениеНаСервере();
ОповещениеОЗавершении = Новый ОписаниеОповещения("ОбработатьРезультат", ЭтотОбъект);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);
КонецПроцедуры
&НаСервере
Функция НачатьВыполнениеНаСервере()
МойПараметр1 = "МойПараметр1";
МойПараметр2 = "МойПараметр2";
Возврат ДлительныеОперации.ВыполнитьПроцедуру(, "РаботаВФоне.ВыполнитьРасчет",
МойПараметр1, МойПараметр2);
КонецФункции
&НаКлиенте
Процедура ОбработатьРезультат(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
ПриЗавершенииРасчета();
КонецПроцедуры
Процедура ПриЗавершенииРасчета()
Сообщить("У нас все получилось!");
КонецПроцедуры
Также нам понадобится общий модуль "РаботаВФоне" с галочкой "Сервер" и экспортной процедурой "ВыполнитьРасчет".
Процедура ВыполнитьРасчет(Знач МойПараметр1, Знач МойПараметр2) Экспорт
ТекДата = ТекущаяДата();
Пока ТекущаяДата() < ТекДата + 5*60 Цикл
КонецЦикла;
КонецПроцедуры
Запускаем в пользовательском режиме, создаем элемент справочника и нажимаем кнопку "Выполнить расчет".
Появляется окно ожидания:
А через пять минут появляется сообщение об успешном выполнении операции:
Если необходимо возвращать результат выполнения длительной операции, нужно использовать метод:
ДлительныеОперации.ВыполнитьФункцию
В других версиях БСП имена функция могут отличаться, но суть остается той же.
Всем спасибо!