Механизм Прогресса (ХДЖПрогресс, ХДЖМеханизмПрогресса)

Введение

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

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

Последнюю трудность обычно решают путем "научения" используемых функций обновлять прогресс в процессе своей работы.
И такой подход хорошо работает, пока эти функции используются только в рамках одного данного процесса, и пока они для своей работы не вызывают другие функции (в том числе и друг-друга).

В случае, когда одна и та же функция может использоваться в разных частях разных процессов, то определить на этапе разработки, с какой скоростью она должна двигать прогресс, да и в какой части прогресса она должна что-то двигать (с 20-го по 25-й процент прогресса, или с 30-го по 50-й), бывает просто невозможно.

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

Немного истории

Впервые я придумал и реализовал на C++ эту методику в далеком 2006-м году, при разработке Оптимизатора порезки длинномеров, где мне нужно было отображать гладкое движение прогресса в иерархии рекурсивных вызовов, перебирающих разные варианты порезки.

В следующий раз я вспомнил об этой методике в 2016-м году, когда работал над проектом в ООО "Астор", где я разрабатывал обработку, которая предоставляла пользователю возможность редактировать переменное количество огромных деревьев значений, заполнение которых выполнялось достаточно продолжительное время.
Именно тогда я оформил эту методику в виде нескольких объектов конфигурации на платформе 1С Предприятие.
Правда, в силу того, что, как это обычно бывает, заказчик "махал над головой плеткой" (в виде поджимающих сроков), то данная реализация этого механизма получилась немного сыроватой и не сильно удобной.

Когда же в 2020-м году мне понадобилось реализовать прогресс уже в моих проектах на 1С, то я не стал "изобретать велосипед", а решил довести уже начатое дело до ума (ведь "плеткой над головой уже никто не махает"), и подарить результат Міру.
В итоге, я выделил разработанный для ООО "Астор" механизм в отдельную конфигурацию, адаптировал код под новые релизы платформы 1С (задействовал новые появившиеся методы работы с фоновыми заданиями), улучшил архитектуру решения, сделав его более удобным для использования, а также, предусмотрел работу в мобильном приложении и мобильном клиенте.
И "вишенкой на торте", еще сделал версию данного механизма, в виде расширения конфигурации.

И то, что получилось в итоге - дарю Вам. Пользуйтесь во благо!

Описание

С подробным описанием механизма и способов его использования можно ознакомиться в документации, которую можно найти в разделе "Файлы для скачивания".

Здесь же отмечу то, о чем уже упоминал выше.

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

Ограничения

В силу специфики работы платформы 1С, данный механизм наиболее пригоден для отображения прогресса процессов, выполняющихся в фоновых заданиях. Именно для таких случаев он и разрабатывался.

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

К сожалению, использование механизма для отображения прогресса процессов, которые выполняются в прямых серверных вызовах, невозможно, в силу специфики работы платформы 1С:Предприятие 8.
При этом, сама библиотека позволяет обновлять прогресс внутри серверных функций (которые могут вызываться как прямо, так и фоновыми заданиями), и таким образом писать универсальный код, который в фоновых заданиях будет отображать гладкий прогресс, а в прямых серверных вызовах будет отображать прогресс скачками (по мере возврата управления с серверного контекста на клиенсткий).

Демонстрация возможностей

В составе конфигурации присутствует подсистема ХДЖДемо, объекты которой предназначены для демонстрации возможностей механизма, а также могут быть полезны как примеры, при изучении описанных в документации способов использования механизма.

Примеры работы механизма можно посмотреть в следующих видео:

Пример работы механизма прогресса в толстом клиенте (интерфейс Такси)

Скачать: Видео в формате MPEG 4 (.mp4) 1280x720 (65 МБ) Видео в формате WebM (.webm) 1280x720 (43 МБ) Видео в формате Ogg (.ogv) 1280x720 (100 МБ)

Пример работы механизма прогресса на мобильной платформе (Android)

Скачать: Видео в формате MPEG 4 (.mp4) 1280x720 (22 МБ) Видео в формате WebM (.webm) 1280x720 (9 МБ) Видео в формате Ogg (.ogv) 1280x720 (23 МБ)

Поставка

Механизм отображения прогресса поставляется в двух вариантах:

Системные требования

Разработка и основное тестирование механизма велись на платформе 1С версии 8.3.15.1830 (64 бит), в файловой и клиент-серверной среде.
В качестве СУБД клиент-серверной среды использовалась MS SQL 2014.
Тестирование работы в мобильном приложении и мобильном клиенте выполнялись на мобильной платформе версии 8.3.15.86.

Данный механизм не зависит от конфигурации, и может быть интегрирован и использован с любой конфигурацией, работающей на управляемых формах.
Поддерживается, как интерфейс Такси, так и интерфейс 8.2 (управляемые формы).

Для объединения механизма с имеющейся конфигурацией

Версия платформы 1С должна быть не ниже 8.3.13.
Режим совместимости конфигурации должен быть не ниже 8.3.8.
Для работы на мобильной платформе режим совместимости конфигурации должен быть не ниже 8.3.13.

Для использования механизма в виде расширения

Версия платформы 1С должна быть не ниже 8.3.15.
Режим совместимости конфигурации должен быть не ниже 8.3.9.

Лицензия

Ну и пару слов о лицензии. Вы можете пользоваться этой библиотекой в любых благих целях, и при этом ничего мне не должны. С другой стороны, и ответственности за прямой или косвенный ущерб, а также за то, что предоставляемая функциональность не соответствует Вашим ожиданиям, я не несу. Вы используете данную библиотеку (как и другие мои продукты) на свой страх и риск.

Файлы для скачивания

Библиотека версии 1.0.00.001:

Механизм отображения окна прогресса.docx (689 КБ)
Файл конфигурации (формата 8.3.15.1830) (170 КБ)
Файл расширения конфигурации (формата 8.3.15.1830) (138 КБ)