Это старая версия документа!
Блок с фоновым заданием
Первая вызываемая функция на клиенте.
- «Элементы.ИндикаторОбработкиExcel» - это элемент на форме типа «индикатор». В качестве источника данных у него реквизит формы «ИндикаторОбработкиExcel»
- «ИндикаторОбработкиExcel» - реквизит формы. чило. туда будем закидывать число
&НаКлиенте
Процедура ЗапуститьВыгрузкНаСервере(РезультатВопроса, параметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.ok Тогда
Элементы.ИндикаторОбработкиExcel.Видимость=Истина;
ИндикаторОбработкиExcel = 0;
ВыполнитьФоновоеПолнуюВыгрузкуНаСервере();
ПодключитьОбработчикОжидания("ПроверитьВыполнениеЗадания1", 1);
КонецЕсли;
КонецПроцедуры
«ID_ФоновогоЗадания» - ревизит формы или объекта. Будет хранить в себе ГУИД фонового задания чтобы потом можно было по нему обращаться к фоновому заданию и проверять его состояние
&НаСервере Процедура ВыполнитьФоновоеПолнуюВыгрузкуНаСервере() ID_ФоновогоЗадания = Неопределено; ПолнаяВыгрузкаВФоновом(ID_ФоновогоЗадания); Объект.ID_ФоновогоЗадания1 = ID_ФоновогоЗадания; Мсооб = новый СообщениеПользователю; Мсооб.Текст = ""+ТекущаяДата()+": Запущенна выгрузка в фоновом режиме. Вы можете продолжать работать. Прогресс будет отображаться в этом окне."; Мсооб.Сообщить(); КонецПроцедуры
&НаСервере
Процедура ПолнаяВыгрузкаВФоновом(ID_ФоновогоЗадания)
//Если нужно передат параметры в фоновое задание - формируем его в структуре
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("УИДНастройки",ОбщийМодульОбменСPromUa.ПолучитьУИДобъекта(Объект.Ссылка));
СтруктураПараметров.Вставить("РучнойВызов",истина);
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(ЭтаФорма.УникальныйИдентификатор);
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь;
ПараметрыВыполнения.НаименованиеФоновогоЗадания = "ПолнаяВыгрузка_ВызовСФормы";
ПараметрыВыполнения.ОжидатьЗавершение = Ложь;
//тут путь уже непосредственно к самой процедуре которую нужно выполить в фоне**
СтрокаЗапуска="ОбщийМодульОбменСPromUa.ОбменСPromUa_толькотовары";
СтруктураЗадания = ДлительныеОперации.ВыполнитьВФоне(СтрокаЗапуска,СтруктураПараметров,ПараметрыВыполнения);
ID_ФоновогоЗадания = СтруктураЗадания.ИдентификаторЗадания;
КонецПроцедуры
Блок с проверкой на каком этапе это фоновое задание
&НаКлиенте
Процедура ПроверитьВыполнениеЗадания1()
ПоследняяОбработаннаяСтрока = Неопределено;
ОбработаннаяСтрока = ПоследняяОбработаннаяСтрока;
ОбработаннаяСтрока = ПроверитьФоновыеЗадания(Объект.ID_ФоновогоЗадания1);
Если ОбработаннаяСтрока = Неопределено Тогда
ПрекратитьВыполнениеНаСервере(Объект.ID_ФоновогоЗадания);
ОтключитьОбработчикОжидания("ПроверитьВыполнениеЗадания1");
Элементы.ИндикаторОбработкиExcel.Видимость=ложь;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Ошибка при выполнении задания ....";
Сообщение.Сообщить();
КонецЕсли;
ЧислоСтрокВТаблице = 100;
Если ТипЗнч(ОбработаннаяСтрока) = Тип("Число") Тогда
ПоследняяОбработаннаяСтрока = ОбработаннаяСтрока;
Процент = ПоследняяОбработаннаяСтрока/ЧислоСтрокВТаблице*100;
Состояние("Обработано " + Строка(ПоследняяОбработаннаяСтрока),Процент,"из " + Строка(ЧислоСтрокВТаблице));
Иначе
Если ОбработаннаяСтрока = Истина Тогда
ОтключитьОбработчикОжидания("ПроверитьВыполнениеЗадания1");
Элементы.ИндикаторОбработкиExcel.Видимость=ложь;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ""+ТекущаяДата()+": Задание выполнено";
Сообщение.Сообщить();
КонецЕсли;
КонецЕсли;
КонецПроцедуры