dlitelnye_operacii._fonovye_vypolnenija_bsp

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
dlitelnye_operacii._fonovye_vypolnenija_bsp [2024/05/03 09:55]
tro
dlitelnye_operacii._fonovye_vypolnenija_bsp [2025/08/29 06:30] (текущий)
tro
Строка 1: Строка 1:
-**в БСП вместо длительных операций уже рекомендуется применять "ВыполнитьПроцедуру" или "ВыполнитьФункцию"** +====== Вариант 1 (БСП с отслеживанием результата выполнения)======
 В общем виде процесс запуска и обработки результата длительной операции в модуле формы выглядит следующим образом: В общем виде процесс запуска и обработки результата длительной операции в модуле формы выглядит следующим образом:
  
   * 1) Процедура, которая будет исполняться в фоне, располагается в модуле менеджера объекта или в серверном общем модуле:   * 1) Процедура, которая будет исполняться в фоне, располагается в модуле менеджера объекта или в серверном общем модуле:
-  * **P.S. ОБЯЗАТЕЛЬО ДВА ПАРАМЕТРА ДОЛЖА ПРИНИМАТЬ ВІПОЛНЯЕМАЯ В ФОНЕ** +  * **P.S. ОБЯЗАТЕЛЬО ТОЛЬКО ДВА ПАРАМЕТРА ДОЛЖА ПРИНИМАТЬ ВІПОЛНЯЕМАЯ В ФОНЕ ПРОЦЕДУРА** 
 <code> <code>
-Процедура ВыполнитьРасчет(Знач МойПараметр1, Знач МойПараметр2Экспорт +Процедура ПроверитьИОбновитьДанныеКонтрагентаСПактумаСУчетомПериодаАктуальности(СтруктураПараметровПроцедуры, СтруктураПараметровФоновогоВызова) Экспорт   
-   ... +  
-КонецПроцедуры+ //1. проверки 
 + Если СтруктураПараметровПроцедуры.отказ ИЛИ СтруктураПараметровПроцедуры.мКОнтрагентСсылка.Ссылка.Пустая() ИЛИ СтруктураПараметровПроцедуры.мКОнтрагентСсылка.НеКонтролироватьАктуальностьПоПактум Тогда  
 + Возврат; 
 + КонецЕсли; 
 + Пактум_ПериодАктуальностиОбновленияДанныхКонтрагентов_дней = РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты("Пактум_ПериодАктуальностиОбновленияДанныхКонтрагентов_дней");  
 + Если не ЗначениеЗаполнено(Пактум_ПериодАктуальностиОбновленияДанныхКонтрагентов_дней) Тогда Возврат; КонецЕсли; 
 +  
 +  
 +  
 + //2. Получаем данные по последнему обновлению и проверяем актуальность по колич ву пройденноных дней с последнего обновления с пактум 
 + Пактум_МассивНазванийРеквизитовЧтоНеМеняютсяПриАвтоОбновлении = РегистрыСведений.РегистрКонстант.ПолучитьЗначениеКонстанты("Пактум_МассивНазванийРеквизитовЧтоНеМеняютсяПриАвтоОбновлении").Получить(); 
 + КолВоДнейСПоследнегоОбновления = РегистрыСведений.ИсторияОбновленияДанныхСПактум.ПолучитьКоличествоДнейОтДатыОбновленияДаныхСПактум(СтруктураПараметровПроцедуры.мКОнтрагентСсылка)
 + 
 +  
 + //3. Перезаполняем контрагента по данным пактум 
 + Если КолВоДнейСПоследнегоОбновления > Пактум_ПериодАктуальностиОбновленияДанныхКонтрагентов_дней Тогда  
 + ОшибкиПриЗаполнении = ""; 
 + Пактум_Сервер.ПроверитьИПерезаполнитьКОнтрагентаДаннымиСПактум(СтруктураПараметровПроцедуры.мКОнтрагентСсылка, Истина,СтруктураПараметровПроцедуры.ДатаПолученияДанныхСПактум, СтруктураПараметровПроцедуры.ИсточникПолученияДанныхСПактум, ОшибкиПриЗаполнении, Пактум_МассивНазванийРеквизитовЧтоНеМеняютсяПриАвтоОбновлении);  
 + КонецЕсли; 
 +  
 +КонецПроцедуры 
 </code> </code>
  
-2) Запуск операции на сервере и подключение обработчика ожидания (при необходимости):+2) Вызов на клиенте запуска фонового:
 <code> <code>
 &НаКлиенте &НаКлиенте
-Процедура ВыполнитьРасчет() +Процедура ПроверитьИОбновитьДанныеКонтрагентаСПактумаСУчетомПериодаАктуальности_НаКлиенте() 
-   ДлительнаяОперация = НачатьВыполнениеНаСервере(); +  
-   ОповещениеОЗавершении = Новый ОписаниеОповещения("ОбработатьРезультат", ЭтотОбъект)+ СтруктураФоновогоЗадания  = НачатьВыполнениеОбновленияПактумНаСервере(ЭтотОбъект.УникальныйИдентификатор); 
-   ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ИДЗадания  = СтруктураФоновогоЗадания.ИдентификаторЗадания
-   ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);+  
 + ПараметрыОжидания   = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); 
 + ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина; 
 +                ПараметрыОжидания.ВыводитьОкноОжидания          = Ложь; 
 + ПараметрыОжидания.Интервал  = 2; 
 +  
 + ДлительныеОперацииКлиент.ОжидатьЗавершение(СтруктураФоновогоЗадания, Новый ОписаниеОповещения("ОбработатьДанные", ЭтотОбъект), ПараметрыОжидания); 
 +
 КонецПроцедуры КонецПроцедуры
 +
 </code> </code>
  
 <code> <code>
 &НаСервере &НаСервере
-Функция НачатьВыполнениеНаСервере() +Функция НачатьВыполнениеОбновленияПактумНаСервере(УникальныйИдентификатор)  
-   Возврат ДлительныеОперации.ВыполнитьПроцедуру(,бработки.МояОбработка.ВыполнитьРасчет", +  
-   МойПараметр1, МойПараметр2);+ ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); 
 + ПараметрыВыполнения.НаименованиеФоновогоЗадания = "Получение данных в ПАКТУМ при смене контрагента в заказе клиента";  
 + ПараметрыВыполнения.КлючФоновогоЗадания         = ""+ЭтаФорма.УникальныйИдентификатор+", "+XMLСтрока(Объект.Контрагент); 
 + ПараметрыВыполнения.Вставить("ИдентификаторФормы", УникальныйИдентификатор); 
 +  
 + СтруктураПараметровПроцедуры = Новый Структура; 
 + СтруктураПараметровПроцедуры.Вставить("отказ",Ложь); 
 + СтруктураПараметровПроцедуры.Вставить("мКОнтрагентСсылка",Объект.Контрагент);  
 + СтруктураПараметровПроцедуры.Вставить("ДатаПолученияДанныхСПактум",ТекущаяДата()); 
 + СтруктураПараметровПроцедуры.Вставить("ИсточникПолученияДанныхСПактум","При смене контрагента в заказе клиента"); 
 +  
 + СтруктураФоновогоЗадания = ДлительныеОперации.ВыполнитьВФоне("Пактум_Сервер.ПроверитьИОбновитьДанныеКонтрагентаСПактумаСУчетомПериодаАктуальности", СтруктураПараметровПроцедуры, ПараметрыВыполнения); 
 +  
 + Возврат СтруктураФоновогоЗадания; 
 +  
 +
 КонецФункции КонецФункции
 +
 </code> </code>
  
Строка 33: Строка 76:
 <code> <code>
 &НаКлиенте &НаКлиенте
-Процедура ОбработатьРезультат(Результат, ДополнительныеПараметры) Экспорт +Процедура ОбработатьДанные(Результат, ДополнительныеПараметры) Экспорт 
-   Если Результат = Неопределено Тогда + 
-       Возврат; + Если Результат = Неопределено Тогда 
-   КонецЕсли; + Возврат; 
-   ПриЗавершенииРасчета();+ ИначеЕсли Результат.Статус = "Ошибка" Тогда 
 + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Произошла ошибка при получении данных по контрагенту с сервиса ПАКТУМ'; uk = 'Відбулася помилка при отриманні даних щодо контрагенту з сервісу ПАКТУМ'")); 
 + ИначеЕсли Результат.Статус = "Выполнено" Тогда 
 + ПоказатьПредупреждениеПоПроблемномуПартнеруКОнтрагенту();  
 + КонецЕсли; 
 +
 КонецПроцедуры КонецПроцедуры
 +
 </code> </code>
  
 +====== Вариант 2 (БСП. Для вызова с сервера без отслеживания выполнения) ======
 +1. Необходимая на выоплнение процедура должна быть экспортной и обязательно иметь два параметра
 +<code>
 +Процедура ОтправитьДанныеООтмеченныхВхНДПоЗаказам(знач парам1=Неопределено, знач парам2=Неопределено) Экспорт 
 +//код
 +КонецПроцедуры
 +</code>
 +2. Где необходимо на сервере вызываем
 <code> <code>
 &НаСервере &НаСервере
-Функция ЗапуститьФоновуюОтправкуФайлов() +Процедура тестАсинхроннойОтправкиНаСервере() 
- + результат = ДлительныеОперации.ВыполнитьВФоне("Доработкиервер.ОтправитьДанныеООтмеченныхВхНДПоЗаказам",СтруктураередаваемыеПараметрыПроцедуры,ДлительныеОперации.ПараметрыВыполненияВФоне(Неопределено)); 
-   ОтправляемыеФайлы Новый Массив; +КонецПроцедуры 
-   Для Каждого Файл Из Файлы.ПолучитьЭлементы() Цикл +</code>
- +
-       ОписаниеФайла = Новый Структура+
-       ОписаниеФайластавить("ИмяФайла", Файл.Наименование); +
-       ОписаниеФайла.Вставить("ДатаИзменения"); +
-       ОписаниеФайла.Вставить("Каталог"); +
-       ОписаниеФайла.Вставить("ДвоичныеДанные", ПолучитьИзВременногоХранилищаайл.Адрес)); +
- +
-       ОтправляемыеФайлы.Добавить(ОписаниеФайла); +
-   КонецЦикла; +
- +
-   ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияПроцедуры(); +
-   ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Отправка файлов в сервиса распознавания документов'");+
  
-   ФоновоеЗадание = ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполнения, 
-"Обработки.РаспознаваниеДокументов.ОтправитьФайлыНаРаспознавание", ОтправляемыеФайлы); 
- 
-   Возврат ФоновоеЗадание; 
- 
-КонецФункции; 
-</code> 
  • /sites/data/attic/dlitelnye_operacii._fonovye_vypolnenija_bsp.1714730136.txt.gz
  • Последнее изменение: 2024/05/03 09:55
  • tro