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

Error in BAPI_SALESORDER_CHANGE

Former Member
0 Likes
4,768

I need to post the changed incoterm value by using BAPI_SALESORDER_CHANGE. But everytime I used to get the error:

Field header_inx-updateflag is not an input field.

I have written the below mentioned code :

&----


*& Report ZBAPI1 *

*& *

&----


*& *

*& *

&----


REPORT ZBAPI1 .

TABLES: VBBE.

DATA: BEGIN OF ITAB OCCURS 0,

VBELN LIKE VBBE-VBELN,

POSNR LIKE VBBE-POSNR,

END OF ITAB.

DATA: WA_ITAB LIKE LINE OF ITAB.

DATA:BEGIN OF I_VBELN OCCURS 0.

INCLUDE STRUCTURE BAPIVBELN.

DATA:END OF I_VBELN.

DATA: WA_I_VBELN LIKE LINE OF I_VBELN.

DATA:BEGIN OF I_SHEADER OCCURS 0.

INCLUDE STRUCTURE BAPISDH1X.

DATA:END OF I_SHEADER.

DATA: WA_I_SHEADER LIKE LINE OF I_SHEADER.

DATA:BEGIN OF ZRETURN OCCURS 0.

INCLUDE STRUCTURE BAPIRET2.

DATA:END OF ZRETURN.

DATA: WA_ZRETURN LIKE LINE OF ZRETURN.

DATA:BEGIN OF I_SITEM OCCURS 0.

INCLUDE STRUCTURE BAPISDITM.

DATA:END OF I_SITEM.

DATA: WA_I_SITEM LIKE LINE OF I_SITEM.

DATA:BEGIN OF I_SITEMX OCCURS 0.

INCLUDE STRUCTURE BAPISDITMX.

DATA:END OF I_SITEMX.

DATA: WA_I_SITEMX LIKE LINE OF I_SITEMX.

DATA:BEGIN OF ZRETURN1 OCCURS 0.

INCLUDE STRUCTURE BAPIRET2.

DATA:END OF ZRETURN1.

DATA: WA_ZRETURN1 LIKE LINE OF ZRETURN1.

PARAMETERS: P_VBELN LIKE BAPIVBELN-VBELN,

P_INCO1 LIKE BAPISDITEM-INCOTERMS1.

SELECT VBELN

POSNR FROM VBBE INTO TABLE ITAB

WHERE VBELN = P_VBELN.

DELETE ADJACENT DUPLICATES FROM ITAB COMPARING VBELN POSNR.

CLEAR: I_SHEADER, I_VBELN, I_SITEM,I_SITEMX,

ZRETURN, ZRETURN1.

REFRESH: I_SHEADER, I_VBELN, I_SITEM,I_SITEMX,

ZRETURN, ZRETURN1.

LOOP AT ITAB INTO WA_ITAB.

WA_I_SHEADER-UPDATEFLAG = 'U'.

WA_I_SHEADER-INCOTERMS1 = 'X'.

APPEND WA_I_SHEADER TO I_SHEADER.

WA_I_VBELN-VBELN = WA_ITAB-VBELN.

APPEND WA_I_VBELN TO I_VBELN.

WA_I_SITEM-ITM_NUMBER = WA_ITAB-POSNR.

WA_I_SITEM-INCOTERMS1 = P_INCO1.

APPEND WA_I_SITEM TO I_SITEM.

WA_I_SITEMX-ITM_NUMBER = WA_ITAB-POSNR.

WA_I_SITEMX-INCOTERMS1 = 'X'.

APPEND WA_I_SITEMX TO I_SITEMX.

CLEAR: WA_ITAB, WA_I_VBELN, WA_I_SHEADER, WA_ZRETURN, WA_ZRETURN1,

WA_I_SITEM, WA_I_SITEMX.

ENDLOOP.

CALL FUNCTION 'BAPI_SALESORDER_CHANGE'

EXPORTING

SALESDOCUMENT = I_VBELN

  • ORDER_HEADER_IN =

ORDER_HEADER_INX = I_SHEADER

  • SIMULATION =

  • BEHAVE_WHEN_ERROR = ' '

  • INT_NUMBER_ASSIGNMENT = ' '

  • LOGIC_SWITCH =

TABLES

RETURN = ZRETURN

ORDER_ITEM_IN = I_SITEM

ORDER_ITEM_INX = I_SITEMX

  • PARTNERS =

  • PARTNERCHANGES =

  • PARTNERADDRESSES =

  • ORDER_CFGS_REF =

  • ORDER_CFGS_INST =

  • ORDER_CFGS_PART_OF =

  • ORDER_CFGS_VALUE =

  • ORDER_CFGS_BLOB =

  • ORDER_CFGS_VK =

  • ORDER_CFGS_REFINST =

  • SCHEDULE_LINES =

  • SCHEDULE_LINESX =

  • ORDER_TEXT =

  • ORDER_KEYS =

  • CONDITIONS_IN =

  • CONDITIONS_INX =

  • EXTENSIONIN =

.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

WAIT = ' '

IMPORTING

RETURN = ZRETURN1.

WRITE:/'SY_SUBRC: ', SY-SUBRC.

LOOP AT ZRETURN.

WRITE:/ ZRETURN-MESSAGE, ZRETURN-TYPE.

ENDLOOP.

IF SY-SUBRC EQ 0.

  • LOOP AT ZRETURN1.

WRITE:/ ZRETURN1-MESSAGE, ZRETURN1-TYPE.

  • ENDLOOP.

ENDIF.

CLEAR: I_SHEADER, I_VBELN, I_SITEM,I_SITEMX,

ZRETURN, ZRETURN1.

REFRESH: I_SHEADER, I_VBELN, I_SITEM,I_SITEMX,

ZRETURN, ZRETURN1.

Please do help me in solving the problem.

thanks & regards,

nitya

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
3,508

Here's how to do it.

s_order_item_inx-updateflag = 'U'.

s_order_item_inx-profit_ctr = 'X'. "X" against field you want to change

s_order_item_in-itm_number = g_selection-posnr. "Line Item of sales order

s_order_item_in-profit_ctr = g_selection-prctr1. "data value of changed field

  • if you are only changing the header then you don't need the line items

  • remember in the INX table you need a "U" in the update * flag and an 'X'

  • in the field(s) you want changed

  • In the IN table you need the document number / line

  • item and the data value

  • of the new field.

  • For example

CALL FUNCTION 'BAPI_SALESORDER_CHANGE'

EXPORTING

SALESDOCUMENT = g_selection-vbeln "Sales doc nr

ORDER_HEADER_IN = va_order_header_in " can be empty if not changing header data

ORDER_HEADER_INX = va_order_header_inx " update flag must be U even if no header data to be changed

TABLES

RETURN = ta_return "BAPIRET2

ORDER_ITEM_IN = ta_order_item_in " Order Items data to be changed

ORDER_ITEM_INX = ta_order_item_inx. "Order Item stuff to be changed

That's all you need

Cheers

Jimbo

I need to post the changed incoterm value by using BAPI_SALESORDER_CHANGE. But everytime I used to get the error:

Field header_inx-updateflag is not an input field.

I have written the below mentioned code :

&----


*& Report ZBAPI1 *

*& *

&----


*& *

*& *

&----


REPORT ZBAPI1 .

TABLES: VBBE.

DATA: BEGIN OF ITAB OCCURS 0,

VBELN LIKE VBBE-VBELN,

POSNR LIKE VBBE-POSNR,

END OF ITAB.

DATA: WA_ITAB LIKE LINE OF ITAB.

DATA:BEGIN OF I_VBELN OCCURS 0.

INCLUDE STRUCTURE BAPIVBELN.

DATA:END OF I_VBELN.

DATA: WA_I_VBELN LIKE LINE OF I_VBELN.

DATA:BEGIN OF I_SHEADER OCCURS 0.

INCLUDE STRUCTURE BAPISDH1X.

DATA:END OF I_SHEADER.

DATA: WA_I_SHEADER LIKE LINE OF I_SHEADER.

DATA:BEGIN OF ZRETURN OCCURS 0.

INCLUDE STRUCTURE BAPIRET2.

DATA:END OF ZRETURN.

DATA: WA_ZRETURN LIKE LINE OF ZRETURN.

DATA:BEGIN OF I_SITEM OCCURS 0.

INCLUDE STRUCTURE BAPISDITM.

DATA:END OF I_SITEM.

DATA: WA_I_SITEM LIKE LINE OF I_SITEM.

DATA:BEGIN OF I_SITEMX OCCURS 0.

INCLUDE STRUCTURE BAPISDITMX.

DATA:END OF I_SITEMX.

DATA: WA_I_SITEMX LIKE LINE OF I_SITEMX.

DATA:BEGIN OF ZRETURN1 OCCURS 0.

INCLUDE STRUCTURE BAPIRET2.

DATA:END OF ZRETURN1.

DATA: WA_ZRETURN1 LIKE LINE OF ZRETURN1.

PARAMETERS: P_VBELN LIKE BAPIVBELN-VBELN,

P_INCO1 LIKE BAPISDITEM-INCOTERMS1.

SELECT VBELN

POSNR FROM VBBE INTO TABLE ITAB

WHERE VBELN = P_VBELN.

DELETE ADJACENT DUPLICATES FROM ITAB COMPARING VBELN POSNR.

CLEAR: I_SHEADER, I_VBELN, I_SITEM,I_SITEMX,

ZRETURN, ZRETURN1.

REFRESH: I_SHEADER, I_VBELN, I_SITEM,I_SITEMX,

ZRETURN, ZRETURN1.

LOOP AT ITAB INTO WA_ITAB.

WA_I_SHEADER-UPDATEFLAG = 'U'.

WA_I_SHEADER-INCOTERMS1 = 'X'.

APPEND WA_I_SHEADER TO I_SHEADER.

WA_I_VBELN-VBELN = WA_ITAB-VBELN.

APPEND WA_I_VBELN TO I_VBELN.

WA_I_SITEM-ITM_NUMBER = WA_ITAB-POSNR.

WA_I_SITEM-INCOTERMS1 = P_INCO1.

APPEND WA_I_SITEM TO I_SITEM.

WA_I_SITEMX-ITM_NUMBER = WA_ITAB-POSNR.

WA_I_SITEMX-INCOTERMS1 = 'X'.

APPEND WA_I_SITEMX TO I_SITEMX.

CLEAR: WA_ITAB, WA_I_VBELN, WA_I_SHEADER, WA_ZRETURN, WA_ZRETURN1,

WA_I_SITEM, WA_I_SITEMX.

ENDLOOP.

CALL FUNCTION 'BAPI_SALESORDER_CHANGE'

EXPORTING

SALESDOCUMENT = I_VBELN

  • ORDER_HEADER_IN =

ORDER_HEADER_INX = I_SHEADER

  • SIMULATION =

  • BEHAVE_WHEN_ERROR = ' '

  • INT_NUMBER_ASSIGNMENT = ' '

  • LOGIC_SWITCH =

TABLES

RETURN = ZRETURN

ORDER_ITEM_IN = I_SITEM

ORDER_ITEM_INX = I_SITEMX

  • PARTNERS =

  • PARTNERCHANGES =

  • PARTNERADDRESSES =

  • ORDER_CFGS_REF =

  • ORDER_CFGS_INST =

  • ORDER_CFGS_PART_OF =

  • ORDER_CFGS_VALUE =

  • ORDER_CFGS_BLOB =

  • ORDER_CFGS_VK =

  • ORDER_CFGS_REFINST =

  • SCHEDULE_LINES =

  • SCHEDULE_LINESX =

  • ORDER_TEXT =

  • ORDER_KEYS =

  • CONDITIONS_IN =

  • CONDITIONS_INX =

  • EXTENSIONIN =

.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

WAIT = ' '

IMPORTING

RETURN = ZRETURN1.

WRITE:/'SY_SUBRC: ', SY-SUBRC.

LOOP AT ZRETURN.

WRITE:/ ZRETURN-MESSAGE, ZRETURN-TYPE.

ENDLOOP.

IF SY-SUBRC EQ 0.

  • LOOP AT ZRETURN1.

WRITE:/ ZRETURN1-MESSAGE, ZRETURN1-TYPE.

  • ENDLOOP.

ENDIF.

CLEAR: I_SHEADER, I_VBELN, I_SITEM,I_SITEMX,

ZRETURN, ZRETURN1.

REFRESH: I_SHEADER, I_VBELN, I_SITEM,I_SITEMX,

ZRETURN, ZRETURN1.

Please do help me in solving the problem.

thanks & regards,

nitya

7 REPLIES 7
Read only

Former Member
0 Likes
3,509

Here's how to do it.

s_order_item_inx-updateflag = 'U'.

s_order_item_inx-profit_ctr = 'X'. "X" against field you want to change

s_order_item_in-itm_number = g_selection-posnr. "Line Item of sales order

s_order_item_in-profit_ctr = g_selection-prctr1. "data value of changed field

  • if you are only changing the header then you don't need the line items

  • remember in the INX table you need a "U" in the update * flag and an 'X'

  • in the field(s) you want changed

  • In the IN table you need the document number / line

  • item and the data value

  • of the new field.

  • For example

CALL FUNCTION 'BAPI_SALESORDER_CHANGE'

EXPORTING

SALESDOCUMENT = g_selection-vbeln "Sales doc nr

ORDER_HEADER_IN = va_order_header_in " can be empty if not changing header data

ORDER_HEADER_INX = va_order_header_inx " update flag must be U even if no header data to be changed

TABLES

RETURN = ta_return "BAPIRET2

ORDER_ITEM_IN = ta_order_item_in " Order Items data to be changed

ORDER_ITEM_INX = ta_order_item_inx. "Order Item stuff to be changed

That's all you need

Cheers

Jimbo

Read only

0 Likes
3,508

hey,

i have tried in the same way U have replied. But I get the same error.

thanks,

nitya

Read only

0 Likes
3,508

Hi there

You still need to supply the HEADER info even if you aren't changing anything in the header

CALL FUNCTION 'BAPI_SALESORDER_CHANGE'

EXPORTING

SALESDOCUMENT = g_selection-vbeln

ORDER_HEADER_IN = va_order_header_in

ORDER_HEADER_INX = va_order_header_inx

TABLES

RETURN = ta_return

ORDER_ITEM_IN = ta_order_item_in

ORDER_ITEM_INX = ta_order_item_inx.

In your sample code you've commented out the ORDER_HEADER_IN .

You MUST set ORDER_HEADER_INX update to 'U'

Cheers

jimbo

Read only

0 Likes
3,508

I have added the order_header_inx but still the same error comes. I am sending you the code :


*&---------------------------------------------------------------------*
*& Report  ZBAPI1                                                      *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  ZBAPI1                                  .

TABLES: VBBE, VBKD.

DATA: BEGIN OF ITAB OCCURS 0,
      VBELN LIKE VBBE-VBELN,
      POSNR LIKE VBBE-POSNR,
      END OF ITAB.
DATA: WA_ITAB LIKE LINE OF ITAB.

DATA: BEGIN OF ITAB1 OCCURS 0.
        INCLUDE STRUCTURE VBKD.
DATA: END OF ITAB1.

DATA: ITAB2 LIKE ITAB1.

DATA:BEGIN OF I_VBELN OCCURS 0.
        INCLUDE STRUCTURE BAPIVBELN.
DATA:END OF I_VBELN.

DATA: WA_I_VBELN LIKE LINE OF I_VBELN.

DATA:BEGIN OF I_SHEADERX OCCURS 0.
        INCLUDE STRUCTURE BAPISDH1X.
DATA:END OF I_SHEADERX.

DATA: WA_I_SHEADERX LIKE LINE OF I_SHEADERX.

DATA: BEGIN OF I_SHEADER OCCURS 0.
        INCLUDE STRUCTURE BAPISDH1.
DATA: END OF I_SHEADER.

DATA: WA_I_SHEADER LIKE LINE OF I_SHEADER.

DATA:BEGIN OF ZRETURN OCCURS 0.
        INCLUDE STRUCTURE BAPIRET2.
DATA:END OF ZRETURN.

DATA: WA_ZRETURN LIKE LINE OF ZRETURN.

DATA:BEGIN OF I_SITEM OCCURS 0.
        INCLUDE STRUCTURE BAPISDITM.
DATA:END OF I_SITEM.

DATA: WA_I_SITEM LIKE LINE OF I_SITEM.

DATA:BEGIN OF I_SITEMX OCCURS 0.
        INCLUDE STRUCTURE BAPISDITMX.
DATA:END OF I_SITEMX.

DATA: WA_I_SITEMX LIKE LINE OF I_SITEMX.

DATA:BEGIN OF ZRETURN1 OCCURS 0.
        INCLUDE STRUCTURE BAPIRET2.
DATA:END OF ZRETURN1.

DATA: WA_ZRETURN1 LIKE LINE OF ZRETURN1.


SELECTION-SCREEN BEGIN OF BLOCK A.

PARAMETERS: P_VBELN LIKE BAPIVBELN-VBELN,
            P_INCO1 LIKE BAPISDITEM-INCOTERMS1.

SELECTION-SCREEN END OF BLOCK A.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF NOT P_VBELN IS INITIAL.
      READ TABLE ITAB1 INTO ITAB2 WITH KEY VBELN = P_VBELN.
      MOVE ITAB2-INCO1 TO P_INCO1.
      MODIFY SCREEN.
    ENDIF.
    EXIT.
  ENDLOOP.

  SELECT * FROM VBKD INTO TABLE ITAB1.

START-OF-SELECTION.

  SELECT VBELN
         POSNR FROM VBBE INTO TABLE ITAB
           WHERE VBELN = P_VBELN.
  DELETE ADJACENT DUPLICATES FROM ITAB COMPARING VBELN POSNR.

END-OF-SELECTION.

  CLEAR: I_SHEADERX, I_VBELN, I_SITEM,I_SITEMX,I_SHEADER,
         ZRETURN, ZRETURN1.
  REFRESH: I_SHEADERX, I_VBELN, I_SITEM,I_SITEMX,I_SHEADER,
           ZRETURN, ZRETURN1.

  LOOP AT ITAB INTO WA_ITAB.

    WA_I_SHEADERX-UPDATEFLAG ='U'.
    APPEND WA_I_SHEADERX TO I_SHEADERX.

    WA_I_SHEADER-INCOTERMS1 = P_INCO1.
    APPEND WA_I_SHEADER TO I_SHEADER.

    WA_I_VBELN-VBELN = WA_ITAB-VBELN.
    APPEND WA_I_VBELN TO I_VBELN.

    WA_I_SITEM-ITM_NUMBER = WA_ITAB-POSNR.
    WA_I_SITEM-INCOTERMS1 = P_INCO1.
    APPEND WA_I_SHEADER TO I_SHEADER.

    WA_I_SITEMX-ITM_NUMBER = WA_ITAB-POSNR.
    WA_I_SITEMX-UPDATEFLAG ='U'.
    WA_I_SITEMX-INCOTERMS1 ='X'.
    APPEND WA_I_SITEMX TO I_SITEMX.

    CLEAR: WA_ITAB, WA_I_VBELN, WA_I_SHEADERX, WA_ZRETURN, WA_ZRETURN1,
           WA_I_SITEM, WA_I_SITEMX.

  ENDLOOP.

  CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
    EXPORTING
      SALESDOCUMENT               = I_VBELN
      ORDER_HEADER_IN             = I_SHEADER
      ORDER_HEADER_INX            = I_SHEADERX
*   SIMULATION                  =
*   BEHAVE_WHEN_ERROR           = ' '
*   INT_NUMBER_ASSIGNMENT       = ' '
*   LOGIC_SWITCH                =
    TABLES
      RETURN                      = ZRETURN
      ORDER_ITEM_IN               = I_SITEM
      ORDER_ITEM_INX              = I_SITEMX
*   PARTNERS                    =
*   PARTNERCHANGES              =
*   PARTNERADDRESSES            =
*   ORDER_CFGS_REF              =
*   ORDER_CFGS_INST             =
*   ORDER_CFGS_PART_OF          =
*   ORDER_CFGS_VALUE            =
*   ORDER_CFGS_BLOB             =
*   ORDER_CFGS_VK               =
*   ORDER_CFGS_REFINST          =
*   SCHEDULE_LINES              =
*   SCHEDULE_LINESX             =
*   ORDER_TEXT                  =
*   ORDER_KEYS                  =
*   CONDITIONS_IN               =
*   CONDITIONS_INX              =
*   EXTENSIONIN                 =
            .

  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      WAIT
      ='X'
    IMPORTING
      RETURN = ZRETURN1.

  WRITE:/'SY_SUBRC: ', SY-SUBRC.
  LOOP AT ZRETURN.
    WRITE:/ ZRETURN-MESSAGE, ZRETURN-TYPE.
  ENDLOOP.

  IF SY-SUBRC EQ 0.
    LOOP AT ZRETURN1.
      WRITE:/ ZRETURN1-MESSAGE, ZRETURN1-TYPE.
    ENDLOOP.
  ENDIF.
  CLEAR: I_SHEADER, I_VBELN, I_SITEM,I_SITEMX,
         ZRETURN, ZRETURN1.
  REFRESH: I_SHEADER, I_VBELN, I_SITEM,I_SITEMX,
           ZRETURN, ZRETURN1.

Thanks for your valuable time

regards,

nitya

Read only

Former Member
0 Likes
3,508

Hi there

try and test it in SE37 using the TEST button.

Just change any old sales order on your test system

Start with changing something simple on the header .

I suspect that you are trying to change a field that might not be changeable after the sales order has been created.

Test changing something that works when you do it with VA02 first.

The TEST facility in SE37 is often really useful.

Don't forget the COMMIT WORK to actually update the databae.

Cheers

Jimbo

Read only

0 Likes
3,508

BAPI is working well and fine in se37. But when I call BAPI to the report the problem occurs. The changes are taking place in the VA02. But the when I put the same value in the report the error comes.

regards,

nitya

Read only

Former Member
0 Likes
3,508

I have rectified the problem, the code is running well & fine.