REPORT  Z_Progress.

TYPES: BEGIN OF t_mara,
    matnr LIKE mara-matnr,
  END OF t_mara.
DATA: it_mara TYPE STANDARD TABLE OF t_mara INITIAL SIZE 0,
 wa_mara TYPE t_mara.
DATA: mara_lines TYPE i,
 gd_percent TYPE i.
 START-OF-SELECTION.

SELECT matnr
INTO TABLE it_mara
FROM mara.

CHECK sy-subrc EQ 0.
mara_lines = sy-dbcnt.
clear: gd_percent.

  LOOP AT it_mara INTO wa_mara.
PERFORM progress_bar USING 'Veriler alınıyor...'(001)
                          sy-tabix
                          mara_lines.

  ENDLOOP.
 
FORM progress_bar USING    p_value
                           p_tabix
                           p_nlines.

DATA: w_text(40),
   w_percentage TYPE p,
   w_percent_char(3).

w_percentage = ( p_tabix / p_nlines ) * 100.
w_percent_char = w_percentage.
SHIFT w_percent_char LEFT DELETING LEADING ' '.
CONCATENATE p_value w_percent_char '% Tamamlandı'(002) INTO w_text.

*bu kontrolü büyük verilerde loop yaptığımızda tekrar
*tekrar görünmesini engellemek için yapıyoruz
if w_percentage gt gd_percent or p_tabix eq 1.
 CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
   EXPORTING
      percentage = w_percentage
      text       = w_text.
gd_percent = w_percentage.
endif.
endform.                    " PROGRESS_BAR

WRITE: /20 'Bitti" OK'.
 
Serkan AKKAVAK
Bilgisayar Mühendisi
serkurumsal@yandex.com