79 lines
2.1 KiB
ABAP
79 lines
2.1 KiB
ABAP
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.
|