REPORT {{p}}bakery_bill_old. DATA: gv_shop_id TYPE {{p}}shop-shop_id. PARAMETERS p_from TYPE d OBLIGATORY. PARAMETERS p_to TYPE d OBLIGATORY. SELECT-OPTIONS s_shop FOR gv_shop_id. TYPES: BEGIN OF ty_line, shop_id TYPE {{p}}shop-shop_id, shop_name TYPE {{p}}shop-shop_name, loaves TYPE i, rolls TYPE i, total TYPE {{p}}shop-loaf_price, END OF ty_line. DATA: gt_shop TYPE STANDARD TABLE OF {{p}}shop WITH HEADER LINE, gt_deliv TYPE STANDARD TABLE OF {{p}}deliv WITH HEADER LINE, gt_out TYPE STANDARD TABLE OF ty_line WITH HEADER LINE. START-OF-SELECTION. PERFORM read_shops. PERFORM read_deliveries. PERFORM calc_totals. PERFORM display. FORM read_shops. SELECT * FROM {{p}}shop INTO TABLE gt_shop WHERE shop_id IN s_shop AND is_active = 'X'. SORT gt_shop BY shop_id. ENDFORM. FORM read_deliveries. SELECT * FROM {{p}}deliv INTO TABLE gt_deliv WHERE deliv_date >= p_from AND deliv_date <= p_to. SORT gt_deliv BY shop_id. ENDFORM. FORM calc_totals. DATA: ls_out TYPE ty_line, lv_fee TYPE {{p}}shop-loaf_price. CLEAR gt_out. LOOP AT gt_shop. CLEAR ls_out. ls_out-shop_id = gt_shop-shop_id. ls_out-shop_name = gt_shop-shop_name. LOOP AT gt_deliv WHERE shop_id = gt_shop-shop_id. IF gt_deliv-loaves + gt_deliv-rolls > 0. ls_out-loaves = ls_out-loaves + gt_deliv-loaves. ls_out-rolls = ls_out-rolls + gt_deliv-rolls. lv_fee = gt_deliv-loaves * gt_shop-loaf_price + gt_deliv-rolls * gt_shop-roll_price + gt_shop-deliv_fee. ls_out-total = ls_out-total + lv_fee. ENDIF. ENDLOOP. IF ls_out-loaves + ls_out-rolls > 0. APPEND ls_out TO gt_out. ENDIF. ENDLOOP. SORT gt_out BY total DESCENDING shop_id ASCENDING. ENDFORM. FORM display. DATA lo_alv TYPE REF TO cl_salv_table. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = lo_alv CHANGING t_table = gt_out[] ). lo_alv->display( ). CATCH cx_salv_msg. ENDTRY. ENDFORM.