Асинхронное выполнение длительных операций

28.12.20

Разработка - БСП (Библиотека стандартных подсистем)

Демонстрация использования функционала БСП для выполнения длительных операций. Механизм может быть полезен, например, при загрузке/выгрузке больших объемов данных.

Демонстрации работы асинхронного выполнения длительной операции, будем использовать конфигурацию Управление торговлей, редакция 11 (11.4.13.99), БСП 3.1.3.353.

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

Для примера создадим справочник "РаботаВФоне":

 В форме справочника добавим команду "ВыполнитьРасчет":

Код модуля формы будет следующим:

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

&НаСервере
Функция НачатьВыполнениеНаСервере()
	МойПараметр1 = "МойПараметр1";
	МойПараметр2 = "МойПараметр2";
	
	Возврат ДлительныеОперации.ВыполнитьПроцедуру(, "РаботаВФоне.ВыполнитьРасчет", 
	МойПараметр1, МойПараметр2);
КонецФункции

&НаКлиенте
Процедура ОбработатьРезультат(Результат, ДополнительныеПараметры) Экспорт
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	ПриЗавершенииРасчета();
КонецПроцедуры 

Процедура ПриЗавершенииРасчета()
	Сообщить("У нас все получилось!");
КонецПроцедуры

Также нам понадобится общий модуль "РаботаВФоне" с галочкой "Сервер" и экспортной процедурой "ВыполнитьРасчет".

Процедура ВыполнитьРасчет(Знач МойПараметр1, Знач МойПараметр2) Экспорт
	
	ТекДата = ТекущаяДата();	
	Пока ТекущаяДата() < ТекДата + 5*60 Цикл 
	КонецЦикла;
	
КонецПроцедуры

Запускаем в пользовательском режиме, создаем элемент справочника и нажимаем кнопку "Выполнить расчет".

Появляется окно ожидания:

А через пять минут появляется сообщение об успешном выполнении операции:

Если необходимо возвращать результат выполнения длительной операции, нужно использовать метод:

ДлительныеОперации.ВыполнитьФункцию

В других версиях БСП имена функция могут отличаться, но суть остается той же. 

Всем спасибо!

длительные операции фоновые задания БСП асинхронное

См. также

БСП (Библиотека стандартных подсистем) Программист Платные (руб)

Синтакс-помощник БСП - cправочник по библиотеке стандартных подсистем. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП.

1800 руб.

21.11.2024    2369    8    14    

8

БСП (Библиотека стандартных подсистем) Программист Бесплатно (free)

Синтакс-помощник БСП - справочник по Библиотеке Стандартных Подсистем, профессиональный инструмент разработчика с интуитивно понятным интерфейсом. Читайте в статье как использовать все возможности справочника и сделать работу с БСП более комфортной и эффективной.

11.12.2024    3070    gorenski    0    

8

БСП (Библиотека стандартных подсистем) Менеджеры внешних отчетов Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление холдингом Абонемент ($m)

За последние лет 5 несколько раз сталкиваюсь с проблемой на разных проектах (в конфигурациях 1С:ERP, 1С:ERP УХ и многих других, основанных на БСП), когда много пользователей (около 30 тысяч) в информационной базе, время добавления доступа для пользователей занимает значительное время. Открытие списка занимает от 10 до 15 секунд, и каждое изменение списка еще примерно столько же.

1 стартмани

10.12.2024    625    Iaskeliainen    2    

7

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Некоторые нюансы, если вы захотите создавать свои расширения. Доработка отчета "Связанные документы" для отражения документов расширения. Печатные формы с шаблоном Word.

20.11.2024    2892    milkers    3    

9

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

В статье описан алгоритм для включения документа или справочника в систему БСП. Будет полезно программистам 1С, начинающим работать с БСП.

24.10.2024    1398    PROSTO-1C    0    

16

БСП (Библиотека стандартных подсистем) Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

В материале описан универсальный механизм работы с добавленными элементами на общую форму «ФормаОтчета». Думаю, облегчит работу многим разработчикам.

08.10.2024    1195    PROSTO-1C    4    

14

БСП (Библиотека стандартных подсистем) Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В статье рассмотрим пошаговую инструкцию создания дополнительного отчета с фоновым формированием результата.

04.10.2024    2083    MadRave    11    

24
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. AnryMc 848 28.12.20 10:37 Сейчас в теме
(0)
В других версиях БСП имена функция могут отличаться


Вот за что я ЛЮБЛЮ применять БСП ;-)
Costa; rpgshnik; BigB; prog_mayskiyse; +4 Ответить
2. EvgeniuXP 01.01.21 08:01 Сейчас в теме
В НачатьВыполнениеНаСервере() создаем два "моих параметра", а в ВыполнитьРасчет передаем один МойПараметр.
prog_mayskiyse; +1 Ответить
3. ellavs 1052 04.01.21 11:45 Сейчас в теме
За статью спасибо. Жаль только, что пример опять про длительные операции на сервере... никак не найду пример оптимальной реализации асинхронных длительных операций на клиенте :(
prog_mayskiyse; +1 Ответить
4. ovasiliev 6 09.01.21 12:42 Сейчас в теме
(3) На мой взгляд это понятно.
Необходимость в асинхроне возникает, когда есть две машины, и нужно устранить ситуацию, когда одна машина работает, а другая ковыряет в носу и ждёт результата работы первой. Если же длительная операция выполняется на одной, она и так должна грузить ресурсы так, что параллельно работать будет некомфортно. Если это не так, то скорее всего что-то написано не правильно.
5. ellavs 1052 09.01.21 15:39 Сейчас в теме
(4) в последнее время появляются задачи, связанные со взаимодействием с разными внешними системами, которые находятся в защищенных сетях, и обычно доступ к ним есть только с клиентской машины (т.е. машина находится внутри специальной защищенной сети для конкретной внешней системы, а также взаимодйствует с криптопровайдером), поэтому все длительные операции по обращению и обмену данными с этими системами происходят на стороне "клиента". Один из вариантов - настраивать в каждой защищенной сети и для каждой внешней системы отдельный кластер (но это лишние затраты для заказчика - таких внешних систем и сетей может быть несколько, серверных лицензий не напасешься). Пока только один выход - запускать несколько клиентских сессий.
7. ovasiliev 6 09.01.21 21:40 Сейчас в теме
(5) В принципе, это совершенно законно - пакетно запускать сессию для выполнения конкретной задачи. Настолько законно, что я понимаю отсутствие длительных операций в клиентском режиме. Вернее, это и есть фоновое задание в клиентском режиме.
6. ovasiliev 6 09.01.21 21:36 Сейчас в теме
8. retr0 26.10.21 06:42 Сейчас в теме
И че, зачем эта статья здесь? Снова статья ради статьи, ноль новый инфы максимум вторичности.
RocKeR_13; +1 Ответить
Оставьте свое сообщение