Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
|
vypolnenie_procedury_v_fone_cherez_dlitelnye_operacii [2021/02/26 11:44] tro - |
vypolnenie_procedury_v_fone_cherez_dlitelnye_operacii [2021/02/26 11:54] (текущий) tro |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | **Блок с фоновым заданием** | ||
| + | |||
| Первая вызываемая функция на клиенте. | Первая вызываемая функция на клиенте. | ||
| * " | * " | ||
| Строка 14: | Строка 16: | ||
| КонецПроцедуры | КонецПроцедуры | ||
| </ | </ | ||
| + | |||
| + | |||
| + | |||
| + | ---- | ||
| " | " | ||
| Строка 31: | Строка 37: | ||
| </ | </ | ||
| + | ---- | ||
| + | < | ||
| + | & | ||
| + | Процедура ПолнаяВыгрузкаВФоновом(ID_ФоновогоЗадания) | ||
| + | |||
| + | //Если нужно передат параметры в фоновое задание - формируем его в структуре | ||
| + | СтруктураПараметров = Новый Структура; | ||
| + | СтруктураПараметров.Вставить(" | ||
| + | СтруктураПараметров.Вставить(" | ||
| + | |||
| + | ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ЭтаФорма.УникальныйИдентификатор); | ||
| + | ПараметрыВыполнения.ЗапуститьВФоне | ||
| + | ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; | ||
| + | ПараметрыВыполнения.НаименованиеФоновогоЗадания | ||
| + | ПараметрыВыполнения.ОжидатьЗавершение | ||
| + | //тут путь уже непосредственно к самой процедуре которую нужно выполить в фоне** | ||
| + | СтрокаЗапуска=" | ||
| + | СтруктураЗадания = ДлительныеОперации.ВыполнитьВФоне(СтрокаЗапуска, | ||
| + | |||
| + | ID_ФоновогоЗадания = СтруктураЗадания.ИдентификаторЗадания; | ||
| + | |||
| + | КонецПроцедуры | ||
| + | |||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | **Блок с проверкой на каком этапе это фоновое задание** | ||
| + | |||
| + | < | ||
| + | & | ||
| + | Процедура ПроверитьВыполнениеЗадания1() | ||
| + | |||
| + | ПоследняяОбработаннаяСтрока = Неопределено; | ||
| + | |||
| + | ОбработаннаяСтрока | ||
| + | |||
| + | ОбработаннаяСтрока | ||
| + | |||
| + | Если ОбработаннаяСтрока = Неопределено Тогда | ||
| + | |||
| + | ПрекратитьВыполнениеНаСервере(Объект.ID_ФоновогоЗадания); | ||
| + | ОтключитьОбработчикОжидания(" | ||
| + | |||
| + | Элементы.ИндикаторОбработкиExcel.Видимость=ложь; | ||
| + | Сообщение = Новый СообщениеПользователю; | ||
| + | Сообщение.Текст = " | ||
| + | Сообщение.Сообщить(); | ||
| + | |||
| + | КонецЕсли; | ||
| + | ЧислоСтрокВТаблице = 100; | ||
| + | Если ТипЗнч(ОбработаннаяСтрока) = Тип(" | ||
| + | |||
| + | ПоследняяОбработаннаяСтрока = ОбработаннаяСтрока; | ||
| + | Процент = ПоследняяОбработаннаяСтрока/ | ||
| + | Состояние(" | ||
| + | |||
| + | Иначе | ||
| + | |||
| + | Если ОбработаннаяСтрока = Истина Тогда | ||
| + | |||
| + | ОтключитьОбработчикОжидания(" | ||
| + | |||
| + | Элементы.ИндикаторОбработкиExcel.Видимость=ложь; | ||
| + | Сообщение = Новый СообщениеПользователю; | ||
| + | Сообщение.Текст = "" | ||
| + | Сообщение.Сообщить(); | ||
| + | |||
| + | |||
| + | КонецЕсли; | ||
| + | |||
| + | КонецЕсли; | ||
| + | |||
| + | КонецПроцедуры | ||
| + | |||
| + | </ | ||
| + | |||
| + | < | ||
| + | & | ||
| + | Функция | ||
| + | |||
| + | Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдЗадания); | ||
| + | СтрокаТаблицы = ИдЗадания; | ||
| + | |||
| + | Если Задание = Неопределено Тогда | ||
| + | // | ||
| + | Выполнено = Истина; | ||
| + | // | ||
| + | Возврат Выполнено; | ||
| + | КонецЕсли; | ||
| + | | ||
| + | Состояние = Задание.Состояние; | ||
| + | | ||
| + | Если Состояние = СостояниеФоновогоЗадания.Завершено Тогда | ||
| + | |||
| + | МассивСообщений = Задание.ПолучитьСообщенияПользователю(Истина); | ||
| + | Если МассивСообщений = Неопределено Тогда | ||
| + | Иначе | ||
| + | Если МассивСообщений.Количество() > 0 Тогда | ||
| + | |||
| + | ПоследняяЗапись = МассивСообщений.Количество()-1; | ||
| + | |||
| + | Для Каждого Сообщ Из МассивСообщений Цикл | ||
| + | // | ||
| + | // | ||
| + | // | ||
| + | КонецЦикла; | ||
| + | |||
| + | КонецЕсли; | ||
| + | КонецЕсли; | ||
| + | |||
| + | ВыполненыВсеЗадания = Истина; | ||
| + | | ||
| + | Сообщение = Новый СообщениеПользователю; | ||
| + | Сообщение.Текст = " | ||
| + | Сообщение.Сообщить(); | ||
| + | | ||
| + | ИначеЕсли Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда | ||
| + | |||
| + | ОшибкаЗадания = Задание.ИнформацияОбОшибке; | ||
| + | Если ОшибкаЗадания <> Неопределено Тогда | ||
| + | ЗаписьЖурналаРегистрации(НСтр(" | ||
| + | УровеньЖурналаРегистрации.Ошибка,,, | ||
| + | ПодробноеПредставлениеОшибки(ОшибкаЗадания)); | ||
| + | Иначе | ||
| + | ЗаписьЖурналаРегистрации(НСтр(" | ||
| + | УровеньЖурналаРегистрации.Ошибка,,, | ||
| + | НСтр(" | ||
| + | КонецЕсли; | ||
| + | | ||
| + | МассивСообщений = Задание.ПолучитьСообщенияПользователю(Истина); | ||
| + | Если МассивСообщений = Неопределено Тогда | ||
| + | // | ||
| + | Иначе | ||
| + | Если МассивСообщений.Количество() > 0 Тогда | ||
| + | ПоследняяЗапись = МассивСообщений.Количество()-1; | ||
| + | КонецЕсли; | ||
| + | | ||
| + | ЗаписьЖурналаРегистрации(НСтр(" | ||
| + | УровеньЖурналаРегистрации.Ошибка,,, | ||
| + | Строка(ПоследняяЗапись));// | ||
| + | |||
| + | // | ||
| + | Сообщение = Новый СообщениеПользователю; | ||
| + | Сообщение.Текст = ПодробноеПредставлениеОшибки(ОшибкаЗадания); | ||
| + | Сообщение.Сообщить(); | ||
| + | |||
| + | КонецЕсли; | ||
| + | ВыполненыВсеЗадания = Ложь; | ||
| + | Возврат Неопределено; | ||
| + | |||
| + | Иначе | ||
| + | | ||
| + | МассивСообщений = Задание.ПолучитьСообщенияПользователю(Истина); | ||
| + | Если МассивСообщений = Неопределено Тогда | ||
| + | // | ||
| + | Иначе | ||
| + | Если МассивСообщений.Количество() > 0 Тогда | ||
| + | | ||
| + | ПоследняяЗапись = МассивСообщений.Количество()-1; | ||
| + | | ||
| + | Для Каждого Сообщ Из МассивСообщений Цикл | ||
| + | | ||
| + | Если СтрНайти(Сообщ.Текст," | ||
| + | СтрНайти(Сообщ.Текст," | ||
| + | // | ||
| + | ИначеЕсли СтрНайти(Сообщ.Текст," | ||
| + | // | ||
| + | попытка | ||
| + | ИндикаторОбработкиExcel = число(СтрЗаменить(Сообщ.Текст," | ||
| + | Исключение | ||
| + | КонецПопытки; | ||
| + | Иначе | ||
| + | Сообщение = Новый СообщениеПользователю; | ||
| + | Сообщение.Текст = Сообщ.Текст;// | ||
| + | Сообщение.Сообщить(); | ||
| + | КонецЕсли; | ||
| + | | ||
| + | КонецЦикла; | ||
| + | | ||
| + | КонецЕсли; | ||
| + | КонецЕсли; | ||
| + | ВыполненыВсеЗадания = Ложь; | ||
| + | | ||
| + | КонецЕсли; | ||
| + | | ||
| + | Возврат ВыполненыВсеЗадания; | ||
| + | |||
| + | КонецФункции | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | & | ||
| + | Процедура ПрекратитьВыполнениеНаСервере(ИдЗадания) | ||
| + | | ||
| + | //Для каждого СтрокаТаблицы Из ТаблицаИдентификаторовЗаданий Цикл | ||
| + | Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдЗадания); | ||
| + | Задание.Отменить(); | ||
| + | // | ||
| + | | ||
| + | КонецПроцедуры | ||
| + | </ | ||