REPORT {{p}}fleet_cost_old. TYPES: BEGIN OF ty_out, vehicle_id TYPE {{p}}vehicle-vehicle_id, plate TYPE {{p}}vehicle-plate, category TYPE {{p}}vehicle-category, distance TYPE {{p}}trip-distance_km, fuel_cost TYPE {{p}}trip-toll_fee, toll_cost TYPE {{p}}trip-toll_fee, total_cost TYPE {{p}}trip-toll_fee, cost_per_km TYPE p LENGTH 15 DECIMALS 3, END OF ty_out. DATA: gt_out TYPE STANDARD TABLE OF ty_out, gt_vehicle TYPE STANDARD TABLE OF {{p}}vehicle, gt_trip TYPE STANDARD TABLE OF {{p}}trip, gs_vehicle TYPE {{p}}vehicle, gs_trip TYPE {{p}}trip, gs_out TYPE ty_out, go_alv TYPE REF TO cl_salv_table, gv_cat TYPE {{p}}vehicle-category. PARAMETERS: p_from TYPE d OBLIGATORY, p_to TYPE d OBLIGATORY. SELECT-OPTIONS: s_cat FOR gv_cat. START-OF-SELECTION. SELECT * FROM {{p}}vehicle INTO TABLE gt_vehicle. LOOP AT gt_vehicle INTO gs_vehicle. IF gs_vehicle-category IN s_cat. CLEAR gs_out. gs_out-vehicle_id = gs_vehicle-vehicle_id. gs_out-plate = gs_vehicle-plate. gs_out-category = gs_vehicle-category. SELECT * FROM {{p}}trip INTO TABLE gt_trip WHERE vehicle_id = gs_vehicle-vehicle_id AND trip_date >= p_from AND trip_date <= p_to. IF sy-subrc = 0. LOOP AT gt_trip INTO gs_trip. gs_out-distance = gs_out-distance + gs_trip-distance_km. gs_out-fuel_cost = gs_out-fuel_cost + gs_trip-fuel_liters * gs_trip-fuel_price. gs_out-toll_cost = gs_out-toll_cost + gs_trip-toll_fee. ENDLOOP. gs_out-total_cost = gs_out-fuel_cost + gs_out-toll_cost. IF gs_out-distance > 0. gs_out-cost_per_km = gs_out-total_cost / gs_out-distance. ENDIF. APPEND gs_out TO gt_out. ENDIF. ENDIF. ENDLOOP. SORT gt_out BY total_cost DESCENDING. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = go_alv CHANGING t_table = gt_out ). go_alv->display( ). CATCH cx_salv_msg. ENDTRY.