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

04.12.20

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

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

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

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

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

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

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

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

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


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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

См. также

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

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

1800 руб.

21.11.2024    158    1    0    

2

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

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

24.10.2024    1129    PROSTO-1C    0    

13

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

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

08.10.2024    1007    PROSTO-1C    4    

12

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

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

04.10.2024    1856    MadRave    11    

24

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

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

10.09.2024    1849    MadRave    1    

17

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

А что, если долгожданная реализация Паузы в 1С смутно напоминает старую, проверенную? А?!

06.09.2024    1267    n_mezentsev    10    

8

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

Добавим дополнительные свойства в новый документ средствами БСП

02.09.2024    4125    John_d    10    

52

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

Всё больше организаций выбирает для серверов под 1С операционные системы Linux. Одним из отличий систем Windows и Linux является отсутствие COM объектов, которые зачастую использовались для формирования печатных форм офисных документов (Word). Конечно, можно выполнять печать и на клиенте, но есть риск импортозамещения. В работе у меня случались проблемы с зависанием процесса Word, поэтому я не люблю его использовать.

29.07.2024    5379    PROSTO-1C    12    

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