gifts2017

Асинхронная загрузка данных на Управляемую Форму. Прогресс бар (УФ 8.3). Индикация состояния процесса

Опубликовал Петр Базелюк (pbazeliuk) в раздел Обмен - Обмен с другими системами

Часто бывает, что возникает необходимость загрузить множество данных из разнообразных источников в определенную форму или рабочее место. В процессе загрузки пользователь в неведении — информация готовится или нет. Прием позволяет загружать данные из нескольких источников асинхронно, не блокируя форму\интерфейс, а также отображать ошибки и состояние прогресса. По мере готовности данных, они будут отображены на форме

Минимальные требования

  • версия платформы «1С:Предприятие 8»  не ниже 8.3.3.641;
  • версия БСП в конфигурации — не ниже 2.1.3.50;
  • разработка предназначена для управляемых форм;
  • обработка должна быть подключена к базе с помощью механизма БСП.

Схема работы методики

  1. процедура «ПриСозданииНаСервере» сохраняет ссылку на дополнительную обработку, определяет вариант работы информационной базы (файловый, клиент-серверный) и инициализирует количество асинхронных заданий;
  2. при нажатии кнопки «Старт» происходит запуск асинхронных заданий и подключается обработчик ожидания, который следит за работой заданий;
  3. при каждом срабатывании обработчика ожидания, выполняется обновление индикаторов прогресса;
  4. при завершении асинхронного задания, в форму приходит оповещение с результатом работы, который, в свою очередь, загружается в форму.

Технические нюансы

  • результаты работы асинхронного задания передаются с помощью адреса временного хранилища формы;
  • данные для индикатора прогресса в файловом варианте передаются с помощью адреса временного хранилища формы;
  • данные для индикатора прогресса в клиент-серверном варианте передаются с помощью «СообщениеПользователю» потому, что помещение данных из фонового задания в родительский сеанс происходит после завершения работы задания;
  • результаты заданий загружаются последовательно в файловом варианте и в произвольном порядке в клиент-серверном варианте;
  • в процессе работы не блокируется ни интерфейс, ни сама форма.
 

Скачать файлы

Наименование Файл Версия Размер
Пример асинхронной загрузки данных 92
.epf 12,47Kb
09.10.15
92
.epf 1.0.0 12,47Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Артур Аюханов (artbear) 09.10.15 13:57
2. Сан Саныч (herfis) 09.10.15 14:56
Ну а чтобы быстрее разобраться в работе этой обработки, можно еще сюда заглянуть: Прогресс-бар длительных серверных операций (БСП)
Суть практически та же, только на примере одного асинхронного задания.
ЗЫ. А зачем нужно по-разному обрабатывать файловую/клиент-сервер? Почему нельзя единообразно через "СообщениеПользователю"?
3. Петр Базелюк (pbazeliuk) 09.10.15 15:46
(2) herfis, СообщениеПользователю выполняет то, для чего не предназначено - передает данные. ПоместитьВХранилище() как раз то что нужно, но мне говорят что это ошибка платформы для файлового варианта :)
4. Сан Саныч (herfis) 09.10.15 16:54
(3) pbazeliuk, Ага, т.е. причины только религиозного характера :)
На самом деле никакого "криминала" в использовании "СообщениеПользователю" я не вижу. Наоборот - довольно остроумное решение. Хотя и плохо, что в 1С нет более удобных механизмов для межпроцессного взаимодействия.
Временное хранилище совершенно очевидно не подходит для решения этой задачи, т.к. чтобы вернуть клиенту его новое значение нужно либо завершить текущий серверный вызов, либо специально для этой цели разработать механизм параллельной синхронизации, который тоже нельзя сделать красиво, т.к. клиент может узнать об изменении серверной версии данных хранилища только путем периодического опроса.
На файловой хранилище обновляется мгновенно, т.к. там всё локально. С точки зрения корректности эмуляции клиент-серверного режима это в самом деле ошибка.
ЗЫ. На самом деле фича, т.к. исправлять это поведение никто не будет так как для этого нужны доп. усилия и в целом это смысла не имеет.
ЛеваРоскошный; +1 Ответить
5. Сергей Зеленовский (zels) 09.07.16 18:15
Запускаю - прогресс-бары после задержки прыгают на 100%.