Application Development 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: 

How to delete header condtion line of sales order by BAPI

Former Member
0 Kudos

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

5 REPLIES 5

Former Member
0 Kudos
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.

0 Kudos
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.

0 Kudos
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.

Former Member
0 Kudos

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.

0 Kudos

Hi Hank Jiang,

Can you tell me how you deleted header condtion line of sales order? I have similar thing to do?

Thanks

Himayat.