2007 Jul 24 11:44 AM
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
2007 Jul 24 4:45 PM
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
2007 Jul 24 4:45 PM
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
2007 Jul 25 7:40 AM
hey,
i have tried in the same way U have replied. But I get the same error.
thanks,
nitya
2007 Jul 25 8:24 AM
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
2007 Jul 25 8:34 AM
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
2007 Jul 25 9:10 AM
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
2007 Jul 25 11:54 AM
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
2007 Jul 26 9:54 AM
I have rectified the problem, the code is running well & fine.