Как это работает?...
1. Копируете в модуль формы область кода подсистемы:
2. Размещаете в обработчиках вызовы из подсистемы:
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Выполнение в фоне во внешней обработке
ВыполнениеВФонеВоВнешнейОбработкеПриСозданииНаСервере();
// Конец Выполнение в фоне во внешней обработке
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Выполнение в фоне во внешней обработке
ВыполнениеВФонеВоВнешнейОбработкеПриОткрытии();
// Конец Выполнение в фоне во внешней обработке
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
// Выполнение в фоне во внешней обработке
ВыполнениеВФонеВоВнешнейОбработкеПередЗакрытием(Отказ);
// Конец Выполнение в фоне во внешней обработке
КонецПроцедуры
#КонецОбласти
И всё!
Теперь можете выполнять в фоне целевую (полезную) процедуру из модуля обработки вызовом интерфейсной процедуры из подсистемы:
ВыполнитьПроцедуруМодуляОбработкиВФоне(ИмяПроцедуры, Параметры)
Примерно так:
&НаКлиенте
Процедура ОбработчикКомандыВыполненияПолезнойПроцедуры(Команда)
ПараметрыЦелевойПроцедуры = Новый Структура("КоличествоИтераций", 1000);
ДлительнаяОперация = ВыполнитьПроцедуруМодуляОбработкиВФоне(
"ЦелеваяПроцедура", ПараметрыЦелевойПроцедуры);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация,
Новый ОписаниеОповещения("ПослеЗавершенияВыполнения", ЭтотОбъект),
ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект));
КонецПроцедуры
Вызов из подсистемы определяет, каким образом была открыта обработка:
- через файл-открыть
- из справочника дополнительных обработок
- из состава конфигурации
И в любом случае обеспечивает корректное выполнение в фоне целевой (полезной) процедуры.
Предусмотрен режим отладки, при котором целевая процедура запускается синхронно (не в фоне) для возможности её отладки.
Проверено на следующих конфигурациях и релизах:
- 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.10.420