Имя: Пароль:
1C
1С v8
Индикация процесса обработки
0 PRO100 NigGaZ
 
08.08.14
19:18
Добрый вечер, знаю что тема порядком избита, но все же
Индикатор используется для информативности выполняемой операции если она занимает длительное время, можно его не использовать, но сообщение не об этом.
Еще часто полезно видеть данные на форме в виде таблицы.
В 1С есть достаточно узкие места, а именно время передачи управления на сервер и обратно, время сборки объекта обработки с последующей передачей на сервер и возвратом обратно и достаточно тормознутое отображение индикации.
Второй пункт избегать можно используя процедуру без контекста, в этом случае мы не передаем на сервер объект формы, передаем только нужные значения в виде структуры и возвращаем соответственно структуру с найденными значениями.
Третий пункт можно избежать используя индикацию не на каждую итерацию а только при изменении значения прогресса выполнения, делаю я это так:

    КоличествоИтераций = Файл.КоличествоСтрок();
    СтароеЗначение = 0;
    Состояние("Выполняется загрузка",СтароеЗначение);
    Для НомерСтроки=1 по КоличествоИтераций Цикл
        ОбработкаПрерыванияПользователя();
        СтрокаФайла = Файл.ПолучитьСтроку(НомерСтроки);
        Зн = Цел(НомерСтроки/КоличествоИтераций*100);
        Если зн <> СтароеЗначение Тогда
            Состояние("Выполняется загрузка",зн);
            СтароеЗначение = зн;
        КонецЕсли;
    КонецЦикла;

Вот как побороть первый пункт, тут в голову приходит только уменьшение количества обращений к серверу, и желаемое количество должно стремиться к 1, но как отображать процесс выполнения на сервере используя одно обращение, или как передать в массиве неопределенное количество строк для обработки равное Цел(НомерСтроки/КоличествоИтераций*100)?
Сделать массив со значениями не проблема, а вот заполнить таблицу (строки которые мы уже прошли) не знаю :(
1 Franchiser
 
гуру
08.08.14
19:21
Изучал эту тему. Наиболее правильный выход использовать фоновое задание, это реализовано в БСП, но руки посмотреть н доходит.
2 PRO100 NigGaZ
 
08.08.14
19:23
(1) а еще надо разобраться как это работает :) да посмотреть обработку удаления я не догадался :(
3 Franchiser
 
гуру
08.08.14
19:29
Нужно изучать модуль длительные операции в типовых. Как-то это работает)