SAPGUI_PROGRESS_INDICATOR - Выводит ход выполнения процесса, именуемый многими часиками в нижнем левом углу. В общем-то иногда полезно бывает показать пользователю сколько данных уже обработано, а сколько еще осталось ему подождать. ФМ доволно простой:
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 20
TEXT = 'Текст'.
Т.е. шкала 100% мы задаем процент, фактически это будет процент закрашенного синим сектора часов и поле пояснительного текста. Я для себя чтобы не считать процент каждый раз завернул вызов в свой собственный ФМ вида:
FUNCTION ZZ_SHOW_PROGRESS.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(STR) TYPE C OPTIONAL
*" VALUE(PROGRESS) TYPE I
*" VALUE(MAX) TYPE I
*"----------------------------------------------------------------------
DATA: INDICATOR_TXT(120),
INDICATOR_PRC TYPE I.
INDICATOR_TXT = STR.
INDICATOR_PRC = ( PROGRESS * 100 ) / MAX.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = INDICATOR_PRC
TEXT = INDICATOR_TXT
EXCEPTIONS
OTHERS = 1.
ENDFUNCTION.
А теперь про подводные камни:
1. Каждый вызов данного ФМ выполняет процесс отдачи данных от сервера приложений к клиентской машинке, а это значит, что если ФМ, например при обновлении 1000 записей, дергать на каждое обновление одной строки, то скорость выполнения программы упадет в разы, иногда до 10 раз, т.е. как совет, обновление индикатора нужно выполнять например с шагом в 100-200 записей, т.е. вызвать его от 10 до 5 раз за процесс, т.е. приблизительно оцениваете объемы выборки и смотрите с каким шагом дергать индикатор процесса.
2. Данный ФМ блокирует за пользователем один из диалоговых процессов сервера приложений, которых и так не много. Соответственно если у нас в системе например 10 диалоговых процессов, то запустив программку с индикатором хода выполнения процесса 10 раз, пока программа не завершиться, никто живым в систему не войдет и не выйдет, за что можно получить по голове от администраторов системы.