Имя: Пароль:
1C
1С v8
Как выводить прогресс на клиенте, если обработка идет на сервере?
0 Picnky
 
05.02.19
07:31
Собственно сабж. Обрабатываю список файлов на сервере, как вывести прогресс на клиенте, чтобы пользователь знал, что процесс идет, а не зависла программа?
Сначала вынес обработку массива файлов на клиент, но теперь выяснилось, что файлы идут в неправильном порядке, надо грузить имена их в таблицу значений, изменять, потом сортировать по измененному имени и по соответствию "измененное имя"-"имя"-"строка массива по имени" грузить соответствующий файл.
Т.к. таблицы значений на клиенте недоступны, все застопорилось.
1 Провинциальный 1сник
 
05.02.19
07:34
(0) Что мешает воспользоваться другими коллекциями, доступными и на клиенте и на сервере? Массив, список значений, структура?
2 Picnky
 
05.02.19
07:39
Наверное неумение с ними работать. Пытаюсь передавать через ТЗ на форме,

Обработка.ЗагрузкаДанныхХарвестеров.Форма.Форма.Форма(73)}: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
    ЗначениеВРеквизитФормы(ТЗ, "ТЗ");
по причине:
Недопустимое значение параметра (параметр номер '2')
Недопустимое значение параметра (параметр номер '2')
Вот что выдает
3 Mankubus
 
05.02.19
07:59
(2) посмотри в БСП подсистему ДлительныеОперации.
там через фоновые задания сделано
4 hhhh
 
05.02.19
08:04
(2) не нужно там ЗначениеВРеквизитФормы. С ТЗ прекрасно можно работать и без этого.
5 Cyberhawk
 
05.02.19
08:07
1С на Арракисе?
6 Cyberhawk
 
05.02.19
08:18
На клиенте надо обработчиком ожидания периодически получать прогресс, а на сервере периодически его куда-нибудь складывать, откуда потом клиент сможет этот прогресс получить.
7 Picnky
 
05.02.19
11:35
{Обработка.ЗагрузкаДанныхХарвестеров.Форма.Форма.Форма(103,43)}: Ожидается выражение
        ЗаданиеВФоне = ФоновыеЗадания.Выполнить(<<?>>«ЗаполнитьТаблицуФайловНаСервере»);
8 Picnky
 
05.02.19
11:35
Пытаюсь переделать через фоновые задания, с периодическим опросом через сообщения. Вываливается куча таких ошибок
9 Picnky
 
05.02.19
11:37
{Обработка.ЗагрузкаДанныхХарвестеров.Форма.Форма.Форма(139,40)}: Ожидается выражение
           ОтключитьОбработчикОжидания(<<?>>«ПроверитьСтатусЗадания»); (Проверка: Сервер)

причем тут процедура наклиенте а проверка почему-то насервере
10 Вафель
 
05.02.19
11:38
11 Picnky
 
05.02.19
11:45
(10) да я с примера содрал все подчистую, а ругается чуть ли не на каждую строку
12 hhhh
 
05.02.19
12:03
(11) кавычки почему здесь?
13 Cyberhawk
 
06.02.19
07:55
(10) Так типового БСПшного кода чтоб взлетело силами БСП (по сравнению с 2-3 года назад) копейки уже - никаких ни обработчиков подключаемых уже не надо делать, ни реквизитов на форму добавлять. Формочка уже готовая, уведомения в правом нажнем углу уже готовые, сообщение прогресса одной строчкой делается, параметры нужные инициализируются и сам старт тоже не длиньше 5 строк. Красота.
14 ДенисЧ
 
06.02.19
09:07
Офф
"ЗагрузкаДанныхХарвестеров"

Харконнен или Атридес? )))
15 TormozIT
 
гуру
06.02.19
09:35
(13) Через какое хранилище они передают прогресс?
- регистр
- хранилищеНастроек
- сообщения пользователю
16 Cyberhawk
 
06.02.19
21:26
(14) Повторюша)
17 palsergeich
 
06.02.19
21:41
(15) Только что код глянул - Сообщения пользователю
18 palsergeich
 
06.02.19
21:43
19 Cyberhawk
 
06.02.19
21:45
(15) Ну дополню предыдущего оратора)

// Регистрирует информацию о ходе выполнения длительной операции.
// В дальнейшем ее можно считать при помощи функции ДлительныеОперации.ПрочитатьПрогресс.
// Во избежание избыточного потребления памяти и ее утечек при выполнении одной длительной операции
// не следует сообщать прогресс более 100 раз.
//
// Параметры:
//  Процент                 - Число        - Процент выполнения.
//  Текст                   - Строка       - Информация о текущей операции.
//  ДополнительныеПараметры - Произвольный - Любая дополнительная информация, которую необходимо передать на клиент.
//                                           Значение должно быть простым (сериализуемым в XML строку).
//
Процедура СообщитьПрогресс(Знач Процент = Неопределено, Знач Текст = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт
    
    Если ПолучитьТекущийСеансИнформационнойБазы().ПолучитьФоновоеЗадание() = Неопределено Тогда
        Возврат;
    КонецЕсли;
        
    ПередаваемоеЗначение = Новый Структура;
    Если Процент <> Неопределено Тогда
        ПередаваемоеЗначение.Вставить("Процент", Процент);
    КонецЕсли;
    Если Текст <> Неопределено Тогда
        ПередаваемоеЗначение.Вставить("Текст", Текст);
    КонецЕсли;
    Если ДополнительныеПараметры <> Неопределено Тогда
        ПередаваемоеЗначение.Вставить("ДополнительныеПараметры", ДополнительныеПараметры);
    КонецЕсли;
    
    ПередаваемыйТекст = ОбщегоНазначения.ЗначениеВСтрокуXML(ПередаваемоеЗначение);
    
    Текст = "{" + СообщениеПрогресса() + "}" + ПередаваемыйТекст;
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст);
    
КонецПроцедуры
Закон Брукера: Даже маленькая практика стоит большой теории.