Форма отчета. Часть 2 Длительные операции на сервере

Печать (Ctrl+P)

Библиотека стандартных подсистем 3.0

Первую часть об общей форме отчета из библиотеки стандартных подсистем можно посмотреть здесь

В второй части я показываю общий подход формирования отчета с использованием механизма длительной обработки данных на сервере.  Подробнее о сущности выполнения длительной операции обработки я написал здесь. Согласно общей рекомендации, все длительные серверные вызовы, которые могут выполняться более 8 секунд в обычных сценариях работы пользователя, следует выполнять асинхронно, с помощью фонового задания. В противном случае такие вызовы могут привести к потере работоспособности.

Програмнный код длительной операции формирования отчета выполняется в общих модулях. Его можно посмотреть и изучать в модуле формы ( действие кнопки Сформировать) :

&НаКлиенте
 Процедура ОтчетСкомпоноватьРезультат(Команда)
     ОчиститьСообщения();
     Сформировать();
 КонецПроцедуры

Форма отчета не блокируется на время его формирования. Пользователь может изменить настройки и переформировать отчет, не дожидаясь окончания его формирования. При закрытии формы отчета, формирование отчета прерывается.

На время выполнения длительной операции  формирования отчета пользователю отображается индикатор в поле табличного документа, используя свойство поля табличного документа ОтображениеСостояния:

&НаСервере
 Процедура ОтобразитьСостояниеОтчета()
 ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния;
 ОтображениеСостояния.Текст =  "Отчет формируется… ";
 ОтображениеСостояния.Картинка =  БиблиотекаКартинок.ДлительнаяОперация48; 
 КонецПроцедуры

Общая форма отчета БСП с асинхронным формированием отчета разработана для использования СКД без использолвания обработчика модуля отчета ПриКомпоновкеРезультата .

Изветсная стандартная форма отчета платформы 1С: Предприятие 8.3 с переопределенной процедурой формирования отчета выглядит так :

При начатии кнопки «Сформировать» вызывается обработчик модуля отчета ПриКомпоновкеРезультата. Вот, пример програмного кода обработчика из демо версии БСП , который не использует механизм длительных операций на сервере

// Пример обработчика  ПриКомпоновкеРезультата  в модуле отчета
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
 СтандартнаяОбработка = Ложь; 
ДокументРезультат.Очистить(); 
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
ВнешниеНаборыДанных = Новый Структура;
 ВнешниеНаборыДанных.Вставить("НаборДанных", ДатыЗапретаПодготовленные(Настройки.ПараметрыДанных)); 
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; 
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
 ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
 ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; 
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
 ПроцессорВывода.НачатьВывод();
 ЭлементРезультата = ПроцессорКомпоновки.Следующий(); 
Пока ЭлементРезультата <> Неопределено Цикл 
    ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
     ЭлементРезультата = ПроцессорКомпоновки.Следующий(); 
КонецЦикла;
 ПроцессорВывода.ЗакончитьВывод();
 КонецПроцедуры

См. также

Previous Article
Next Article

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.