Выполнение в фоне во внешней обработке независимо от способа открытия обработки (подключаемая подсистема)
Выполнено в виде подключаемой подсистемы с претензией на библиотечный подход. Позволяет выполнять в фоне процедуру модуля обработки из её клиентского контекста независимо от способа открытия обработки: через меню файл-открыть, из справочника дополнительных обработок, либо если поместить обработку в состав конфигурации. Изначально разрабатывалась для удобного тестирования, но может применяться и в боевых условиях.
- Описание
- Подробнее
Описание
Как это работает?…
1. Копируете в модуль формы область кода подсистемы:

2. Размещаете в обработчиках вызовы из подсистемы:
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Выполнение в фоне во внешней обработке
ВыполнениеВФонеВоВнешнейОбработкеПриСозданииНаСервере();
// Конец Выполнение в фоне во внешней обработке
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Выполнение в фоне во внешней обработке
ВыполнениеВФонеВоВнешнейОбработкеПриОткрытии();
// Конец Выполнение в фоне во внешней обработке
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
// Выполнение в фоне во внешней обработке
ВыполнениеВФонеВоВнешнейОбработкеПередЗакрытием(Отказ);
// Конец Выполнение в фоне во внешней обработке
КонецПроцедуры
#КонецОбласти
3. Добавляете на форму реквизиты:

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

2) В обработчики событий формы добавляете вызовы из подсистемы:

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