Files
abap-llm/tasks_gen/eval/G0122/reference/bot_plan.func.abap

67 lines
2.0 KiB
ABAP

FUNCTION {{p}}bot_plan
IMPORTING
iv_min_hl TYPE decfloat34
EXPORTING
ev_total_hl TYPE decfloat34
ev_plan_count TYPE int4.
TYPES: BEGIN OF ty_group,
beer_type TYPE {{p}}botord-beer_type,
total_hl TYPE {{p}}botpln-total_hl,
order_count TYPE {{p}}botpln-order_count,
END OF ty_group.
DATA lt_groups TYPE HASHED TABLE OF ty_group WITH UNIQUE KEY beer_type.
DATA ls_group TYPE ty_group.
DATA ls_row TYPE {{p}}botpln.
DATA lt_plan TYPE STANDARD TABLE OF {{p}}botpln WITH EMPTY KEY.
CLEAR: ev_total_hl, ev_plan_count.
SELECT beer_type, volume_hl
FROM {{p}}botord
INTO TABLE @DATA(lt_orders).
LOOP AT lt_orders INTO DATA(ls_order).
IF ls_order-volume_hl <= 0.
CONTINUE.
ENDIF.
READ TABLE lt_groups ASSIGNING FIELD-SYMBOL(<ls_group>)
WITH TABLE KEY beer_type = ls_order-beer_type.
IF sy-subrc = 0.
<ls_group>-total_hl = <ls_group>-total_hl + ls_order-volume_hl.
<ls_group>-order_count = <ls_group>-order_count + 1.
ELSE.
ls_group = VALUE #( beer_type = ls_order-beer_type
total_hl = ls_order-volume_hl
order_count = 1 ).
INSERT ls_group INTO TABLE lt_groups.
ENDIF.
ENDLOOP.
LOOP AT lt_groups ASSIGNING FIELD-SYMBOL(<ls_grp>).
IF <ls_grp>-total_hl < iv_min_hl.
CONTINUE.
ENDIF.
ls_row = VALUE #( client = sy-mandt
beer_type = <ls_grp>-beer_type
plan_pos = 0
total_hl = <ls_grp>-total_hl
order_count = <ls_grp>-order_count ).
APPEND ls_row TO lt_plan.
ev_total_hl = ev_total_hl + <ls_grp>-total_hl.
ENDLOOP.
SORT lt_plan BY total_hl DESCENDING beer_type ASCENDING.
LOOP AT lt_plan ASSIGNING FIELD-SYMBOL(<ls_row>).
<ls_row>-plan_pos = sy-tabix.
ENDLOOP.
ev_plan_count = lines( lt_plan ).
DELETE FROM {{p}}botpln.
IF lt_plan IS NOT INITIAL.
INSERT {{p}}botpln FROM TABLE @lt_plan.
ENDIF.
ENDFUNCTION.