Каталог решений - Выполнение в фоне во внешней обработке независимо от способа открытия обработки (подключаемая подсистема)

Выполнение в фоне во внешней обработке независимо от способа открытия обработки (подключаемая подсистема)

Выполнение в фоне во внешней обработке независимо от способа открытия обработки (подключаемая подсистема)

В наличии

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

Категория:

Описание

Как это работает?…

 

1. Копируете в модуль формы область кода подсистемы:                 

 

 

2. Размещаете в обработчиках вызовы из подсистемы:                  

 

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

 

3. Добавляете на форму реквизиты:                                           

 

 

4. Можете выполнять в фоне целевую полезную функцию из модуля обработки простым вызовом интерфейсной процедуры из подсистемы:

ВыполнитьПроцедуруМодуляОбработкиВФоне(ИмяПроцедуры, Параметры)

Примерно так:

&НаКлиенте
Процедура ОбработчикКомандыВыполненияПолезнойПроцедуры(Команда)

	ПараметрыПолезнойПроцедуры = Новый Структура("КоличествоИтераций");
	ПараметрыПолезнойПроцедуры.КоличествоИтераций = 1000;

	ДлительнаяОперация = ВыполнитьПроцедуруМодуляОбработкиВФоне(
		"ПолезнаяПроцедураВМодулеВнешнейОбработки", ПараметрыПолезнойПроцедуры);

	ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);

	ОповещениеОЗавершении = Новый ОписаниеОповещения("ПослеЗавершенияВыполнения", ЭтотОбъект);

	ДлительныеОперацииКлиент.ОжидатьЗавершение(
		ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);

КонецПроцедуры

Вызов из подсистемы определяет, каким образом была открыта обработка:

— через файл-открыть
— из справочника дополнительных обработок
— из состава конфигурации

И в любом случае обеспечивает корректное выполнение в фоне целевой полезной процедуры.

Выполнение в фоне во внешней обработке независимо от способа открытия обработки (подключаемая подсистема)

Выполнение в фоне во внешней обработке независимо от способа открытия обработки (подключаемая подсистема)

В наличии

Авторская реализация легко внедряемой небольшой подсистемы. Позволяет запускать в фоне процедуру модуля обработки из клиентского контекста этой же самой обработки. Работоспособна при любом способе открытия внешней обработки: через меню Файл-Открыть, из справочника дополнительных, и даже если поместить обработку в конфигурацию; во всех трех случаях запуск процедуры в фоне сохранит свою работоспособность.

Категория:

Описание

Как это работает?…

1) В модуль формы внешней обработки добавляете область подсистемы:

 

 

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

 

 

3) Затем добавляете ещё несколько реквизитов формы, и получаете возможность в любых своих процедурах запустить выполнение в фоне используя интерфейсный метод: ВыполнитьПроцедуруМодуляОбработкиВФоне(ИмяПроцедуры, Параметры). Примерно так:

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

Логика подсистемы различает способ открытия обработки:

  • через меню Файл -> Открыть
  • из справочника дополнительных обработок
  • из состава конфигурации

В зависимости от способа открытия обработки формируются подходящие параметры и происходит вызов метода БСП выполнения процедуры в фоне.

has been added to your cart:
Оформление заказа