05-21-2010 4:04 AM
Hi,
I want to delete the condtion line of sales order header using BAPI "BAPI_SALESORDER_CHANGE",
it is work well in item level condition type, but it is not work for header condition type. show error message "missing item number" since of pass item number "000000" for header condition line.
Below is reference source code, thanks in advance.
*&---------------------------------------------------------------------*
*& Report ZTEST_BAPI_SO_DELETECONDLINE
*&
*&---------------------------------------------------------------------*
*& Sample program to call BAPI_SALESODRER_CHANGE to
*& delete condition line of so line item
*&---------------------------------------------------------------------*
REPORT ZTEST_BAPI_SO_DELETECONDLINE.
***--- Structures for create BAPI
DATA: SALESDOCUMENT LIKE BAPIVBELN-VBELN.
DATA: ORDER_HEADER_INX LIKE BAPISDH1X,
BEHAVE_WHEN_ERROR LIKE BAPIFLAG-BAPIFLAG,
SIMULATION LIKE BAPIFLAG-BAPIFLAG.
DATA: BEGIN OF ORDER_ITEM_IN OCCURS 2.
INCLUDE STRUCTURE BAPISDITM.
DATA: END OF ORDER_ITEM_IN.
DATA: BEGIN OF ORDER_ITEM_INX OCCURS 2.
INCLUDE STRUCTURE BAPISDITMX.
DATA: END OF ORDER_ITEM_INX.
DATA: BEGIN OF SCHEDULE_LINES OCCURS 2.
INCLUDE STRUCTURE BAPISCHDL.
DATA: END OF SCHEDULE_LINES.
DATA: BEGIN OF SCHEDULE_LINESX OCCURS 2.
INCLUDE STRUCTURE BAPISCHDLX.
DATA: END OF SCHEDULE_LINESX.
DATA: BEGIN OF ORDER_CFGS_REF OCCURS 2.
INCLUDE STRUCTURE BAPICUCFG.
DATA: END OF ORDER_CFGS_REF.
DATA: BEGIN OF ORDER_CFGS_INST OCCURS 2.
INCLUDE STRUCTURE BAPICUINS.
DATA: END OF ORDER_CFGS_INST.
DATA: BEGIN OF ORDER_CFGS_VALUE OCCURS 2.
INCLUDE STRUCTURE BAPICUVAL.
DATA: END OF ORDER_CFGS_VALUE.
DATA: BEGIN OF CONDITIONS_IN OCCURS 2.
INCLUDE STRUCTURE BAPICOND.
DATA: END OF CONDITIONS_IN.
DATA: BEGIN OF CONDITIONS_INX OCCURS 2.
INCLUDE STRUCTURE BAPICONDX.
DATA: END OF CONDITIONS_INX.
DATA: BEGIN OF EXTENSIONIN OCCURS 2.
INCLUDE STRUCTURE BAPIPAREX.
DATA: END OF EXTENSIONIN.
DATA: BEGIN OF RETURN OCCURS 2.
INCLUDE STRUCTURE BAPIRET2.
DATA: END OF RETURN.
DATA: TMP_POSNR LIKE VBAP-POSNR,
L_KNUMV LIKE VBAK-KNUMV,
L_KSCHL LIKE KONV-KSCHL,
L_STUNR LIKE KONV-STUNR,
L_ZAEHK LIKE KONV-ZAEHK.
***--- Selection
PARAMETERS: P_VBELN LIKE VBAK-VBELN OBLIGATORY MEMORY ID AUN DEFAULT '7000510', "'0001007443', " SO
P_POSNR LIKE VBAP-POSNR OBLIGATORY DEFAULT '000000' , " so item
P_CONDN LIKE KONV-KSCHL DEFAULT 'ZOSP', " condition type
P_CONDI LIKE KONV-ZAEHK DEFAULT '01', " Condition item number
P_TEST AS CHECKBOX DEFAULT 'X'. " test mode
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = P_VBELN
IMPORTING
OUTPUT = P_VBELN.
CLEAR: L_KNUMV.
SELECT SINGLE KNUMV INTO L_KNUMV
FROM VBAK
WHERE VBELN = P_VBELN.
IF SY-SUBRC = 0.
CLEAR: L_KSCHL,L_ZAEHK,L_STUNR.
SELECT SINGLE KSCHL ZAEHK STUNR INTO (L_KSCHL, L_ZAEHK, L_STUNR)
FROM KONV
WHERE KNUMV = L_KNUMV
AND KPOSN = P_POSNR
AND ZAEHK = P_CONDI
AND KSCHL = P_CONDN.
IF SY-SUBRC <> 0.
WRITE:/ 'Condition type or condition item is not exist.'.
EXIT.
ENDIF.
ELSE.
WRITE:/ 'Sales order number is not exist'.
EXIT.
ENDIF.
IF L_ZAEHK IS INITIAL.
WRITE:/ 'Condition type or condition item is not exist.'.
EXIT.
ENDIF.
SALESDOCUMENT = P_VBELN. " Sales order number
ORDER_HEADER_INX-UPDATEFLAG = 'U'. "U = change sales order
***Item Data
ORDER_ITEM_IN-ITM_NUMBER = P_POSNR.
APPEND ORDER_ITEM_IN.
ORDER_ITEM_INX-UPDATEFLAG = 'U'. "I = add, U= update, D=delete
ORDER_ITEM_INX-ITM_NUMBER = P_POSNR.
APPEND ORDER_ITEM_INX.
***--- Begin delete a condition line
***--- Make sure to use update flag 'D'. Here I = add, U= update, D=delete
CLEAR: CONDITIONS_IN,CONDITIONS_INX.
REFRESH: CONDITIONS_IN,CONDITIONS_INX.
CONDITIONS_IN-ITM_NUMBER = P_POSNR.
CONDITIONS_IN-COND_ST_NO = L_STUNR.
CONDITIONS_IN-COND_COUNT = L_ZAEHK.
CONDITIONS_IN-COND_TYPE = L_KSCHL.
APPEND CONDITIONS_IN.
CONDITIONS_INX-UPDATEFLAG = 'D'.
CONDITIONS_INX-ITM_NUMBER = P_POSNR.
CONDITIONS_INX-COND_ST_NO = L_STUNR.
CONDITIONS_INX-COND_COUNT = L_ZAEHK.
CONDITIONS_INX-COND_TYPE = L_KSCHL.
APPEND CONDITIONS_INX.
***--- End delete a condition line
BEHAVE_WHEN_ERROR = 'P'.
SIMULATION = P_TEST. " Test mode or not
"=== call BAPI
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
SALESDOCUMENT = SALESDOCUMENT
ORDER_HEADER_INX = ORDER_HEADER_INX
LOGIC_SWITCH = ' U'
TABLES
RETURN = RETURN
ORDER_ITEM_IN = ORDER_ITEM_IN
ORDER_ITEM_INX = ORDER_ITEM_INX
CONDITIONS_IN = CONDITIONS_IN
CONDITIONS_INX = CONDITIONS_INX .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
WRITE: / 'Return code =', SY-SUBRC.
SKIP 1.
LOOP AT RETURN.
WRITE: / RETURN-MESSAGE.
ENDLOOP.
Edited by: hank jiang on May 21, 2010 5:07 AM
Edited by: hank jiang on May 21, 2010 5:25 AM
Edited by: hank jiang on May 21, 2010 5:27 AM
05-21-2010 4:40 AM
DATA: SALESDOCUMENT LIKE BAPIVBELN-VBELN.
DATA: ORDER_HEADER_INX LIKE BAPISDH1X,
BEHAVE_WHEN_ERROR LIKE BAPIFLAG-BAPIFLAG,
SIMULATION LIKE BAPIFLAG-BAPIFLAG.
DATA: BEGIN OF ORDER_ITEM_IN OCCURS 2.
INCLUDE STRUCTURE BAPISDITM.
DATA: END OF ORDER_ITEM_IN.
DATA: BEGIN OF ORDER_ITEM_INX OCCURS 2.
INCLUDE STRUCTURE BAPISDITMX.
DATA: END OF ORDER_ITEM_INX.
DATA: BEGIN OF SCHEDULE_LINES OCCURS 2.
INCLUDE STRUCTURE BAPISCHDL.
DATA: END OF SCHEDULE_LINES.
DATA: BEGIN OF SCHEDULE_LINESX OCCURS 2.
INCLUDE STRUCTURE BAPISCHDLX.
DATA: END OF SCHEDULE_LINESX.
DATA: BEGIN OF ORDER_CFGS_REF OCCURS 2.
INCLUDE STRUCTURE BAPICUCFG.
DATA: END OF ORDER_CFGS_REF.
DATA: BEGIN OF ORDER_CFGS_INST OCCURS 2.
INCLUDE STRUCTURE BAPICUINS.
DATA: END OF ORDER_CFGS_INST.
DATA: BEGIN OF ORDER_CFGS_VALUE OCCURS 2.
INCLUDE STRUCTURE BAPICUVAL.
DATA: END OF ORDER_CFGS_VALUE.
DATA: BEGIN OF CONDITIONS_IN OCCURS 2.
INCLUDE STRUCTURE BAPICOND.
DATA: END OF CONDITIONS_IN.
DATA: BEGIN OF CONDITIONS_INX OCCURS 2.
INCLUDE STRUCTURE BAPICONDX.
DATA: END OF CONDITIONS_INX.
DATA: BEGIN OF EXTENSIONIN OCCURS 2.
INCLUDE STRUCTURE BAPIPAREX.
DATA: END OF EXTENSIONIN.
05-21-2010 4:42 AM
DATA: BEGIN OF RETURN OCCURS 2.
INCLUDE STRUCTURE BAPIRET2.
DATA: END OF RETURN.
DATA: TMP_POSNR LIKE VBAP-POSNR,
L_KNUMV LIKE VBAK-KNUMV,
L_KSCHL LIKE KONV-KSCHL,
L_STUNR LIKE KONV-STUNR,
L_ZAEHK LIKE KONV-ZAEHK.
PARAMETERS: P_VBELN LIKE VBAK-VBELN OBLIGATORY MEMORY ID AUN DEFAULT '7000510', "'0001007443', " SO
P_POSNR LIKE VBAP-POSNR OBLIGATORY DEFAULT '000000' , " so item
P_CONDN LIKE KONV-KSCHL DEFAULT 'ZOSP', " condition type
P_CONDI LIKE KONV-ZAEHK DEFAULT '01', " Condition item number
P_TEST AS CHECKBOX DEFAULT 'X'. " test mode
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = P_VBELN
IMPORTING
OUTPUT = P_VBELN.
CLEAR: L_KNUMV.
SELECT SINGLE KNUMV INTO L_KNUMV
FROM VBAK
WHERE VBELN = P_VBELN.
IF SY-SUBRC = 0.
CLEAR: L_KSCHL,L_ZAEHK,L_STUNR.
SELECT SINGLE KSCHL ZAEHK STUNR INTO (L_KSCHL, L_ZAEHK, L_STUNR)
FROM KONV
WHERE KNUMV = L_KNUMV
AND KPOSN = P_POSNR
AND ZAEHK = P_CONDI
AND KSCHL = P_CONDN.
IF SY-SUBRC <> 0.
WRITE:/ 'Condition type or condition item is not exist.'.
EXIT.
ENDIF.
ELSE.
WRITE:/ 'Sales order number is not exist'.
EXIT.
ENDIF.
IF L_ZAEHK IS INITIAL.
WRITE:/ 'Condition type or condition item is not exist.'.
EXIT.
ENDIF.
05-21-2010 4:42 AM
SALESDOCUMENT = P_VBELN. "Sales order number
ORDER_HEADER_INX-UPDATEFLAG = 'U'. "U = change sales order
ORDER_ITEM_IN-ITM_NUMBER = P_POSNR.
APPEND ORDER_ITEM_IN.
ORDER_ITEM_INX-UPDATEFLAG = 'U'. "I = add, U= update, D=delete
ORDER_ITEM_INX-ITM_NUMBER = P_POSNR.
APPEND ORDER_ITEM_INX.
"Begin delete a condition line
"Make sure to use update flag 'D'. Here I = add, U= update, D=delete
CLEAR: CONDITIONS_IN,CONDITIONS_INX.
REFRESH: CONDITIONS_IN,CONDITIONS_INX.
CONDITIONS_IN-ITM_NUMBER = P_POSNR.
CONDITIONS_IN-COND_ST_NO = L_STUNR.
CONDITIONS_IN-COND_COUNT = L_ZAEHK.
CONDITIONS_IN-COND_TYPE = L_KSCHL.
APPEND CONDITIONS_IN.
CONDITIONS_INX-UPDATEFLAG = 'D'.
CONDITIONS_INX-ITM_NUMBER = P_POSNR.
CONDITIONS_INX-COND_ST_NO = L_STUNR.
CONDITIONS_INX-COND_COUNT = L_ZAEHK.
CONDITIONS_INX-COND_TYPE = L_KSCHL.
APPEND CONDITIONS_INX.
"End delete a condition line
BEHAVE_WHEN_ERROR = 'P'.
SIMULATION = P_TEST. " Test mode or not
"=== call BAPI
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
SALESDOCUMENT = SALESDOCUMENT
ORDER_HEADER_INX = ORDER_HEADER_INX
LOGIC_SWITCH = ' U'
TABLES
RETURN = RETURN
ORDER_ITEM_IN = ORDER_ITEM_IN
ORDER_ITEM_INX = ORDER_ITEM_INX
CONDITIONS_IN = CONDITIONS_IN
CONDITIONS_INX = CONDITIONS_INX .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
WRITE: / 'Return code =', SY-SUBRC.
SKIP 1.
LOOP AT RETURN.
WRITE: / RETURN-MESSAGE.
ENDLOOP.
05-21-2010 4:45 AM
Hi,
I want to delete the condtion line of sales order header using BAPI "BAPI_SALESORDER_CHANGE",
it is work well in item level condition type, but it is not work for header condition type.
show error message "missing item number" since of pass item number "000000" for header condition line.
Below is reference source code, thanks in advance.
11-16-2011 1:50 PM
Hi Hank Jiang,
Can you tell me how you deleted header condtion line of sales order? I have similar thing to do?
Thanks
Himayat.