1С 8.3 БСП ОжидатьЗавершение - Программист 1С Минск. Автоматизация бизнеса.

Популярные страницы:
Перейти к контенту

1С 8.3 БСП ОжидатьЗавершение

Данные > Примеры кода 1С > 1С 8.3 БСП > Длительные операции
Перейти в раздел примеры кода 1С 8.3:
1С 8.3 БСП ОжидатьЗавершение. Ожидать завершения выполнения процедуры в фоновом задании и открыть форму ожидания длительной операции.
Примера кода от rayastar
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания)

//
Процедура НачатьОжиданиеФормированияОтчета(Форма, ДлительнаяОперация, ОповещениеЗавершитьФормированиеОтчета) Экспорт

   Если ДлительнаяОперация = Неопределено Тогда
       Возврат;
   КонецЕсли;

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

   ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
   ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Форма.Элементы.Результат, "ФормированиеОтчета");

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

   // См. далее ЗакончитьОжиданиеФормированияОтчета

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

&НаКлиенте
Процедура ОбновитьСписокДокументовНаЭкспортЗавершение(ДлительнаяОперация, ДополнительныеПараметры) Экспорт

   Если ДлительнаяОперация = Неопределено Тогда // задание было отменено
       Возврат;
   КонецЕсли;

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

   УправлениеФормой();

КонецПроцедуры;
// Автор библиотеки: ООО "1С-Софт". Все права защищены © 2021
// Типовая конфигурация Библиотека стандартных подсистем (далее - БСП)
// Код БСП распространяется по лицензии Attribution 4.0 International (CC BY 4.0):
// ссылка на лицензию: https://creativecommons.org/licenses/by/4.0/legalcode
Примера кода от quаzarе (https://infostart.ru/1c/articles/1625217/)
// создаем искусственную процедуру, которую будем использовать в многопоточном запуске
&НаСервере
Процедура ПроцедураМногопоток(Поток, Параметры) Экспорт

   КоличествоСозданныхОбъектов = 0;

   Если Параметры.ТипОбработки = "Вариант 1" Тогда // Создадим 500 документов поступления  (можно и загрузить)

       Для Счетчик = 1 По 500 Цикл

           НовДок = Документы._ДемоПоступлениеТоваров.СоздатьДокумент();
           НовДок.Дата = ТекущаяДата();
           НовДок.Организация = Параметры.Организация;
           НовДок.Валюта = Справочники.Валюты.НайтиПоКоду("643");
           НовДок.Комментарий = Параметры.КомментарийДокумента;

           Попытка
               НовДок.Записать(РежимЗаписиДокумента.Запись);
           Исключение

           КонецПопытки;

           КоличествоСозданныхОбъектов = КоличествоСозданныхОбъектов + 1;

       КонецЦикла;

   ИначеЕсли Параметры.ТипОбработки = "Вариант 2" Тогда   // Создадим 1000 записей справочника "Номенклатура"

       Для Счетчик = 1 По 1000 Цикл

           НовСпр = Справочники._ДемоНоменклатура.СоздатьЭлемент();
           НовСпр.Наименование = "Новая номенклатура_"+Строка(Счетчик);
           НовСпр.НаименованиеДляПечати = "Новая номенклатура_"+Строка(Параметры.ОписаниеСправочника);
           НовСпр.Записать();

       КонецЦикла;

       КоличествоСозданныхОбъектов = КоличествоСозданныхОбъектов + 1;

   КонецЕсли;

КонецПроцедуры
Код модуля формы обработки
&НаСервере
Функция ПараметрыМногопоточнойФункции()

   Результат = Новый Структура();
   Результат.Вставить("ТипОбработки", 0);
   Результат.Вставить("ОписаниеСправочника", "");
   Результат.Вставить("КомментарийДокумента", "");
   Результат.Вставить("Организация", Справочники._ДемоОрганизации.ПустаяСсылка());
   Результат.Вставить("ЗагружатьПорциями", Истина);
   Возврат Результат;

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

&НаКлиенте
Процедура ЗапуститьМногопоток(Команда)

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


   Задание = СоздадимПотокиНаСервере(УникальныйИдентификатор);

   //ИдентификаторЗадания = ПолучитьИЗВременногоХранилища(Задание.АдресРезультата).Получить("Поток 1").ИдентификаторЗадания;//Задание.ИдентификаторЗадания;

   ИдентификаторЗадания = Задание.ИдентификаторЗадания;
   //Сообщить(ИдентификаторЗадания);

   НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
   НастройкиОжидания.ВыводитьОкноОжидания = Ложь;
   НастройкиОжидания.ОповещениеОПрогрессеВыполнения = ОповещениеОПрогрессеВыполнения;
   НастройкиОжидания.ВыводитьПрогрессВыполнения = Истина;


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


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

&НаСервере
Функция СоздадимПотокиНаСервере(УникальныйИдентификатор)

   ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
   ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Выполнение многопоточной функции'");
   ПараметрыВыполнения.ЗапуститьВФоне = Истина;

   ПараметрыМетода = Новый Соответствие();

   // ===== первый поток выполнения =====

   КодПотока = "Поток 1";
   ПараметрыПотока                         = ПараметрыМногопоточнойФункции();
   ПараметрыПотока.ТипОбработки             = "Вариант 1";
   ПараметрыПотока.ОписаниеСправочника     = Объект.ОписаниеСправочника;
   ПараметрыПотока.КомментарийДокумента     = Объект.КомментарийДокумента;
   ПараметрыПотока.Организация               = Объект.Организация;

   ПараметрыВызоваСервера = Новый Массив;
   ПараметрыВызоваСервера.Добавить(КодПотока);          // КодПотока
   ПараметрыВызоваСервера.Добавить(ПараметрыПотока);    // Параметры функции в потоке

   ПараметрыМетода.Вставить(КодПотока,ПараметрыВызоваСервера);

   // ===== второй поток выполнения =====

   КодПотока = "Поток 2";
   ПараметрыПотока                         = ПараметрыМногопоточнойФункции();
   ПараметрыПотока.ТипОбработки             = "Вариант 2";
   ПараметрыПотока.ОписаниеСправочника     = Объект.ОписаниеСправочника;
   ПараметрыПотока.КомментарийДокумента     = Объект.КомментарийДокумента;
   ПараметрыПотока.Организация               = Объект.Организация;

   ПараметрыВызоваСервера = Новый Массив;
   ПараметрыВызоваСервера.Добавить(КодПотока);          // КодПотока
   ПараметрыВызоваСервера.Добавить(ПараметрыПотока);    // Параметры функции в потоке

   ПараметрыМетода.Вставить(КодПотока,ПараметрыВызоваСервера);

   // ===================================

   ИмяФункцииИлиПроцедуры = "ОбщийМодуль1.ПроцедураМногопоток";

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

   Если ФоновоеЗадание.Статус = "Ошибка" Тогда
       Сообщить(СокрЛП(ФоновоеЗадание.Статус));
   КонецЕсли;


   Возврат ФоновоеЗадание;

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

&НаКлиенте
Процедура ПрогрессВыполнения(Результат, ДополнительныеПараметры) Экспорт

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

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

&НаКлиенте
Процедура ОбработатьДанные(Задание, ДополнительныеПараметры) Экспорт

   Если Задание = Неопределено Тогда
       Возврат;
   КонецЕсли;

   ЭтаФорма.РезультатВыполнения = СокрЛП(Задание.Статус) +" "+СокрЛП(ПолучитьИЗВременногоХранилища(Задание.АдресРезультата));

КонецПроцедуры
Поиск кода
0
Комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 12.06.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Назад к содержимому