REPORT {{p}}court_old. TYPES: BEGIN OF ty_result, court TYPE {{p}}court-court_id, bookings TYPE i, total_min TYPE i, charge TYPE p LENGTH 11 DECIMALS 2, END OF ty_result. DATA: gt_booking TYPE STANDARD TABLE OF {{p}}booking, gt_court TYPE STANDARD TABLE OF {{p}}court, gt_result TYPE STANDARD TABLE OF ty_result, gs_booking TYPE {{p}}booking, gs_court TYPE {{p}}court, gs_result TYPE ty_result, gs_next TYPE ty_result, gv_court TYPE {{p}}court-court_id, gv_fee TYPE p LENGTH 11 DECIMALS 2, gv_lines TYPE i, gv_outer TYPE i, gv_inner TYPE i, gv_i TYPE i, gv_j TYPE i, gv_k TYPE i, go_alv TYPE REF TO cl_salv_table. PARAMETERS p_date TYPE d OBLIGATORY. SELECT-OPTIONS s_court FOR gv_court. START-OF-SELECTION. SELECT * FROM {{p}}court INTO TABLE gt_court. SELECT * FROM {{p}}booking INTO TABLE gt_booking WHERE booking_date = p_date. LOOP AT gt_booking INTO gs_booking. IF gs_booking-booking_state <> 'X'. IF gs_booking-court_id IN s_court. READ TABLE gt_court INTO gs_court WITH KEY court_id = gs_booking-court_id. IF sy-subrc = 0. CLEAR gv_fee. gv_fee = gs_booking-duration_min * gs_court-hourly_rate / 60. READ TABLE gt_result INTO gs_result WITH KEY court = gs_booking-court_id. IF sy-subrc = 0. gv_i = sy-tabix. gs_result-bookings = gs_result-bookings + 1. gs_result-total_min = gs_result-total_min + gs_booking-duration_min. gs_result-charge = gs_result-charge + gv_fee. MODIFY gt_result FROM gs_result INDEX gv_i. ELSE. CLEAR gs_result. gs_result-court = gs_booking-court_id. gs_result-bookings = 1. gs_result-total_min = gs_booking-duration_min. gs_result-charge = gv_fee. APPEND gs_result TO gt_result. ENDIF. ENDIF. ENDIF. ENDIF. ENDLOOP. LOOP AT gt_result INTO gs_result. IF gs_result-bookings < 2. DELETE gt_result INDEX sy-tabix. ENDIF. ENDLOOP. gv_lines = lines( gt_result ). gv_outer = gv_lines - 1. DO gv_outer TIMES. gv_i = sy-index. gv_inner = gv_lines - gv_i. DO gv_inner TIMES. gv_j = sy-index. gv_k = gv_j + 1. READ TABLE gt_result INTO gs_result INDEX gv_j. READ TABLE gt_result INTO gs_next INDEX gv_k. IF gs_next-court < gs_result-court. MODIFY gt_result FROM gs_next INDEX gv_j. MODIFY gt_result FROM gs_result INDEX gv_k. ENDIF. ENDDO. ENDDO. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = go_alv CHANGING t_table = gt_result ). go_alv->display( ). CATCH cx_salv_msg. ENDTRY.