Прогресс бар на управляемых формах

Реализация прогресс бара в 1С 8.3 в управляемых формах.

Задача: Сделать прогресс бар (статусную строку).
Проблема: При вызове процедуры, которая выполняется «НаСервере» пользовательский интерфейс блокируется до окончания выполнения этой процедуры. Поэтому изменить форму, выводить статусную строку и сообщения пользователю не получиться.
Решение: Использовать подход Асинхронного программирования – запускать длительную операцию в Фоновом режиме. При этом пользовательский интерфейс не блокируется. Мы можем опрашивать состояние фонового задания (Активно, Завершено и т.д.), получать сообщения из процедуры.

Алгоритм:
1. Размещаем «длительную» процедуру в серверном не глобальном общем модуле.
2. В этой процедуре, на каком-либо этапе посылаем СообщениеПользователю Статус, Процент выполнения и т.п.

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ПроцентВыполнения;
Сообщение.Сообщить();

3. Запускаем фоновое задание и сохраняем Идентификатор этого фонового задания

ФоновоеЗадание = ФоновыеЗадания.Выполнить("АиснхронныеОбработчики.НашаДлительнаяОперация");
Идентификатор = ФоновоеЗадание.УникальныйИдентификатор;

4. Подключаем процедуру-обработчик ожидания с нужным интервалом

ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 2);

5. В процедуре-обработчике опрашиваем состояние фонового задания

Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор);
Задание.Состояние

6. Получаем и обрабатываем сообщения, которые были отправлены из длительной процедуры

Задание.ПолучитьСообщенияПользователю(Истина);

Т.е. состояние выполнения отправляется через СообщениеПользователю, которое мы потом и получаем.

Собственно так реализован механизм работы в БСП. Там через СообщениеПользователю передаются сериализованные XML данные.
Промежуточные и конечные результаты можно передавать через ВременноеХранилище. Но адрес ВременногоХранилища должен быть получен через Идентификатор формы.

5 Comments

  1. Nik_novosib

    Автору БОЛЬШОЙ плюс. Кратко и доступно!

    Reply
  2. loshkoni

    Скачать обработку нет мани.

    Объясните пожалуйста, какую процедуру в каком месте размещать.

    Reply
  3. Abduvali

    (2), если нет мани то, можно посмотреть тут…..

    Reply
  4. AlexandrSmith

    (3) Теперь можно посмотреть «тут» и вот тут

    https://infostart.ru/public/573761/

    Вот эта статья самая подробная теперь

    https://xn—-1-bedvffifm4g.xn--p1ai/articles/2017-09-08-display-progress-of-long-operations/

    Можно сказать проблема решена.

    Reply
  5. lev6975

    Не годится

    Базу менять нельзя!

    Другие варианты есть?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *