Имя: Пароль:
1C
 
Как передать результат выполнения фонового задания
,
0 ИС-2
 
naïve
02.06.15
13:24
Порождаю фоновое задание, которое вызывает функцию.

Как можно получить результат выполнения функции?

Поместить результат во временное хранилище, запись в регистр. Какие еще варианты?
1 butterbean
 
02.06.15
13:25
а где надо получить-то?
2 D_E_S_131
 
02.06.15
13:28
"Какие еще варианты?" — создать текстовый файл, новый элемент справочника, документ на основании, таблицу Excel...
3 ИС-2
 
naïve
02.06.15
13:28
на клиенте
4 ИС-2
 
naïve
02.06.15
13:31
суть в том, что нужен какой-то быстрый механизм по выявлению свежих данных для пользователя (т.е результат выполнения функции).
5 LordCMEPTb
 
02.06.15
13:31
Ну помимо записи в регистр, можно писать в любой объект метаданных, в который можно записать строку неограниченной длины или хранилище значений.
Можно сохранять результат в файл, который выкладывать на общий диск, ftp, файло-помойки типа яндекс-диска.
Было б желание.. а чем временное хранилище не устроило?
6 MadHead
 
02.06.15
13:35
Можно вернуть в эксепшине
7 Fragster
 
гуру
02.06.15
13:36
я как-то через СообщениеПользователю передавал :)
8 MadHead
 
02.06.15
13:38
9 vde69
 
02.06.15
13:41
// Регистрирует в сообщениях информацию о ходе выполнения фонового задания.
//   В дальнейшем эту информацию можно считать с клиента при помощи функции ПрочитатьПрогресс.
//
// Параметры:
//  Процент - Число  - Необязательный. Процент выполнения.
//  Текст   - Строка - Необязательный. Информация о текущей операции.
//  ДополнительныеПараметры - Произвольный - Необязательный. Любая дополнительная информация,
//      которую необходимо передать на клиент. Значение должно быть простым (сериализуемым в XML строку).
//
Процедура СообщитьПрогресс(Знач Процент = Неопределено, Знач Текст = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт
    
    ПередаваемоеЗначение = Новый Структура;
    Если Процент <> Неопределено Тогда
        ПередаваемоеЗначение.Вставить("Процент", Процент);
    КонецЕсли;
    Если Текст <> Неопределено Тогда
        ПередаваемоеЗначение.Вставить("Текст", Текст);
    КонецЕсли;
    Если ДополнительныеПараметры <> Неопределено Тогда
        ПередаваемоеЗначение.Вставить("ДополнительныеПараметры", ДополнительныеПараметры);
    КонецЕсли;
    
    ПередаваемыйТекст = ОбщегоНазначения.ЗначениеВСтрокуXML(ПередаваемоеЗначение);
    
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = ПередаваемыйТекст;
    Сообщение.Сообщить();
    
КонецПроцедуры

// Находит фоновое задание и считывает из его сообщений информацию о ходе выполнения.
//
// Возвращаемое значение:
//   Структура - Информация о ходе выполнения фонового задания.
//       Ключи и значения структуры соответствуют именам и значениям параметров процедуры СообщитьПрогресс().
//
Функция ПрочитатьПрогресс(Знач ИдентификаторЗадания) Экспорт
    Перем Результат;
    
    Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
    Если Задание = Неопределено Тогда
        Возврат Результат;
    КонецЕсли;
    
    МассивСообщений = Задание.ПолучитьСообщенияПользователю(Истина);
    Если МассивСообщений = Неопределено Тогда
        Возврат Результат;
    КонецЕсли;
    
    Количество = МассивСообщений.Количество();
    
    Для Номер = 1 По Количество Цикл
        ОбратныйИндекс = Количество - Номер;
        Сообщение = МассивСообщений[ОбратныйИндекс];
        
        Результат = ОбщегоНазначения.ЗначениеИзСтрокиXML(Сообщение.Текст);
        Прервать;
    КонецЦикла;
    
    Возврат Результат;
КонецФункции
10 ИС-2
 
naïve
15.06.15
09:13
(9) спасибо.

Сейчас любой вариант требует постоянного опроса наличия завершения фонового задания, что добавляет тормоза и усложняет код.

Есть ли другие способы для информирования клиента об окончании его фонового задания?
11 ДенисЧ
 
15.06.15
09:15
(10) нет
12 hhhh
 
15.06.15
09:30
(10) а в типовый смотрели? Там ведь все отчеты сделаны через фоновые задания.
13 rphosts
 
15.06.15
09:30
(0) константа, сериализовать и в: файл, по почте, на фтп....
14 ИС-2
 
naïve
15.06.15
09:55
(12) нет. Я работаю с УПП - там такого не видел.

В каких конфах и отчетах можно посмотреть?