Имя: Пароль:
1C
1С v8
Индикация загрузки
,
0 Родной
 
11.10.11
13:07
Наверное бредовая идея, но.
При загрузке/выгрузки данных из переферийных баз хочется видеть индикатор обмена. Тоесть сколько времени еще осталось до окончания загрузки/выгрузки. Объемы большие и иногда ждать завершения можно долго..
Что тут можно предпринять ?
1 catena
 
11.10.11
13:14
Количество выгружаемых данных известно?
Вообще
(ТекущееВремя-НачальноеВремя)/выгрузили - среднее время выгрузки объекта
ОбщееКоличество*СреднееВремя - времениПрошло - сколько осталось.
Как-то так :)
2 Wobland
 
11.10.11
13:14
там же XMLка. то есть заранее неизвестно, сколько бует
3 Живой Ископаемый
 
11.10.11
13:16
2(2) это не повод... В конце концов в типовых мы можем сказать в настройках чтобы в рамках одной транзакции выгружать 1 объект, и количество объектов для выгрузки мы тоже можем узнать заранее.. Но детали я пока придумать не могу
4 Живой Ископаемый
 
11.10.11
13:16
а, блин, загрузки...
5 Живой Ископаемый
 
11.10.11
13:16
тогда в начале сообщения записывать количество объектов, в этом сообщении.
6 Родной
 
11.10.11
13:18
Ну наверное можно заранее дополнительно прочитать этот xml и выяснить сколько будет всего. думаю это будет не долго.
Время вряд ли возможно посчитать, так как нагрузки меняются, а вот "осталось x из y" сообщать можно...
7 Живой Ископаемый
 
11.10.11
13:18
2(6) можно, но тогда время загрузки увеличится ровно в два раза
8 Родной
 
11.10.11
13:19
(7)простое чтение иксмл занимает столько же времени, что и чтение + запись ? херрасе...
9 Wobland
 
11.10.11
13:19
(0) дарю:
Перем обMSScriptControl, стр10, плк10;

Процедура ОсновныеДействияФормыПроведение(Кнопка)
   ЭлементыФормы.НадписьОбщееКоличество.Заголовок="";
   ЭлементыФормы.Индикатор.МаксимальноеЗначение=ОбщееКоличество;
   ЭлементыФормы.Индикатор.Значение=0;
   Н=0;
   СуммаВремени=0;
   ДлинаБаяна=1; НаправлениеБаяна=2;
   Пока Выборка.Следующий() Цикл
       Старт=обMSScriptControl.eval("new Date().getTime()");
       ОбработкаПрерыванияПользователя();
       Н=Н+1;
       Осталось=ОбщееКоличество-Н;
       ЭлементыФормы.Индикатор.Значение=ЭлементыФормы.Индикатор.Значение+1;
       Финиш=обMSScriptControl.eval("new Date().getTime()");
       СуммаВремени=СуммаВремени+Финиш-Старт;
       ОсталосьВремени=Осталось*СуммаВремени/(60000*Н);
       Минут=Цел(ОсталосьВремени); Секунд=Формат(Цел((ОсталосьВремени-Минут)*60), "ЧЦ=2; ЧН=; ЧВН=");
       ДлинаБаяна=ДлинаБаяна+НаправлениеБаяна;
       ДлинаБаяна=Макс(ДлинаБаяна, 1);
       Если ДлинаБаяна>8 ИЛИ ДлинаБаяна<2 Тогда НаправлениеБаяна=-НаправлениеБаяна; КонецЕсли;
       ф=(10-ДлинаБаяна)/2+2;
       ЭлементыФормы.НадписьОбщееКоличество.Заголовок=Строка(Минут)+":"+Секунд+Лев(стр10, ф)+"[:"+Лев(плк10, ДлинаБаяна)+":]"+Лев(стр10, ф)+Осталось;
   КонецЦикла;    
КонецПроцедуры

обMSScriptControl=Новый COMОбъект("MSScriptControl.ScriptControl");
обMSScriptControl.language="javascript";
стр10="          ";
плк10="||||||||||";
10 Живой Ископаемый
 
11.10.11
13:21
2(8) нет, если просто как чтение ХМЛ, тогда нет
11 Родной
 
11.10.11
13:23
(10)Ну да. Скопировать файл. просто прочитать. выяснить сколько там объектов. и из оригинального файла начать стандартную загрузку.