&НаКлиенте Процедура НачатьПроцесс(Команда) СоздатьИЗапуститьФоновоеЗадание(); // обработчик ожидания запукается каждую секунду ПодключитьОбработчикОжидания("ОбновлениеСостояния", 1); КонецПроцедуры &НаКлиенте Процедура ОбновлениеСостояния() Экспорт ТекЗнач = Прогресс; // текущий прогресс // проверка Если ПолучитьСостояниеФЗ(ТекЗнач) тогда ОтключитьОбработчикОжидания("ОбновлениеСостояния"); Результат = ПолучитьИзВременногоХранилища( АдресВозвращаемыхДанных); Предупреждение("Процесс обработки завершен:" + Результат); Иначе Прогресс = ТекЗнач; Состояние("Прогресс", Прогресс); КонецЕсли; КонецПроцедуры &НаСервере Процедура СоздатьИЗапуститьФоновоеЗадание() // передаем только адрес временного хранилища // данные в фоновое задание передаются только через // параметры! АдресВозвращаемыхДанных - реквизит формы АдресВозвращаемыхДанных = ПоместитьВоВременноеХранилище("", ЭтаФорма.УникальныйИдентификатор); ФПараметры = Новый Массив; ФПараметры.Добавить(АдресВозвращаемыхДанных); // запуск фонового задания из модуля "ФоновыеЗадания" // реквизит ФЗ должен быть на форме! ФЗ = ФоновыеЗадания.Выполнить("ФоновыеЗадания.ФонЗадание", ФПараметры, Новый УникальныйИдентификатор, "Тестовое задание").УникальныйИдентификатор; КонецПроцедуры &НаСервере Функция ПолучитьСостояниеФЗ(ТекЗнач) _фз = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФЗ); // читать сообщения от фонового задания Сообщения = _фз.ПолучитьСообщенияПользователю(Истина); Если Сообщения.Количество() > 0 тогда // ожидаем что сообщение - это число-процент ТекЗнач = Число(Сообщения[Сообщения.ВГраница()].Текст); Иначе // если сообщений нет, то не меняем прогресс ТекЗнач = ТекЗнач; КонецЕсли; Если _фз.Состояние <> СостояниеФоновогоЗадания.Активно тогда // в случае проблем Если ФонЗадание.Состояние <> СостояниеФоновогоЗадания.Активно и ФонЗадание.Состояние <> СостояниеФоновогоЗадания.Завершено тогда // описание ошибки Сообщить(ФонЗадание.ИнформацияОбОшибке.Описание); КонецЕсли; КонецЕсли; // возвращаем истина если процесс завершен Возврат _фз.Состояние <> СостояниеФоновогоЗадания.Активно; КонецФункции Код фонового задания в общем серверном модуле "ФоновыеЗадания": &НаСервере Процедура ФонЗадание(АдресВремХран) Экспорт РезультатРаботы = "Сюда будет помещен результат"; // какие-то действия в цикле ... для Счетчик = 1 по 5000 цикл // ... // отправка сообщения - процента выполнения Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = Строка(Окр(100*Счетчик/5000)); Сообщение.Сообщить(); // ... КонецЦикла; // отправка результата обратно ПоместитьВоВременноеХранилище(РезультатРаботы, АдресВремХран); КонецПроцедуры