Запуск расчёта в фоне

БСП (стандартные подсистемы) / Длительные операции

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

//Без БСП - платформенное фоновое задание. Значение функция заданию вернуть
//не может: результат кладётся во временное хранилище отдельной процедурой
//РасчетыСКонтрагентами.ДолгКонтрагентаВФоне(Контрагент, НаДату,
//АдресРезультата)
АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено,
                          УникальныйИдентификатор);
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(Контрагент);
ПараметрыЗадания.Добавить(ТекущаяДатаСеанса());
ПараметрыЗадания.Добавить(АдресРезультата);
Задание = ФоновыеЗадания.Выполнить("РасчетыСКонтрагентами.ДолгКонтрагентаВФоне",
    ПараметрыЗадания, , "Расчёт долга контрагента");
Задание.ОжидатьЗавершенияВыполнения(1);
//Если задание за секунду не завершилось, состояние остаётся «Активно»,
//и его проверяют позже (на клиенте - обработчиком ожидания)
Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
    Долг = ПолучитьИзВременногоХранилища(АдресРезультата);
КонецЕсли;