Вы находитесь на странице: 1из 4

PARAMETERS: testmode RADIOBUTTON GROUP mode DEFAULT 'X'.

PARAMETERS: update RADIOBUTTON GROUP mode.


SELECTION-SCREEN END OF BLOCK block2.
SELECTION-SCREEN COMMENT /1(72) textz.
SELECTION-SCREEN END OF BLOCK block.
DATA:
DATA
DATA:
DATA
DATA
DATA
DATA
DATA
DATA
DATA
DATA
DATA

ls_afpo TYPE afpo.


lt_afpo TYPE TABLE OF afpo.
ls_mseg TYPE mseg.
ls_mseg2 TYPE mseg.
lt_mseg TYPE TABLE OF mseg.
ls_mkpf TYPE mkpf.
l_initial_ltrmi TYPE co_ltrmi VALUE IS INITIAL.
l_orders TYPE sytabix.
l_entries TYPE sytabix.
l_sum_wemng TYPE wemng.
l_sum_wewrt TYPE wewrt.
l_error TYPE xfeld.

"#EC NEEDED
"#EC
"#EC
"#EC
"#EC
"#EC
"#EC

NEEDED
NEEDED
NEEDED
NEEDED
NEEDED
NEEDED

"#EC
"#EC
"#EC
"#EC
"#EC
"#EC

NEEDED
NEEDED
NEEDED
NEEDED
NEEDED
NEEDED

INITIALIZATION.
text1 = 'This report checks goods receipt quantity (WEMNG) and'.
text2 = 'value (WEWRT) of an order item for consistency with the '.
text3 = 'corresponding material documents. In UPDATE mode, the'.
text4 = 'quantity and the value calculated from the material'.
text5 = 'documents will be written to database table AFPO.'.
texta = 'Please specify order numbers of orders to be processed.'.
texty = 'If TESTMODE is set, no database update will occur.'.
textz = 'Set radio button UPDATE for updating the database entries.'.
title = 'Mode'.
AT SELECTION-SCREEN.
* orders specified?
IF r_aufnr IS INITIAL.
MESSAGE e889(co) WITH 'Please specify order numbers'.
ENDIF.
START-OF-SELECTION.
* select order items
SELECT *
FROM afpo
INTO TABLE lt_afpo
WHERE aufnr IN r_aufnr
AND wepos = 'X'
AND ( dauty = auftragstyp-fert
OR dauty = auftragstyp-netw
OR dauty = auftragstyp-inst
OR dauty = auftragstyp-rma
OR dauty = auftragstyp-bord ).
DESCRIBE TABLE lt_afpo LINES l_orders.
* check order items
LOOP AT lt_afpo INTO ls_afpo.
REFRESH lt_mseg.
CLEAR l_sum_wemng.
CLEAR l_sum_wewrt.

CLEAR l_error.
SELECT *
FROM mseg
INTO TABLE lt_mseg
WHERE matnr = ls_afpo-matnr
AND werks = ls_afpo-pwerk
AND aufnr = ls_afpo-aufnr
AND aufps = ls_afpo-posnr
AND kzbew = 'F'
%_HINTS ORACLE 'rule'.

LOOP AT lt_mseg INTO ls_mseg.


IF ls_mseg-shkzg ='S'.
inward movement
IF NOT ls_mseg-dmbtr IS INITIAL.
l_sum_wewrt = l_sum_wewrt + ls_mseg-dmbtr.
ENDIF.
IF NOT ls_mseg-bstmg IS INITIAL AND
ls_mseg-bstme = ls_afpo-amein.
l_sum_wemng = l_sum_wemng + ls_mseg-bstmg.
ELSE.
IF ls_mseg-erfme = ls_afpo-amein.
l_sum_wemng = l_sum_wemng + ls_mseg-erfmg.
ELSE.
IF ls_mseg-meins = ls_afpo-amein.
l_sum_wemng = l_sum_wemng + ls_mseg-menge.
ELSE.
WRITE: 'ERROR - Order', ls_afpo-aufnr COLOR 6.
DELETE lt_afpo.
l_error = 'X'.
EXIT.
ENDIF.
ENDIF.
ENDIF.
ls_mseg2 = ls_mseg.
ELSE.
outward movement
IF NOT ls_mseg-dmbtr IS INITIAL.
l_sum_wewrt = l_sum_wewrt - ls_mseg-dmbtr.
ENDIF.
IF NOT ls_mseg-bstmg IS INITIAL AND
ls_mseg-bstme = ls_afpo-amein.
l_sum_wemng = l_sum_wemng - ls_mseg-bstmg.
ELSE.
IF ls_mseg-erfme = ls_afpo-amein.
l_sum_wemng = l_sum_wemng - ls_mseg-erfmg.
ELSE.
IF ls_mseg-meins = ls_afpo-amein.
l_sum_wemng = l_sum_wemng - ls_mseg-menge.
ELSE.
WRITE: 'ERROR - Order', ls_afpo-aufnr COLOR 6.
DELETE lt_afpo.
l_error = 'X'.
EXIT.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP. "AT lt_mseg

only continue if no error in the calculation occurred


CHECK l_error IS INITIAL.

IF ls_afpo-wemng = l_sum_wemng AND


ls_afpo-wewrt = l_sum_wewrt.
values are correct, no update necessary
DELETE lt_afpo.
CONTINUE.
ENDIF.

*
*

*
*
*

FORMAT: COLOR 1.
WRITE: / 'Order', ls_afpo-aufnr, 'material', ls_afpo-matnr.
FORMAT: COLOR OFF.
WRITE: /3 'Order item data : quantity',
ls_afpo-wemng UNIT ls_afpo-amein, ls_afpo-amein, 'value',
ls_afpo-wewrt CURRENCY ls_mseg-waers, ls_mseg-waers.
WRITE: /3 'Material documents: quantity',
l_sum_wemng UNIT ls_afpo-amein, ls_afpo-amein, 'value',
l_sum_wewrt CURRENCY ls_mseg-waers, ls_mseg-waers.
FORMAT: COLOR 2.
WRITE: /3 'Material doc. BWART', 30 'stock qty UoM',
52 'entry qty UoM', 77 'value Curr'.
FORMAT: COLOR OFF.
LOOP AT lt_mseg INTO ls_mseg.
WRITE: /3 ls_mseg-mblnr, ls_mseg-zeile, ls_mseg-bwart,
ls_mseg-menge UNIT ls_mseg-meins, ls_mseg-meins,
ls_mseg-bstmg UNIT ls_mseg-bstme, ls_mseg-bstme,
ls_mseg-dmbtr CURRENCY ls_mseg-waers, ls_mseg-waers.
ENDLOOP.
IF NOT update IS INITIAL.
set delivery date
IF l_sum_wemng IS INITIAL.
initial delivery quantity --> initial delivery date
UPDATE afpo SET ltrmi = l_initial_ltrmi
WHERE aufnr = ls_afpo-aufnr
AND posnr = ls_afpo-posnr.
ELSE.
read posting date from last valid goods receipt
SELECT SINGLE * FROM mkpf
INTO ls_mkpf
WHERE mblnr = ls_mseg2-mblnr
AND mjahr = ls_mseg2-mjahr.
IF sy-subrc IS INITIAL.
UPDATE afpo SET ltrmi = ls_mkpf-budat
WHERE aufnr = ls_afpo-aufnr
AND posnr = ls_afpo-posnr.
ELSE.
leave LTRMI untouched
ENDIF.
ENDIF.
set quantity and value
UPDATE afpo SET wemng = l_sum_wemng
wewrt = l_sum_wewrt
WHERE aufnr = ls_afpo-aufnr
AND posnr = ls_afpo-posnr.
FORMAT: COLOR COL_POSITIVE.
WRITE: /3 'Order item data corrected from material documents.'.
FORMAT: COLOR OFF.
ENDIF.

ULINE.
ENDLOOP. "AT lt_afpo
WRITE: / 'Number of checked order items
:', l_orders.
DESCRIBE TABLE lt_afpo LINES l_entries.
WRITE: / 'Number of inconsistent order items:', l_entries.
IF NOT update IS INITIAL
AND
NOT l_entries IS INITIAL.
WRITE: / 'Inconsistencies were corrected from material documents.'
COLOR COL_POSITIVE.
COMMIT WORK.
ENDIF.
ULINE.

Вам также может понравиться