-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathmaintenance-event-05-before-save.abap
66 lines (61 loc) · 2.6 KB
/
maintenance-event-05-before-save.abap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
FORM before_save.
TYPES: BEGIN OF lst_channel,
key TYPE zoaa_rsicalcg-channel,
END OF lst_channel.
DATA: BEGIN OF ls_total.
INCLUDE STRUCTURE zoaa_rsicalcg.
INCLUDE STRUCTURE vimtbflags.
DATA: END OF ls_total.
DATA: lt_calc TYPE TABLE OF zoaa_rsicalcg,
ls_calc TYPE zoaa_rsicalcg,
ls_oos TYPE zoaa_rsicalcg,
ls_lim TYPE zoaa_rsicalcg,
ls_ons TYPE zoaa_rsicalcg,
lt_channel TYPE TABLE OF lst_channel,
ls_channel TYPE lst_channel.
FIELD-SYMBOLS: <ls_xfrom> TYPE x, "Hexadecimal value of from value
<ls_xto> TYPE x. "Hexadecimal value of to value
LOOP AT total.
IF <action> <> geloescht AND
<action> <> update_geloescht AND
<action> <> neuer_geloescht.
ASSIGN total TO <ls_xfrom> CASTING.
ASSIGN ls_calc TO <ls_xto> CASTING.
<ls_xto> = <ls_xfrom>.
APPEND ls_calc TO lt_calc.
ls_channel-key = ls_calc-channel.
COLLECT ls_channel INTO lt_channel.
ENDIF.
ENDLOOP.
LOOP AT lt_channel INTO ls_channel.
CLEAR: ls_ons, ls_lim, ls_oos.
READ TABLE lt_calc INTO ls_oos WITH KEY channel = ls_channel-key
rough_stock_value = 'out_of_stock'.
READ TABLE lt_calc INTO ls_lim WITH KEY channel = ls_channel-key
rough_stock_value = 'limited'.
READ TABLE lt_calc INTO ls_ons WITH KEY channel = ls_channel-key
rough_stock_value = 'on_stock'.
IF NOT ( ls_oos-quantity_high > 0 AND ls_lim-quantity_high > 0 AND ls_ons-quantity_high > 0 ).
MESSAGE ID 'ZOAA' TYPE 'S' NUMBER '030' WITH ls_channel-key DISPLAY LIKE 'E'.
vim_abort_saving = 'X'.
sy-subrc = 4.
RETURN.
ENDIF.
IF NOT ( ls_ons-quantity_high > ls_ons-quantity_low AND
ls_lim-quantity_high > ls_lim-quantity_low AND
ls_oos-quantity_high > ls_oos-quantity_low ).
MESSAGE ID 'ZOAA' TYPE 'S' NUMBER '030' WITH ls_channel-key DISPLAY LIKE 'E'.
vim_abort_saving = 'X'.
sy-subrc = 4.
RETURN.
ENDIF.
IF NOT ( ( ls_ons-quantity_low - ls_lim-quantity_high = 1 ) AND
( ls_lim-quantity_low - ls_oos-quantity_high = 1 ) ).
MESSAGE ID 'ZOAA' TYPE 'S' NUMBER '030' WITH ls_channel-key DISPLAY LIKE 'E'.
vim_abort_saving = 'X'.
sy-subrc = 4.
RETURN.
ENDIF.
ENDLOOP.
sy-subrc = 0.
ENDFORM.