Имя: Пароль:
1C
1С v8
Надпись "Отчет формируется"
,
0 motkot
 
29.08.12
15:27
Доброго всем дня.
Предыстория: есть отчет без формы на СКД (платформа 8.2.15 клиент-серверный вариант), в процедуре модуля объекта отчета "ПриКомпоновкеРезультата" подготавливается внешний набор данных, затем все по шаблону (которых в "интернетах" уже миллиарды) выводится в первый параметр вышеуказанной процедуры (с типом ТабличныйДокумент). Как бы все работает.
Вопрос: как заставить форму отчета рисовать стандартный индикатор выполнения отчета и надпись "Отчет формируется"?
Зачем? Пользователям чтобы яснее было, что отчет что-то делает.
Заранее всем спасибо за участие.
1 Wobland
 
29.08.12
15:33
ты об этом?

ПроцессорКомпоновки = Новый ПроцессорВыводаРезультатаКомпоновкиДанных
ВТабличныйДокумент;
ПроцессорКомпоновки.ОтображатьПроцентВывода = Истина ;
ЭлементКомпоновки = Новый ЭлементРезультатаКомпоновкиДанных;

ПроцессорКомпоновки.НачатьВывод();
//Считаем проценты по своему алгоритму, для примера:
Для Сч = 1 По 100 Цикл
  ЭлементКомпоновки.ПроцентВывода = Сч;
  ПроцессорКомпоновки.ВывестиЭлемент(ЭлементКомпоновки);
КонецЦикла;
ПроцессорКомпоновки.ЗакончитьВывод();
2 acsent
 
29.08.12
15:34
(0) никак, только для стандартных отчетов
3 Rounder
 
29.08.12
15:42
(0) Это управляемое или обычное приложение?
Есть ли возможность создать форму?
4 motkot
 
29.08.12
15:42
УФ, форму не хотелось бы.
5 Rounder
 
29.08.12
15:43
Но индикатора в любом случае не получится.
Я для УФ сделал (но нужна будет форма) просто отображение пользователю, что отчет формируется. Когда сформировался - что отчет сформирован.
6 Rounder
 
29.08.12
15:46
Такая реализация устроит?
7 motkot
 
29.08.12
15:50

Для Сч = 1 По 100 Цикл
  ЭлементКомпоновки.ПроцентВывода = Сч;
  ПроцессорКомпоновки.ВывестиЭлемент(ЭлементКомпоновки);
КонецЦикла;

Без формы я так понимаю тоже не будет работать?
И как определить сколько вообще элементов компоновки?
8 Wobland
 
29.08.12
15:51
(7) а я так понимаю, что будет
9 Rounder
 
29.08.12
15:51
Ну может как-нить можно и без формы и с индикатором реализовать для УФ - но врядли. Индикатор не выйдет потому что формирование на сервере происходит, а индикатор на киленте нужен.
10 Rounder
 
29.08.12
15:53
(7)
ВывестиЭлемент доступен на сервере и толстом клиенте.
А ты написал что желаешь для УФ, т.е. для веб-клиента и тонкого клиента.
11 Rounder
 
29.08.12
15:54
На сервере процент посчитать не проблема - как ты передашь промежуточные итерации на клиента в форму?
Способы вроде видел - но они замедляли формирование отчета - порой очень значительно.
12 Rounder
 
29.08.12
15:56
Вобщем я для себя создал стандартную форму отчета (управляемую). В составе команд убрал команду Сформировать. Сделал свою команду и поместил ее на форму.
Ну и простейший обработчик (его наворачивать можно по разному - в зависимости от того, какое тебе нужно вмешательство в формирование отчета)

&НаКлиенте
Процедура Формирование(Команда)
   Состояние("Идет формирование отчета...");
   АвтоОтображениеСостояния = РежимАвтоОтображенияСостояния.Отображать;
   СкомпоноватьРезультат();
   КолГрупп = Результат.КоличествоУровнейГруппировокСтрок();
   Пока КолГрупп > 0 Цикл
       Результат.ПоказатьУровеньГруппировокСтрок(КолГрупп - 1);
       КолГрупп = КолГрупп - 1;
   КонецЦикла;
   Результат.ФиксацияСверху = 0;
   Результат.ФиксацияСлева = 0;
   Результат.ПолеСверху = 0;
   Результат.ПолеСлева = 15;
   Результат.ПолеСнизу = 0;
   Результат.ПолеСправа = 0;
   Результат.РазмерКолонтитулаСверху = 0;
   Результат.РазмерКолонтитулаСнизу = 0;
   Состояние("Отчет сформирован.");
КонецПроцедуры
13 Rounder
 
29.08.12
15:57
Пока отчет формируется - пользователь видит оконце внизу справа "Идет формирование отчета...". Когда отчет сформирован в оконце выводится "Отчет сформирован..." и оно плавно "уходит".
14 motkot
 
29.08.12
16:02
Rounder, спасибо, но надо как типовой отчет формируется.
Wobland, как узнать количество элементов компоновки, чтобы разделить на порции процентов?
15 zzhiraf
 
29.08.12
16:05
Так в типовом вроде отчет в фоновом задании формируется?
16 Wobland
 
29.08.12
16:07
(14) не скажу
17 motkot
 
29.08.12
16:13
(15) и что?
18 motkot
 
29.08.12
16:13
(16) принципиально или принципиально знаешь?
19 Rounder
 
29.08.12
16:14
(17) Так а чем тебе поможет процент? Будешь пробовать порциями закидывать на сервер для вывода?
20 motkot
 
29.08.12
16:14
(19) почему порциями на сервер? и так уже на сервере дальше некуда
21 Rounder
 
29.08.12
16:16
Суть реализации индикатора на УФ в том, чтобы ты на клиенте смог разбить на порции твой вывод и этими порциями забрасывать на сервер для вывода. Перед забросом следующей порции с клиента в форму выводишь рассчитанный процент. В итоге если 10 забросов, то клиенту будешь показывать 10%, 20%, 30% и т.д. до 100%.
22 Rounder
 
29.08.12
16:17
Это единственная метода которую удалось найти когда столкнулся с подобной тебе проблемой.

Ну или я чего-то не понимаю.
23 motkot
 
29.08.12
16:18
(21) есть типовой механизм, который описан в (1), единственный вопрос остается, как определить количество элементов компоновки?
24 Rounder
 
29.08.12
16:29
(23) В свое время у меня не получилось ничего сделать.
Если получится для УФ - поделись потом.
25 motkot
 
29.08.12
16:43
(8) не отображает, если все компонуешь в модуле объекта отчета без формы. Может релиз платформы у меня корявенький (8.2.15.317)?
26 motkot
 
29.08.12
17:02
у кого нить под рукой есть Хрусталева второе издание?
27 motkot
 
30.08.12
09:09
Пока не решил, у кого-нить была практика?
28 QLgKR
 
30.08.12
11:50
(0) Отчет нужно выполнять в фоне, иначе индикатор может не показаться (анимации точно не будет), т.к. анимация запускается в основном потоке выполнения.
Придется делать свою форму переопределять кнопку сформировать (можно сделать общую форму отчетов).
Управление индикатором через свойство расширения поля табличного документа ОтображениеСостояния.

Пример можно взять из БП 3.0. Сейчас там все отчеты практически так формируются.
29 motkot
 
30.08.12
13:38
(28) без формы он всегда в фоне (т.к. у меня всего одно событие в распоряжении "ПриКомпоновкеРезультата"), если не прав, скажите.
30 QLgKR
 
31.08.12
09:48
(29) Автоматическое формирование в фоне НЕ работает если отчеты разработаны без использования СКД или с использованием СКД, но с переопределенной процедурой формирования отчета (переопределен обработчик кнопки «Сформировать» или в обработчике модуля отчета ПриКомпоновкеРезультата устанавливается СтандартнаяОбработка = Ложь).
31 motkot
 
31.08.12
13:44
(30) судя по всему без формы не обойтись, чтобы и в фоне и с анимацией.