Имя: Пароль:
1C
1С v8
Индикатор выполнения отчета с помощью СКД
,
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) ?