Используется технология, предлагаемая в БСП (Библиотеке Стандартных Подсистем), практически без ноу-хау.
Доработано таким образом, что обработка может быть как встроенной в конфигурацию, так и внешней.
Суть технологии БСП вкратце: серверный алгоритм (в данном случае — процедура модуля обработки) запускается отдельным фоновым заданием, прогресс выполнения которого довольно остроумно считывается обработкой ожидания на клиенте из стандартного серверного пула сообщений пользователю.
Данная разработка потребовалась по причине того, что не удалось найти готового "кристаллизованного" примера реализации этой технологии с использованием механизмов БСП.
В БСП эта технология применена в обработках удаления помеченных объектов и группового изменения объектов.
При наличии времени и желания — можно разобраться в их реализации. Мой шаблон просто сэкономит Вам время.
Периодичность записи прогресса на сервере задается в "ПараметрыДлительнойОперации.Вставить("ПериодЗаписи", 1)", периодичность опроса прогресса на клиенте — в "ПараметрыОбработчикаОжиданияДлительнойОперации.МаксимальныйИнтервал = 1". То есть по умолчанию — одна секунда.
Шаблон обработки можно использовать как "черный ящик". Серверный алгоритм реализуется в процедуре модуля обработки "ИсполнитьАлгоритмДлительнойОперации()". Запуск серверного алгоритма и передача параметров — в процедуре модуля формы ФоновоеЗаданиеДлительнойОперацииЗапустить(). Обработка результатов на клиенте — в процедуре модуля формы ФоновоеЗаданиеДлительнойОперацииЗагрузитьРезультат().
Ограничения использования: для работы требуется интегрированная в конфигурацию подсистема базовой функциональности БСП. Проверено под БСП 2.2. В БСП 2.1 не проверялась. В БСП 2.0 не работает.
UPD. Реализована поддержка для БСП 2.3 — можно добавлять в справочник дополнительных отчетов и обработок.
UPD. Исправлена работа в БСП 2.3.5 — убраны лишние зависимости на модуль СтандартныеПодсистемыКлиент, который был изменен в БСП 2.3.5
Во-первых, уже было как идея и как удачная «кристаллизованная» реализация, а во-вторых, из-за такой ерунды тащить половину БСП — овчинка выделки не стоит.
Соль данной публикации — именно в максимальном использовании БСП. Чтобы изобретать минимум велосипедов, если БСП уже используется. Насчет «половины БСП» — все используемые из БСП функции относятся к подсистеме «Базовая функциональность»
Все хорошо, но не реализован запуск этой обработки из справочника дополнительных внешних обработок. Предлагаю допилить)
Учитывая, что современные конфигурации (пример: Бухгалтерия 3.0) вовсю используют данные механизмы, то простой способ разобраться с этой балалайкой — как раз в тему.
Не работает на последних релизах
(2) да, подскажите пожалуйста, а как правильно запускать её из справочника внешних обработок. А то срочная проблема возникла сейчас, а как допилить сходу не пойму…
http://forum.infostart.ru/forum26/topic158267/message1620924/?result=reply#postform
Вот тема
(6) ToTMoM, На свежих БСП не проверял, и для запуска из справочника внешних обработок не допиливал, каюсь. Постараюсь выкроить время и допилить, раз пример все еще востребован.
Но оперативно, к сожалению, это сделать не смогу.
(6) ToTMoM, Доработал
1) теперь работает под БСП 2.3
2) работает в качестве дополнительной обработки. Но реализовано/проверял тоже под БСП 2.3
Если надо запустить доп-обработкой в ранней БСП со старой схемой декларации доп-обработок — просто заменить процедуру декларации доп-обработки в модуле и должно заработать. Можно было бы сделать универсально, но не было времени искать старый вариант декларации.
1С:Предприятие 8.3 (8.3.10.2561)
Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.51.25)
ругается:
{ВнешняяОбработка.ДлительнаяОперацияНаСервереДемо.Форма.Форма.Форма(120)}: Метод объекта не обнаружен (ОписаниеРезультатаВыполнения)
Результат = СтандартныеПодсистемыКлиентСервер.ОписаниеРезультатаВыполнения();
(9) Посмотри, плиз, какая там версия БСП (регистр сведений «ВерсииПодсистем» или как-то так). Видать что-то поменялось, постараюсь подправить.
СтандартныеПодсистемы — 2.3.5.81
(10) Тоже не работает на Бухгалтерия предприятия, редакция 3.0 (3.0.51.25), та же версия подсистемы. СтандартныеПодсистемы — 2.3.5.81
Поправь, пожалуйста.
(11)(12) Исправил.
В БСП 2.3.5 из модуля СтандартныеПодсистемыКлиент убрали некоторые вспомогательные функции для интерактива с клиентом. Даже не стал смотреть, перенесли ли их куда-то или прибили совсем. Это уже второе приключение с ними, т.к. в 2.3 их тоже молча перекроили не так, как в 2.2 было и пришлось делать вилку в алгоритме.
Так как для этой обработки они не критичны, то я засучил рукава и вообще выкосил эти зависимости из своего кода, переписав некоторые блоки. Попутно в процессе получилось несколько упростить код. Так что все к лучшему 🙂
См. программный интерфейс БСП:
https://its.1c.ru/db/bsp245doc#content:109:hdoc
https://its.1c.ru/db/bsp245doc#content:205:hdoc
ДлительныеОперации.ВыполнитьВФоне
ДлительныеОперацииКлиент.ОжидатьЗавершение