0
PRO100 NigGaZ
08.08.14
✎
19:18
|
Добрый вечер, знаю что тема порядком избита, но все же
Индикатор используется для информативности выполняемой операции если она занимает длительное время, можно его не использовать, но сообщение не об этом.
Еще часто полезно видеть данные на форме в виде таблицы.
В 1С есть достаточно узкие места, а именно время передачи управления на сервер и обратно, время сборки объекта обработки с последующей передачей на сервер и возвратом обратно и достаточно тормознутое отображение индикации.
Второй пункт избегать можно используя процедуру без контекста, в этом случае мы не передаем на сервер объект формы, передаем только нужные значения в виде структуры и возвращаем соответственно структуру с найденными значениями.
Третий пункт можно избежать используя индикацию не на каждую итерацию а только при изменении значения прогресса выполнения, делаю я это так:
КоличествоИтераций = Файл.КоличествоСтрок();
СтароеЗначение = 0;
Состояние("Выполняется загрузка",СтароеЗначение);
Для НомерСтроки=1 по КоличествоИтераций Цикл
ОбработкаПрерыванияПользователя();
СтрокаФайла = Файл.ПолучитьСтроку(НомерСтроки);
Зн = Цел(НомерСтроки/КоличествоИтераций*100);
Если зн <> СтароеЗначение Тогда
Состояние("Выполняется загрузка",зн);
СтароеЗначение = зн;
КонецЕсли;
КонецЦикла;
Вот как побороть первый пункт, тут в голову приходит только уменьшение количества обращений к серверу, и желаемое количество должно стремиться к 1, но как отображать процесс выполнения на сервере используя одно обращение, или как передать в массиве неопределенное количество строк для обработки равное Цел(НомерСтроки/КоличествоИтераций*100)?
Сделать массив со значениями не проблема, а вот заполнить таблицу (строки которые мы уже прошли) не знаю :(
|
|