Прогресс-бар длительных серверных операций (БСП)

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

Суть технологии БСП вкратце: серверный алгоритм (в данном случае — процедура модуля обработки) запускается отдельным фоновым заданием, прогресс выполнения которого довольно остроумно считывается обработкой ожидания на клиенте из стандартного серверного пула сообщений пользователю.
Данная разработка потребовалась по причине того, что не удалось найти готового "кристаллизованного"  примера реализации этой технологии с использованием механизмов БСП.
В БСП эта технология применена в обработках удаления помеченных объектов и группового изменения объектов.
При наличии времени и желания — можно разобраться в их реализации. Мой шаблон просто сэкономит Вам время.
Периодичность записи прогресса на сервере задается в "ПараметрыДлительнойОперации.Вставить("ПериодЗаписи", 1)", периодичность опроса прогресса на клиенте — в "ПараметрыОбработчикаОжиданияДлительнойОперации.МаксимальныйИнтервал = 1". То есть по умолчанию — одна секунда.

Шаблон обработки можно использовать как "черный ящик". Серверный алгоритм реализуется в процедуре модуля обработки "ИсполнитьАлгоритмДлительнойОперации()". Запуск серверного алгоритма и передача параметров — в процедуре модуля формы ФоновоеЗаданиеДлительнойОперацииЗапустить(). Обработка результатов на клиенте — в процедуре модуля формы ФоновоеЗаданиеДлительнойОперацииЗагрузитьРезультат().

Ограничения использования: для работы требуется интегрированная в конфигурацию подсистема базовой функциональности БСП. Проверено под БСП 2.2. В БСП 2.1 не проверялась. В БСП 2.0 не работает.

UPD. Реализована поддержка для БСП 2.3 — можно добавлять в справочник дополнительных отчетов и обработок.
UPD. Исправлена работа в БСП 2.3.5 — убраны лишние зависимости на модуль СтандартныеПодсистемыКлиент, который был изменен в БСП 2.3.5

14 Comments

  1. Yashazz

    Во-первых, уже было как идея и как удачная «кристаллизованная» реализация, а во-вторых, из-за такой ерунды тащить половину БСП — овчинка выделки не стоит.

    Reply
  2. herfis

    Соль данной публикации — именно в максимальном использовании БСП. Чтобы изобретать минимум велосипедов, если БСП уже используется. Насчет «половины БСП» — все используемые из БСП функции относятся к подсистеме «Базовая функциональность»

    Reply
  3. Franchiser

    Все хорошо, но не реализован запуск этой обработки из справочника дополнительных внешних обработок. Предлагаю допилить)

    Reply
  4. TopSergey

    Учитывая, что современные конфигурации (пример: Бухгалтерия 3.0) вовсю используют данные механизмы, то простой способ разобраться с этой балалайкой — как раз в тему.

    Reply
  5. zels

    Не работает на последних релизах

    Reply
  6. ToTMoM

    (2) да, подскажите пожалуйста, а как правильно запускать её из справочника внешних обработок. А то срочная проблема возникла сейчас, а как допилить сходу не пойму…

    Вот тема http://forum.infostart.ru/forum26/topic158267/message1620924/?result=reply#postform

    Reply
  7. herfis

    (6) ToTMoM, На свежих БСП не проверял, и для запуска из справочника внешних обработок не допиливал, каюсь. Постараюсь выкроить время и допилить, раз пример все еще востребован.

    Но оперативно, к сожалению, это сделать не смогу.

    Reply
  8. herfis

    (6) ToTMoM, Доработал

    1) теперь работает под БСП 2.3

    2) работает в качестве дополнительной обработки. Но реализовано/проверял тоже под БСП 2.3

    Если надо запустить доп-обработкой в ранней БСП со старой схемой декларации доп-обработок — просто заменить процедуру декларации доп-обработки в модуле и должно заработать. Можно было бы сделать универсально, но не было времени искать старый вариант декларации.

    Reply
  9. UPSoft

    1С:Предприятие 8.3 (8.3.10.2561)

    Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.51.25)

    ругается:

    {ВнешняяОбработка.ДлительнаяОперацияНаСервереДемо.Форма.Форма.Форма(120)}: Метод объекта не обнаружен (ОписаниеРезультатаВыполнения)

    Результат = СтандартныеПодсистемыКлиентСервер.ОписаниеРезультатаВыполнения();

    Reply
  10. herfis

    (9) Посмотри, плиз, какая там версия БСП (регистр сведений «ВерсииПодсистем» или как-то так). Видать что-то поменялось, постараюсь подправить.

    Reply
  11. UPSoft

    СтандартныеПодсистемы — 2.3.5.81

    Reply
  12. Eugenie

    (10) Тоже не работает на Бухгалтерия предприятия, редакция 3.0 (3.0.51.25), та же версия подсистемы. СтандартныеПодсистемы — 2.3.5.81

    Поправь, пожалуйста.

    Reply
  13. herfis

    (11)(12) Исправил.

    В БСП 2.3.5 из модуля СтандартныеПодсистемыКлиент убрали некоторые вспомогательные функции для интерактива с клиентом. Даже не стал смотреть, перенесли ли их куда-то или прибили совсем. Это уже второе приключение с ними, т.к. в 2.3 их тоже молча перекроили не так, как в 2.2 было и пришлось делать вилку в алгоритме.

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

    Reply
  14. zeegin

    См. программный интерфейс БСП:

    ДлительныеОперации.ВыполнитьВФоне https://its.1c.ru/db/bsp245doc#content:109:hdoc

    ДлительныеОперацииКлиент.ОжидатьЗавершение https://its.1c.ru/db/bsp245doc#content:205:hdoc

    Reply

Leave a Comment

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