Состояние, индикатор выполнения

1. kolp821 16.09.15 14:42 Сейчас в теме
Здравствуйте. Есть вопрос, нужно отображать выполнения цикла НаСервере в мобильном приложении. Процедура Состояние не доступна на мобильной платформе, подскажите какие еще способом можно организовать процесс выполнения
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dj_serega 394 16.09.15 15:42 Сейчас в теме
(1) kolp821, я через фоновое задание делал.
3. kolp821 16.09.15 15:43 Сейчас в теме
(2) dj_serega, но фоновые задание не доступны на мобильной платформе
4. dj_serega 394 16.09.15 15:49 Сейчас в теме
(3) kolp821, А как же я тогда их запустил? :)

Источник: http://v8.1c.ru/o7/201404mob/index.htm
5. kolp821 16.09.15 16:00 Сейчас в теме
(4) dj_serega, если не затруднить тебя, покажи пример.
6. dj_serega 394 16.09.15 16:51 Сейчас в теме
(5) kolp821, Логика следующая:
Запускаем обработчик ожидания. Который каждую секунду выполняет чтение сообщений обмена. Если сообщение прочитано в момент выполнения фонового задания, сообщения удаляются из очереди "не сообщенных".

Код выложил набросками, так как у меня оно универсально. А Вам нужно самому разобраться что бы знать как работает этот механизм :)
Для понимания сойдет, если будут вопросы задавайте.

Обмен выполняется в общей форме
// При создании на сервере
    Параметры.ИмяПроцедурыЗагрузкиИзменений    = "ОбработчикиОбменаДанными.ЗагрузитьИзменения";
    Параметры.UIDЗагрузкиИзменений            = Новый УникальныйИдентификатор;

// При открытии на сервере
СостояниеОбмена = 
    "Выполняется загрузка измененных данных.
    |Не закрывайте текущую форму."
    ;
    
    Параметры.ЗагрузкаИзмененийЗавершена        = Ложь;
    Параметры.АдресСообщенийЗагрузкиИзменений    = "";
    
    ПодключитьОбработчикОжидания("Подключаемый_ЗагрузитьИзменения", 1, Ложь);
    
    Элементы.СтраницыОсновные.ТекущаяСтраница = Элементы.СтраницаЛогРаботы;

Показать

// Обработчик загрузки данных
&НаКлиенте
Процедура Подключаемый_ЗагрузитьИзменения() Экспорт 
    
    Если Параметры.ЗагрузкаИзмененийЗавершена Тогда
        ОтключитьОбработчикОжидания("Подключаемый_ЗагрузитьИзменения");
        Параметры.ВыполняетсяОбмен = Ложь;
        СостояниеОбмена = "Загрузка изменений завершена.";
    Иначе
        
        Если ПустаяСтрока(Параметры.АдресСообщенийЗагрузкиИзменений) Тогда
            
            Параметры.АдресСообщенийЗагрузкиИзменений = ПоместитьВоВременноеХранилище(Неопределено, Параметры.UIDЗагрузкиИзменений);
            
            ОбработчикиОбменаДанными.ЗапуститьФоновоеЗадание(Параметры.ИмяПроцедурыЗагрузкиИзменений, Параметры.АдресСообщенийЗагрузкиИзменений);
            
            Параметры.ВыполняетсяОбмен = Истина;
            
        Иначе
            
            СообщенияФоновогоЗадания = ОбработчикиОбменаДанными.ПолучитьТекстФоновогоЗадания(Параметры.ИмяПроцедурыЗагрузкиИзменений, Параметры.АдресСообщенийЗагрузкиИзменений);
            
            Для каждого ТекущееСообщениеЗадания Из СообщенияФоновогоЗадания Цикл
                
                ЛогРаботы.Добавить(ТекущееСообщениеЗадания.Текст);
                
            КонецЦикла;
            
// ЛогРаботы - реквизит формы
            Если ЛогРаботы.Количество() Тогда
                Элементы.ЛогРаботы.ТекущаяСтрока = ЛогРаботы[ЛогРаботы.Количество() - 1].ПолучитьИдентификатор();
            КонецЕсли;
            
            Если ОбработчикиОбменаДанными.ФоновоеЗаданиеЗавершилось(Параметры.ИмяПроцедурыЗагрузкиИзменений, Параметры.АдресСообщенийЗагрузкиИзменений) Тогда
                Параметры.ЗагрузкаИзмененийЗавершена = Истина;
            КонецЕсли;
            
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры // Подключаемый_ЗагрузитьИзменения
Показать


// Служебные процедуры/функции
Процедура ЗапуститьФоновоеЗадание(ИмяПроцедуры, УИДЗадания) Экспорт 
    
    ФоновыеЗадания.Выполнить(ИмяПроцедуры, , УИДЗадания, УИДЗадания);
    
КонецПроцедуры // ЗапуститьФоновоеЗадание

Функция   ФоновоеЗаданиеЗавершилось(ИмяПроцедуры, УИДЗадания) Экспорт 
    
    СтруктураОтбора = Новый Структура;
    СтруктураОтбора.Вставить("ИмяМетода",    ИмяПроцедуры);
    СтруктураОтбора.Вставить("Ключ",        УИДЗадания);
    
    МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(СтруктураОтбора);
    
    Если МассивЗаданий.Количество() Тогда
        
        // В нулевом индексе последнее задание.
        ТекЗадание = МассивЗаданий[0];
        
        Возврат Не ТекЗадание.Состояние = СостояниеФоновогоЗадания.Активно;
        
    КонецЕсли;
    
    Возврат Ложь;
    
КонецФункции // ФоновоеЗаданиеЗавершилось

Функция   ПолучитьТекстФоновогоЗадания(ИмяПроцедуры, УИДЗадания) Экспорт 
    
    СтруктураОтбора = Новый Структура;
    СтруктураОтбора.Вставить("ИмяМетода",    ИмяПроцедуры);
    СтруктураОтбора.Вставить("Ключ",        УИДЗадания);
    
    МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(СтруктураОтбора);
    
    Если МассивЗаданий.Количество() Тогда
        
        // В нулевом индексе последнее задание.
        ТекЗадание = МассивЗаданий[0];
        
        Возврат ТекЗадание.ПолучитьСообщенияПользователю(Истина)
        
    КонецЕсли;
    
    Возврат Новый ФиксированныйМассив(Новый Массив());;
    
КонецФункции // ПолучитьТекстФоновогоЗадания


Показать


Через фоновое задание вызывается следующая процедура:
HTTPПодключения.ВыполнитьЗапросЗагрузкаДанных("ЗагрузитьДокумент", "Изменения");

В процессе загрузки вызывается глобальная процедура:
глСообщениеФоновогоЗадания("Загрузка изменений.");

Процедура глСообщениеФоновогоЗадания(ТекстСообщения) Экспорт 
    
    СообщениеПользователю = Новый СообщениеПользователю;
    СообщениеПользователю.Текст = ТекстСообщения;
    СообщениеПользователю.Сообщить();
    
КонецПроцедуры // СообщениеФоновогоЗадания

Показать
7. dj_serega 394 17.09.15 15:12 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот