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