REPORT {{p}}news_dist_old. * Legacy distribution report of the newspaper publisher. * Shows the delivered copies and the returns of each newsagent. TYPES ty_rate TYPE p LENGTH 8 DECIMALS 2. TYPES: BEGIN OF ty_out, agent TYPE {{p}}agent-agent_id, name TYPE {{p}}agent-agent_name, district TYPE {{p}}agent-district, copies TYPE i, returned TYPE i, rate TYPE ty_rate, END OF ty_out. DATA: gt_agent TYPE STANDARD TABLE OF {{p}}agent, gs_agent TYPE {{p}}agent, gt_deliv TYPE STANDARD TABLE OF {{p}}deliv, gs_deliv TYPE {{p}}deliv, gs_out TYPE ty_out, gt_out TYPE STANDARD TABLE OF ty_out, gt_list TYPE STANDARD TABLE OF ty_out, gv_date TYPE d, gv_dist TYPE c LENGTH 4, go_alv TYPE REF TO cl_salv_table. SELECT-OPTIONS s_date FOR gv_date. SELECT-OPTIONS s_dist FOR gv_dist. START-OF-SELECTION. SELECT * FROM {{p}}agent INTO TABLE gt_agent. LOOP AT gt_agent INTO gs_agent. SELECT * FROM {{p}}deliv INTO TABLE gt_deliv WHERE agent_id = gs_agent-agent_id AND del_date IN s_date. IF gt_deliv IS NOT INITIAL. CLEAR gs_out. gs_out-agent = gs_agent-agent_id. gs_out-name = gs_agent-agent_name. gs_out-district = gs_agent-district. LOOP AT gt_deliv INTO gs_deliv. gs_out-copies = gs_out-copies + gs_deliv-del_copies. gs_out-returned = gs_out-returned + gs_deliv-ret_copies. ENDLOOP. PERFORM calc_rate USING gs_out-returned gs_out-copies CHANGING gs_out-rate. APPEND gs_out TO gt_out. ENDIF. ENDLOOP. LOOP AT gt_out INTO gs_out WHERE district IN s_dist. APPEND gs_out TO gt_list. ENDLOOP. SORT gt_list BY rate DESCENDING agent ASCENDING. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = go_alv CHANGING t_table = gt_list ). go_alv->display( ). CATCH cx_salv_msg. ENDTRY. FORM calc_rate USING iv_returned TYPE i iv_copies TYPE i CHANGING cv_rate TYPE ty_rate. DATA lv_copies TYPE p LENGTH 15 DECIMALS 2. lv_copies = iv_copies. IF lv_copies > 0. cv_rate = iv_returned * 100 / lv_copies. ELSE. CLEAR cv_rate. ENDIF. ENDFORM.