Once reporting output is displayed, you may want to refresh this reported output without having the user restart your report. There's remarkably little to it... The WRITE
statements that are used set up a report are outputted all at once when the last WRITE
is finished. Using the WRITE
after that (E.g. after AT LINE-SELECTION
will start a new reporting "layer".
To refresh a report, the game-plan is to make sure the existing report is overwritten, rather than putting a new layer on top of it. Have a closer look at this example:
WRITE: / 'Hello world'. AT LINE-SELECTION. * Manual change to the report list number SY-LSIND = SY-LSIND - 1. WRITE: / 'Bye', / 'World'.
The key is subtracting 1 from SY-LSIND
, which is the system variabele for the active report index. Execute this little program and double click on the text displayed. For your own understanding it might be useful to try and spot the difference if you also try to leave the line with SY-LSIND
out. You might have used the TOP-OF-PAGE
event when setting up your report. After refreshing the report, this section will disappear. No worries, the TOP-OF-PAGE
handling for reports after refreshing is defined like: TOP-OF-PAGE DURING LINE-SELECTION
. All you need to do is repeat your coding here.
One step further: when a report contents is refreshed, the system will automatically refresh it's scrolling settings as well, so you don't really "stay where you are".
Refresh a report - and hang on to the position in the report
Your user is somewhere in page 3 of your report and just clicked on the option to refresh the report. A refreshed version is build and output, and the user is directed to the top of this new list. This can be awkward. Consider the following routine:
FORM REFRESH_OUTPUT. DATA: begin of lw_position, staro type SY-STARO, staco type sy-staco, curow type sy-curow, cucol type sy-cucol, cpage type sy-cpage, end of lw_position. * Hang on to position information move-corresponding sy to lw_position. * Reset the list level SY-LSIND = 0. * Redo the WRITE statements (compose refreshed output) PERFORM PRODUCE_OUTPUT. * Scroll back SCROLL LIST INDEX 1 TO PAGE lw_position-cpage LINE lw_position-lirow SCROLL LIST INDEX 1 TO COLUMN lw_position-licol. SET CURSOR lw_position-cucol lw_position-curow. ENDFORM.
The example performs a refresh for the main list level, level 1. If you want to use this in "deeper" levels, you have to subtract one from SY-LSIND
rather than set it to zero. Also make sure that there is no page-split in this report, to ensure the SCROLL LIST ... TO FIRST PAGE ...
will work.