if PROGRESS = 1 or PROGRESS >= result. " ограниченный вывод индикатора
" то, что Вы говорили
Не я говорил не это я говорил что выводить надо через каждый например 20% записей, а вы выводите для первой записи и потом result = max / 10 т.е. имеем 2000 записей, тогда в result = 200, а далее у вас что получается? А получается, что после 200-той записи вы выводите индикатор процесса для каждой записи, что не правильно. Надо чуть по другому делать, например выводить через каждые 10%, тогда пишем где-то так:
REPORT ytsh_test_gui_indicator.
DATA: index TYPE i,
max TYPE i,
ten_prc TYPE i,
result TYPE i,
go_progress TYPE REF TO cl_akb_progress_indicator.
IF go_progress IS NOT BOUND. go_progress = cl_akb_progress_indicator=>get_instance( ). ENDIF.
* Всего записей, для примера
max = 225.
* Определить сколько записей входят в 10% (тут точность не важна)
ten_prc = max / 10.
BREAK-POINT.
DO max TIMES.
* Счетчик по обрабатываемым записям
result = result + 1.
* Показываем в первый раз и далее через каждый 10%
index = result MOD ten_prc.
IF index = 1.
go_progress->display( EXPORTING total = max
processed = result
message = 'Выполняется..' ).
* Задержка 3 секунды а то 225 раз, ну очень быстро выполняются :-)
WAIT UP TO 2 SECONDS.
ENDIF.
ENDDO.
* Ну и типа 100% все прошло
go_progress->display( EXPORTING total = max
processed = max
message = 'Завершено..' ).
* Задержка 3 секунды а то 225 раз, ну очень быстро выполняются :-)
WAIT UP TO 10 SECONDS.
Что касается окна, то оно будет висеть так как после нажатия "Да", GUI отдает управление серверу приложения, который и выполняет весь код который вы написали и только после его завершения сервер приложения ответит GIU что типа можно работать дальше. Так что окно будет висеть до этого времени. Чтобы оно не висело, надо перепланировать логику приложения по другому.