2007 Nov 07 4:18 AM
Hi All,
I am creating sales order using BAPI BAPI_SALESDOCU_CREATEFROMDATA. Creation of sales order is fine. After create I commit and then I try to change 2 things 1.Payment Method and 2.Clear Billing Block using BAPI BAPI_SALESORDER_CHANGE.
Problem is when I do in debug mode it works fine. If I run in background or foreground without break points it gives 2 errors 1.Sales order locked by person who is running and 2. Sometime it says sales order doesnt exist even after create commit (order do exist). I am using right BAPI. Do I do refresh or clear any locks?
Thanks in advance.
Regards,
Trim
2007 Nov 07 4:23 AM
please specify same wait time.
that time do not edit sales order.
used commit work.
check table is locked or not.
release table lock.
2007 Nov 07 4:29 AM
YES I am doing commit. Please check code below - But some time it says even order not found....
CLEAR: GV_BAPI_VBELN, GV_SO_ERR.
CALL FUNCTION 'BAPI_SALESDOCU_CREATEFROMDATA'
EXPORTING
ORDER_HEADER_IN = GS_HEADER_P01
BUSINESS_OBJECT = 'BUS2094'
WITHOUT_COMMIT = ' '
CONVERT_PARVW_AUART = ' '
IMPORTING
SALESDOCUMENT = GV_BAPI_VBELN
SOLD_TO_PARTY =
SHIP_TO_PARTY =
BILLING_PARTY =
RETURN = GT_RETURN_P01
TABLES
ORDER_ITEMS_IN = GT_ITEMS_P01
ORDER_PARTNERS = GT_PARTNERS_P01
ORDER_ITEMS_OUT =
ORDER_CFGS_REF =
ORDER_CFGS_INST =
ORDER_CFGS_PART_OF =
ORDER_CFGS_VALUE =
ORDER_CFGS_BLOB =
ORDER_CCARD =
ORDER_SCHEDULE_EX =
.
IF GT_RETURN_P01-TYPE EQ 'A' OR
GT_RETURN_P01-TYPE EQ 'E'.
GV_SO_ERR = C_TRUE.
GS_OUTPUT_BAPI-LINE = GT_RETURN_P01-MESSAGE.
GS_OUTPUT_BAPI-ITEM = GT_RETURN_P01-MESSAGE_V1.
ENDIF.
PERFORM CHECK_BAPI_ERROR CHANGING GV_SO_ERR.
IF GV_SO_ERR IS INITIAL.
REFRESH: GT_RETURN.
CLEAR: GT_RETURN.
set update task local.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
IMPORTING
RETURN = GT_RETURN.
Update - Clear billing block and Payment method
Header
IF P_GS_P01-PAY_METHOD EQ 'C'.
GL_BAPISDH1-PYMT_METH = 'C'.
ELSEIF P_GS_P01-PAY_METHOD EQ 'R' OR P_GS_P01-PAY_METHOD EQ 'T'.
GL_BAPISDH1-PYMT_METH = ' '.
ENDIF.
GL_BAPISDH1-BILL_BLOCK = ' '.
header X
GL_BAPISDH1X-BILL_BLOCK = 'X'.
GL_BAPISDH1X-PYMT_METH = 'X'.
GL_BAPISDH1X-UPDATEFLAG = 'U'.
CLEAR: GT_RETURN.
REFRESH:GT_RETURN.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = GV_BAPI_VBELN
order_header_in = GL_BAPISDH1
order_header_inx = GL_BAPISDH1X
TABLES
return = GT_RETURN.
LOOP AT GT_RETURN.
IF GT_RETURN-TYPE EQ 'A' OR
GT_RETURN-TYPE EQ 'E'.
GV_SO_ERR = C_TRUE.
GS_OUTPUT_BAPI-LINE = GT_RETURN-MESSAGE.
GS_OUTPUT_BAPI-ITEM = GT_RETURN-MESSAGE_V1.
ENDIF.
ENDLOOP.
IF GV_SO_ERR IS INITIAL.
CLEAR: GT_RETURN.
REFRESH:GT_RETURN.
set update task local.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
IMPORTING
RETURN = GT_RETURN.
IF GT_RETURN-TYPE EQ 'A' OR
GT_RETURN-TYPE EQ 'E'.
GV_SO_ERR = C_TRUE.
GS_OUTPUT_BAPI-LINE = GT_RETURN-MESSAGE.
GS_OUTPUT_BAPI-ITEM = GT_RETURN-MESSAGE_V1.
ENDIF.
ENDIF.
ENDIF.
2007 Nov 08 4:07 AM