Files
abap-llm/tasks_gen/train/G1114/seed/bakery_bill_old.prog.abap
2026-10-05 18:02:52 +02:00

75 lines
2.1 KiB
ABAP

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.