vypolnenie_procedury_v_fone_cherez_dlitelnye_operacii

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
vypolnenie_procedury_v_fone_cherez_dlitelnye_operacii [2021/02/26 11:51]
tro
vypolnenie_procedury_v_fone_cherez_dlitelnye_operacii [2021/02/26 11:54] (текущий)
tro
Строка 112: Строка 112:
 КонецПроцедуры КонецПроцедуры
  
 +</code>
 +
 +<code>
 +&НаСервере
 +Функция  ПроверитьФоновыеЗадания(ИдЗадания)
 +
 + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдЗадания); 
 +    СтрокаТаблицы = ИдЗадания; 
 +
 + Если Задание = Неопределено Тогда
 + //Выполнено = Выполнено + СтрокаТаблицы.КоличествоСтрокВЗадании;
 + Выполнено = Истина;
 + //Объект.ID_ФоновогоЗадания = "";
 + Возврат Выполнено; //Продолжить;
 + КонецЕсли;  
 +      
 +    Состояние = Задание.Состояние;
 +    
 +    Если Состояние = СостояниеФоновогоЗадания.Завершено Тогда
 +
 + МассивСообщений = Задание.ПолучитьСообщенияПользователю(Истина);
 + Если МассивСообщений = Неопределено Тогда
 + Иначе
 + Если МассивСообщений.Количество() > 0 Тогда
 +
 + ПоследняяЗапись = МассивСообщений.Количество()-1;
 +
 + Для Каждого Сообщ Из МассивСообщений Цикл    
 + //Сообщение = Новый СообщениеПользователю;
 + //Сообщение.Текст = Сообщ.Текст;//МассивСообщений[ПоследняяЗапись].Текст;
 + //Сообщение.Сообщить();
 + КонецЦикла;
 +
 + КонецЕсли; 
 + КонецЕсли;
 +
 +      ВыполненыВсеЗадания = Истина;
 +   
 +   Сообщение = Новый СообщениеПользователю;
 +   Сообщение.Текст = "Выполнено!";
 +   Сообщение.Сообщить();
 +      
 +    ИначеЕсли Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
 +
 +      ОшибкаЗадания = Задание.ИнформацияОбОшибке;
 +      Если ОшибкаЗадания <> Неопределено Тогда
 +        ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительная операция'"),
 +        УровеньЖурналаРегистрации.Ошибка,,,
 +        ПодробноеПредставлениеОшибки(ОшибкаЗадания));
 +      Иначе
 +        ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительная операция'"),
 +        УровеньЖурналаРегистрации.Ошибка,,,
 +        НСтр("ru = 'Задание завершилось с неизвестной ошибкой.'"));
 +      КонецЕсли;
 +      
 +      МассивСообщений = Задание.ПолучитьСообщенияПользователю(Истина);
 +      Если МассивСообщений = Неопределено Тогда
 +        //Ничего нет
 +      Иначе
 +        Если МассивСообщений.Количество() > 0 Тогда
 +          ПоследняяЗапись = МассивСообщений.Количество()-1;
 +        КонецЕсли;
 +        
 +        ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительная операция'"),
 +        УровеньЖурналаРегистрации.Ошибка,,,
 +        Строка(ПоследняяЗапись));// + " Количество строк в задании: " +Строка(СтрокаТаблицы.КоличествоСтрокВЗадании));
 +
 + //Выведем ошибку пользователю
 + Сообщение = Новый СообщениеПользователю;
 + Сообщение.Текст = ПодробноеПредставлениеОшибки(ОшибкаЗадания);
 + Сообщение.Сообщить();
 +
 +      КонецЕсли;          
 +            ВыполненыВсеЗадания = Ложь;
 +      Возврат Неопределено;
 +
 +    Иначе
 +      
 +      МассивСообщений = Задание.ПолучитьСообщенияПользователю(Истина);
 +      Если МассивСообщений = Неопределено Тогда
 +        //Ничего нет
 +      Иначе
 +        Если МассивСообщений.Количество() > 0 Тогда
 +          
 +          ПоследняяЗапись = МассивСообщений.Количество()-1;
 +          
 +   Для Каждого Сообщ Из МассивСообщений Цикл    
 +   
 +   Если СтрНайти(Сообщ.Текст,"Не определен режим запуска приложения")>0 ИЛИ
 +   СтрНайти(Сообщ.Текст,"Запуск выбранного драйвера не поддерживается в текущем режиме")>0 Тогда 
 +   //Ничего не выводим   
 +   ИначеЕсли СтрНайти(Сообщ.Текст,"%")>0 Тогда 
 +   //Выводим проценты
 +   попытка
 +   ИндикаторОбработкиExcel = число(СтрЗаменить(Сообщ.Текст,"%",""));
 +   Исключение
 +   КонецПопытки;
 +   Иначе 
 +   Сообщение = Новый СообщениеПользователю;
 +   Сообщение.Текст = Сообщ.Текст;//МассивСообщений[ПоследняяЗапись].Текст;
 +   Сообщение.Сообщить();
 +   КонецЕсли;
 +   
 +   КонецЦикла;
 +            
 +        КонецЕсли; 
 +      КонецЕсли;
 +      ВыполненыВсеЗадания = Ложь;
 +      
 +    КонецЕсли;
 +  
 +  Возврат ВыполненыВсеЗадания;
 +
 +КонецФункции
 +</code>
 +
 +<code>
 +&НаСервере
 +Процедура ПрекратитьВыполнениеНаСервере(ИдЗадания)
 +  
 +  //Для каждого СтрокаТаблицы Из ТаблицаИдентификаторовЗаданий Цикл
 +    Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдЗадания);  
 +    Задание.Отменить();
 +  //КонецЦикла;
 +  
 +КонецПроцедуры
 </code> </code>
  • /sites/data/attic/vypolnenie_procedury_v_fone_cherez_dlitelnye_operacii.1614340298.txt.gz
  • Последнее изменение: 2021/02/26 11:51
  • tro