生产订单收货数量与物料凭证计算总数量不一致
生活随笔
收集整理的這篇文章主要介紹了
生产订单收货数量与物料凭证计算总数量不一致
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?先使用如下程序?qū)σ殉鲥e(cuò)訂單進(jìn)行修正,然后再實(shí)施Note 1094999 - Goods receipt quantity is updated incorrectly
---------------分割線-----------------------------------------
REPORT Z_PPCON_076 .
TABLES: AFKO, AFPO, MSEG, MKPF.
PARAMETERS: TEST_? TYPE C DEFAULT 'X'.
SELECT-OPTIONS: PAORDER FOR AFPO-AUFNR.
DATA: BEGIN OF UPOS_TAB OCCURS 500.
????????INCLUDE STRUCTURE AFPO.
DATA: END OF UPOS_TAB.
DATA: BEGIN OF POS_TAB OCCURS 500.
????????INCLUDE STRUCTURE AFPO.
DATA: END OF POS_TAB.
DATA: BEGIN OF A_TAB OCCURS 500,
????????AUFNR LIKE AFKO-AUFNR,
??????END OF A_TAB.
DATA: BEGIN OF M_TAB OCCURS 500.
????????INCLUDE STRUCTURE MSEG.
DATA: END OF M_TAB.
DATA: NO_WEMNG LIKE AFPO-WEMNG VALUE '0',
??????NO_LTRMI LIKE AFPO-LTRMI VALUE '00000000',
??????KUM_WEMNG LIKE AFPO-WEMNG,
??????KUM_WEWRT LIKE AFPO-WEWRT,
??????DIF_QUAN LIKE AFPO-IAMNG,
??????DIF_WERT LIKE AFPO-WEWRT,
??????U_FLAG TYPE C.
IF NOT TEST_? IS INITIAL.
??WRITE: '????????!!!!!????TEST????!!!!!!'.
??SKIP 1.
ENDIF.
SELECT * FROM AFPO INTO TABLE POS_TAB
?????????WHERE AUFNR IN PAORDER.
* read material documents per order
LOOP AT POS_TAB.
??REFRESH M_TAB.
??CLEAR: U_FLAG.
??CLEAR: KUM_WEMNG.
??CLEAR: KUM_WEWRT.
??SELECT * FROM MSEG INTO TABLE M_TAB
??????????????WHERE MATNR EQ POS_TAB-MATNR
??????????????AND???AUFNR EQ POS_TAB-AUFNR
??????????????AND???AUFPS EQ POS_TAB-POSNR.
??LOOP AT M_TAB.
????CHECK M_TAB-BWART EQ '101' OR M_TAB-BWART EQ '102'
???????????????????????????????OR M_TAB-BWART EQ '122'.
*..inward movement
????IF M_TAB-SHKZG EQ 'S'.
??????IF NOT M_TAB-DMBTR IS INITIAL.
????????KUM_WEWRT = KUM_WEWRT + M_TAB-DMBTR.
??????ENDIF.
??????IF NOT M_TAB-BSTMG IS INITIAL.
????????KUM_WEMNG = KUM_WEMNG + M_TAB-BSTMG.
??????ELSE.
????????IF M_TAB-ERFME EQ POS_TAB-AMEIN.
??????????KUM_WEWRT = KUM_WEWRT + M_TAB-DMBTR.
????????ELSE.
??????????IF M_TAB-MEINS EQ POS_TAB-AMEIN.
????????????KUM_WEMNG = KUM_WEMNG + M_TAB-MENGE.
??????????ELSE.
????????????WRITE: 'ERROR - Order:', POS_TAB-AUFNR.
????????????CLEAR U_FLAG.
????????????EXIT.
??????????ENDIF.
????????ENDIF.
??????ENDIF.
????ELSE.
*..outward movement
??????IF NOT M_TAB-DMBTR IS INITIAL.
????????IF M_TAB-DMBTR NE M_TAB-BUALT AND
???????????NOT M_TAB-BUALT IS INITIAL.
??????????KUM_WEWRT = KUM_WEWRT - M_TAB-BUALT.
????????ELSE.
??????????KUM_WEWRT = KUM_WEWRT - M_TAB-DMBTR.
????????ENDIF.
??????ENDIF.
??????IF NOT M_TAB-BSTMG IS INITIAL.
????????KUM_WEMNG = KUM_WEMNG - M_TAB-BSTMG.
??????ELSE.
????????IF M_TAB-ERFME EQ POS_TAB-AMEIN.
??????????KUM_WEMNG = KUM_WEMNG - M_TAB-ERFMG.
????????ELSE.
??????????IF M_TAB-MEINS EQ POS_TAB-AMEIN.
????????????KUM_WEMNG = KUM_WEMNG - M_TAB-MENGE.
??????????ELSE.
????????????WRITE: 'ERROR - Order:', POS_TAB-AUFNR.
????????????CLEAR U_FLAG.
????????????EXIT.
??????????ENDIF.
????????ENDIF.
??????ENDIF.
????ENDIF.
????U_FLAG = 'X'.
??ENDLOOP.
*..update necessary ?
??IF NOT U_FLAG IS INITIAL AND ( NOT KUM_WEMNG IS INITIAL
???????????????????????????AND KUM_WEMNG NE POS_TAB-WEMNG )
???????????????????????????OR??( NOT KUM_WEWRT IS INITIAL
???????????????????????????AND KUM_WEWRT NE POS_TAB-WEWRT ).
????SELECT SINGLE * FROM MKPF WHERE MBLNR EQ M_TAB-MBLNR
???????????????????????????????AND MJAHR??EQ M_TAB-MJAHR.
????IF SY-SUBRC IS INITIAL.
??????MOVE MKPF-BUDAT TO POS_TAB-LTRMI.
????ENDIF.
????IF KUM_WEMNG = POS_TAB-WEMNG??OR
???????KUM_WEWRT = POS_TAB-WEWRT.
??????WRITE: / 'No update for the following order - check the order !'.
????ELSE.
??????MOVE-CORRESPONDING POS_TAB TO UPOS_TAB.
??????MOVE KUM_WEMNG TO UPOS_TAB-WEMNG.
??????MOVE KUM_WEWRT TO UPOS_TAB-WEWRT.
??????APPEND UPOS_TAB.
????ENDIF.
????WRITE: / 'Order:', POS_TAB-AUFNR, 'Material:', POS_TAB-MATNR,
??????????'Delivered Quantity:', POS_TAB-WEMNG, POS_TAB-AMEIN,
??????????'Value:', POS_TAB-WEWRT.
????WRITE: / 'Document???Item???Move-type Stock-Quantity??Unit',
?????????????????????????'Entry-Quantity???Unit???????Value'.
????LOOP AT M_TAB.
??????WRITE: / M_TAB-MBLNR, M_TAB-ZEILE, 21 M_TAB-BWART, 27 M_TAB-MENGE,
?????????????????M_TAB-MEINS, M_TAB-BSTMG, M_TAB-BSTME, 71 M_TAB-DMBTR,
?????????????????M_TAB-WAERS.
????ENDLOOP.
????ULINE.
????DIF_QUAN = KUM_WEMNG - POS_TAB-WEMNG.
????DIF_WERT = KUM_WEWRT - POS_TAB-WEWRT.
????WRITE: /22 'Sum:', KUM_WEMNG, POS_TAB-AMEIN, 71 KUM_WEWRT,
????????/ 'Balance Quantity Document - Order:',
??????????'Quantity:', DIF_QUAN, 'Value:', DIF_WERT.
????SKIP 1.
??ENDIF.
ENDLOOP.
CLEAR SY-DBCNT.
*...change order items.
IF TEST_? IS INITIAL AND NOT UPOS_TAB[] IS INITIAL.
??UPDATE AFPO FROM TABLE UPOS_TAB.
ENDIF.
SKIP 1.
WRITE: / 'Changed Orders:', SY-DBCNT.
******** End of????Report????????
---------------分割線-----------------------------------------
REPORT Z_PPCON_076 .
TABLES: AFKO, AFPO, MSEG, MKPF.
PARAMETERS: TEST_? TYPE C DEFAULT 'X'.
SELECT-OPTIONS: PAORDER FOR AFPO-AUFNR.
DATA: BEGIN OF UPOS_TAB OCCURS 500.
????????INCLUDE STRUCTURE AFPO.
DATA: END OF UPOS_TAB.
DATA: BEGIN OF POS_TAB OCCURS 500.
????????INCLUDE STRUCTURE AFPO.
DATA: END OF POS_TAB.
DATA: BEGIN OF A_TAB OCCURS 500,
????????AUFNR LIKE AFKO-AUFNR,
??????END OF A_TAB.
DATA: BEGIN OF M_TAB OCCURS 500.
????????INCLUDE STRUCTURE MSEG.
DATA: END OF M_TAB.
DATA: NO_WEMNG LIKE AFPO-WEMNG VALUE '0',
??????NO_LTRMI LIKE AFPO-LTRMI VALUE '00000000',
??????KUM_WEMNG LIKE AFPO-WEMNG,
??????KUM_WEWRT LIKE AFPO-WEWRT,
??????DIF_QUAN LIKE AFPO-IAMNG,
??????DIF_WERT LIKE AFPO-WEWRT,
??????U_FLAG TYPE C.
IF NOT TEST_? IS INITIAL.
??WRITE: '????????!!!!!????TEST????!!!!!!'.
??SKIP 1.
ENDIF.
SELECT * FROM AFPO INTO TABLE POS_TAB
?????????WHERE AUFNR IN PAORDER.
* read material documents per order
LOOP AT POS_TAB.
??REFRESH M_TAB.
??CLEAR: U_FLAG.
??CLEAR: KUM_WEMNG.
??CLEAR: KUM_WEWRT.
??SELECT * FROM MSEG INTO TABLE M_TAB
??????????????WHERE MATNR EQ POS_TAB-MATNR
??????????????AND???AUFNR EQ POS_TAB-AUFNR
??????????????AND???AUFPS EQ POS_TAB-POSNR.
??LOOP AT M_TAB.
????CHECK M_TAB-BWART EQ '101' OR M_TAB-BWART EQ '102'
???????????????????????????????OR M_TAB-BWART EQ '122'.
*..inward movement
????IF M_TAB-SHKZG EQ 'S'.
??????IF NOT M_TAB-DMBTR IS INITIAL.
????????KUM_WEWRT = KUM_WEWRT + M_TAB-DMBTR.
??????ENDIF.
??????IF NOT M_TAB-BSTMG IS INITIAL.
????????KUM_WEMNG = KUM_WEMNG + M_TAB-BSTMG.
??????ELSE.
????????IF M_TAB-ERFME EQ POS_TAB-AMEIN.
??????????KUM_WEWRT = KUM_WEWRT + M_TAB-DMBTR.
????????ELSE.
??????????IF M_TAB-MEINS EQ POS_TAB-AMEIN.
????????????KUM_WEMNG = KUM_WEMNG + M_TAB-MENGE.
??????????ELSE.
????????????WRITE: 'ERROR - Order:', POS_TAB-AUFNR.
????????????CLEAR U_FLAG.
????????????EXIT.
??????????ENDIF.
????????ENDIF.
??????ENDIF.
????ELSE.
*..outward movement
??????IF NOT M_TAB-DMBTR IS INITIAL.
????????IF M_TAB-DMBTR NE M_TAB-BUALT AND
???????????NOT M_TAB-BUALT IS INITIAL.
??????????KUM_WEWRT = KUM_WEWRT - M_TAB-BUALT.
????????ELSE.
??????????KUM_WEWRT = KUM_WEWRT - M_TAB-DMBTR.
????????ENDIF.
??????ENDIF.
??????IF NOT M_TAB-BSTMG IS INITIAL.
????????KUM_WEMNG = KUM_WEMNG - M_TAB-BSTMG.
??????ELSE.
????????IF M_TAB-ERFME EQ POS_TAB-AMEIN.
??????????KUM_WEMNG = KUM_WEMNG - M_TAB-ERFMG.
????????ELSE.
??????????IF M_TAB-MEINS EQ POS_TAB-AMEIN.
????????????KUM_WEMNG = KUM_WEMNG - M_TAB-MENGE.
??????????ELSE.
????????????WRITE: 'ERROR - Order:', POS_TAB-AUFNR.
????????????CLEAR U_FLAG.
????????????EXIT.
??????????ENDIF.
????????ENDIF.
??????ENDIF.
????ENDIF.
????U_FLAG = 'X'.
??ENDLOOP.
*..update necessary ?
??IF NOT U_FLAG IS INITIAL AND ( NOT KUM_WEMNG IS INITIAL
???????????????????????????AND KUM_WEMNG NE POS_TAB-WEMNG )
???????????????????????????OR??( NOT KUM_WEWRT IS INITIAL
???????????????????????????AND KUM_WEWRT NE POS_TAB-WEWRT ).
????SELECT SINGLE * FROM MKPF WHERE MBLNR EQ M_TAB-MBLNR
???????????????????????????????AND MJAHR??EQ M_TAB-MJAHR.
????IF SY-SUBRC IS INITIAL.
??????MOVE MKPF-BUDAT TO POS_TAB-LTRMI.
????ENDIF.
????IF KUM_WEMNG = POS_TAB-WEMNG??OR
???????KUM_WEWRT = POS_TAB-WEWRT.
??????WRITE: / 'No update for the following order - check the order !'.
????ELSE.
??????MOVE-CORRESPONDING POS_TAB TO UPOS_TAB.
??????MOVE KUM_WEMNG TO UPOS_TAB-WEMNG.
??????MOVE KUM_WEWRT TO UPOS_TAB-WEWRT.
??????APPEND UPOS_TAB.
????ENDIF.
????WRITE: / 'Order:', POS_TAB-AUFNR, 'Material:', POS_TAB-MATNR,
??????????'Delivered Quantity:', POS_TAB-WEMNG, POS_TAB-AMEIN,
??????????'Value:', POS_TAB-WEWRT.
????WRITE: / 'Document???Item???Move-type Stock-Quantity??Unit',
?????????????????????????'Entry-Quantity???Unit???????Value'.
????LOOP AT M_TAB.
??????WRITE: / M_TAB-MBLNR, M_TAB-ZEILE, 21 M_TAB-BWART, 27 M_TAB-MENGE,
?????????????????M_TAB-MEINS, M_TAB-BSTMG, M_TAB-BSTME, 71 M_TAB-DMBTR,
?????????????????M_TAB-WAERS.
????ENDLOOP.
????ULINE.
????DIF_QUAN = KUM_WEMNG - POS_TAB-WEMNG.
????DIF_WERT = KUM_WEWRT - POS_TAB-WEWRT.
????WRITE: /22 'Sum:', KUM_WEMNG, POS_TAB-AMEIN, 71 KUM_WEWRT,
????????/ 'Balance Quantity Document - Order:',
??????????'Quantity:', DIF_QUAN, 'Value:', DIF_WERT.
????SKIP 1.
??ENDIF.
ENDLOOP.
CLEAR SY-DBCNT.
*...change order items.
IF TEST_? IS INITIAL AND NOT UPOS_TAB[] IS INITIAL.
??UPDATE AFPO FROM TABLE UPOS_TAB.
ENDIF.
SKIP 1.
WRITE: / 'Changed Orders:', SY-DBCNT.
******** End of????Report????????
總結(jié)
以上是生活随笔為你收集整理的生产订单收货数量与物料凭证计算总数量不一致的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: surcharge
- 下一篇: 成功输出消息后的采购订单不能取消审核