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

BAPI_SALESORDER_CHANGE

Former Member
0 Likes
1,481

Hi Experts,

I am using 'BAPI_SALESORDER_CHANGE' to change the 'Pricing Date' of an SD.

The intention is to change the 'Pricing Date'(PRSDT) of a <b>particular Line Item</b>. But the program is changing the 'Pricing Date' at the Header Level. I am not able to figure out what went wrong.

Can you correct me?

Thanks a lot for your help.

Here's the code:

REPORT ZVTEST1 NO STANDARD PAGE HEADING

LINE-SIZE 132

LINE-COUNT 65

MESSAGE-ID ZM.

TABLES: vbak, vbap, vbkd.

DATA: v_records TYPE I.

DATA: BEGIN OF I_ORDERS OCCURS 0,

VBELN LIKE VBAK-VBELN,

POSNR LIKE VBAP-POSNR,

prsdt like vbkd-prsdt,

END OF I_ORDERS.

data: begin of i_ORDERHEADERINX occurs 0.

include structure bapisdh1x.

data: end of i_orderheaderinx.

data: begin of i_ORDERHEADERIN occurs 0.

include structure bapisdh1.

data: end of i_orderheaderin.

DATA: BEGIN OF i_ORDERITEMIN OCCURS 0.

INCLUDE STRUCTURE BAPISDITM.

DATA: END OF i_ORDERITEMIN.

DATA: BEGIN OF i_ORDERITEMINX OCCURS 0.

INCLUDE STRUCTURE BAPISDITMX.

DATA: END OF i_ORDERITEMINX.

DATA: BEGIN OF i_RETURN OCCURS 0.

INCLUDE STRUCTURE BAPIRET2.

DATA: END OF i_RETURN.

DATA: BEGIN OF i_BAPIRETURN OCCURS 0.

INCLUDE STRUCTURE BAPIRET2.

DATA: END OF i_BAPIRETURN.

*-- Selection Screen

select-options: s_vbeln for vbak-vbeln.

parameters: p_posnr like vbap-posnr,

p_date like vbkd-prsdt.

*-- Start-of-selection

START-OF-SELECTION.

select vbeln posnr prsdt from vbkd

into table i_orders

where vbeln in s_vbeln

and posnr = p_posnr.

if sy-subrc = 0.

loop at i_orders.

i_orders-prsdt = p_date.

modify i_orders index sy-tabix.

endloop.

endif.

*-- Sort and remove duplicates from i_orders

SORT I_ORDERS BY VBELN POSNR.

DELETE ADJACENT DUPLICATES FROM I_ORDERS.

*-- Populate Bapi and Run Bapi Data

CLEAR: i_orderheaderinx, i_orderitemin, i_orderiteminx,

i_return, i_bapireturn, i_orders.

REFRESH: i_orderitemin, i_orderiteminx, i_return, i_bapireturn.

LOOP AT I_ORDERS.

i_orderheaderin-price_date = i_orders-prsdt.

append i_orderheaderin.

i_orderheaderinx-updateflag = 'U'.

i_orderheaderinx-price_date = 'X'.

append i_orderheaderinx.

i_ORDERITEMIN-ITM_NUMBER = I_ORDERS-POSNR.

i_orderitemin-price_date = i_orders-prsdt.

APPEND i_ORDERITEMIN.

i_ORDERITEMINX-ITM_NUMBER = I_ORDERS-POSNR.

i_ORDERITEMINX-UPDATEFLAG = 'U'.

i_orderiteminx-price_date = 'X'.

APPEND i_ORDERITEMINX.

IF NOT i_orderitemin IS INITIAL.

v_records = v_records + 1.

CALL FUNCTION 'BAPI_SALESORDER_CHANGE'

EXPORTING

SALESDOCUMENT = I_ORDERS-VBELN

ORDER_HEADER_IN = i_orderheaderin

ORDER_HEADER_INX = i_orderheaderinx

TABLES

RETURN = i_return

ORDER_ITEM_IN = i_orderitemin

ORDER_ITEM_INX = i_orderiteminx.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

WAIT = 'X'

IMPORTING

RETURN = i_bapireturn.

clear: i_orders.

ENDIF.

ENDLOOP.

*-- Write out return

LOOP AT i_return.

WRITE: / i_return.

ENDLOOP.

WRITE: / i_bapireturn.

SKIP.

*-- Write out record count from file

WRITE: / 'RECORD COUNT OF ORDERS TO CHANGE ', v_records.

SKIP.

1 ACCEPTED SOLUTION
Read only

uwe_schieferstein
Active Contributor
0 Likes
1,112

Hello Sam

Simply remove the following line of coding:

LOOP AT I_ORDERS.
"  i_orderheaderin-price_date = i_orders-prsdt.
append i_orderheaderin.
i_orderheaderinx-updateflag = 'U'.
"  i_orderheaderinx-price_date = 'X'.  " Do not mark this flag !!!
append i_orderheaderinx.
i_ORDERITEMIN-ITM_NUMBER = I_ORDERS-POSNR.
i_orderitemin-price_date = i_orders-prsdt.
APPEND i_ORDERITEMIN.
i_ORDERITEMINX-ITM_NUMBER = I_ORDERS-POSNR.
i_ORDERITEMINX-UPDATEFLAG = 'U'.
i_orderiteminx-price_date = 'X'.
APPEND i_ORDERITEMINX.
...

I assume that changing the price date in the header interferes with changing at the item level.

Regards

Uwe

Hi Experts,

I am using 'BAPI_SALESORDER_CHANGE' to change the 'Pricing Date' of an SD.

The intention is to change the 'Pricing Date'(PRSDT) of a <b>particular Line Item</b>. But the program is changing the 'Pricing Date' at the Header Level. I am not able to figure out what went wrong.

Can you correct me?

Thanks a lot for your help.

Here's the code:

REPORT ZVTEST1 NO STANDARD PAGE HEADING

LINE-SIZE 132

LINE-COUNT 65

MESSAGE-ID ZM.

TABLES: vbak, vbap, vbkd.

DATA: v_records TYPE I.

DATA: BEGIN OF I_ORDERS OCCURS 0,

VBELN LIKE VBAK-VBELN,

POSNR LIKE VBAP-POSNR,

prsdt like vbkd-prsdt,

END OF I_ORDERS.

data: begin of i_ORDERHEADERINX occurs 0.

include structure bapisdh1x.

data: end of i_orderheaderinx.

data: begin of i_ORDERHEADERIN occurs 0.

include structure bapisdh1.

data: end of i_orderheaderin.

DATA: BEGIN OF i_ORDERITEMIN OCCURS 0.

INCLUDE STRUCTURE BAPISDITM.

DATA: END OF i_ORDERITEMIN.

DATA: BEGIN OF i_ORDERITEMINX OCCURS 0.

INCLUDE STRUCTURE BAPISDITMX.

DATA: END OF i_ORDERITEMINX.

DATA: BEGIN OF i_RETURN OCCURS 0.

INCLUDE STRUCTURE BAPIRET2.

DATA: END OF i_RETURN.

DATA: BEGIN OF i_BAPIRETURN OCCURS 0.

INCLUDE STRUCTURE BAPIRET2.

DATA: END OF i_BAPIRETURN.

*-- Selection Screen

select-options: s_vbeln for vbak-vbeln.

parameters: p_posnr like vbap-posnr,

p_date like vbkd-prsdt.

*-- Start-of-selection

START-OF-SELECTION.

select vbeln posnr prsdt from vbkd

into table i_orders

where vbeln in s_vbeln

and posnr = p_posnr.

if sy-subrc = 0.

loop at i_orders.

i_orders-prsdt = p_date.

modify i_orders index sy-tabix.

endloop.

endif.

*-- Sort and remove duplicates from i_orders

SORT I_ORDERS BY VBELN POSNR.

DELETE ADJACENT DUPLICATES FROM I_ORDERS.

*-- Populate Bapi and Run Bapi Data

CLEAR: i_orderheaderinx, i_orderitemin, i_orderiteminx,

i_return, i_bapireturn, i_orders.

REFRESH: i_orderitemin, i_orderiteminx, i_return, i_bapireturn.

LOOP AT I_ORDERS.

i_orderheaderin-price_date = i_orders-prsdt.

append i_orderheaderin.

i_orderheaderinx-updateflag = 'U'.

i_orderheaderinx-price_date = 'X'.

append i_orderheaderinx.

i_ORDERITEMIN-ITM_NUMBER = I_ORDERS-POSNR.

i_orderitemin-price_date = i_orders-prsdt.

APPEND i_ORDERITEMIN.

i_ORDERITEMINX-ITM_NUMBER = I_ORDERS-POSNR.

i_ORDERITEMINX-UPDATEFLAG = 'U'.

i_orderiteminx-price_date = 'X'.

APPEND i_ORDERITEMINX.

IF NOT i_orderitemin IS INITIAL.

v_records = v_records + 1.

CALL FUNCTION 'BAPI_SALESORDER_CHANGE'

EXPORTING

SALESDOCUMENT = I_ORDERS-VBELN

ORDER_HEADER_IN = i_orderheaderin

ORDER_HEADER_INX = i_orderheaderinx

TABLES

RETURN = i_return

ORDER_ITEM_IN = i_orderitemin

ORDER_ITEM_INX = i_orderiteminx.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

WAIT = 'X'

IMPORTING

RETURN = i_bapireturn.

clear: i_orders.

ENDIF.

ENDLOOP.

*-- Write out return

LOOP AT i_return.

WRITE: / i_return.

ENDLOOP.

WRITE: / i_bapireturn.

SKIP.

*-- Write out record count from file

WRITE: / 'RECORD COUNT OF ORDERS TO CHANGE ', v_records.

SKIP.

5 REPLIES 5
Read only

Former Member
0 Likes
1,112

Hi Sam

Pls refresh the following internal tables after the transaction commit

i_orderheaderin, i_orderheaderinx, i_return, i_orderitemin, i_orderiteminx.

Regards

Madhan Doraikannan

Read only

0 Likes
1,112

Hi Madhan,

I did the change. But still it's not working. Thanks for your help though.

Read only

0 Likes
1,112

Hi Sam

I hope you are doing BAPI_TRANSACTION_COMMIT inside the loop

Regards

MD

Read only

uwe_schieferstein
Active Contributor
0 Likes
1,113

Hello Sam

Simply remove the following line of coding:

LOOP AT I_ORDERS.
"  i_orderheaderin-price_date = i_orders-prsdt.
append i_orderheaderin.
i_orderheaderinx-updateflag = 'U'.
"  i_orderheaderinx-price_date = 'X'.  " Do not mark this flag !!!
append i_orderheaderinx.
i_ORDERITEMIN-ITM_NUMBER = I_ORDERS-POSNR.
i_orderitemin-price_date = i_orders-prsdt.
APPEND i_ORDERITEMIN.
i_ORDERITEMINX-ITM_NUMBER = I_ORDERS-POSNR.
i_ORDERITEMINX-UPDATEFLAG = 'U'.
i_orderiteminx-price_date = 'X'.
APPEND i_ORDERITEMINX.
...

I assume that changing the price date in the header interferes with changing at the item level.

Regards

Uwe

Read only

0 Likes
1,112

Excellent!!!

It worked. Thanks a ton.