1С 8.3 БСП СообщитьПрогресс
Данные > 1С 8.3 БСП > Длительные операции
Перейти в раздел примеры кода 1С 8.3:
1С 8.3 БСП СообщитьПрогресс. Регистрирует информацию о ходе выполнения длительной операции. Во избежание избыточного потребления памяти и ее утечек при выполнении одной длительной операции не следует сообщать прогресс более 100 раз.
Примера кода от rayastar
ДлительныеОперации.СообщитьПрогресс(Процент, Текст, ДополнительныеПараметры)
//
Процедура РассчитатьПроцентВыгрузки(КоличествоВыгруженных, КоличествоОбъектовКВыгрузке) Экспорт
// Сообщение о проценте выгрузки выдаем через каждые 100 объектов.
Если КоличествоВыгруженных = 0 Или КоличествоВыгруженных / 100 <> Цел(КоличествоВыгруженных / 100) Тогда
Возврат;
КонецЕсли;
Если КоличествоОбъектовКВыгрузке = 0 Или КоличествоВыгруженных > КоличествоОбъектовКВыгрузке Тогда
ПроцентВыполнения = 95;
Шаблон = НСтр("ru = 'Обработано: %1 объектов.'");
Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Формат(КоличествоВыгруженных, "ЧН=0; ЧГ="));
Иначе
// 5% полосы резервируем под выгрузку по ссылкам, проценты по количеству считаем от 95.
ПроцентВыполнения = Окр(Мин(КоличествоВыгруженных * 95 / КоличествоОбъектовКВыгрузке, 95));
Шаблон = НСтр("ru = 'Обработано: %1 из %2 объектов.'");
Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
Формат(КоличествоВыгруженных, "ЧН=0; ЧГ="),
Формат(КоличествоОбъектовКВыгрузке, "ЧН=0; ЧГ="));
КонецЕсли;
// Регистрация сообщения для чтения из клиентского сеанса.
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОбменДанными", Истина);
ДлительныеОперации.СообщитьПрогресс(ПроцентВыполнения, Текст, ДополнительныеПараметры);
//
Процедура РассчитатьПроцентВыгрузки(КоличествоВыгруженных, КоличествоОбъектовКВыгрузке) Экспорт
// Сообщение о проценте выгрузки выдаем через каждые 100 объектов.
Если КоличествоВыгруженных = 0 Или КоличествоВыгруженных / 100 <> Цел(КоличествоВыгруженных / 100) Тогда
Возврат;
КонецЕсли;
Если КоличествоОбъектовКВыгрузке = 0 Или КоличествоВыгруженных > КоличествоОбъектовКВыгрузке Тогда
ПроцентВыполнения = 95;
Шаблон = НСтр("ru = 'Обработано: %1 объектов.'");
Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Формат(КоличествоВыгруженных, "ЧН=0; ЧГ="));
Иначе
// 5% полосы резервируем под выгрузку по ссылкам, проценты по количеству считаем от 95.
ПроцентВыполнения = Окр(Мин(КоличествоВыгруженных * 95 / КоличествоОбъектовКВыгрузке, 95));
Шаблон = НСтр("ru = 'Обработано: %1 из %2 объектов.'");
Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
Формат(КоличествоВыгруженных, "ЧН=0; ЧГ="),
Формат(КоличествоОбъектовКВыгрузке, "ЧН=0; ЧГ="));
КонецЕсли;
// Регистрация сообщения для чтения из клиентского сеанса.
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОбменДанными", Истина);
ДлительныеОперации.СообщитьПрогресс(ПроцентВыполнения, Текст, ДополнительныеПараметры);
КонецПроцедуры;
// Автор библиотеки: ООО "1С-Софт". Все права защищены © 2021
// Типовая конфигурация Библиотека стандартных подсистем (далее - БСП)
// Код БСП распространяется по лицензии Attribution 4.0 International (CC BY 4.0):
// ссылка на лицензию: https://creativecommons.org/licenses/by/4.0/legalcode
// Код БСП распространяется по лицензии Attribution 4.0 International (CC BY 4.0):
// ссылка на лицензию: https://creativecommons.org/licenses/by/4.0/legalcode
Примера кода от user1432326
//Фоновое задание будет выполняться в МойОбщийМодуль.ЭмуляцияФоновыйПроцесс().
//В форме обработки вызов этой функции в фоновом задании будет выполняться в три этапа:
//1) Запуск фонового задания &НаСервере;
//2) Подключение обработчика завершения фонового задания &НаКлиенте;
//3) Обработка результата выполнения фонового задания.\
//Пример можно использовать любых современных типовых конфигурациях и нетиповых, использующих БСП.
//Код: МойОбщийМодуль.ЭмуляцияФоновыйПроцесс()
Функция ЭмуляцияФоновыйПроцесс( Параметр1 = Неопределено, Параметр2 = Неопределено) Экспорт
Если Параметр1 = Неопределено Тогда
Параметр1 = 300000;
КонецЕсли;
пв1 = Истина; пв2 = Истина; пв3 = Истина; пв4 = Истина; пв5 = Истина;
Для счетчик = 0 По Параметр1 Цикл
пакет = Новый Структура("Счетчик, Количество", счетчик, Параметр1);
процент = ОКР(100*счетчик / Параметр1,0);
Если процент > 8 И процент < 10 Тогда
Если пв1 Тогда ДлительныеОперации.СообщитьПрогресс(процент, "Идет длительная операция"); пв1 = Ложь; КонецЕсли;
ИначеЕсли процент > 28 И процент < 30 Тогда
Если пв2 Тогда ДлительныеОперации.СообщитьПрогресс(процент, "Идет длительная операция"); пв2 = Ложь; КонецЕсли;
ИначеЕсли процент > 49 И процент < 51 Тогда
Если пв3 Тогда ДлительныеОперации.СообщитьПрогресс(процент, "Идет длительная операция"); пв3 = Ложь; КонецЕсли;
ИначеЕсли процент > 70 И процент < 72 Тогда
Если пв4 Тогда пв4 = Ложь; КонецЕсли;
ИначеЕсли процент > 89 И процент < 92 Тогда
Если пв5 Тогда ДлительныеОперации.СообщитьПрогресс(процент, "Идет длительная операция"); пв5 = Ложь; КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат "Эмуляция фонового процесса завершилась";
КонецФункции
//В форме обработки вызов этой функции в фоновом задании будет выполняться в три этапа:
//1) Запуск фонового задания &НаСервере;
//2) Подключение обработчика завершения фонового задания &НаКлиенте;
//3) Обработка результата выполнения фонового задания.\
//Пример можно использовать любых современных типовых конфигурациях и нетиповых, использующих БСП.
//Код: МойОбщийМодуль.ЭмуляцияФоновыйПроцесс()
Функция ЭмуляцияФоновыйПроцесс( Параметр1 = Неопределено, Параметр2 = Неопределено) Экспорт
Если Параметр1 = Неопределено Тогда
Параметр1 = 300000;
КонецЕсли;
пв1 = Истина; пв2 = Истина; пв3 = Истина; пв4 = Истина; пв5 = Истина;
Для счетчик = 0 По Параметр1 Цикл
пакет = Новый Структура("Счетчик, Количество", счетчик, Параметр1);
процент = ОКР(100*счетчик / Параметр1,0);
Если процент > 8 И процент < 10 Тогда
Если пв1 Тогда ДлительныеОперации.СообщитьПрогресс(процент, "Идет длительная операция"); пв1 = Ложь; КонецЕсли;
ИначеЕсли процент > 28 И процент < 30 Тогда
Если пв2 Тогда ДлительныеОперации.СообщитьПрогресс(процент, "Идет длительная операция"); пв2 = Ложь; КонецЕсли;
ИначеЕсли процент > 49 И процент < 51 Тогда
Если пв3 Тогда ДлительныеОперации.СообщитьПрогресс(процент, "Идет длительная операция"); пв3 = Ложь; КонецЕсли;
ИначеЕсли процент > 70 И процент < 72 Тогда
Если пв4 Тогда пв4 = Ложь; КонецЕсли;
ИначеЕсли процент > 89 И процент < 92 Тогда
Если пв5 Тогда ДлительныеОперации.СообщитьПрогресс(процент, "Идет длительная операция"); пв5 = Ложь; КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат "Эмуляция фонового процесса завершилась";
КонецФункции
//Код модуля формы:
&НаКлиенте
Процедура ВыполнитьКоманду(Команда)
длительнаяОперация = НачатьВыполнениеНаСервере(); //Запуск фонового задания на Сервере
параметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
параметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
оповещение = Новый ОписаниеОповещения("ПриЗавершенииНачатьВыполнениеНаСервере", ЭтотОбъект);
//Подключение обработчика завершения фонового задания^
ДлительныеОперацииКлиент.ОжидатьЗавершение(длительнаяОперация, оповещение, параметрыОжидания);
КонецПроцедуры
&НаСервере
Функция НачатьВыполнениеНаСервере()
параметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор);
Количество = 450000;
Возврат ДлительныеОперации.ВыполнитьФункцию(параметрыВыполнения, "МойОбщийМодуль.ЭмуляцияФоновыйПроцесс", Количество);
КонецФункции
&НаКлиенте
Процедура ПриЗавершенииНачатьВыполнениеНаСервере(Результат, ДопПараметры) Экспорт
Если Результат = Неопределено Тогда // Пользователь отменил задание
Возврат;
КонецЕсли;
Если Результат.Статус = "Ошибка" Тогда
ВызватьИсключение Результат.КраткоеПредставлениеОшибки;
КонецЕсли;
ответ = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
УдалитьИзВременногоХранилища(Результат.АдресРезультата);
ОбщегоНазначенияКлиент.СообщитьПользователю(ответ);
КонецПроцедуры
Процедура ВыполнитьКоманду(Команда)
длительнаяОперация = НачатьВыполнениеНаСервере(); //Запуск фонового задания на Сервере
параметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
параметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
оповещение = Новый ОписаниеОповещения("ПриЗавершенииНачатьВыполнениеНаСервере", ЭтотОбъект);
//Подключение обработчика завершения фонового задания^
ДлительныеОперацииКлиент.ОжидатьЗавершение(длительнаяОперация, оповещение, параметрыОжидания);
КонецПроцедуры
&НаСервере
Функция НачатьВыполнениеНаСервере()
параметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор);
Количество = 450000;
Возврат ДлительныеОперации.ВыполнитьФункцию(параметрыВыполнения, "МойОбщийМодуль.ЭмуляцияФоновыйПроцесс", Количество);
КонецФункции
&НаКлиенте
Процедура ПриЗавершенииНачатьВыполнениеНаСервере(Результат, ДопПараметры) Экспорт
Если Результат = Неопределено Тогда // Пользователь отменил задание
Возврат;
КонецЕсли;
Если Результат.Статус = "Ошибка" Тогда
ВызватьИсключение Результат.КраткоеПредставлениеОшибки;
КонецЕсли;
ответ = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
УдалитьИзВременногоХранилища(Результат.АдресРезультата);
ОбщегоНазначенияКлиент.СообщитьПользователю(ответ);
КонецПроцедуры
// Автор библиотеки: ООО "1С-Софт". Все права защищены © 2021
// Типовая конфигурация Библиотека стандартных подсистем (далее - БСП)
// Код БСП распространяется по лицензии Attribution 4.0 International (CC BY 4.0):
// ссылка на лицензию: https://creativecommons.org/licenses/by/4.0/legalcode
// Код БСП распространяется по лицензии Attribution 4.0 International (CC BY 4.0):
// ссылка на лицензию: https://creativecommons.org/licenses/by/4.0/legalcode
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник