DATA: C_FLAG(1) TYPE C.
DATA: G_POHEADER LIKE BAPIMEPOHEADER,
G_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
G_POITEM LIKE BAPIMEPOITEM OCCURS 0 WITH HEADER LINE,
G_POCOMPONENTS LIKE BAPIMEPOCOMPONENT OCCURS 0 WITH HEADER LINE,
G_POCOMPONENTSX LIKE BAPIMEPOCOMPONENTX OCCURS 0 WITH HEADER LINE.
"查询PO及组件
CALL FUNCTION 'BAPI_PO_GETDETAIL1'
EXPORTING
PURCHASEORDER = OEBELN
IMPORTING
POHEADER = G_POHEADER
TABLES
RETURN = G_RETURN
POITEM = G_POITEM
POCOMPONENTS = G_POCOMPONENTS.
READ TABLE G_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC EQ 0.
LOOP AT G_RETURN WHERE TYPE = 'E'.
MESSAGE ID G_RETURN-ID TYPE G_RETURN-TYPE
NUMBER G_RETURN-NUMBER WITH G_RETURN-MESSAGE_V1
G_RETURN-MESSAGE_V2
G_RETURN-MESSAGE_V3
G_RETURN-MESSAGE_V4
INTO L_TEMP.
CONCATENATE L_MSG L_TEMP INTO L_MSG SEPARATED BY ';'.
ENDLOOP.
CONCATENATE '采购订单' OEBELN '读取失败;'
L_MSG INTO OMESSG.
MOVE 'X' TO C_FLAG.
ENDIF.
CHECK C_FLAG IS INITIAL.
DATA: CT_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
CT_POCOMPONENTS LIKE BAPIMEPOCOMPONENT OCCURS 0 WITH HEADER LINE,
CT_POCOMPONENTSX LIKE BAPIMEPOCOMPONENTX OCCURS 0 WITH HEADER LINE,
CT_POSCHEDULE LIKE BAPIMEPOSCHEDULE OCCURS 0 WITH HEADER LINE,
CT_POSCHEDULEX LIKE BAPIMEPOSCHEDULX OCCURS 0 WITH HEADER LINE,
CHG_FLAG(1) TYPE C.
LOOP AT G_POITEM.
READ TABLE G_POCOMPONENTS WITH KEY PO_ITEM = G_POITEM-PO_ITEM.
"修改组件数量为行项目数量,修改组件数量
CHECK G_POCOMPONENTS-ENTRY_QUANTITY NE G_POITEM-QUANTITY.
G_POCOMPONENTS-ENTRY_QUANTITY = G_POITEM-QUANTITY.
G_POCOMPONENTS-CHANGE_ID = 'U'.
APPEND G_POCOMPONENTS TO CT_POCOMPONENTS.
G_POCOMPONENTSX-PO_ITEM = G_POCOMPONENTS-PO_ITEM.
G_POCOMPONENTSX-SCHED_LINE = G_POCOMPONENTS-SCHED_LINE.
G_POCOMPONENTSX-ITEM_NO = G_POCOMPONENTS-ITEM_NO.
G_POCOMPONENTSX-ENTRY_QUANTITY = 'X'.
G_POCOMPONENTSX-CHANGE_ID = 'X'.
APPEND G_POCOMPONENTSX TO CT_POCOMPONENTSX.
MOVE: 'X' TO CHG_FLAG.
ENDLOOP.
CHECK CHG_FLAG IS NOT INITIAL.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
PURCHASEORDER = OEBELN
TABLES
RETURN = CT_RETURN
POCOMPONENTS = CT_POCOMPONENTS
POCOMPONENTSX = CT_POCOMPONENTSX.
"COMMIT WORK
READ TABLE CT_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC NE 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT CT_RETURN WHERE TYPE = 'E'.
MESSAGE ID CT_RETURN-ID TYPE CT_RETURN-TYPE
NUMBER CT_RETURN-NUMBER WITH CT_RETURN-MESSAGE_V1
CT_RETURN-MESSAGE_V2
CT_RETURN-MESSAGE_V3
CT_RETURN-MESSAGE_V4
INTO L_TEMP.
CONCATENATE L_MSG L_TEMP INTO L_MSG SEPARATED BY ';'.
ENDLOOP.
CONCATENATE '采购订单' OEBELN '组件数量更新失败:'
INTO OMESSG.
ENDIF.
SAP BAPI_PO_CHANGE修改PO组件(数量)
于 2020-09-24 20:59:41 首次发布