63 lines
1.8 KiB
ABAP
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.
|