06-09-2006 10:44 AM
Hi all,
I have a situation where I would be processing a table
with 3000 or more lines. It is a pretty long process and
the output is a list view.
I tried to create a progress indicator with following
code:
Before the start of loop:
DATA: L_LIST_COUNT TYPE I.
DATA: L_SCREEN_COL_COUNT TYPE I.
DATA: L_PROGRESS_UNIT TYPE I.
DATA: L_LOOP_COUNT TYPE I VALUE 0.
DESCRIBE TABLE IT_BUILD_LIST LINES L_LIST_COUNT.
L_SCREEN_COL_COUNT = SY-LINSZ - 2.
L_PROGRESS_UNIT =
( L_LIST_COUNT / L_SCREEN_COL_COUNT ) + 1.
With in the loop:
L_LOOP_COUNT = L_LOOP_COUNT + 1.
IF L_LOOP_COUNT GE L_PROGRESS_UNIT.
FORMAT COLOR = 4.
WRITE: '>'.
L_LOOP_COUNT = 0.
ENDIF.
The problem is I dont see the progress. The whole
processing is done and the list view is displayed. When
I go back i see the progress code output.
Is it possible to view the progress when loop runs??
Thanks in advance.
06-09-2006 10:47 AM
06-09-2006 10:49 AM
hi
u can use <b>SAPGUI_PROGRESS_INDICATOR</b>
CHK THIS OUT
DATA: percentage_text TYPE c LENGTH 5.
DO 100 TIMES.
WAIT UP TO '0.5' SECONDS.
percentage_text(3) = sy-index.
percentage_text+3 = '%'.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = sy-index
text = percentage_text.
ENDDO.
06-09-2006 10:51 AM
06-09-2006 10:55 AM
Hi,
check this sample code.
REPORT ZTEST_PROGIND .
*&**********************************************************************
*& DESCRIPTION: Demonstrate Progress indicator *
*&**********************************************************************
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.
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 'Retrieving data...'(001)
SY-TABIX
MARA_LINES.
* WAIT UP TO 2 SECONDS.
ENDLOOP.
WRITE: /20 'Report is "Complete" OK'.
*&---------------------------------------------------------------------*
*& Form PROGRESS_BAR
*&---------------------------------------------------------------------*
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 '% Complete'(002) INTO W_TEXT.
* This check needs to be in otherwise when looping around big tables
* SAP will re-display indicator too many times causing report to run
* very slow. (No need to re-display same percentage anyway)
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
Regards
vijay
06-09-2006 10:56 AM
HI
plz check my earlier post !
U can also refer this
REPORT (SY-REPID)
NO STANDARD PAGE HEADING
LINE-SIZE 132
LINE-COUNT 55.
TABLES:TRDIR.
SELECT-OPTIONS: PGMNAME FOR TRDIR-NAME.
PARAMETERS:
HEADING AS CHECKBOX DEFAULT 'X',
FGROUP AS CHECKBOX,
USER LIKE TRDIR-CNAM DEFAULT 'TDEMPSEY',
DOWNLOAD AS CHECKBOX,
TEXTPOOL AS CHECKBOX,
DOWNDIR(20) DEFAULT 'C:\ABAP\'.
DATA:
W_TEXT(128),
W_FILENAME(128),
W_PROGRAM_LOW(8),
W_PROGRAM_HIGH(8).
DATA:
BEGIN OF TEXTTAB OCCURS 0,
ID(1),
KEY(8),
ENTRY(70),
END OF TEXTTAB,
BEGIN OF ABAPTAB OCCURS 500,
LINE(72),
END OF ABAPTAB,
BEGIN OF TRTAB OCCURS 0,
NAME LIKE TRDIR-NAME,
ENTRY LIKE TEXTTAB-ENTRY,
CDAT LIKE TRDIR-CDAT,
UDAT LIKE TRDIR-UDAT,
END OF TRTAB,
BEGIN OF TRFTAB OCCURS 0,
NAME LIKE TRDIR-NAME,
ENTRY LIKE TEXTTAB-ENTRY,
CDAT LIKE TRDIR-CDAT,
UDAT LIKE TRDIR-UDAT,
END OF TRFTAB.
START-OF-SELECTION.
IF FGROUP = ' '.
PERFORM LOAD_TRDIR_PROGRAM.
PERFORM PROCESS_PROGRAM.
ELSE.
PERFORM LOAD_TRDIR_FGROUP.
PERFORM PROCESS_FGROUP.
ENDIF.
&----
*& form load_trdir_program.
&----
FORM LOAD_TRDIR_PROGRAM.
SELECT * FROM TRDIR
WHERE NAME IN PGMNAME.
IF USER <> '*'.
CHECK TRDIR-UNAM = USER OR TRDIR-CNAM = USER.
ENDIF.
CLEAR: TEXTTAB.
REFRESH: TEXTTAB.
CLEAR: TRTAB.
READ TEXTPOOL TRDIR-NAME INTO TEXTTAB LANGUAGE 'E'.
IF SY-SUBRC = 0.
READ TABLE TEXTTAB WITH KEY 'R'.
MOVE TEXTTAB-ENTRY TO TRTAB-ENTRY.
ENDIF.
MOVE TRDIR-NAME TO TRTAB-NAME.
MOVE TRDIR-CDAT TO TRTAB-CDAT.
MOVE TRDIR-UDAT TO TRTAB-UDAT.
APPEND TRTAB.
CLEAR: TEXTTAB.
ENDSELECT.
ENDFORM. " load_trdir_program
&----
*& Form load_trdir_fgroup
&----
FORM LOAD_TRDIR_FGROUP.
SELECT * FROM TRDIR
WHERE NAME BETWEEN 'SAPLYYYY' AND 'SAPLZZZZ'.
CHECK TRDIR-UNAM = USER OR TRDIR-CNAM = USER.
CLEAR: TEXTTAB.
CLEAR: TRTAB.
REFRESH: TEXTTAB.
READ TEXTPOOL TRDIR-NAME INTO TEXTTAB LANGUAGE 'E'.
IF SY-SUBRC = 0.
READ TABLE TEXTTAB WITH KEY 'R'.
MOVE TEXTTAB-ENTRY TO TRTAB-ENTRY.
ENDIF.
MOVE TRDIR-NAME TO TRTAB-NAME.
MOVE TRDIR-CDAT TO TRTAB-CDAT.
MOVE TRDIR-UDAT TO TRTAB-UDAT.
APPEND TRTAB.
CLEAR: TEXTTAB.
ENDSELECT.
LOOP AT TRTAB.
MOVE-CORRESPONDING TRTAB TO TRFTAB.
APPEND TRFTAB.
MOVE TRTAB-NAME+3(5) TO W_PROGRAM_LOW.
MOVE '%' TO W_PROGRAM_LOW+5(1).
MOVE TRTAB-NAME+3(5) TO W_PROGRAM_HIGH.
MOVE 'MMMMMMMM' TO W_PROGRAM_HIGH.
SELECT * FROM TRDIR
WHERE NAME LIKE W_PROGRAM_LOW.
where name between w_program_low and w_program_high.
CHECK TRDIR-NAME+5(1) <> '$'.
CHECK TRDIR-NAME(5) = TRTAB-NAME+3(5).
READ TEXTPOOL TRDIR-NAME INTO TEXTTAB LANGUAGE 'E'.
READ TABLE TEXTTAB WITH KEY 'R'.
MOVE TEXTTAB-ENTRY TO TRFTAB-ENTRY.
MOVE TRDIR-NAME TO TRFTAB-NAME.
MOVE TRDIR-CDAT TO TRFTAB-CDAT.
MOVE TRDIR-UDAT TO TRFTAB-UDAT.
APPEND TRFTAB.
ENDSELECT.
ENDLOOP.
ENDFORM. " load_trdir_fgroup.
----
FORM PROCESS_PROGRAM
*
----
........ *
----
FORM PROCESS_PROGRAM.
LOOP AT TRTAB.
READ REPORT TRTAB-NAME INTO ABAPTAB.
IF DOWNLOAD = 'X'.
PERFORM DOWNLOAD_PROGRAMS USING TRTAB-NAME.
ELSE.
PERFORM LIST_PROGRAMS USING TRTAB-NAME.
ENDIF.
IF TEXTPOOL = 'X'.
READ TEXTPOOL TRTAB-NAME INTO TEXTTAB LANGUAGE 'E'.
IF SY-SUBRC = 0 AND DOWNLOAD = 'X'.
PERFORM DOWNLOAD_TEXTPOOL USING TRTAB-NAME.
ENDIF.
LOOP AT TEXTTAB.
WRITE:/
TEXTTAB-ID,
TEXTTAB-KEY,
TEXTTAB-ENTRY.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDFORM.
----
FORM PROCESS_fgroup
*
----
........ *
----
FORM PROCESS_FGROUP.
LOOP AT TRFTAB.
READ REPORT TRFTAB-NAME INTO ABAPTAB.
IF DOWNLOAD = 'X'.
PERFORM DOWNLOAD_PROGRAMS USING TRFTAB-NAME.
ELSE.
PERFORM LIST_PROGRAMS USING TRFTAB-NAME.
ENDIF.
IF TEXTPOOL = 'X'.
READ TEXTPOOL TRFTAB-NAME INTO TEXTTAB LANGUAGE 'E'.
IF SY-SUBRC = 0 AND DOWNLOAD = 'X'.
PERFORM DOWNLOAD_TEXTPOOL USING TRFTAB-NAME.
LOOP AT TEXTTAB.
WRITE:/
TEXTTAB-ID,
TEXTTAB-KEY,
TEXTTAB-ENTRY.
ENDLOOP.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
&----
*& Form DOWNLOAD_PROGRAMS
&----
<b>FORM DOWNLOAD_PROGRAMS USING NAME.
W_TEXT = 'Downloading'.
W_TEXT+15(8) = NAME.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = W_TEXT
EXCEPTIONS
OTHERS = 1.
MOVE DOWNDIR TO W_FILENAME(20).
MOVE NAME TO W_FILENAME+20(8).
MOVE '.txt' TO W_FILENAME+28(4).
CONDENSE W_FILENAME NO-GAPS.</b>
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = W_FILENAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = ABAPTAB
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
OTHERS = 8.
ENDFORM. " DOWNLOAD_PROGRAMS
&----
*& Form LIST_PROGRAMS
&----
FORM LIST_PROGRAMS USING NAME.
LOOP AT ABAPTAB.
WRITE:/ NAME, ABAPTAB-LINE.
ENDLOOP.
ENDFORM. " LIST_PROGRAMS
&----
*& Form DOWNLOAD_TEXTPOOL
&----
<b>FORM DOWNLOAD_TEXTPOOL USING NAME.
W_TEXT = 'Textpool...'.
W_TEXT+15(8) = NAME.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = W_TEXT
EXCEPTIONS
OTHERS = 1.</b>
MOVE DOWNDIR TO W_FILENAME(20).
MOVE TRTAB-NAME TO W_FILENAME+20(8).
MOVE '.tpl' TO W_FILENAME+28(4).
CONDENSE W_FILENAME NO-GAPS.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = W_FILENAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = TEXTTAB
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
OTHERS = 8.
ENDFORM. " DOWNLOAD_TEXTPOOL
TOP-OF-PAGE.
IF HEADING = 'X'.
Place your heading here:
call function 'Z_WRITE_HEADER_FOOTER'
exporting
type = 'H'
exceptions
others = 1.
*
skip 1.
06-09-2006 10:59 AM
hii Ravi ,
check this
<b>RH_DISPLAY_PROGRESS_INDICATOR</b>
<b>
*&**********************************************************************
*& DESCRIPTION: Demonstrate Progress indicator *
*&**********************************************************************
REPORT z_indicator.
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: gd_count(6) TYPE n,
gd_outtext(70) type c.
************************************************************************
*START-OF-SELECTION.
START-OF-SELECTION.
SELECT matnr
UP TO 500 ROWS
INTO TABLE it_mara
FROM mara.
CHECK sy-subrc EQ 0.
LOOP AT it_mara INTO wa_mara.
add 1 to gd_count.
concatenate 'Processing personnel data'(m10) gd_count into gd_outtext
separated by ' '.
* Display indicator for employee count
perform progress_indicator using gd_outtext.
ENDLOOP.
WRITE: /20 'Report is "Complete" OK'.
*&---------------------------------------------------------------------*
*& Form PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
* Displays progress indicator on SAP screen
*----------------------------------------------------------------------*
form progress_indicator using p_text.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
* PERCENTAGE = 0
text = p_text.
endform. " PROGRESS_INDICATOR
[/b
-
<b>[code]
check this links for more info
<b>https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/webas/abap/abap code samples/abap objects/abap code sample progress indicator.pdf</b>
Regards
Naresh
06-09-2006 11:10 AM
Hi anandaraja,
1. To get a taste of it,
just copy paste this SIMPLE PROGRAM,
which will show the PROGRESS
1% 2% ................... 100%
2.
report abc.
DATA : PER TYPE P DECIMALS 2.
DATA :PERCTEXT(5) TYPE C.
DATA : MSG(100) TYPE C.
*----
do 500 times.
per = sy-index / 500 * 100.
PERCTEXT = PER.
CONCATENATE 'PERC IS ' PERCTEXT INTO MSG separated by space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = PER
TEXT = MSG.
enddo.
regards,
amit m.
06-09-2006 11:16 AM
Hi,
please keep in mind that Progress Indicator is very helpful but has an impact on performance.
You should not call it directly in a loop but only at every tenth or so execution of the loop.
Christian