Создание внешней обработки в фоне на БСП - проще простого, для ленивых или начинающих

04.12.20

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

Представлен шаблон обработки для выполнения в фоновом режиме. По сути в Команде нужно прописать Параметры и путь к Модулю, все остальное универсально.

Данная публикация основана на теории из Асинхронная концепция программирования

Работает на Платформе 3.14+ и на версии БСП: 3.0+.

Расположение выполняемой Процедуры - зависит от ситуации.

Данный пример демонстрирует, что Процедуру можно вызывать как из Общего модуля так и из Модуля менеджера - обработки расположенной в Конфигурации или в Расширении.

1. В общем модуле или Модуле менеджера Обработки нужно создать Экспортную Процедуру:

Процедура НашаДлительнаяОперация(Параметры, Заглушка) Экспорт
    // Имитация продолжительного действия (Длительность сек.).
    ДатаНачалаОперации    = ТекущаяДата();

    Пока ТекущаяДата()-ДатаНачалаОперации<Параметры.Длительность Цикл
    КонецЦикла;
КонецПроцедуры


2. Нужно создать внешнюю обработку и добавить форму, на форме создать:

2.1. Реквизит - Длительность и ФоновоеЗадание

2.2. Команды - ТестОМ и ТестОбработка

2.3. Обработчик события - ПриСозданииНаСервере

 

3. В модуль формы вставить следующий код:

&НаКлиенте
Перем ПараметрыОбработчикаОжидания;

&НаКлиенте
Перем ФормаДлительнойОперации;

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ФоновоеЗадание = Новый Структура("
        |ИмяЗадания,
        |ИдентификаторЗадания,
        |АдресХранилища");
КонецПроцедуры

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

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

&НаКлиенте
Процедура ЗапуститьФоновоеЗадание(ИмяЗадания, ПараметрыЗадания, Модуль)
    
    ЗаданиеВыполнено = ЗапуститьФоновоеЗаданиеНаСервере(ИмяЗадания, ПараметрыЗадания, Модуль);
    
    Если ЗаданиеВыполнено Тогда
        ОбработатьЗавершениеЗаданияНаКлиенте(Ложь);
    Иначе
        ОткрытьФормуДлительнойОперации();
    КонецЕсли;

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

&НаСервере
Функция ЗапуститьФоновоеЗаданиеНаСервере(ИмяЗадания, ПараметрыЗадания, Модуль)
    
    РезультатЗапускаЗадания = ЗапуститьЗаданиеНаСервере(ИмяЗадания, ПараметрыЗадания, Модуль);
    
    ФоновоеЗадание.ИмяЗадания           = ИмяЗадания;
    ФоновоеЗадание.ИдентификаторЗадания = РезультатЗапускаЗадания.ИдентификаторЗадания;
    ФоновоеЗадание.АдресХранилища       = РезультатЗапускаЗадания.АдресХранилища;
    
    Возврат РезультатЗапускаЗадания.ЗаданиеВыполнено;

КонецФункции

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

&НаКлиенте
Процедура ОбработатьЗавершениеЗаданияНаКлиенте(ОбновитьДанные = Истина)

    ЗавершениеФоновогоЗадания(ФоновоеЗадание.АдресХранилища, ОбновитьДанные);

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

&НаКлиенте
Процедура ОткрытьФормуДлительнойОперации()
    
    ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания);
    
    ПараметрыОбработчикаОжидания.КоэффициентУвеличенияИнтервала = 1.2;
    ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина);
    
    ФормаДлительнойОперации = ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(
        ЭтаФорма, ФоновоеЗадание.ИдентификаторЗадания);
    
КонецПроцедуры

&НаКлиенте
Процедура ЗавершениеФоновогоЗадания(АдресХранилища, ОбновитьДанные)
    
    Результат = ЗавершениеЗаданияНаСервере(АдресХранилища);
    
КонецПроцедуры

&НаСервере
Функция ЗавершениеЗаданияНаСервере(АдресХранилища)
    
    Результат = ПолучитьИзВременногоХранилища(АдресХранилища);
    
    Возврат Результат;
    
КонецФункции

&НаКлиенте
Процедура Подключаемый_ПроверитьВыполнениеЗадания()
    
    Попытка
        
        Если ФормаДлительнойОперации.Открыта() Тогда
            
            Если ЗаданиеВыполнено(ФоновоеЗадание.ИдентификаторЗадания) Тогда
                ОбработатьЗавершениеЗаданияНаКлиенте();
                ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации);
            Иначе
                ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания);
                ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания",
                    ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина);
            КонецЕсли;
                
        КонецЕсли;
        
    Исключение
        
        ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации);
        ВызватьИсключение;
        
    КонецПопытки;
    
КонецПроцедуры

&НаСервереБезКонтекста
Функция ЗаданиеВыполнено(ИдентификаторЗадания)
    
    Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания);
    
КонецФункции

 

Внешняя обработка БСП фоновые задания

См. также

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1281    dimanich70    6    

13

Заполнение поля адреса в своей обработке [БСП]

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

Небольшая шпаргалка по функциям БСП касательно адреса. Так скажем, еще один способ помимо https://infostart.ru/1c/articles/1060970/

12.02.2024    685    FilippovRI    0    

15

Расширяем возможности дополнительных обработок и настраиваем их отладку

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

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2346    YA_418728146    11    

40

1С:БСП Дополнительные реквизиты и сведения

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

В этой статье расскажем об архитектуре, использовании и особенностях реализации подсистемы «Свойства» из инструментария разработчика «1С:Библиотека стандартных подсистем» (1С: БСП).

19.01.2024    5138    PROSTO-1C    5    

45

Бесплатный митап 9 февраля «Библиотеки и фреймворки на 1С и всё, что с этим связано»

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

Митап посвящен вопросам создания, использования и поддержке переиспользуемого кода при разработке решений на платформе 1С:Предприятие 8.

15.01.2024    3793    0    Infostart    0    

20

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4823    mrXoxot    11    

99
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. TMV 14 06.12.20 19:01 Сейчас в теме
Этот вариант же уже обсосан сто раз.
Куда интереснее вариант запуска процедура из модуля самой внешней обработки - хотя и для него здесь есть решения.
ubnkfl; Summer_13; quazare; +3 Ответить
2. Olenevod 33 12.12.20 20:22 Сейчас в теме
Было бы интересней посмотреть на реализацию в которой нет завязки на БСП.
А также вариант с прогрессбаром. Причем интересно было бы если несколько прогресс баров на разные команды отображались.
Такой универсальный шаблон был бы интересным.
CrystalEyeNN; Рамзес; +2 Ответить
Оставьте свое сообщение