Files
abap-llm/tasks_gen/train/G1090/seed/ski_lift_old.prog.abap
2026-10-05 18:02:52 +02:00

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.