REPORT {{p}}ski_lift_old. DATA: gv_lift TYPE {{p}}skiride-lift_id. PARAMETERS p_season TYPE c LENGTH 4 OBLIGATORY. SELECT-OPTIONS s_lift FOR gv_lift. TYPES: BEGIN OF ty_line, lift_id TYPE {{p}}skiride-lift_id, rides TYPE i, tickets TYPE i, revenue TYPE p LENGTH 15 DECIMALS 2, END OF ty_line. DATA: gt_rides TYPE STANDARD TABLE OF {{p}}skiride, gt_lines TYPE STANDARD TABLE OF ty_line, gs_ride TYPE {{p}}skiride, gs_line TYPE ty_line, gv_index TYPE i, gv_found TYPE c LENGTH 1, gv_rev TYPE p LENGTH 15 DECIMALS 2. START-OF-SELECTION. PERFORM read_rides. PERFORM build_lines. PERFORM sort_lines. PERFORM show_lines. FORM read_rides. SELECT * FROM {{p}}skiride INTO TABLE gt_rides WHERE season = p_season AND lift_id IN s_lift. ENDFORM. FORM build_lines. LOOP AT gt_rides INTO gs_ride. CLEAR: gv_found, gs_line. LOOP AT gt_lines INTO gs_line. IF gs_line-lift_id = gs_ride-lift_id. gv_found = 'X'. gv_index = sy-tabix. EXIT. ENDIF. ENDLOOP. IF gv_found = 'X'. READ TABLE gt_lines INTO gs_line INDEX gv_index. gs_line-rides = gs_line-rides + 1. gs_line-tickets = gs_line-tickets + gs_ride-tickets. COMPUTE gv_rev = gs_ride-tickets * gs_ride-fare. gs_line-revenue = gs_line-revenue + gv_rev. MODIFY gt_lines FROM gs_line INDEX gv_index. ELSE. CLEAR gs_line. gs_line-lift_id = gs_ride-lift_id. gs_line-rides = 1. gs_line-tickets = gs_ride-tickets. COMPUTE gs_line-revenue = gs_ride-tickets * gs_ride-fare. APPEND gs_line TO gt_lines. ENDIF. ENDLOOP. ENDFORM. FORM sort_lines. SORT gt_lines BY revenue DESCENDING. ENDFORM. FORM show_lines. DATA: lo_alv TYPE REF TO cl_salv_table, lx_msg TYPE REF TO cx_salv_msg. TRY. CALL METHOD cl_salv_table=>factory IMPORTING r_salv_table = lo_alv CHANGING t_table = gt_lines. CALL METHOD lo_alv->display. CATCH cx_salv_msg INTO lx_msg. MESSAGE lx_msg TYPE 'I' DISPLAY LIKE 'E'. ENDTRY. ENDFORM.