2007 Oct 01 6:00 PM
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.
2007 Oct 01 9:46 PM
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.
2007 Oct 01 6:08 PM
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
2007 Oct 01 6:21 PM
Hi Madhan,
I did the change. But still it's not working. Thanks for your help though.
2007 Oct 03 8:43 PM
Hi Sam
I hope you are doing BAPI_TRANSACTION_COMMIT inside the loop
Regards
MD
2007 Oct 01 9:46 PM
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
2007 Oct 01 10:02 PM
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |