REPORT {{p}}train_punct_old. DATA gv_line TYPE {{p}}trun-line_code. DATA gv_date TYPE {{p}}trun-plan_date. SELECT-OPTIONS s_line FOR gv_line. SELECT-OPTIONS s_date FOR gv_date. TYPES: BEGIN OF ty_out, line_code TYPE {{p}}trun-line_code, runs TYPE i, late TYPE i, sum_delay TYPE i, punct TYPE i, END OF ty_out. DATA gt_out TYPE STANDARD TABLE OF ty_out. FIELD-SYMBOLS TYPE {{p}}trun. FIELD-SYMBOLS TYPE ty_out. START-OF-SELECTION. DATA lt_runs TYPE STANDARD TABLE OF {{p}}trun. SELECT * FROM {{p}}trun INTO TABLE @lt_runs WHERE plan_date IN @s_date AND line_code IN @s_line. LOOP AT lt_runs ASSIGNING . IF -cancelled = 'X'. CONTINUE. ENDIF. READ TABLE gt_out ASSIGNING WITH KEY line_code = -line_code. IF sy-subrc <> 0. APPEND INITIAL LINE TO gt_out ASSIGNING . -line_code = -line_code. ENDIF. -runs = -runs + 1. -sum_delay = -sum_delay + -delay_min. IF -delay_min > 5. -late = -late + 1. ENDIF. ENDLOOP. LOOP AT gt_out ASSIGNING . -punct = ( -runs - -late ) * 100 / -runs. ENDLOOP. SORT gt_out BY punct line_code. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = DATA(lo_alv) CHANGING t_table = gt_out ). lo_alv->display( ). CATCH cx_salv_msg. ENDTRY.