2007 Feb 11 1:18 AM
Hello All,
I have written the following code in my program using BAPI_SALESORDER_CHANGE.
&----
*& Form UPDATE_SD_BAPI
&----
Updates Sales Document by BAPI
----
-->IT_T_VBAP Internal table for Sales Doc: Item Data
-->IT_T_VBEP Internal table for Schedule Line Data
----
FORM UPDATE_SD_BAPI USING IT_T_VBAP TYPE TP_T_VBAP
IT_T_VBEP TYPE TP_T_VBEP.
DATA: LT_RETURN_TAB TYPE STANDARD TABLE OF BAPIRET2,
LT_EXT_STRUCTURE TYPE STANDARD TABLE OF BAPIPAREX,
LT_ORDER_ITEM TYPE STANDARD TABLE OF BAPISDITM,
LT_ORDER_ITEMX TYPE STANDARD TABLE OF BAPISDITMX,
LT_SCHEDULE_LINES TYPE STANDARD TABLE OF BAPISCHDL,
LT_SCHEDULE_LINESX TYPE STANDARD TABLE OF BAPISCHDLX,
LW_SCHEDULE_LINES TYPE BAPISCHDL,
LW_SCHEDULE_LINESX TYPE BAPISCHDLX,
LW_ORDER_ITEM TYPE BAPISDITM,
LW_ORDER_ITEMX TYPE BAPISDITMX,
LW_RETURN_TAB TYPE BAPIRET2,
LW_ORDER_HEADERX TYPE BAPISDH1X,
LW_EXT_STRUCTURE TYPE BAPIPAREX.
Header data
LW_ORDER_HEADERX-UPDATEFLAG = C_U.
CLEAR: W_VBEP,
W_VBAP.
LOOP AT IT_T_VBEP INTO W_VBEP.
AT NEW POSNR.
READ TABLE IT_T_VBAP INTO W_VBAP WITH KEY VBELN = W_VBEP-VBELN
POSNR = W_VBEP-POSNR
BINARY SEARCH.
IF SY-SUBRC IS INITIAL.
Populate the Item structure
LW_ORDER_ITEM-ITM_NUMBER = W_VBAP-POSNR.
APPEND LW_ORDER_ITEM TO LT_ORDER_ITEM.
LW_ORDER_ITEMX-UPDATEFLAG = C_U.
LW_ORDER_ITEMX-ITM_NUMBER = W_VBAP-POSNR.
APPEND LW_ORDER_ITEMX TO LT_ORDER_ITEMX.
Populate the Extension structure WITH Order commited flag
LW_EXT_STRUCTURE-STRUCTURE = C_BAPE_VBAP.
LW_EXT_STRUCTURE-VALUEPART1+0(10) = W_VBAP-VBELN.
LW_EXT_STRUCTURE-VALUEPART1+10(6) = W_VBAP-POSNR.
LW_EXT_STRUCTURE-VALUEPART1+195(1) = W_VBAP-ZZ_ORDCOFL.
APPEND LW_EXT_STRUCTURE TO LT_EXT_STRUCTURE.
CLEAR: LW_EXT_STRUCTURE.
LW_EXT_STRUCTURE-STRUCTURE = C_BAPE_VBAPX.
LW_EXT_STRUCTURE-VALUEPART1+0(10) = W_VBAP-VBELN.
LW_EXT_STRUCTURE-VALUEPART1+10(6) = W_VBAP-POSNR.
LW_EXT_STRUCTURE-VALUEPART1+36(1) = C_X.
APPEND LW_EXT_STRUCTURE TO LT_EXT_STRUCTURE.
CLEAR: LW_EXT_STRUCTURE.
CLEAR : LW_ORDER_ITEM,
LW_ORDER_ITEMX.
ENDIF.
ENDAT.
Populate the Schedule line structure
LW_SCHEDULE_LINES-ITM_NUMBER = W_VBEP-POSNR.
LW_SCHEDULE_LINES-SCHED_LINE = W_VBEP-ETENR.
APPEND LW_SCHEDULE_LINES TO LT_SCHEDULE_LINES.
CLEAR LW_SCHEDULE_LINES.
LW_SCHEDULE_LINESX-ITM_NUMBER = W_VBEP-POSNR.
LW_SCHEDULE_LINESX-SCHED_LINE = W_VBEP-ETENR.
LW_SCHEDULE_LINESX-UPDATEFLAG = C_U.
APPEND LW_SCHEDULE_LINESX TO LT_SCHEDULE_LINESX.
CLEAR LW_SCHEDULE_LINESX.
Populate the Extension structure WITH Order Process, Order Status and
Order Process 2
LW_EXT_STRUCTURE-STRUCTURE = C_BAPE_VBEP.
LW_EXT_STRUCTURE-VALUEPART1+0(10) = W_VBEP-VBELN.
LW_EXT_STRUCTURE-VALUEPART1+10(6) = W_VBEP-POSNR.
LW_EXT_STRUCTURE-VALUEPART1+16(4) = W_VBEP-ETENR.
LW_EXT_STRUCTURE-VALUEPART1+25(1) = W_VBEP-ZZ_ORDPROC.
LW_EXT_STRUCTURE-VALUEPART1+68(2) = W_VBEP-ZZ_ORD_STATUS.
LW_EXT_STRUCTURE-VALUEPART1+86(1) = W_VBEP-ZZ_ORD_PROCESS2.
APPEND LW_EXT_STRUCTURE TO LT_EXT_STRUCTURE.
CLEAR: LW_EXT_STRUCTURE.
LW_EXT_STRUCTURE-STRUCTURE = C_BAPE_VBEPX.
LW_EXT_STRUCTURE-VALUEPART1+0(10) = W_VBEP-VBELN.
LW_EXT_STRUCTURE-VALUEPART1+10(6) = W_VBEP-POSNR.
LW_EXT_STRUCTURE-VALUEPART1+16(4) = W_VBEP-ETENR.
LW_EXT_STRUCTURE-VALUEPART1+21(1) = C_X.
LW_EXT_STRUCTURE-VALUEPART1+30(1) = C_X.
LW_EXT_STRUCTURE-VALUEPART1+33(1) = C_X.
APPEND LW_EXT_STRUCTURE TO LT_EXT_STRUCTURE.
CLEAR: LW_EXT_STRUCTURE.
AT END OF VBELN.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
SALESDOCUMENT = W_VBEP-VBELN
ORDER_HEADER_INX = LW_ORDER_HEADERX
TABLES
RETURN = LT_RETURN_TAB
ORDER_ITEM_IN = LT_ORDER_ITEM
ORDER_ITEM_INX = LT_ORDER_ITEMX
SCHEDULE_LINES = LT_SCHEDULE_LINES
SCHEDULE_LINESX = LT_SCHEDULE_LINESX
EXTENSIONIN = LT_EXT_STRUCTURE.
READ TO CHECK THE ERROR AND ABORT MESSAGES DURING BAPI CALL
READ TABLE LT_RETURN_TAB INTO LW_RETURN_TAB
WITH KEY TYPE = C_MSGTYP_A
BINARY SEARCH.
IF SY-SUBRC IS INITIAL AND NOT LW_RETURN_TAB IS INITIAL.
Fail
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
PERFORM OUTPUT_ERR_LOG.
MESSAGE S151(ZMSGCSUS0001).
V_SUBRC = 4.
ELSE.
Success
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
READ TABLE LT_RETURN_TAB INTO LW_RETURN_TAB
WITH KEY TYPE = C_MSGTYP_E
BINARY SEARCH.
IF SY-SUBRC IS INITIAL.
PERFORM OUTPUT_ERR_LOG.
MESSAGE S151(ZMSGCSUS0001).
V_SUBRC = 4.
ELSE.
V_SUBRC = 0.
ENDIF.
ENDIF.
CLEAR: LT_EXT_STRUCTURE,
LT_SCHEDULE_LINESX,
LT_SCHEDULE_LINES,
LT_ORDER_ITEMX,
LT_RETURN_TAB.
ENDAT.
CLEAR: W_VBAP,
W_VBEP.
ENDLOOP.
ENDFORM. " UPDATE_SD_BAPI
The above code should update the custom fields in VBAP and VBEP tables, but it is not updating them. I debugged the program and found out that there is another function module being called SD_SALES_SCHEDULE_LINE_READ, this is not updating it to the sales order. Please any body tell me how to solve this issue.
Thank You,
Suresh
Hello All,
I have written the following code in my program using BAPI_SALESORDER_CHANGE.
&----
*& Form UPDATE_SD_BAPI
&----
Updates Sales Document by BAPI
----
-->IT_T_VBAP Internal table for Sales Doc: Item Data
-->IT_T_VBEP Internal table for Schedule Line Data
----
FORM UPDATE_SD_BAPI USING IT_T_VBAP TYPE TP_T_VBAP
IT_T_VBEP TYPE TP_T_VBEP.
DATA: LT_RETURN_TAB TYPE STANDARD TABLE OF BAPIRET2,
LT_EXT_STRUCTURE TYPE STANDARD TABLE OF BAPIPAREX,
LT_ORDER_ITEM TYPE STANDARD TABLE OF BAPISDITM,
LT_ORDER_ITEMX TYPE STANDARD TABLE OF BAPISDITMX,
LT_SCHEDULE_LINES TYPE STANDARD TABLE OF BAPISCHDL,
LT_SCHEDULE_LINESX TYPE STANDARD TABLE OF BAPISCHDLX,
LW_SCHEDULE_LINES TYPE BAPISCHDL,
LW_SCHEDULE_LINESX TYPE BAPISCHDLX,
LW_ORDER_ITEM TYPE BAPISDITM,
LW_ORDER_ITEMX TYPE BAPISDITMX,
LW_RETURN_TAB TYPE BAPIRET2,
LW_ORDER_HEADERX TYPE BAPISDH1X,
LW_EXT_STRUCTURE TYPE BAPIPAREX.
Header data
LW_ORDER_HEADERX-UPDATEFLAG = C_U.
CLEAR: W_VBEP,
W_VBAP.
LOOP AT IT_T_VBEP INTO W_VBEP.
AT NEW POSNR.
READ TABLE IT_T_VBAP INTO W_VBAP WITH KEY VBELN = W_VBEP-VBELN
POSNR = W_VBEP-POSNR
BINARY SEARCH.
IF SY-SUBRC IS INITIAL.
Populate the Item structure
LW_ORDER_ITEM-ITM_NUMBER = W_VBAP-POSNR.
APPEND LW_ORDER_ITEM TO LT_ORDER_ITEM.
LW_ORDER_ITEMX-UPDATEFLAG = C_U.
LW_ORDER_ITEMX-ITM_NUMBER = W_VBAP-POSNR.
APPEND LW_ORDER_ITEMX TO LT_ORDER_ITEMX.
Populate the Extension structure WITH Order commited flag
LW_EXT_STRUCTURE-STRUCTURE = C_BAPE_VBAP.
LW_EXT_STRUCTURE-VALUEPART1+0(10) = W_VBAP-VBELN.
LW_EXT_STRUCTURE-VALUEPART1+10(6) = W_VBAP-POSNR.
LW_EXT_STRUCTURE-VALUEPART1+195(1) = W_VBAP-ZZ_ORDCOFL.
APPEND LW_EXT_STRUCTURE TO LT_EXT_STRUCTURE.
CLEAR: LW_EXT_STRUCTURE.
LW_EXT_STRUCTURE-STRUCTURE = C_BAPE_VBAPX.
LW_EXT_STRUCTURE-VALUEPART1+0(10) = W_VBAP-VBELN.
LW_EXT_STRUCTURE-VALUEPART1+10(6) = W_VBAP-POSNR.
LW_EXT_STRUCTURE-VALUEPART1+36(1) = C_X.
APPEND LW_EXT_STRUCTURE TO LT_EXT_STRUCTURE.
CLEAR: LW_EXT_STRUCTURE.
CLEAR : LW_ORDER_ITEM,
LW_ORDER_ITEMX.
ENDIF.
ENDAT.
Populate the Schedule line structure
LW_SCHEDULE_LINES-ITM_NUMBER = W_VBEP-POSNR.
LW_SCHEDULE_LINES-SCHED_LINE = W_VBEP-ETENR.
APPEND LW_SCHEDULE_LINES TO LT_SCHEDULE_LINES.
CLEAR LW_SCHEDULE_LINES.
LW_SCHEDULE_LINESX-ITM_NUMBER = W_VBEP-POSNR.
LW_SCHEDULE_LINESX-SCHED_LINE = W_VBEP-ETENR.
LW_SCHEDULE_LINESX-UPDATEFLAG = C_U.
APPEND LW_SCHEDULE_LINESX TO LT_SCHEDULE_LINESX.
CLEAR LW_SCHEDULE_LINESX.
Populate the Extension structure WITH Order Process, Order Status and
Order Process 2
LW_EXT_STRUCTURE-STRUCTURE = C_BAPE_VBEP.
LW_EXT_STRUCTURE-VALUEPART1+0(10) = W_VBEP-VBELN.
LW_EXT_STRUCTURE-VALUEPART1+10(6) = W_VBEP-POSNR.
LW_EXT_STRUCTURE-VALUEPART1+16(4) = W_VBEP-ETENR.
LW_EXT_STRUCTURE-VALUEPART1+25(1) = W_VBEP-ZZ_ORDPROC.
LW_EXT_STRUCTURE-VALUEPART1+68(2) = W_VBEP-ZZ_ORD_STATUS.
LW_EXT_STRUCTURE-VALUEPART1+86(1) = W_VBEP-ZZ_ORD_PROCESS2.
APPEND LW_EXT_STRUCTURE TO LT_EXT_STRUCTURE.
CLEAR: LW_EXT_STRUCTURE.
LW_EXT_STRUCTURE-STRUCTURE = C_BAPE_VBEPX.
LW_EXT_STRUCTURE-VALUEPART1+0(10) = W_VBEP-VBELN.
LW_EXT_STRUCTURE-VALUEPART1+10(6) = W_VBEP-POSNR.
LW_EXT_STRUCTURE-VALUEPART1+16(4) = W_VBEP-ETENR.
LW_EXT_STRUCTURE-VALUEPART1+21(1) = C_X.
LW_EXT_STRUCTURE-VALUEPART1+30(1) = C_X.
LW_EXT_STRUCTURE-VALUEPART1+33(1) = C_X.
APPEND LW_EXT_STRUCTURE TO LT_EXT_STRUCTURE.
CLEAR: LW_EXT_STRUCTURE.
AT END OF VBELN.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
SALESDOCUMENT = W_VBEP-VBELN
ORDER_HEADER_INX = LW_ORDER_HEADERX
TABLES
RETURN = LT_RETURN_TAB
ORDER_ITEM_IN = LT_ORDER_ITEM
ORDER_ITEM_INX = LT_ORDER_ITEMX
SCHEDULE_LINES = LT_SCHEDULE_LINES
SCHEDULE_LINESX = LT_SCHEDULE_LINESX
EXTENSIONIN = LT_EXT_STRUCTURE.
READ TO CHECK THE ERROR AND ABORT MESSAGES DURING BAPI CALL
READ TABLE LT_RETURN_TAB INTO LW_RETURN_TAB
WITH KEY TYPE = C_MSGTYP_A
BINARY SEARCH.
IF SY-SUBRC IS INITIAL AND NOT LW_RETURN_TAB IS INITIAL.
Fail
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
PERFORM OUTPUT_ERR_LOG.
MESSAGE S151(ZMSGCSUS0001).
V_SUBRC = 4.
ELSE.
Success
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
READ TABLE LT_RETURN_TAB INTO LW_RETURN_TAB
WITH KEY TYPE = C_MSGTYP_E
BINARY SEARCH.
IF SY-SUBRC IS INITIAL.
PERFORM OUTPUT_ERR_LOG.
MESSAGE S151(ZMSGCSUS0001).
V_SUBRC = 4.
ELSE.
V_SUBRC = 0.
ENDIF.
ENDIF.
CLEAR: LT_EXT_STRUCTURE,
LT_SCHEDULE_LINESX,
LT_SCHEDULE_LINES,
LT_ORDER_ITEMX,
LT_RETURN_TAB.
ENDAT.
CLEAR: W_VBAP,
W_VBEP.
ENDLOOP.
ENDFORM. " UPDATE_SD_BAPI
The above code should update the custom fields in VBAP and VBEP tables, but it is not updating them. I debugged the program and found out that there is another function module being called SD_SALES_SCHEDULE_LINE_READ, this is not updating it to the sales order. Please any body tell me how to solve this issue.
Thank You,
Suresh
2007 Feb 11 3:07 AM
Hi,
1)
I would suggest declaring a structure of type BAPE_VBAP & BAPE_VBEP...Then move the values instead of using offset..
Example
-
DATA: S_BAPE_VBAP TYPE BAPE_VBAP.
Populate the Extension structure WITH Order commited flag
LW_EXT_STRUCTURE-STRUCTURE = C_BAPE_VBAP.
S_BAPE_VBAP-VBELN = W_VBAP-VBELN.
S_BAPE_VBAP-POSNR = W_VBAP-POSNR.
S_BAPE_VBAP-ZZORDCOFL = W_VBAP-ZZ_ORDCOFL.
LW_EXT_STRUCTURE-VALUEPART1 = S_BAPE_VBAP.
This will make sure the BAPE_VBAP is extended with the Z fields..
2)
You are checking only for abort messages...You are not checking for error messages..
Instead of this..
READ TO CHECK THE ERROR AND ABORT MESSAGES DURING BAPI CALL
READ TABLE LT_RETURN_TAB INTO LW_RETURN_TAB
WITH KEY TYPE = C_MSGTYP_A
BINARY SEARCH.
Have this code..
LOOP AT LT_RETURN_TAB WHERE TYPE = 'E' OR TYPE = 'A'.
EXIT.
ENDLOOP.
IF SY-SUBRC = 0.
WRITE: / 'ERROR'.
ELSE.
WRITE: / 'SUCCESS'.
ENDIF.
This will make sure there are no error messages..Also check the return table for error messages in the debugging mode..
Thanks,
Naren
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |