BAPI_SALESORDER_CHANGE schedule_lines
Hi experts.
I'm doing a simple order update, using FM BAPI_SALESORDER_CHANGE.
The goal is to change header data (with order_header_in and order_header_inx structures), schedule lines data (with schedule_lines and schedule_linesx structures) and text data (with order_text structure).
The problem is that header and text data is actually changed, but schedulle data doesn't.
Can anyone help?
Best regards.
Valter Oliveira.
SAMPLE CODE:
HEADER
CLEAR: wa_header_in.
wa_header_in-po_dat_s = wa_pub-data.
wa_header_in-ref_1 = wa_pub-diario.
wa_header_in-ref_1_s = wa_pub-suplemento.
wa_header_in-dlv_block = space.
CLEAR: wa_header_inx.
wa_header_inx-updateflag = 'U'.
wa_header_inx-po_dat_s = 'X'.
wa_header_inx-ref_1 = 'X'.
wa_header_inx-ref_1_s = 'X'.
wa_header_inx-dlv_block = 'X'.
SCHEDULE
SELECT posnr FROM vbap
INTO (vl_posnr)
WHERE vbeln = wa_pub-vbeln.
SELECT etenr FROM vbep
INTO (vl_etenr)
WHERE vbeln = wa_pub-vbeln
AND posnr = vl_posnr.
ti_sched-itm_number = vl_posnr.
ti_sched-sched_line = vl_etenr.
ti_sched-req_dlv_bl = space.
ti_sched-req_date = wa_pub-data.
ti_sched-sched_type = 'CN'.
ti_schedx-itm_number = vl_posnr.
ti_schedx-sched_line = vl_etenr.
ti_schedx-req_dlv_bl = 'X'.
ti_schedx-sched_type = 'X'.
ti_schedx-req_date = 'X'.
APPEND ti_sched. APPEND ti_schedx.
ENDSELECT.
ENDSELECT.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = wa_pub-vbeln
order_header_in = wa_header_in
order_header_inx = wa_header_inx
TABLES
schedule_lines = ti_sched
schedule_linesx = ti_schedx
order_text = ti_texts
return = ti_ret.
Hi experts.
I'm doing a simple order update, using FM BAPI_SALESORDER_CHANGE.
The goal is to change header data (with order_header_in and order_header_inx structures), schedule lines data (with schedule_lines and schedule_linesx structures) and text data (with order_text structure).
The problem is that header and text data is actually changed, but schedulle data doesn't.
Can anyone help?
Best regards.
Valter Oliveira.
SAMPLE CODE:
HEADER
CLEAR: wa_header_in.
wa_header_in-po_dat_s = wa_pub-data.
wa_header_in-ref_1 = wa_pub-diario.
wa_header_in-ref_1_s = wa_pub-suplemento.
wa_header_in-dlv_block = space.
CLEAR: wa_header_inx.
wa_header_inx-updateflag = 'U'.
wa_header_inx-po_dat_s = 'X'.
wa_header_inx-ref_1 = 'X'.
wa_header_inx-ref_1_s = 'X'.
wa_header_inx-dlv_block = 'X'.
SCHEDULE
SELECT posnr FROM vbap
INTO (vl_posnr)
WHERE vbeln = wa_pub-vbeln.
SELECT etenr FROM vbep
INTO (vl_etenr)
WHERE vbeln = wa_pub-vbeln
AND posnr = vl_posnr.
ti_sched-itm_number = vl_posnr.
ti_sched-sched_line = vl_etenr.
ti_sched-req_dlv_bl = space.
ti_sched-req_date = wa_pub-data.
ti_sched-sched_type = 'CN'.
ti_schedx-itm_number = vl_posnr.
ti_schedx-sched_line = vl_etenr.
ti_schedx-req_dlv_bl = 'X'.
ti_schedx-sched_type = 'X'.
ti_schedx-req_date = 'X'.
APPEND ti_sched. APPEND ti_schedx.
ENDSELECT.
ENDSELECT.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = wa_pub-vbeln
order_header_in = wa_header_in
order_header_inx = wa_header_inx
TABLES
schedule_lines = ti_sched
schedule_linesx = ti_schedx
order_text = ti_texts
return = ti_ret.
Similar Messages
-
Schedule lines creation with BAPI_SALESORDER_CHANGE
Dear All,
1. I'm trying to create a new Schedule Lines to an already existing Scheduling Agreement.
2. For this, I'm using the BAPI --> BAPI_SALESORDER_CHANGE.
3. This BAPI returns me a message saying that the Schedule line processed successfully.
4. When I check the VBEP Table with the Scheduling Agreement number, I'm able to see the newly created schedule line.
5. But, when I see the Transaction VA33, I'm not able to see the schedule lines.
I checked in SDN and OSS notes. I found 1647069 which says to pass the line number and Item number which I'm already doing it.
Can any one help me out ?
Regards,
Deepu.KI verified in my system that the below should work. Here, I am inserting a new schedule 0002 for item 10 with qty 1 and another date.
Of course, you should ensure that there is sufficient quantity that is not yet confirmed by existing schedule lines.
BAPI_SALESORDER_CHANGE
SALESDOCUMENT = '0011827125'
ORDER_HEADER_INX
UPDATEFLAG = 'U'
ORDER_ITEM_IN
ITM_NUMBER = '000010'
ORDER_ITEM_INX
ITM_NUMBER = '000010'
UPDATEFLAG = 'U'
SCHEDULE_LINES
ITM_NUMBER = '000010'
SCHED_LINE = '0002'
REQ_DATE = '20120104'
REQ_QTY = '1'
SCHEDULE_LINESX
ITM_NUMBER = '000010'
SCHED_LINE = '0002'
UPDATEFLAG = 'I'
REQ_DATE = 'X'
REQ_QTY = 'X'. -
How to pass Itab to "BAPI_SALESORDER_CHANGE"
Requirment : We cancel sales order that have been created but not fulfilled within 7 days.
At present, we do this manually. Can we configure to have the system auto cancel the sales order
after the said period?
selection screen
u2022 Sales organization (P_VKORG like ZSD_REJECT-VKORG)
u2022 Sales office (S_VKBUR for ZSD_REJECT-VKBUR)
u2022 Plant (S_WERKS for ZSD_REJECT-WERKS)
u2022 Sales order type (S_AUART for ZSD_REJECT-AUART)
u2022 Sales order no. (S_VBELN for ZSD_REJECT-VBELN)
u2022 Customer no. (S_KUNNR for ZSD_REJECT-KUNNR)
u2022 Rejection date (S_REJDTE for ZSD_REJECT-REJDATE)
Report format/columns should be as follows:
1. Sales organization (ZSD_REJECT-VKORG)
2. Sales office (ZSD_REJECT-VKBUR)
3. Plant (ZSD_REJECT-WERKS)
4. Customer no. (ZSD_REJECT-KUNNR)
5. Customer name (KNA1-NAME1)
6. Sales order no. (ZSD_REJECT-VBELN)
7. Sales order item (ZSD_REJECT-POSNR)
8. Material no. (VBAP-MATNR)
9. Material description (VBAP-ARKTX)
10. Order quantity (VBAP-KWMENG)
11. Rejected quantity (ZSD_REJECT-REJQTY)
12. Unit of measure (VBAP-VRKME)
13. Rejected net value (ZSD_REJECT-REJVAL)
14. Currency (VBAK-WAERK)
15. Rejection date (ZSD_REJECT-REJDATE)
16. Rejection time (ZSD_REJECT-REJTIME)
17. Rejection user (ZSD_REJECT-REJUSER)
Program : I have created one report & calling bapi BAPI_SALESORDER_CHANGE
TYPES: BEGIN OF t_tab,
vkorg TYPE zsd_reject-vkorg ,
vkbur TYPE zsd_reject-vkbur ,
auart TYPE zsd_reject-auart ,
END OF t_tab.
TYPES: BEGIN OF t_vbak,
vbeln TYPE vbak-vbeln ,
erdat TYPE vbak-erdat ,
waerk TYPE vbak-waerk,
vbtyp TYPE vbak-vbtyp,
auart TYPE vbak-auart,
vkorg TYPE vbak-vkorg ,
vkbur TYPE vbak-vkbur ,
kunnr TYPE vbak-kunnr ,
cmfre TYPE vbak-cmfre ,
gbsta type vpup-gbsta,
costa TYPE vbuk-costa ,
fkstk TYPE vbuk-fkstk,
END OF t_vbak.
TYPES: BEGIN OF t_data,
vbeln TYPE vbak-vbeln ,
waerk TYPE vbak-waerk,
auart TYPE vbak-auart,
vkorg TYPE vbak-vkorg ,
vkbur TYPE vbak-vkbur ,
kunnr TYPE vbak-kunnr ,
cmfre TYPE vbak-cmfre ,
END OF t_data.
TYPES: BEGIN OF t_vbap,
matnr TYPE vbap-matnr ,
vbeln TYPE vbap-vbeln ,
posnr TYPE vbap-posnr,
arktx TYPE vbap-arktx ,
pstyv TYPE vbap-pstyv,
abgru TYPE vbap-abgru,
kwmeng TYPE vbap-kwmeng,
werks TYPE vbap-werks ,
END OF t_vbap.
TABLES *
TABLES : zsd_reject.
INTERNAL TABLES, STRUCTURES & WORK AREAS *
DATA: it_vbak TYPE STANDARD TABLE OF t_vbak WITH HEADER LINE,
it_data TYPE STANDARD TABLE OF t_data WITH HEADER LINE ,
it_vbap TYPE STANDARD TABLE OF t_vbap ,
wa_vbak TYPE t_vbak ,
wa_vbap TYPE t_vbap ,
wa_data TYPE t_data.
PARAMETERS & SELECT-OPTIONS *
DUE TO AN SAP LIMITATION WITH CREATING / CHANGING VARIANTS,
selection screen fields over 45 characters in length should be avoided
SELECTION-SCREEN: BEGIN OF BLOCK a01 WITH FRAME TITLE text-001.
PARAMETERS: p_vkorg LIKE zsd_reject-vkorg.
SELECT-OPTIONS: s_vkbur FOR zsd_reject-vkbur,
s_werks FOR zsd_reject-werks,
s_auart FOR zsd_reject-auart,
s_vbeln FOR zsd_reject-vbeln,
s_kunnr FOR zsd_reject-kunnr,
s_rejdte FOR zsd_reject-rejdate.
SELECTION-SCREEN: END OF BLOCK a01.
DATA : p_days TYPE i VALUE 7,
l_checkdate LIKE sy-datum.
START-OF-SELECTION.
l_checkdate = sy-datum - p_days.
SELECT vbak~vbeln
vbak~erdat
vbak~waerk
vbak~vbtyp
vbak~auart
vbak~vkorg
vbak~vkbur
vbak~kunnr
vbak~cmfre
vbup~gbsta
vbuk~costa
vbuk~fkstk
INTO TABLE it_vbak
FROM vbak INNER JOIN vbuk
ON vbakvbeln = vbukvbeln
WHERE vbak~vkorg = p_vkorg
AND vbak~vkbur IN s_vkbur
AND vbak~auart IN s_auart
AND vbak~vbtyp = 'C'
AND vbuk~gbstk NE 'C'.
Requirment :
This checking is only for those order were previously blocked and has been released, which means credit release date not equal to 00.00.0000 and hence program will check rejection logic based on credit release date vs system date > 7 calendar days. For those orders which holding credit release date equals to 00.00.0000 will go through rejection checking
based on order creation date vs system date > 7 calendar days respectively.
LOOP AT it_vbak INTO wa_vbak.
IF NOT wa_vbak-cmfre IS INITIAL.
IF wa_vbak-cmfre > l_checkdate.
DELETE it_vbak FROM wa_vbak.
ENDIF.
ELSE.
IF wa_vbak-erdat > l_checkdate.
DELETE it_vbak FROM wa_vbak.
ENDIF.
ENDIF.
ENDLOOP.
SELECT vbapmatnr vbapvbeln vbapposnr vbaparktx vbap~pstyv
vbapabgru vbapkwmeng vbap~werks INTO TABLE it_vbap
FROM vbap INNER JOIN vbup ON
vbapvbeln = vbupvbeln AND vbapposnr = vbupposnr
FOR ALL entries
IN it_vbak WHERE vbap~vbeln = it_vbak-vbeln AND
gbsta NE 'C'.
I have taken the records in two internal table for header & item it_vbak & it_vbap
now I need to call the BAPI_SALESORDER_CHANGE and pass the internal table to Bapi .
Can anyone please let me know how to pass this into Bapi?
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument =
ORDER_HEADER_IN =
order_header_inx =
SIMULATION =
BEHAVE_WHEN_ERROR = ' '
INT_NUMBER_ASSIGNMENT = ' '
LOGIC_SWITCH =
tables
return =
ORDER_ITEM_IN =
ORDER_ITEM_INX =
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 =
Thanks in advance
Regards
RahulHi,
I am trying to cancel the sales order that have been created but not fulfilled within 7 days.
If this condition is true dump is coming (when I am trying to delete the records from internal table)
if wa_vbak-erdat > l_checkdate.
delete it_vbak from wa_vbak.
endif.
Error analysis
The program attempted to interp 70000200KL " as a number, but since the value contravenes the
this was not possible.
types: begin of t_vbak,
vbeln type vbak-vbeln ,
erdat type vbak-erdat ,
waerk type vbak-waerk,
vbtyp type vbak-vbtyp,
auart type vbak-auart,
vkorg type vbak-vkorg ,
vtweg type vbak-vtweg,
spart type vbak-spart,
vkbur type vbak-vkbur ,
kunnr type vbak-kunnr ,
cmfre type vbak-cmfre ,
gbsta type vpup-gbsta,
costa type vbuk-costa ,
fkstk type vbuk-fkstk,
end of t_vbak.
data : p_days type i value 7,
l_checkdate like sy-datum.
DATA: it_vbak TYPE STANDARD TABLE OF t_vbak WITH HEADER LINE,
it_data TYPE STANDARD TABLE OF t_data WITH HEADER LINE ,
start-of-selection.
l_checkdate = sy-datum - p_days.
select vbak~vbeln
vbak~erdat
vbak~waerk
vbak~vbtyp
vbak~auart
vbak~vkorg
vbak~vtweg
vbak~spart
vbak~vkbur
vbak~kunnr
vbak~cmfre
vbup~gbsta
vbuk~costa
vbuk~fkstk
into corresponding fields of table it_vbak
from vbak inner join vbuk
on vbakvbeln = vbukvbeln
where vbak~vkorg = p_vkorg
and vbak~vkbur in s_vkbur
and vbak~auart in s_auart
and vbak~vbtyp = 'C'
and vbuk~gbstk ne 'C'
and vbak~vbeln = '0000003549'.
sort it_vbak by vbeln.
if not it_vbak[] is initial.
loop at it_vbak into wa_vbak.
if not wa_vbak-cmfre is initial.
if wa_vbak-cmfre > l_checkdate.
delete it_vbak from wa_vbak.
endif.
else.
******Error (short dump here if condition true )***************************
if wa_vbak-erdat > l_checkdate.
delete it_vbak from wa_vbak.
endif.
endif.
endloop.
endif.
Regards
Rahul -
BAPI_SALESORDER_CHANGE add new line and conditions with a condition value
Hi,
I am using BAPI_SALESORDER_CHANGE to add new lines to a credit memo. All works fine except that I can not seem to put a condition value on the new lines. The condition is created but with a value of 0. I can popluate the condition amount field, KBETR but not KWERT. BAPICONDX seems to only have the COND_VALUE field in it and not CONDVALUE as in BAPICOND. Does anyone have any idea how to do this? In the code below I just want to change the material on the first line of the credit memo and not add the condition. Then add new lines with the the condition.
lw_order_header_inx-updateflag = 'U'.
LOOP AT i_accru INTO wa_accru.
lv_count = lv_count + 1.
lv_posnr = lv_count * 10.
* Order Items
lw_order_item_inx-itm_number = lv_posnr.
lw_order_item_inx-material = 'X'.
IF lv_count = 1.
lw_order_item_inx-updateflag = 'U'.
ELSE.
lw_order_item_inx-updateflag = 'I'.
ENDIF.
APPEND lw_order_item_inx TO lt_order_item_inx.
lw_order_item_in-itm_number = lv_posnr.
lw_order_item_in-material = wa_accru-vakey.
APPEND lw_order_item_in TO lt_order_item_in.
* Conditions
IF lv_count <> 1.
lw_conditions_inx-itm_number = lv_posnr.
lw_conditions_inx-cond_st_no = '905'.
lw_conditions_inx-cond_count = '01'.
lw_conditions_inx-cond_type = 'ZHIE'.
lw_conditions_inx-currency = 'X'.
lw_conditions_inx-updateflag = 'I'.
APPEND lw_conditions_inx TO lt_conditions_inx.
lw_conditions_in-itm_number = lv_posnr.
lw_conditions_in-cond_st_no = '905' .
lw_conditions_in-cond_count = '01'.
lw_conditions_in-cond_type = 'ZHIE'.
lw_conditions_in-condvalue = wa_accru-accru.
lw_conditions_in-currency = 'GBP'.
APPEND lw_conditions_in TO lt_conditions_in.
ENDIF.
ENDLOOP.
* Change the credit memo
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = lv_vbeln
order_header_in = lw_order_header_in
order_header_inx = lw_order_header_inx
* SIMULATION =
* BEHAVE_WHEN_ERROR = ' '
* INT_NUMBER_ASSIGNMENT = ' '
* LOGIC_SWITCH =
* NO_STATUS_BUF_INIT = ' '
TABLES
return = lt_return
order_item_in = lt_order_item_in
order_item_inx = lt_order_item_inx
* 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 = lt_conditions_in
conditions_inx = lt_conditions_inx
* EXTENSIONIN =
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* WAIT =
* IMPORTING
* RETURN =
ENDIF.Hi Rob,
Have you managed to solve this issue. If so, could you please share the solution.
I am also facing similar problem.
Thanks for your help.
Anoop -
Deleting Sales Order Details using BAPI_SALESORDER_CHANGE And Reinserting
Hi All,
I need to <b>change a Sales Order</b> in such a way that I would <b>delete all the existing Line Items</b> of that SO And <b>then reinsert new Line Items</b> as generally is the practice of saving a document.(Update Header-Delete Old Item Entries-Reinsert New Present Entries).
I coded a small test program in ABAP using the <b>BAPI_SALESORDER_GETLIST And BAPI_SALESORDER_CHANGE</b>.
In order to affect the Qty I have to update the Schedule Parameter also of the BAPI_SALESORDER_CHANGE Function.But this causes a new entry in VBEP.
eg:
<b>Before BAPI Calls</b>
SO-Number:9001
Header:9001,etc......
Detail:ItemNo=10,Material=xyz,TargetQty=100,etc..
Scedule:ItemNo=10,Scheduleline=1,Req_Qty=100,etc...
I coded the program such that
1.I <b>Get the List of Items</b> using BAPI_SALESORDER_GETLIST.
2.Call the <b>BAPI_SALESORDER_CHANGE</b> filling appropraite values in Parameters <b>with UpdateFlag = 'D'</b>
3.<b>Insert new values</b> in OrderItems And Schedule Parameters
say:
Detail:ItemNo=10,Material=xyz,TargetQty=25,etc..
Scedule:ItemNo=10,Scheduleline=1,Req_Qty=25,etc...
4.<b>Call the BAPI_SALESORDER_CHANGE</b> filling appropraite values in Parameters <b>with UpdateFlag = 'I'</b>
<b>The output now becomes.</b>Header:9001,etc......
Detail:ItemNo=10,Material=xyz,TargetQty=100,etc..
Scedule:ItemNo=10,Scheduleline=1,Req_Qty=100,etc...
ItemNo=10,Scheduleline=2,Req_Qty=25,etc...
Now After Commit when I see my <b>SO it shows me a qty of
125</b>.
I am attaching the code for your analysis.
Thanx in advance.
*& Report ZSM_CHANGESALESORDER *
REPORT ZSM_CHANGESALESORDER .
DATA:
For Calling the GetList BAPI Function
CUSTOMER_NUMBER LIKE BAPI1007-CUSTOMER,
SALES_ORGANIZATION LIKE BAPIORDERS-SALES_ORG,
IT_SALES_ORDERS LIKE TABLE OF BAPIORDERS,
WA_SALES_ORDERS LIKE LINE OF IT_SALES_ORDERS,
IT_RETURN LIKE TABLE OF BAPIRETURN,
WA_RETURN LIKE LINE OF IT_RETURN.
For Calling the ChangeFromData BAPI Function
DATA:
SALESDOCUMENT LIKE BAPIVBELN-VBELN,
WA_ORDER_HEADER_IN LIKE BAPISDH1,
WA_ORDER_HEADER_INX LIKE BAPISDH1X,
IT_ORDER_ITEM_IN LIKE TABLE OF BAPISDITM ,
WA_ORDER_ITEM_IN LIKE LINE OF IT_ORDER_ITEM_IN,
IT_ORDER_ITEM_INX LIKE TABLE OF BAPISDITMX ,
WA_ORDER_ITEM_INX LIKE LINE OF IT_ORDER_ITEM_INX,
IT_SCHEDULE_LINES LIKE TABLE OF BAPISCHDL ,
WA_SCHEDULE_LINES LIKE LINE OF IT_SCHEDULE_LINES,
IT_SCHEDULE_LINESX LIKE TABLE OF BAPISCHDLX ,
WA_SCHEDULE_LINESX LIKE LINE OF IT_SCHEDULE_LINESX,
IT_RETURN_CHG LIKE TABLE OF BAPIRET2,
WA_RETURN_CHG LIKE LINE OF IT_RETURN_CHG.
DATA:
IT_RETURN_CT LIKE BAPIRET2.
PARAMETERS:
P_SO LIKE VBAK-VBELN,
P_CUSTNO LIKE BAPI1007-CUSTOMER,
P_SORG LIKE BAPIORDERS-SALES_ORG.
START-OF-SELECTION.
SALESDOCUMENT = P_SO.
CUSTOMER_NUMBER = P_CUSTNO.
SALES_ORGANIZATION = P_SORG.
Retrieve the Existing Sales Order details for that Sales Order.
PERFORM GETREQSODETAILS.
Delete the Existing Sales Order details from that Sales Order.
PERFORM DELETEOLDSODETAILS.
Insert New details for that Sales Order.
PERFORM ADDNEWSODETAILS.
END-OF-SELECTION.
PERFORM COMMITTRANS.
*& Form GetReqSODetails
FORM GETREQSODETAILS .
CALL FUNCTION 'BAPI_SALESORDER_GETLIST'
EXPORTING
CUSTOMER_NUMBER = CUSTOMER_NUMBER
SALES_ORGANIZATION = SALES_ORGANIZATION
IMPORTING
RETURN = WA_RETURN
TABLES
SALES_ORDERS = IT_SALES_ORDERS.
*delete the Sales Order Details of Sales Orders other than the req.One
IF NOT IT_SALES_ORDERS[] IS INITIAL.
SORT IT_SALES_ORDERS BY SD_DOC.
LOOP AT IT_SALES_ORDERS INTO WA_SALES_ORDERS.
IF WA_SALES_ORDERS-SD_DOC NE SALESDOCUMENT.
DELETE IT_SALES_ORDERS.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " GetReqSODetails
*& Form deleteOldSODetails
FORM DELETEOLDSODETAILS .
DATA: IRECCOUNT TYPE I.
IRECCOUNT = 1.
*Clear all the Inernal Tables And Work Areas
*and Update the SO Header Index
PERFORM CLEARDATA.
PERFORM SOHEADERINDEX.
LOOP AT IT_SALES_ORDERS INTO WA_SALES_ORDERS.
*Fill the Order Details Index Internal Table
PERFORM FILLSODELETEDTLS_INDEX_PARAM
USING WA_SALES_ORDERS-ITM_NUMBER 'D'.
*Fill the Order Scedule Index Internal Table
PERFORM FILLSODELETESCH_INDEX_PARAM
USING WA_SALES_ORDERS-ITM_NUMBER IRECCOUNT 'D'.
ENDLOOP.
*call the Sales Order Change Fumction to delete the Existing Data
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
SALESDOCUMENT = SALESDOCUMENT
ORDER_HEADER_INX = WA_ORDER_HEADER_INX
TABLES
RETURN = IT_RETURN_CHG
ORDER_ITEM_INX = IT_ORDER_ITEM_INX
SCHEDULE_LINESX = IT_SCHEDULE_LINESX.
ENDFORM. " deleteOldSODetails
*& Form SOHeaderIndex
FORM SOHEADERINDEX .
WA_ORDER_HEADER_INX-UPDATEFLAG = 'U'.
ENDFORM. " SOHeaderIndex
*& Form FillSODeleteDtls_Index_param
FORM FILLSODELETEDTLS_INDEX_PARAM
USING VALUE(P_ITM_NUMBER) VALUE(P_FLAG).
WA_ORDER_ITEM_INX-ITM_NUMBER = P_ITM_NUMBER.
WA_ORDER_ITEM_INX-UPDATEFLAG = P_FLAG.
APPEND WA_ORDER_ITEM_INX TO IT_ORDER_ITEM_INX.
ENDFORM. " FillSODeleteDtls_Index_param
*& Form FILLSODELETEsch_Index_PARAM
FORM FILLSODELETESCH_INDEX_PARAM
USING VALUE(P_ITM_NUMBER) VALUE(P_RECCOUNT) VALUE(P_FLAG).
WA_SCHEDULE_LINESX-ITM_NUMBER = P_ITM_NUMBER.
WA_SCHEDULE_LINESX-SCHED_LINE = P_RECCOUNT.
WA_SCHEDULE_LINESX-UPDATEFLAG = P_FLAG.
APPEND WA_SCHEDULE_LINESX TO IT_SCHEDULE_LINESX.
ENDFORM. " FILLSODELETEsch_Index_PARAM
*& Form addnewSODETAILS
FORM ADDNEWSODETAILS .
DATA: IRECCOUNT TYPE I, ITEMNO TYPE I.
IRECCOUNT = 1.
*Clear all the Inernal Tables And Work Areas
*and Update the SO Header Index
PERFORM CLEARDATA.
PERFORM SOHEADERINDEX.
WHILE IRECCOUNT <= 1.
ITEMNO = IRECCOUNT * 10.
*Fill the New Order Details in the Internal Table
PERFORM FILLSODTLDATA USING ITEMNO 'TEST FG' 37 .
*Fill the Order Details Index Internal Table
PERFORM FILLSODELETEDTLS_INDEX_PARAM USING ITEMNO 'I'.
*Fill the New Schedule Details in the Internal Table
PERFORM FILLSOSCHDATA USING ITEMNO IRECCOUNT 37 .
*Fill the Order Scedule Index Internal Table
PERFORM FILLSODELETESCH_INDEX_PARAM
USING ITEMNO IRECCOUNT 'I'.
IRECCOUNT = IRECCOUNT + 1.
ENDWHILE.
*call the Sales Order Change Fumction to Insert New Data
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
SALESDOCUMENT = SALESDOCUMENT
ORDER_HEADER_INX = WA_ORDER_HEADER_INX
TABLES
RETURN = IT_RETURN_CHG
ORDER_ITEM_IN = IT_ORDER_ITEM_IN
ORDER_ITEM_INX = IT_ORDER_ITEM_INX
SCHEDULE_LINES = IT_SCHEDULE_LINES
SCHEDULE_LINESX = IT_SCHEDULE_LINESX.
ENDFORM. " addnewSODETAILS
*& Form clearData
FORM CLEARDATA .
CLEAR WA_ORDER_HEADER_INX.
CLEAR WA_ORDER_ITEM_INX.
REFRESH IT_ORDER_ITEM_INX.
CLEAR WA_SCHEDULE_LINESX.
REFRESH IT_SCHEDULE_LINESX.
CLEAR WA_RETURN.
REFRESH IT_RETURN.
CLEAR WA_ORDER_ITEM_IN.
REFRESH IT_ORDER_ITEM_IN.
CLEAR WA_SCHEDULE_LINES.
REFRESH IT_SCHEDULE_LINES.
ENDFORM. " clearData
*& Form FILLSODTLDATA
FORM FILLSODTLDATA USING VALUE(P_ITEMNO) VALUE(P_MATERIAL)
VALUE(P_TARGET_QTY) .
WA_ORDER_ITEM_IN-ITM_NUMBER = P_ITEMNO.
WA_ORDER_ITEM_IN-MATERIAL = P_MATERIAL.
WA_ORDER_ITEM_IN-TARGET_QTY = P_TARGET_QTY.
APPEND WA_ORDER_ITEM_IN TO IT_ORDER_ITEM_IN.
ENDFORM. " FILLSODTLDATA
*& Form FILLSOschDATA
FORM FILLSOSCHDATA USING VALUE(P_ITEMNO)
VALUE(P_RECCOUNT)
VALUE(P_REQ_QTY) .
WA_SCHEDULE_LINES-ITM_NUMBER = P_ITEMNO.
WA_SCHEDULE_LINES-SCHED_LINE = P_RECCOUNT.
WA_SCHEDULE_LINES-REQ_QTY = P_REQ_QTY.
APPEND WA_SCHEDULE_LINES TO IT_SCHEDULE_LINES.
ENDFORM. " FILLSOschDATA
*& Form committrans
FORM COMMITTRANS .
DATA:SUCCESSFLAG(1).
LOOP AT IT_RETURN_CHG INTO WA_RETURN_CHG.
IF WA_RETURN_CHG-TYPE = 'S'
AND WA_RETURN_CHG-ID = 'V1'
AND WA_RETURN_CHG-NUMBER = 311
AND SUCCESSFLAG IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
IMPORTING
RETURN = IT_RETURN_CT.
SUCCESSFLAG = 'X'.
ENDIF.
ENDLOOP.
IF SUCCESSFLAG IS INITIAL.
WRITE: 'SORRY SOME ERROR'.
ELSE.
WRITE: 'SUCCESSFUL'.
ENDIF.
ENDFORM. " committransThanx wolfgang,
I needed that info.
As I had mentioned in the earlier posts, I want to delete the old Sales Order Item Details,
Schedule Details,Basic Price data And Reinsert data in the same.
I am giving u the algo that I have used.
1.<b>Get the SalesOrder Details</b> for a particular Sales Order using BAPI_SALESORDER_GETLIST(para:customer & sales Org and then deleting unwanted SO data).
2.<b>Delete</b> the Sales Order <b>Item Details,Schedule Details</b> using BAPI_SALESORDER_CHANGE.
3.<b>Commit</b> Transaction(<b>If I dont use this commit Error comes in Step No.7 while Commiting</b>)
using BAPI_TRANSACTION_COMMIT.
4.Check <b>Return Table</b> of both BAPI_SALESORDER_CHANGE and BAPI_TRANSACTION_COMMIT.
5.if Step No.4 is <b>Not okay</b> <b>then Rollback</b>(BAPI_TRANSACTION_TRANSACTIN) <b>and Exit</b> <b>else move to step 6</b>.
6.<b>Add New</b> Sales Order <b>Item Details,Schedule Details, Basic Price</b> using BAPI_SALESORDER_CHANGE.
7.<b>Commit Transaction</b> using BAPI_TRANSACTION_COMMIT.
8.<b>Check Return</b> Log of both BAPI_SALESORDER_CHANGE and BAPI_TRANSACTION_COMMIT.
9.if Step No.9 is okay then Exit else Rollback(BAPI_TRANSACTION_TRANSACTIN) and move to step 10.
10.Add Old Sales Order Item Details,Schedule Details, Basic Price from Data available in Internal
table(Filled in step.1 ) using BAPI_SALESORDER_CHANGE.
11.Commit Transaction using BAPI_TRANSACTION_COMMIT.
This <b>works fine in 1 server in which I get the message of Incomplete Data,etc...when I make a Sales Order from va01</b>.
But in another server where I dont this message,I get <b>error in step 7 or 11 as per the flow</b>.
The return structure of BAPI_TRANSACTION_COMMIT contains error with Message 'Updating was not possible'. Also the message 'Updation was terminated' cms frm the SAP server.
What could be the reason?
Thanx in advance -
Change sold-to party BAPI_SALESORDER_CHANGE
Hello,
Does anyone know how to change partner function AG (sold-to-party) in a sales order header from within ABAP code ?
I'm using BAPI_SALESORDER_CHANGE function module to change partner functions. It works well for all other partner functions, but for the AG ("sold-to-party") function it yields a message saying that changing AG function is impossible.
Although changing "sold-to-party" partner function is disabled in user interface (VA02 transaction -> order header details), but the user DOES have the possibility to change "sold-to-party": he can change field KUNNR in main screen of transaction VA02 (this field is mapped to VBAK-KUNNR) - after changing it, the AG partner function in header details changes to the value set in it. Does anyone have an idea how to achieve the same from ABAP code ?
Regards,
Flavio.REPORT ZSALESORDER_CHANGE MESSAGE-ID 38.
Selection Screen Definitions *
PARAMETERS: p_vbeln TYPE vbap-vbeln OBLIGATORY, "Order Number
p_posnr TYPE vbap-posnr OBLIGATORY, "Order Item
p_etenr TYPE vbep-etenr OBLIGATORY, "Schedule Line
p_reqqty TYPE bapischdl-req_qty OBLIGATORY. " Order Qty
Internal Tables/Structures/Variables for calling BAPI. *
DATA: i_hdr TYPE bapisdh1,
i_hdrx TYPE bapisdh1x,
i_ret TYPE bapiret2 OCCURS 0 WITH HEADER LINE,
wa_ret TYPE bapiret2.
DATA: BEGIN OF i_sched OCCURS 10.
INCLUDE STRUCTURE bapischdl.
DATA: END OF i_sched.
DATA: BEGIN OF i_schedx OCCURS 10.
INCLUDE STRUCTURE bapischdlx.
DATA: END OF i_schedx.
START-OF-SELECTION Event *
START-OF-SELECTION.
*" Initialize internal tables.
REFRESH: i_sched, i_schedx, i_ret.
CLEAR: i_sched, i_schedx, i_ret.
*" Fill required ORDER_HEADER_IN data.
i_hdrx-updateflag = 'U'.
*" Fill required SCHEDULE_LINES data.
i_sched-itm_number = p_posnr.
i_sched-sched_line = p_etenr.
i_sched-req_qty = p_reqqty.
i_schedx-updateflag = 'U'.
i_schedx-itm_number = p_posnr.
i_schedx-sched_line = p_etenr.
i_schedx-req_qty = 'X'.
APPEND i_sched.
APPEND i_schedx.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = p_vbeln
order_header_in = i_hdr
order_header_inx = i_hdrx
TABLES
return = i_ret
schedule_lines = i_sched
schedule_linesx = i_schedx.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
LOOP AT i_ret.
WRITE / i_ret-message.
ENDLOOP. -
Error in BAPI_SALESORDER_CHANGE
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,
nityaI 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 -
Error in BAPI_SALESORDER_CHANGE while updating condition
Hi,
I am using this BAPI to change an existing pricing condition. However, I am getting an error " Manual change of condition type is not possible". I'm not sure whether this is a coding error or is it related to configuration. this is how I am populating the structures:
so_cond_in-itm_number = wa_vbap1-posnr.
so_cond_in-cond_count = wa_konv-zaehk.
so_cond_in-cond_st_no = wa_konv-STUNR.
so_cond_in-cond_type = wa_konv-kschl.
so_cond_in-cond_value = wa_konv-kbetr.
so_cond_in-currency = wa_konv-waers.
so_condx_in-itm_number = wa_vbap1-posnr.
so_condx_in-updateflag = 'U'.
so_condx_in-cond_st_no = wa_konv-STUNR.
so_condx_in-cond_count = wa_konv-zaehk.
so_condx_in-cond_type = wa_konv-kschl.
so_condx_in-cond_value = 'X'.
so_condx_in-currency = 'X'.
APPEND so_condx_in.
CLEAR so_condx_in.
APPEND so_cond_in.
CLEAR so_cond_in.
st_logswitch-cond_handl = 'X'.
Any help would be appreciated.
Thanks
SMHi Sneha ,
Can you please check the code for using the BAPI_SALESORDER_CHANGE bapi. this is similar to your chase. Please compare with the passing parameters
then you will get some idea on your code.
*- Population of Order Item data
ls_order_item-itm_number = ls_submit-posnr. "Item
ls_order_item-prc_group5 = '003'."lc_004. "Material Group5
IF ls_submit-zmeng = 0.
ls_order_item-reason_rej = lc_99. "Reason for Rejection
ENDIF.
APPEND ls_order_item TO lt_order_item.
*-Population of update flag for Order Item
ls_order_itemx-itm_number = ls_submit-posnr."Item
ls_order_itemx-updateflag = lc_u. "Update flag
ls_order_itemx-prc_group5 = gc_x. "Material Group5 update
*- if the required quanity is zero then reject the line
IF ls_submit-zmeng = 0.
ls_order_itemx-reason_rej = gc_x. "Reason for Rejection
ENDIF.
APPEND ls_order_itemx TO lt_order_itemx.
*-Population of
ls_schedule_lines-itm_number = ls_submit-posnr.
ls_schedule_lines-sched_line = ls_submit-etenr.
ls_schedule_lines-req_qty = ls_submit-zmeng.
APPEND ls_schedule_lines TO lt_schedule_lines.
*-Population of update flag for Schedule line data
ls_schedule_linesx-itm_number = ls_submit-posnr.
ls_schedule_linesx-sched_line = ls_submit-etenr.
ls_schedule_linesx-updateflag = lc_u.
ls_schedule_linesx-req_qty = gc_x.
APPEND ls_schedule_linesx TO lt_schedule_linesx.
*- at the end of Order call the BAPI to Update the Order
ls_order_head-collect_no = ls_submit-vbeln.
ls_order_headx-updateflag = lc_u.
ls_order_headx-collect_no = gc_x.
*- BAPI Call to Update the Order
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = ls_submit-vbeln
order_header_in = ls_order_head
order_header_inx = ls_order_headx
TABLES
return = lt_return
order_item_in = lt_order_item
order_item_inx = lt_order_itemx
schedule_lines = lt_schedule_lines
schedule_linesx = lt_schedule_linesx.
*- Check for the errors and based on that populate the log
READ TABLE lt_return INTO ls_return WITH KEY type = lc_e.
IF sy-subrc EQ 0.
LOOP AT lt_return INTO ls_return WHERE type = lc_e.
ls_log-excep = 1.
ls_log-vbeln = ls_submit-vbeln.
ls_log-message = ls_return-message.
APPEND ls_log TO gt_log.
CLEAR: ls_log,
ls_submit-vbeln .
ENDLOOP.
ELSE.
*- Commit the Changes
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = gc_x.
*- Check for the success message and populate the log
LOOP AT lt_return INTO ls_return WHERE number = lc_311.
ls_log-excep = 3.
ls_log-vbeln = ls_submit-vbeln.
ls_log-message = ls_return-message.
APPEND ls_log TO gt_log.
CLEAR: ls_log,
ls_submit-vbeln .
ENDLOOP.
ENDIF.
Thanks
Sekhar -
Problem while changing Sales order using 'BAPI_SALESORDER_CHANGE'
Hi all,
Below is my code to update delivery block value:
FORM call_bapi_salesorder_change .
DATA: iv_bapi_view LIKE order_view.
DATA: gt_sales_doc TYPE STANDARD TABLE OF sales_key, " Document Numbers to Be Selected
gt_items TYPE STANDARD TABLE OF bapisdit. " Order Item Data for Document Numbers
*************************************************************8
DATA:order_headers_out LIKE bapisdhd OCCURS 0 WITH HEADER LINE.
DATA:order_header_inx LIKE bapisdh1x.
DATA: lv_salesdocument LIKE bapivbeln-vbeln.
data: lv_matnr(10) type c.
DATA:
gt_schdule TYPE STANDARD TABLE OF bapischdl, " for gl date & load date
gt_schdulex TYPE STANDARD TABLE OF bapischdlx, " for partner role and partner function.
gt_return TYPE STANDARD TABLE OF bapiret2,
gt_itemin TYPE STANDARD TABLE OF bapisditm,
gt_iteminx TYPE STANDARD TABLE OF bapisditmx ,
gt_bapisdh1 TYPE STANDARD TABLE OF bapisdh1.
DATA:gs_head_bapi TYPE bapisdh1x,
gs_schdule TYPE bapischdl,
gs_schdulex TYPE bapischdlx,
gs_return TYPE bapiret2,
gs_itemin TYPE bapisditm,
gs_iteminx TYPE bapisditmx,
gs_bapisdh1 TYPE bapisdh1.
CLEAR : gt_schdule,gt_schdulex,gs_return.
REFRESH gt_return.
gs_head_bapi-updateflag = 'U'.
SORT gt_final BY vbeln.
CLEAR gs_vbep.
REFRESH gt_vbep[].
CLEAR gs_final.
LOOP AT gt_final1 INTO gs_final.
gs_itemin-itm_number = gs_final-posnr.
*move gs_final-matnr to lv_matnr."qx94162
gs_itemin-material = gs_final-matnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = gs_final-matnr
IMPORTING
output = gs_final-matnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_matnr
IMPORTING
output = lv_matnr.
gs_itemin-material = lv_matnr.
gs_itemin-material = gs_final-matnr.
gs_iteminx-itm_number = gs_final-posnr.
gs_iteminx-updateflag = 'U'.""changed to I
gs_iteminx-material = 'X'.
" gs_schdule-req_dlv_bl = gs_final-lifsp. " Delivery block
gs_schdule-itm_number = gs_final-posnr.
gs_schdulex-itm_number = gs_final-posnr.
gs_schdule-sched_line = '0001'.
gs_schdulex-sched_line = '0001'.
MOVE gs_final-lifsp to gs_schdule-req_dlv_bl.
gs_schdule-req_dlv_bl = gs_final-lifsp.
gs_schdulex-req_dlv_bl = 'X'. " Delivery block
gs_schdulex-updateflag = 'U'.
gs_bapisdh1-sales_org = gs_final-vkorg.
APPEND gs_schdule TO gt_schdule.
APPEND gs_schdulex TO gt_schdulex.
APPEND gs_itemin TO gt_itemin.
APPEND gs_iteminx TO gt_iteminx.
Append gs_BAPISDH1 to gt_BAPISDH1.
lv_salesdocument = gs_final-vbeln.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = lv_salesdocument
ORDER_HEADER_IN = gs_BAPISDH1
order_header_inx = gs_head_bapi
SIMULATION =
BEHAVE_WHEN_ERROR = ' '
INT_NUMBER_ASSIGNMENT = ' '
LOGIC_SWITCH =
NO_STATUS_BUF_INIT = ' '
TABLES
return = gt_return
order_item_in = gt_itemin
order_item_inx = gt_iteminx
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 = gt_schdule
schedule_linesx = gt_schdulex
ORDER_TEXT =
ORDER_KEYS =
CONDITIONS_IN =
CONDITIONS_INX =
EXTENSIONIN =
NFMETALLITMS =
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
REFRESH: gt_schdule, gt_schdulex, gt_itemin , gt_iteminx.
LOOP AT gt_return INTO gs_return.
WRITE / gs_return-message .
ENDLOOP .
ENDLOOP.
ENDFORM. " CALL_BAPI_SALESORDER_CHANGE
When I am using material value as 18342 using CONVERSION_EXIT_ALPHA_OUTPUT:
ORDER_HEADER_IN has been processed successfully
Material is not defined for sales org.A101, distr.chan.00, language DE
Error in ITEM_IN 000030
SCHEDULE_IN has been processed successfully
The sales document is not yet complete: Edit data
Sales document 5010000715 was not changed
and when I am using CONVERSION_EXIT_ALPHA_INPUT (000000000000018342)or while debuging when I am changing value to 0018342 :
I am getting below dump:
Runtime Errors DATA_LENGTH_0
Exception CX_SY_RANGE_OUT_OF_BOUNDS
Date and Time 21.10.2010 07:22:17
Information on where terminated
Termination occurred in the ABAP program "SAPLVBAK" - in
"MAP_VBAP_TO_BAPISDIT".
The main program was "RS_TESTFRAME_CALL ".
In the source code you have the termination point in line 168
of the (Include) program "LVBAK001".
The termination is caused because exception "CX_SY_RANGE_OUT_OF_BOUNDS"
occurred in
procedure "MAP_VBAP_TO_BAPISDIT" "(FORM)", but it was neither handled local
nor declared
in the RAISING clause of its signature.
The procedure is in program "SAPLVBAK "; its source code begins in line
99 of the (Include program "LVBAK001 ".
The same dump I am getting while executing this above BAPI from SE37 tcode with the same test data.
but I am able to change it though Va02 tcode.
Edited by: Arora26 on Oct 21, 2010 7:58 AMHi,
have you searched for OSS notes? The note 1137897 looks like related to your problem. It mentions different BAPI but I assume that both BAPI reuse same routines and therefore it might solve your problem as well.
Cheers -
How to INSERT items using BAPI_SALESORDER_CHANGE
Hello all,
i am trying to insert a items into SALESDOCUMENT, i am making the following process.
i have a SALESDOCUMENT from which a make a copy then i delete all the ITEMS and i try to insert the new one, i am trying to insert a new ITEMS which has relations with another material i am making this because i am expecting when i insert the ITEMS all the material will be recalculated.
for example
position material quantity.
10 6050 1 this is the main material
20 7228 30 This is child record of the main material
30 7143 1 this is child record of the main material.
when i run my function i need to modify the main material as this
position material quantity
10 6050 2.
so i am expecting
position material quantity.
10 6050 2 this is the main material
20 7228 60 This is child record of the main material
30 7143 2 this is child record of the main marial.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = p_copia "this is the copy
order_header_inx = are_headx " value U
TABLES
return = tab_retor
order_item_in = tab_items
order_item_inx = tab_itemx
schedule_lines = tab_sched
schedule_linesx = tab_schex.
but i really i don`t how to do it, i have been using the bapi BAPI_SALESORDER_CHANGE, this bapi delete the items this is ok , but not insert the items that i need , 'does anybody has make something like this, i will really apprecite if someone give a hand, please.continue..................................................
***GET LIST OF SALESORDER
CALL FUNCTION 'BAPISDORDER_GETDETAILEDLIST'
EXPORTING
i_bapi_view = i_bapi_view
TABLES
sales_documents = sales_documents
order_headers_out = order_headers_out
order_items_out = order_items_out.
LOOP AT order_items_out .
MOVE-CORRESPONDING order_items_out TO order_item_in.
order_item_in-val_type = pval.
APPEND order_item_in.
ENDLOOP.
LOOP AT order_item_in .
MOVE-CORRESPONDING order_item_in TO itab_ch.
APPEND itab_ch.
ENDLOOP.
LOOP AT itab_ch .
* Header update indicator
s_order_header_inx-updateflag = 'U'.
i_order_item_in-itm_number = itab_ch-itm_number .
i_order_item_in-material = itab_ch-material.
i_order_item_in-target_qty = itab_ch-target_qty.
i_order_item_in-sales_unit = itab_ch-sales_unit.
i_order_item_in-val_type = itab_ch-val_type.
i_order_item_inx-updateflag = 'I'.
i_order_item_inx-itm_number = itab_ch-itm_number .
i_order_item_inx-material = itab_ch-material.
i_order_item_inx-target_qty = 'X'.
i_order_item_inx-sales_unit = itab_ch-sales_unit.
i_order_item_inx-val_type = 'X'.
APPEND: i_order_item_in, i_order_item_inx.
** Fill schedule lines
i_sched-itm_number = itab_ch-itm_number .
i_sched-sched_line = '0001'.
i_sched-req_qty = itab_ch-target_qty.
APPEND i_sched.
* Fill schedule line flags
i_schedx-itm_number = itab_ch-itm_number .
i_schedx-sched_line = '0001'.
i_schedx-updateflag = 'I'.
i_schedx-req_qty = 'X'.
APPEND i_schedx.
ENDLOOP.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = p_vbeln
order_header_in = s_order_header_in
order_header_inx = s_order_header_inx
behave_when_error = 'P'
TABLES
return = it_return
order_item_in = i_order_item_in
order_item_inx = i_order_item_inx
schedule_lines = i_sched
schedule_linesx = i_schedx.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
LOOP AT it_return.
WRITE / it_return-message.
ENDLOOP. -
Characteristic values in BAPI_SALESORDER_CHANGE
Hi,
I want to add new configurable item in existing sales order with charactersitic values.
Iam using bapi BAPI_SALESORDER_CHANGE.
Iam now able to insert configurable item in existing sales order.
But the characteristic values are not getting stored.
Latest code is attached. What else is missing for storing characteristic values ?
select maximum item number in sales order
SELECT MAX( POSNR ) FROM VBAP CLIENT SPECIFIED
INTO MAX_POSNR
WHERE MANDT = SY-MANDT AND
VBELN = I_SORDER.
TMP_POSNR = MAX_POSNR + 10.
WA_HDRX-UPDATEFLAG = 'U'. "update
SALES_DOC = I_SORDER.
item data
WA_ITEM-ITM_NUMBER = TMP_POSNR.
WA_ITEM-MATERIAL = 'LEFTEYE'.
WA_ITEM-PLANT = I_STORE.
WA_ITEM-SHIP_POINT = I_STORE.
APPEND WA_ITEM TO IT_ITEM.
WA_ITEMX-ITM_NUMBER = TMP_POSNR.
WA_ITEMX-UPDATEFLAG = 'I'. "add
WA_ITEMX-MATERIAL = 'X'.
WA_ITEMX-PLANT = 'X'.
WA_ITEMX-SHIP_POINT = 'X'.
APPEND WA_ITEMX TO IT_ITEMX.
Schedule lines
WA_SCHD-ITM_NUMBER = TMP_POSNR.
WA_SCHD-SCHED_LINE = TMP_POSNR.
WA_SCHD-REQ_DATE = SY-DATUM.
WA_SCHD-REQ_QTY = 1.
WA_SCHD-SCHED_TYPE = 'CN'.
APPEND WA_SCHD TO IT_SCHD.
WA_SCHDX-ITM_NUMBER = TMP_POSNR.
WA_SCHDX-SCHED_LINE = TMP_POSNR.
WA_SCHDX-REQ_DATE = 'X'.
WA_SCHDX-REQ_QTY = 'X'.
WA_SCHDX-SCHED_TYPE = 'X'.
APPEND WA_SCHDX TO IT_SCHDX.
config & characteristic values
WA_VALUE-CONFIG_ID = '000001'.
WA_VALUE-INST_ID = '00000001'.
WA_VALUE-CHARC = 'PRES_DIST_SPH'.
WA_VALUE-VALUE = '3.2'.
APPEND WA_VALUE TO IT_VALUE.
WA_INST-CONFIG_ID = '000001'.
WA_INST-INST_ID = '00000001'.
WA_INST-OBJ_TYPE = 'MARA'.
WA_INST-CLASS_TYPE = '300'.
WA_INST-OBJ_KEY = 'LEFTEYE'.
WA_INST-QUANTITY = 1.
WA_INST-QUANTITY_UNIT = 'NO'.
APPEND WA_INST TO IT_INST.
WA_REF-POSEX = TMP_POSNR.
WA_REF-CONFIG_ID = '000001'.
WA_REF-ROOT_ID = '00000001'.
APPEND WA_REF TO IT_REF.
WA_PART-CONFIG_ID = '000001'.
WA_PART-PARENT_ID = '00000001'.
WA_PART-INST_ID = '00000001'.
WA_PART-OBJ_TYPE = 'MARA'.
WA_PART-CLASS_TYPE = '300'.
WA_PART-OBJ_KEY = 'LEFTEYE'.
APPEND WA_PART TO IT_PART.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
SALESDOCUMENT = SALES_DOC
ORDER_HEADER_INX = WA_HDRX
TABLES
RETURN = IT_RET
ORDER_ITEM_IN = IT_ITEM
ORDER_ITEM_INX = IT_ITEMX
ORDER_CFGS_REF = IT_REF
ORDER_CFGS_PART_OF = IT_PART
ORDER_CFGS_INST = IT_INST
ORDER_CFGS_VALUE = IT_VALUE
SCHEDULE_LINES = IT_SCHD
SCHEDULE_LINESX = IT_SCHDX.
READ TABLE IT_RET INTO WA_RET WITH KEY TYPE = 'E'.
IF SY-SUBRC = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ENDIF.
I get the following messages from BAPI :
ORDER_HEADER_IN has been processed successfully.
ITEM_IN has been processed successfully
The sales document is not yet complete: Edit data
TIL-Direct Sales TINDC01372 has been saved
What else is missing ? Any help is appreciated.
thanks,
Nagarajan.JHello Nagarajan,
I have used this BAPI in my last task. You are passing the values correctly. I will tell you why it is giving like that message.
Whenever we will create a sales order in VA01 transaction, you will get a message like "The sales order is not complete, would you like to EDIT" while saving the sales order.... This is because of not providing complete data required for careation of sales order.
Try to implement the changes manually in VA02, if you get same errors, then you can find your code is correct.
Even I got same type of messages when changing a sales order to change the Rejection Reason for the items.
Best Regards,
Sasidhar Reddy Matli.
Edited by: Sasidhar Reddy Matli on Jul 31, 2008 2:20 PM -
BAPI_SALESORDER_CHANGE is not updating route.
Hi All,
I have tried updating the values of route for a particular sales order number. It is updating correctly if they have single line items .If they have multiple line items, only some of them are getting updated. In my case it is updating only the first 2 out of 4 line items. I have been debugging it fr a long time , couldnt get any lead on this.Please help me on this.
loop at li_order into lwa_order.
clear lwa_ext_in.
lwa_ext_in-structure = 'BAPE_VBAP'.
assign lwa_ext_in-valuepart1 to <fs_bape_vbap> casting.
<fs_bape_vbap>-vbeln = lwa_order-vbeln.
<fs_bape_vbap>-posnr = lwa_order-posnr.
<fs_bape_vbap>-zztruck_id = wa_output-truck_no.
<fs_bape_vbap>-zzdrop_seq = wa_output-seq_no.
append lwa_ext_in to li_ext_in.
clear lwa_ext_in.
lwa_ext_in-structure = 'BAPE_VBAPX'.
assign lwa_ext_in-valuepart1 to <fs_bape_vbapx> casting.
<fs_bape_vbapx>-vbeln = lwa_order-vbeln.
<fs_bape_vbapx>-posnr = lwa_order-posnr.
<fs_bape_vbapx>-zztruck_id = 'X'.
<fs_bape_vbapx>-zzdrop_seq = 'X'.
append lwa_ext_in to li_ext_in.
endloop.
endif.
call function 'BAPI_SALESORDER_CHANGE'
exporting
salesdocument = wa_output-vbeln
order_header_in = wa_order_header_in
order_header_inx = wa_order_header_inx
tables
return = i_return
order_item_in = i_order_item_in
order_item_inx = i_order_item_inx
schedule_lines = i_schedule_lines
schedule_linesx = i_schedule_linesx
order_text = i_order_text
extensionin = li_ext_in.For the four line items im getting these messages.
ORDER_HEADER_IN has been processed successfully
ITEM_IN has been processed successfully
The sales document is not yet complete: Edit data
Standard Order XYZ 23232 has been saved -
BAPI_SALESORDER_CHANGE [delete line item and update ]
LOOP AT itab_ch .
*IF itab_ch-itm_number = selpos1 AND delflag = 'X'.*
* Delete Line items
s_order_header_inx-updateflag = 'U'.
i_order_item_in-itm_number = itab_ch-itm_number.
schedule_lines-itm_number = itab_ch-itm_number.
schedule_lines-sched_line = zsd_tab_z-etenr.
schedule_lines-req_qty = itab_ch-target_qty.
i_order_item_inx-updateflag = 'D'.
i_order_item_inx-itm_number = itab_ch-itm_number.
schedule_linesX-itm_number = itab_ch-itm_number.
schedule_linesx-sched_line = zsd_tab_z-etenr.
schedule_linesx-req_qty = 'X'.
APPEND schedule_lines.
APPEND schedule_linesx.
APPEND: i_order_item_in, i_order_item_inx.
ELSE.
if itab_ch-item_categ = 'ZFRS'.
s_order_header_inx-updateflag = 'U'.
i_order_item_in-itm_number = itab_ch-itm_number.
i_order_item_in-target_qty = itab_ch-target_qty.
schedule_lines-itm_number = itab_ch-itm_number.
schedule_lines-sched_line = zsd_tab_z-etenr.
schedule_lines-req_qty = itab_ch-target_qty.
i_order_item_inx-updateflag = 'U'.
i_order_item_inx-itm_number = itab_ch-itm_number.
i_order_item_inx-target_qty = itab_ch-target_qty.
schedule_linesX-itm_number = itab_ch-itm_number.
schedule_linesx-sched_line = zsd_tab_z-etenr.
schedule_linesx-req_qty = 'X'.
APPEND schedule_lines.
APPEND schedule_linesx.
APPEND: i_order_item_in, i_order_item_inx.
ENDIF.
ENDIF.
ENDLOOP.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = vbap-vbeln
order_header_in = s_order_header_in
order_header_inx = s_order_header_inx
behave_when_error = 'P'
TABLES
return = it_return
order_item_in = i_order_item_in
order_item_inx = i_order_item_inx
schedule_lines = schedule_lines
schedule_linesx = schedule_linesx.
here line item is delete perfect but when i use updateflag = 'U' for other line itme then
quantity is not modify
Code Formatted by: Alvaro Tejada Galindo on Dec 26, 2008 10:26 AMDATA: s_order_header_in LIKE bapisdh1.
DATA: s_order_header_inx LIKE bapisdh1x.
DATA: BEGIN OF i_order_item_in OCCURS 0.
INCLUDE STRUCTURE bapisditm.
DATA: END OF i_order_item_in.
DATA: BEGIN OF i_order_item_inx OCCURS 0.
INCLUDE STRUCTURE bapisditmx.
DATA: END OF i_order_item_inx.
DATA: BEGIN OF it_return OCCURS 0.
INCLUDE STRUCTURE bapiret2.
DATA: END OF it_return.
DATA: BEGIN OF i_sched OCCURS 10.
INCLUDE STRUCTURE bapischdl.
DATA: END OF i_sched.
DATA: BEGIN OF i_schedx OCCURS 10.
INCLUDE STRUCTURE bapischdlx.
DATA: END OF i_schedx.
LOOP AT itab_ch .
s_order_header_inx-updateflag = 'U'.
IF itab_ch-itm_number = selpos1 AND delflag = 'X'.
Delete Line items
i_order_item_in-itm_number = itab_ch-itm_number.
i_order_item_in-TARGET_QTY = itab_ch-target_qty.
i_order_item_inx-updateflag = 'D'.
i_order_item_inx-itm_number = itab_ch-itm_number.
i_order_item_inx-TARGET_QTY = 'X'.
APPEND: i_order_item_in, i_order_item_inx.
Fill schedule line flags
i_sched-itm_number = itab_ch-itm_number.
i_sched-sched_line = '0001'.
APPEND i_sched.
i_schedx-itm_number = itab_ch-itm_number.
i_schedx-sched_line = '0001'.
i_schedx-updateflag = 'D'.
APPEND i_schedx.
ELSE.
*****UPDATE TIEM.
if itab_ch-item_categ = 'ZFRS' .
Fill schedule lines
i_sched-itm_number = itab_ch-itm_number.
i_sched-sched_line = '0001'.
i_sched-req_qty = itemdiv.
APPEND i_sched.
Fill schedule line flags
i_schedx-itm_number = itab_ch-itm_number.
i_schedx-sched_line = '0001'.
i_schedx-updateflag = 'U'.
i_schedx-req_qty = 'X'.
APPEND i_schedx.
ENDIF.
ENDIF.
ENDLOOP.
IF errorflag IS INITIAL.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = vbap-vbeln
order_header_in = s_order_header_in
order_header_inx = s_order_header_inx
behave_when_error = 'P'
TABLES
return = it_return
order_item_in = i_order_item_in
order_item_inx = i_order_item_inx
schedule_lines = i_sched
schedule_linesx = i_schedx.
ENDIF.
LOOP AT it_return.
READ TABLE it_return WITH KEY NUMBER = '233'.
IF sy-subrc = 0.
CONCATENATE it_return-message INTO zmsg.
MESSAGE i000(38) WITH it_return-message .
EXIT.
ENDIF.
ENDLOOP. -
Change characteristics via BAPI_SALESORDER_CHANGE
Hello,
We are trying to change characteristics from within a contract programmatically using bapi BAPI_SALESORDER_CHANGE .
How ever even after filling all the data, looks like the characteristics doesnot change.
I did go through an SDN post for the similar issue, though the thread says answered, I do not see a resolution in that thread. Kindly share the resolution, if some one has resolved it.
Thanks
HRcheck the following logic
LOOP AT itab_ch .
* Header update indicator
s_order_header_inx-updateflag = 'U'.
* IF itab_ch-itm_number = zitem_num1.
* Line items
i_order_item_in-itm_number = itab_ch-itm_number .
i_order_item_in-material = itab_ch-material.
i_order_item_in-target_qty = itab_ch-target_qty.
i_order_item_in-sales_unit = itab_ch-sales_unit.
i_order_item_in-val_type = itab_ch-val_type.
i_order_item_inx-updateflag = 'I'.
i_order_item_inx-itm_number = itab_ch-itm_number .
i_order_item_inx-material = itab_ch-material.
i_order_item_inx-target_qty = 'X'.
i_order_item_inx-sales_unit = itab_ch-sales_unit.
i_order_item_inx-val_type = 'X'.
APPEND: i_order_item_in, i_order_item_inx.
** Fill schedule lines
i_sched-itm_number = itab_ch-itm_number .
i_sched-sched_line = '0001'.
i_sched-req_qty = itab_ch-target_qty.
APPEND i_sched.
* Fill schedule line flags
i_schedx-itm_number = itab_ch-itm_number .
i_schedx-sched_line = '0001'.
i_schedx-updateflag = 'I'.
i_schedx-req_qty = 'X'.
APPEND i_schedx.
ENDLOOP.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = p_vbeln
order_header_in = s_order_header_in
order_header_inx = s_order_header_inx
behave_when_error = 'P'
TABLES
return = it_return
order_item_in = i_order_item_in
order_item_inx = i_order_item_inx
schedule_lines = i_sched
schedule_linesx = i_schedx.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
LOOP AT it_return.
WRITE / it_return-message.
ENDLOOP.
Edited by: Krupaji on Feb 18, 2010 8:45 AM -
BAPI_SALESORDER_CHANGE problem: change sold-to-party
Hi guys,
I am having a problem with my current dev. I am using BAPI_SALESORDER_CHANGE to change the sold-to of a sales order.
However, I am getting error message: "You cannot change entry in partner function XX".
Can anyone help me on this?
Thanks!
jachi,
REPORT ZMYBAPI2 .
data : ordervbeln like bapivbeln occurs 0 with header line,
order_header_in like bapisdh1 occurs 0 with header line,
order_header_ix like bapisdh1x occurs 0 with header line.
data : order_items_in like bapisditm occurs 0 with header line,
order_items_ix like bapisditmx occurs 0 with header line.
data : order_partners like bapiparnr occurs 0 with header line.
data : return1 like bapiret2 occurs 0 with header line.
data : w_vbeln like bapivbeln occurs 0 with header line.
data:
order_schedules_in like bapischdl occurs 0 with header line,
order_schedules_inx like bapischdlx occurs 0 with header line.
order_header_in-sales_org = 'JNJ1'.
order_header_in-distr_chan = '02'.
order_header_in-division = 'J1'.
order_header_in-sales_off = 'JNJ1'.
order_header_in-purch_no_c = 'testbapipo'.
order_header_in-purch_date = sy-datum.
order_header_in-req_date_h = sy-datum.
append order_header_in.
order_items_in-material = '000000000000000727'.
order_items_in-plant = 'JNJ1'.
append order_items_in.
order_partners-partn_role = 'AG'.
order_partners-partn_numb = '0000000011'.
append order_partners.
order_schedules_in-itm_number = '10'.
order_schedules_in-req_qty = '10'.
append order_schedules_in.
*Updating the indices
order_header_ix-updateflag = 'U'.
order_header_ix-sales_org = 'X'.
order_header_ix-distr_chan = 'X'.
order_header_ix-division = 'X'.
order_header_ix-sales_off = 'X'.
order_header_ix-purch_no_c = 'X'.
order_header_ix-purch_date = 'X'.
order_header_ix-req_date_h = 'X'.
append order_header_ix.
order_items_ix-updateflag = 'U'.
order_items_ix-material = 'X'.
order_items_ix-plant = 'X'.
order_items_ix-division = 'X'.
order_items_ix-target_qu = 'X'.
append order_items_ix.
order_schedules_inx-updateflag = 'U'.
order_schedules_inx-itm_number = 'X'.
order_schedules_inx-req_qty = 'x'.
append order_schedules_inx.
call function 'BAPI_SALESORDER_CHANGE'
exporting
salesdocument =
ORDER_HEADER_IN = order_header_in
order_header_inx = order_header_ix
SIMULATION =
BEHAVE_WHEN_ERROR = ' '
INT_NUMBER_ASSIGNMENT = ' '
LOGIC_SWITCH =
tables
return = return1
ORDER_ITEM_IN = order_items_in
ORDER_ITEM_INX = order_items_ix
PARTNERS = order_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 = order_schedules_in
SCHEDULE_LINESX =
ORDER_TEXT =
ORDER_KEYS =
CONDITIONS_IN =
CONDITIONS_INX =
EXTENSIONIN =
if sy-subrc ne 0.
write: return1-message,return1-number,return1-type.
else.
write: return1-message,return1-number,return1-type.
call function 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT =
IMPORTING
RETURN =
endif.
This may give an idea, This program written on 4.6B.
still u r problem not solved, please post the code
regards,
pavan
Maybe you are looking for
-
F110 payment proposal: Open Items layout
Hello Gurus, ive got the payment running fine, but when i generate the payment and go into the open items detailed view of propesed payment i can see a lot of fields with diffrent information. There is one filed named Internal order, but he is empty.
-
3602i CAP unable to join WLC 5508
Hi All, Hope to you a very happy new year, I have an (AIR-CAP3602i-E-K9) and I tried to join it to WLC 5508 but I'm facing an error, I get this error from the LAP 1310 console as below: Reading cookie from SEEPROM Base Ethernet MAC address: 60:73:5c:
-
Changing publishing group name in AD
I need to rename a group in AD. There are packages published for this group. Do I need to unpublish the packages and publish to renamed group. Or APPVMAN will react accordingly. --- When you hit a wrong note its the next note that makes it good or ba
-
Hi, How to implement multiple selection in LOV region-query result table and return multiple values from LOV region back to the main page? Any help in this regard is greatly appreciated.
-
Digital Booklets - are more coming?
This is probably a question for an Apple representative, but perhaps someone else here has heard through the grapevine. I see in my latest scan of new album offerings on the Itunes Store that 8 of 25 include digital booklets. This is certainly a much