Как реализовать в 1С прогресс бар?

Вот пишите вы отчет или обработку, долго пишите. После чего запускаете ее на выполнение в режиме предприятия и она крутится две, три  и более минут. И согласитесь, не очень приятно сидеть в неведении и ждать когда же она закончит выполнение. Гораздо интереснее, когда на форме обработки будет отображаться некоторый объект состояния, показывающий количество выполненных процентов. Как же реализовать прогресс бар в 1С 8? Давайте рассмотрим подробнее.

Прогресс бар в 1С 8.2

К примеру, в нашей обработке перебирается некий огромный массив данных, после чего с этим массивом происходят другие действия. Так вот сколько процентов будет выполняться данные действия мы и рассмотрим. В 1С 8.2 прогресс бар —  это всего-навсего объект  со своими свойствами. Для реализации его графического отображения  нам необходимо будет сначала на форму вставить элемент управления «Индикатор«, а в модуле в цикле прибавлять некоторый числовой шаг.

 

Выборка= РезультатЗапроса.Выбрать();
ProgressBar= ЭлементыФормы.Индикатор;
ProgressBar.МаксимальноеЗначение = Выборка.Количество();
ProgressBar.ОтображатьПроценты = Истина;
ProgressBar.СтильОтображения = РежимСглаживанияИндикатора.Плавный;
ProgressBar.Значение = 0;
ProgressBar.Шаг = 1;
         Пока Выборка.Следующий() Цикл
               ProgressBar.Значение = ProgressBar.Значение + 1;
         КонецЦикла;

 

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

В управляемых формах,  при обычном выполнении процедуры на сервере, пользовательский интерфейс полностью блокируется. При таком подходе мы не увидим плавного увеличения статусной строки. А только сразу 0% и после выполнения обработки сразу 100%. Для решения нам необходимо применять  фоновый режим и использовать метод асинхронного программирования. При таком подходе интерфейс пользователя не блокируется и мы можем полностью с ним работать. При этом необходимо опрашивать состояние фонового режима.

Алгоритм действий:

  • Необходимо разместить в  общем модуле (не глобальном)  длительную процедуру, которая будет на определенном моменте посылать пользователю сообщение со статусом и процентом выполенения, например:

Процедура Посылка() Экспорт

  Для Шаг= 1 По 100 Цикл


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

КонецПроцедуры

 

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

 

&НаКлиенте
Процедура Старт(Команда)
     ЗапускНаСервере();
     ПодключитьОбработчикОжидания(«ПроверитьСтатусЗадания», 1); //каждую секунду
КонецПроцедуры

 

&НаСервере
Процедура ЗапускНаСервере()
    ЗаданиеВФоне = ФоновыеЗадания.Выполнить(«НашМодуль.Посылка»); //Здесь указываем нашу длительную процедуру, которую мы создали в начале
     Идентификатор = ЗаданиеВФоне .УникальныйИдентификатор; // Идентификатор — реквизит формы с типом уникальный идентификатор
КонецПроцедуры

 

&НаКлиенте
Процедура ПроверитьСтатусЗадания()
      Стутус= ПолучитьСообщения();
        Если Стутус= «Выполнено» Тогда
           ОтключитьОбработчикОжидания(«ПроверитьСтатусЗадания»);
           Состояние(«Выполнено:», 100);
       Иначе
           Для Каждого Шаг Из Стутус Цикл
              Состояние(«Выполнено:», Число(Шаг));
           КонецЦикла;

        КонецЕсли;
КонецПроцедуры

 

&НаСервере
Функция ПолучитьСообщения()

      Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор); 
       Если Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
              Возврат Задание.ПолучитьСообщенияПользователю(Истина); //Получаем и сообщения, которые были отправлены из длительной процедуры
       Иначе
           Возврат «Выполнено»;
       КонецЕсли;

КонецФункции

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

Поделитесь своим мнением

Свежие записи
Советы и помощь программиста в 1с © 2018 ·   Войти   · Наверх