REPORT {{p}}stock_net_old. TYPES: BEGIN OF ty_key, material TYPE {{p}}move-material, plant TYPE {{p}}move-plant, END OF ty_key, BEGIN OF ty_out, material TYPE {{p}}move-material, plant TYPE {{p}}move-plant, net_qty TYPE {{p}}move-quantity, move_count TYPE i, END OF ty_out. DATA: gv_matnr TYPE {{p}}move-material, gv_from TYPE d, gv_to TYPE d, gv_gr TYPE {{p}}move-quantity, gv_gi TYPE {{p}}move-quantity, gv_cnt TYPE i, gs_key TYPE ty_key, gs_out TYPE ty_out, gt_keys TYPE STANDARD TABLE OF ty_key, gt_out TYPE STANDARD TABLE OF ty_out, go_alv TYPE REF TO cl_salv_table, gx_msg TYPE REF TO cx_salv_msg. PARAMETERS: p_from TYPE d OBLIGATORY, p_to TYPE d OBLIGATORY. SELECT-OPTIONS: s_matnr FOR gv_matnr. START-OF-SELECTION. gv_from = p_from. gv_to = p_to. SELECT DISTINCT material plant FROM {{p}}move INTO TABLE gt_keys WHERE move_date >= gv_from AND move_date <= gv_to AND material IN s_matnr. SORT gt_keys BY material plant. LOOP AT gt_keys INTO gs_key. CLEAR: gv_gr, gv_gi, gv_cnt, gs_out. SELECT SUM( quantity ) FROM {{p}}move INTO gv_gr WHERE material = gs_key-material AND plant = gs_key-plant AND move_type = 'GR' AND move_date >= gv_from AND move_date <= gv_to. SELECT SUM( quantity ) FROM {{p}}move INTO gv_gi WHERE material = gs_key-material AND plant = gs_key-plant AND move_type = 'GI' AND move_date >= gv_from AND move_date <= gv_to. SELECT COUNT(*) FROM {{p}}move INTO gv_cnt WHERE material = gs_key-material AND plant = gs_key-plant AND move_date >= gv_from AND move_date <= gv_to. gs_out-material = gs_key-material. gs_out-plant = gs_key-plant. gs_out-net_qty = gv_gr - gv_gi. gs_out-move_count = gv_cnt. APPEND gs_out TO gt_out. ENDLOOP. TRY. CALL METHOD cl_salv_table=>factory IMPORTING r_salv_table = go_alv CHANGING t_table = gt_out. CALL METHOD go_alv->display. CATCH cx_salv_msg INTO gx_msg. MESSAGE gx_msg TYPE 'I' DISPLAY LIKE 'E'. ENDTRY.