Files
abap-llm/tasks_gen/train/G1121/faulty/m4_mush_harvest.func.abap
2026-10-05 18:02:52 +02:00

63 lines
1.8 KiB
ABAP

FUNCTION {{p}}mush_harvest
IMPORTING
iv_room_a TYPE string
iv_room_b TYPE string
EXPORTING
ev_total_kg TYPE decfloat34
ev_room_count TYPE i
ev_top_grade TYPE char1
EXCEPTIONS
no_stock.
DATA lt_rows TYPE STANDARD TABLE OF {{P}}HARVEST.
DATA lt_stock TYPE SORTED TABLE OF {{P}}HARVEST WITH UNIQUE KEY room_id grade.
DATA lt_grade TYPE SORTED TABLE OF {{P}}HARVEST WITH UNIQUE KEY grade.
DATA lv_room TYPE {{P}}HARVEST-room_id.
DATA lv_best TYPE {{P}}HARVEST-weight_kg.
SELECT room_id, grade, batch_no, weight_kg
FROM {{P}}HARVEST
WHERE room_id <> ''
AND grade IN ( 'A', 'B', 'C' )
AND weight_kg > 0
AND ( room_id = @iv_room_a OR room_id = @iv_room_b )
INTO TABLE @lt_rows.
IF lt_rows IS INITIAL.
RAISE no_stock.
ENDIF.
LOOP AT lt_rows ASSIGNING FIELD-SYMBOL(<ls_row>).
ev_total_kg = ev_total_kg + <ls_row>-weight_kg.
READ TABLE lt_stock ASSIGNING FIELD-SYMBOL(<ls_stock>)
WITH TABLE KEY room_id = <ls_row>-room_id grade = <ls_row>-grade.
IF sy-subrc = 0.
<ls_stock>-weight_kg = <ls_stock>-weight_kg + <ls_row>-weight_kg.
ELSE.
INSERT <ls_row> INTO TABLE lt_stock.
ENDIF.
READ TABLE lt_grade ASSIGNING FIELD-SYMBOL(<ls_grade>)
WITH TABLE KEY grade = <ls_row>-grade.
IF sy-subrc = 0.
<ls_grade>-weight_kg = <ls_grade>-weight_kg + <ls_row>-weight_kg.
ELSE.
INSERT <ls_row> INTO TABLE lt_grade.
ENDIF.
ENDLOOP.
LOOP AT lt_stock INTO DATA(ls_stock).
IF ls_stock-room_id <> lv_room.
ev_room_count = ev_room_count - 1.
lv_room = ls_stock-room_id.
ENDIF.
ENDLOOP.
LOOP AT lt_grade INTO DATA(ls_grade).
IF ls_grade-weight_kg > lv_best.
lv_best = ls_grade-weight_kg.
ev_top_grade = ls_grade-grade.
ENDIF.
ENDLOOP.
ENDFUNCTION.