|
Индикатор выполнения отчета с помощью СКД | ☑ | ||
---|---|---|---|---|
0
yurec_k
25.12.12
✎
15:29
|
Пацаны есть темка следующая:
есть тугодумные отчеты, хочу чтоб отображался индикатор формирования отчета. Толком в инете ни чего не нашел, в идеале чтоб можно было применять к отчетам с программным выводом (СтандартнаяОбработка = Ложь), ут11, управляемое приложение. Хелп. |
|||
1
le_
25.12.12
✎
15:34
|
||||
2
yurec_k
25.12.12
✎
15:37
|
(1) сдается мне эта штука в управляемомо приложении не работает, сделал как там просто колесико крутиться с надписью "Отчет формируется ..."
|
|||
3
le_
25.12.12
✎
15:44
|
||||
4
vmv
25.12.12
✎
15:49
|
(3) метод тривиален
бъем серверную обработку на вызов цикле порциональных методов этой серверной обработки, но ОбновитьОтображениеДанных(); все портит, это ж в каждой итерации вся форме аццке колбасицца, хотя если прикрутить фонарики и огненное дыхание дракона после обновления, то будет ничего) |
|||
5
ДенисЧ
25.12.12
✎
15:51
|
Интересно, как разбить процедуру выполнения запроса :-)
|
|||
6
le_
25.12.12
✎
15:54
|
(5) А обычный СКД-шный прогресс-бар начинает шевелиться уже после того, как запрос отработал и идет вывод данных.
Ход выполнения выборки данных запросом никак не отобразить. |
|||
7
vmv
25.12.12
✎
15:54
|
(5) если облаеете хорошей степенью извращенца, то получать мельчайшие ВТ в порцайках, накладывая там услоявия соединения и пр. Результурующий запросец просто выбрать.
Если 100%-й извращенец, то навоеяшь 100500 методов гецерации ВТ, зато будет бежать полосочка и девочки вудут визжать от удовольствия, клева) |
|||
8
yurec_k
25.12.12
✎
16:34
|
(3) а других вариантов нет?
это кто-нибудь применял к отчетам? |
|||
9
le_
25.12.12
✎
16:39
|
(8) Один из "других" вариантов - переписать отчет/конфигурацию так, чтобы он [отчет] перестал быть "тугодумным".
|
|||
10
TormozIT
гуру
25.12.12
✎
16:40
|
Пишешь серверную фоновую процедуру для универсального формирования (компоновки) табличного документа по настройкам и схеме из временного хранилища. В этой процедуре, на вход которой передали адрес временного хранилища для хранения процента выполнения, обновляешь процент выполнения. На клиенте готовишь данные (настройки и схему) для отчета и запускаешь фоновое задание с этой процедурой, подключаешь обработчик ожидания и обновляешь на форме индикатор на основе считанного процента выполнения из временного хранилища.
|
|||
11
yurec_k
25.12.12
✎
16:48
|
(10) интересная темочка,
примерчик есть? |
|||
12
fisher
25.12.12
✎
16:54
|
Ладно с процентом. С процентом так или иначе упираешься в (5).
Я был бы счастлив хотя бы от этого: v8: СКД. Индикатор формирования в УФ и нестандартная обработка |
|||
13
yurec_k
25.12.12
✎
17:23
|
да без этого долбаного кружочка ваще все намертво встает
|
|||
14
yurec_k
25.12.12
✎
18:03
|
Сделал следующий эксперимент:
отчет, СтандартнаяОбработка = Истина, формируется примерно 40 сек. процедура ПриКомпоновкеРезультата: Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) //СтандартнаяОбработка = Ложь; Сообщить("0,"+ТекущаяДата()); НастройкиСКД = КомпоновщикНастроек.ПолучитьНастройки(); ДокументРезультат.Очистить(); Сообщить("1,"+ТекущаяДата()); КомпановщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Макет = КомпановщикМакета.Выполнить(СхемаКомпоновкиДанных,НастройкиСКД,ДанныеРасшифровки); Сообщить("2,"+ТекущаяДата()); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(Макет,,ДанныеРасшифровки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.ОтображатьПроцентВывода = Истина; //ЭлементРезультата = Новый ЭлементРезультатаКомпоновкиДанных; Сообщить("3,"+ТекущаяДата()); //ПолеПоКодуНеобходимоПолучитьЗначение = "Номенклатура"; //ПолеКартинка = "Картинка"; ПроцессорВывода.НачатьВывод(); Сообщить("4,"+ТекущаяДата()); а = 1; Пока Истина Цикл ЭлементРезультата = ПроцессорКомпоновки.Следующий(); Если ЭлементРезультата = Неопределено Тогда Сообщить("Прервать, "+а); Прервать; КонецЕсли; //ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); Если а % 100 = 0 Тогда Состояние = а / 100; КонецЕсли; а = а + 1; КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); Сообщить("5,"+ТекущаяДата()); КонецПроцедуры хронология примерно такая после нажатия кнопки сформировать: 1. 20 сек: "отчет не сформирован. Нажмите сформировать ..."; 2. потом вываливаются разом все сообщения 0-4 с одинаковым временем, 5-ое с +15 сек; 3. еще 20 сек, крутиться этот кружочек; 4. появляются данные отчета. --------------- По этому поводу возникают вопросы: 1. На какой стадии / какой строчкой выполняется запрос? 2. Если результат выводится между 4 и 5 ым сообщением то, что делается когда крутиться кружочек? |
|||
15
yurec_k
25.12.12
✎
18:09
|
+ к (14) и вызывает сомнение (6) следующее:
закоментарил нахрен эту обработку кружочек практически сразу(2-3 сек) начал кружиться. Запрос отчета не простой в консоле делался бы долго с такими же параметрами. |
|||
16
fisher
25.12.12
✎
18:15
|
Ты по моей ссылке ходил? Там я вроде разобрался.
Кружочек намертво завязан на фоновое формирование. Он кружится параллельно с выполнением кода формы, если такой есть. Поэтому сообщения выйдут сразу, а отчет еще будет формироваться. Перестает кружится, когда форма получает инфу с сервера о завершении формирования отчета, выводит полученный табдок и гасит кружочек. А как только ставишь нестандартную обработку - фоновому формированию хана. Вот такие невеселые факты. |
|||
17
yurec_k
25.12.12
✎
18:34
|
(16)
так а что тогда отчет делает первые 20 сек пока собщений нет, не ужто запрос выпоняет? этот код в модуле объекта. И если " Кружочек намертво завязан на фоновое формирование " получиться ли (10)? |
|||
18
fisher
25.12.12
✎
18:53
|
(17) Так у тебя (14) выполняется при отключенной стандартной обработке или при включенной? Если при включенной, то у тебя дважды компоновка выполняется. Стандартная (фоново с кружочком) и та, что в коде прописана.
|
|||
19
yurec_k
26.12.12
✎
09:13
|
(18) получается, да. Ок 2-ой вопрос из (14) понятен.
а 1. На какой стадии / какой строчкой выполняется запрос? |
|||
20
yurec_k
26.12.12
✎
09:50
|
еще ошибочка в 14
//ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); должна быть раскоментарена в этом сл отчет выводится 2 раза. я сначала не воткнул и закоментарил навиг фишер в 18 абсолютно прав |
|||
21
yurec_k
26.12.12
✎
14:41
|
может есть у кого пример того что описано в (10) ?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |