Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
|
dlitelnye_operacii._fonovye_vypolnenija_bsp [2022/08/12 10:46] tro создано |
dlitelnye_operacii._fonovye_vypolnenija_bsp [2025/08/29 06:30] (текущий) tro |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | в БСП | + | ====== Вариант 1 (БСП с отслеживанием результата выполнения)====== |
| + | В общем виде процесс запуска и обработки результата длительной операции в модуле формы выглядит следующим образом: | ||
| - | //В общем виде | + | * 1) Процедура, |
| + | * **P.S. ОБЯЗАТЕЛЬО ТОЛЬКО ДВА ПАРАМЕТРА ДОЛЖА ПРИНИМАТЬ ВІПОЛНЯЕМАЯ В ФОНЕ ПРОЦЕДУРА** | ||
| + | < | ||
| + | Процедура ПроверитьИОбновитьДанныеКонтрагентаСПактумаСУчетомПериодаАктуальности(СтруктураПараметровПроцедуры, СтруктураПараметровФоновогоВызова) Экспорт | ||
| + | |||
| + | //1. проверки | ||
| + | Если СтруктураПараметровПроцедуры.отказ ИЛИ СтруктураПараметровПроцедуры.мКОнтрагентСсылка.Ссылка.Пустая() ИЛИ СтруктураПараметровПроцедуры.мКОнтрагентСсылка.НеКонтролироватьАктуальностьПоПактум Тогда | ||
| + | Возврат; | ||
| + | КонецЕсли; | ||
| + | Пактум_ПериодАктуальностиОбновленияДанныхКонтрагентов_дней = РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты(" | ||
| + | Если не ЗначениеЗаполнено(Пактум_ПериодАктуальностиОбновленияДанныхКонтрагентов_дней) Тогда Возврат; | ||
| + | |||
| + | |||
| + | |||
| + | //2. Получаем данные по последнему обновлению и проверяем актуальность по колич | ||
| + | Пактум_МассивНазванийРеквизитовЧтоНеМеняютсяПриАвтоОбновлении = РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты(" | ||
| + | КолВоДнейСПоследнегоОбновления = РегистрыСведений.ИсторияОбновленияДанныхСПактум.ПолучитьКоличествоДнейОтДатыОбновленияДаныхСПактум(СтруктураПараметровПроцедуры.мКОнтрагентСсылка); | ||
| - | //1) Процедура, которая будет исполняться в фоне, располагается в модуле менеджера объекта или в серверном общем модуле: | + | |
| - | < | + | //3. Перезаполняем |
| - | Процедура ВыполнитьРасчет(Знач МойПараметр1, Знач МойПараметр2) Экспорт | + | Если КолВоДнейСПоследнегоОбновления > Пактум_ПериодАктуальностиОбновленияДанныхКонтрагентов_дней Тогда |
| - | ... | + | ОшибкиПриЗаполнении = ""; |
| - | КонецПроцедуры | + | Пактум_Сервер.ПроверитьИПерезаполнитьКОнтрагентаДаннымиСПактум(СтруктураПараметровПроцедуры.мКОнтрагентСсылка, |
| + | КонецЕсли; | ||
| + | |||
| + | КонецПроцедуры | ||
| </ | </ | ||
| - | //2) Запуск | + | 2) Вызов на клиенте запуска фонового: |
| < | < | ||
| & | & | ||
| - | Процедура | + | Процедура |
| - | ДлительнаяОперация = НачатьВыполнениеНаСервере(); | + | |
| - | ОповещениеОЗавершении | + | СтруктураФоновогоЗадания = НачатьВыполнениеОбновленияПактумНаСервере(ЭтотОбъект.УникальныйИдентификатор); |
| - | | + | ИДЗадания |
| - | | + | |
| + | ПараметрыОжидания | ||
| + | ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина; | ||
| + | ПараметрыОжидания.ВыводитьОкноОжидания | ||
| + | ПараметрыОжидания.Интервал | ||
| + | |||
| + | ДлительныеОперацииКлиент.ОжидатьЗавершение(СтруктураФоновогоЗадания, Новый | ||
| + | |||
| КонецПроцедуры | КонецПроцедуры | ||
| + | |||
| </ | </ | ||
| < | < | ||
| & | & | ||
| - | Функция НачатьВыполнениеНаСервере() | + | Функция НачатьВыполнениеОбновленияПактумНаСервере(УникальныйИдентификатор) |
| - | Возврат ДлительныеОперации.ВыполнитьПроцедуру(, | + | |
| - | | + | ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); |
| + | ПараметрыВыполнения.НаименованиеФоновогоЗадания = " | ||
| + | ПараметрыВыполнения.КлючФоновогоЗадания | ||
| + | ПараметрыВыполнения.Вставить(" | ||
| + | |||
| + | СтруктураПараметровПроцедуры = Новый Структура; | ||
| + | СтруктураПараметровПроцедуры.Вставить(" | ||
| + | СтруктураПараметровПроцедуры.Вставить("мКОнтрагентСсылка", | ||
| + | СтруктураПараметровПроцедуры.Вставить(" | ||
| + | СтруктураПараметровПроцедуры.Вставить(" | ||
| + | |||
| + | СтруктураФоновогоЗадания = ДлительныеОперации.ВыполнитьВФоне(" | ||
| + | |||
| + | Возврат СтруктураФоновогоЗадания; | ||
| + | |||
| + | |||
| КонецФункции | КонецФункции | ||
| + | |||
| </ | </ | ||
| - | //3) Обработка результата длительной операции: | + | 3) Обработка результата длительной операции: |
| < | < | ||
| & | & | ||
| - | Процедура ОбработатьРезультат(Результат, | + | Процедура ОбработатьДанные(Результат, |
| - | | + | |
| - | | + | Если Результат = Неопределено Тогда |
| - | КонецЕсли; | + | Возврат; |
| - | ПриЗавершенииРасчета(); | + | ИначеЕсли |
| + | ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = ' | ||
| + | ИначеЕсли Результат.Статус = " | ||
| + | ПоказатьПредупреждениеПоПроблемномуПартнеруКОнтрагенту(); | ||
| + | КонецЕсли; | ||
| + | |||
| КонецПроцедуры | КонецПроцедуры | ||
| + | |||
| </ | </ | ||
| - | // | + | ====== Вариант 2 (БСП. Для вызова с сервера без отслеживания выполнения) ====== |
| + | 1. Необходимая на выоплнение процедура должна быть экспортной и обязательно иметь два параметра | ||
| + | < | ||
| + | Процедура ОтправитьДанныеООтмеченныхВхНДПоЗаказам(знач парам1=Неопределено, | ||
| + | //код | ||
| + | КонецПроцедуры | ||
| + | </ | ||
| + | 2. Где необходимо на сервере вызываем | ||
| < | < | ||
| & | & | ||
| - | Функция ЗапуститьФоновуюОтправкуФайлов() | + | Процедура тестАсинхроннойОтправкиНаСервере() |
| - | + | результат = ДлительныеОперации.ВыполнитьВФоне(" | |
| - | | + | КонецПроцедуры |
| - | Для Каждого Файл Из Файлы.ПолучитьЭлементы() Цикл | + | |
| - | + | ||
| - | ОписаниеФайла = Новый Структура; | + | |
| - | ОписаниеФайла.Вставить(" | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | + | ||
| - | ОтправляемыеФайлы.Добавить(ОписаниеФайла); | + | |
| - | | + | |
| - | + | ||
| - | ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияПроцедуры(); | + | |
| - | | + | |
| - | + | ||
| - | ФоновоеЗадание = ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполнения, | + | |
| - | " | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | КонецФункции; | + | |
| </ | </ | ||
| + | |||