Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

BAPI_SALESORDER_CHANGE - Issue

Former Member
0 Likes
520

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

1 REPLY 1
Read only

Former Member
0 Likes
416

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