Ожидать завершение. Ожидать завершения выполнения процедуры в фоновом задании и открыть форму ожидания длительной операции.
// Ожидать завершения выполнения процедуры в фоновом задании и открыть форму ожидания длительной операции.
// Применяется совместно с функцией ДлительныеОперации.ВыполнитьВФоне для повышения отзывчивости пользовательского
// интерфейса, заменяя длительный серверный вызов на запуск фонового задания.
//
// Параметры:
// ДлительнаяОперация - Структура - см. возвращаемое значение функции ДлительныеОперации.ВыполнитьВФоне.
// ОповещениеОЗавершении - ОписаниеОповещения - оповещение, которое вызывается при завершении фонового задания.
// Параметры процедуры-обработчика оповещения:
// * Результат - Структура, Неопределено - структура со свойствами или Неопределено, если задание было отменено. Свойства:
// ** Статус - Строка - "Выполнено", если задание было успешно выполнено;
// "Ошибка", если задание завершено с ошибкой.
// ** АдресРезультата - Строка - адрес временного хранилища, в которое будет
// помещен (или уже помещен) результат работы процедуры.
// ** АдресДополнительногоРезультата - Строка - если установлен параметр ДополнительныйРезультат,
// содержит адрес дополнительного временного хранилища,
// в которое будет помещен (или уже помещен) результат работы процедуры.
// ** КраткоеПредставлениеОшибки - Строка - краткая информация об исключении, если Статус = "Ошибка".
// ** ПодробноеПредставлениеОшибки - Строка - подробная информация об исключении, если Статус = "Ошибка".
// ** Сообщения - ФиксированныйМассив, Неопределено - массив объектов СообщениеПользователю,
// сформированных в процедуре-обработчике длительной операции.
// * ДополнительныеПараметры - Произвольный - произвольные данные, переданные в описании оповещения.
// ПараметрыОжидания - Структура - см. ДлительныеОперацииКлиент.ПараметрыОжидания.
//
Процедура ОжидатьЗавершение(Знач ДлительнаяОперация, Знач ОповещениеОЗавершении = Неопределено,
Знач ПараметрыОжидания = Неопределено) Экспорт
ПроверитьПараметрыОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);
Если ДлительнаяОперация.Статус <> "Выполняется" Тогда
Если ОповещениеОЗавершении <> Неопределено Тогда
Если ДлительнаяОперация.Статус <> "Отменено" Тогда
Результат = Новый Структура;
Результат.Вставить("Статус", ДлительнаяОперация.Статус);
Результат.Вставить("АдресРезультата", ДлительнаяОперация.АдресРезультата);
Результат.Вставить("АдресДополнительногоРезультата", ДлительнаяОперация.АдресДополнительногоРезультата);
Результат.Вставить("КраткоеПредставлениеОшибки", ДлительнаяОперация.КраткоеПредставлениеОшибки);
Результат.Вставить("ПодробноеПредставлениеОшибки", ДлительнаяОперация.ПодробноеПредставлениеОшибки);
Результат.Вставить("Сообщения", ?(ПараметрыОжидания <> Неопределено И ПараметрыОжидания.ВыводитьСообщения,
ДлительнаяОперация.Сообщения, Неопределено));
Иначе
Результат = Неопределено;
КонецЕсли;
Если ДлительнаяОперация.Статус = "Выполнено" И ПараметрыОжидания <> Неопределено Тогда
ПоказатьОповещение(ПараметрыОжидания.ОповещениеПользователя);
КонецЕсли;
ВыполнитьОбработкуОповещения(ОповещениеОЗавершении, Результат);
КонецЕсли;
Возврат;
КонецЕсли;
ПараметрыФормы = ПараметрыОжидания(Неопределено);
Если ПараметрыОжидания <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(ПараметрыФормы, ПараметрыОжидания);
КонецЕсли;
ПараметрыФормы.Вставить("АдресРезультата", ДлительнаяОперация.АдресРезультата);
ПараметрыФормы.Вставить("АдресДополнительногоРезультата", ДлительнаяОперация.АдресДополнительногоРезультата);
ПараметрыФормы.Вставить("ИдентификаторЗадания", ДлительнаяОперация.ИдентификаторЗадания);
Если ПараметрыФормы.ВыводитьОкноОжидания Тогда
ПараметрыФормы.Удалить("ФормаВладелец");
ОткрытьФорму("ОбщаяФорма.ДлительнаяОперация", ПараметрыФормы,
?(ПараметрыОжидания <> Неопределено, ПараметрыОжидания.ФормаВладелец, Неопределено),
,,,ОповещениеОЗавершении);
Иначе
ПараметрыФормы.Вставить("ОповещениеОЗавершении", ОповещениеОЗавершении);
ПараметрыФормы.Вставить("ТекущийИнтервал", ?(ПараметрыФормы.Интервал <> 0, ПараметрыФормы.Интервал, 1));
ПараметрыФормы.Вставить("Контроль", ТекущаяДата() + ПараметрыФормы.ТекущийИнтервал); // дата сеанса не используется
Операции = АктивныеДлительныеОперации();
Операции.Список.Вставить(ПараметрыФормы.ИдентификаторЗадания, ПараметрыФормы);
ПодключитьОбработчикОжидания("КонтрольДлительныхОпераций", ПараметрыФормы.ТекущийИнтервал, Истина);
КонецЕсли;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ОжидатьЗавершенияВыполненияВФоне (БСП)
ОжидаемыеТипыСвойствПараметровПроверки (БСП)
ОжидаемыеТипыСвойствОписанияПроблемы (БСП)
ОжидаемыеТипыСвойствВидовПроверок (БСП)
ПроверитьТипПараметраКоманды (БСП)
ЗадатьВопросПриЗавершенииРаботыЗавершение (БСП)