In this example you have a mainreport REPORT1. From REPORT1 you
can drill down to REPORT2 and from REPORT2 you can drill down
to REPORT3.
Tip: Use hotspots to fire the AT LINE-SELECTION event.
When the cursor is over the hotspot, it cganges to a hand,
and you just have to click on the hostspot, instead of
double clicking.
Note: To see how to recognize if the user has selected a valid line, take a look at
How to check if a valid line is selected before drill down.
START-OF-SELECTION.
* Read data for REPORT1 into itab1
END-OF-SELECTION.
PERFORM write_report1.
TOP-OF-PAGE.
* Write list header for REPORT1
AT USER-COMMAND.
* Respond when the user presses a function key
CASE sy-ucomm.
WHEN 'REPORT2'.
PERFORM write_reprt2.
WHEN 'REPORT3'.
PERFORM write_reprt3.
ENDCASE.
AT LINE-SELECTION.
* Istead of pressing a button can perform the same actions
* as i AT USER-COMMAND, by double clicking a line
* sy-lsind contains the list level.
* Each time an interactive list event occurs, sy-lsind is
* automatically increased by 1.
* At REPORT1 sy-lsin = 0
CASE sy-lsind.
WHEN 1.
PERFORM write_reprt2.
WHEN 2.
PERFORM write_reprt3.
ENDCASE.
TOP-OF-PAGE.
* Write report header for report1 ( sy-lsind = 0 )
TOP-OF-PAGE DURING LINE-SELECTION.
* Write report header for sub reports
CASE sy-lsind.
WHEN 1.
* Write report header for REPORT2.
WHEN 2.
* Write report header for REPORT3.
ENDCASE.
FORM WRITE_REPORT1.
LOOP at itab1.
* write report1.......
* Hide keyfields used for the select statement of
* report2
HIDE: itab1_year, itab1_month.
ENDLOOP.
ENDFORM.
FORM WRITE_REPORT2.
SELECT * FROM databasetable2 into itab2
WHERE year = itab1_year AND
month = itab1_month.
LOOP at itab2.
* write report2 .......
* Hide keyfields used for the select statement of
* report3
HIDE: itab2_carrid.
ENDLOOP.
ENDFORM.
FORM WRITE_REPORT3.
SELECT * FROM databasetable3 into itab3
WHERE carrid = itab2_carrid.
LOOP at itab3.
* write report3 .......
* No need to hide keyfields, as further drill down is not
* possible
ENDLOOP.
ENDFORM.