‎2007 Jul 17 5:43 AM
Hi,
I am not able to change the <b>order quantity</b> for the sales order number using BAPI_SALESORDER_CHANGE. The values that i am passing are item number, schedule line number and order quantity in sales units. Update flag I am setting it to 'U' in both "schedule_linesx " and also in "order_header_inx". I am passing item details as well. Kindly let me know is there any other parameters that I need to pass to change the order quantity.
The example code that I am trying is shown below:
DATA: v_vbeln TYPE bapivbeln-vbeln VALUE '0000004970',
headerx TYPE bapisdh1x,
return TYPE TABLE OF bapiret2,
item TYPE TABLE OF bapisditm,
wa_item TYPE bapisditm,
wa_itemx TYPE bapisditmx,
itemx TYPE TABLE OF bapisditmx,
sch TYPE TABLE OF bapischdl,
wa_sch TYPE bapischdl,
schx TYPE TABLE OF bapischdlx,
wa_schx TYPE bapischdlx,
return1 TYPE bapiret2.
wa_sch-itm_number = 000010.
wa_sch-sched_line = 0001.
wa_sch-req_qty = 8.
*wa_sch-SCHED_TYPE = 'CV'.
APPEND wa_sch TO sch.
wa_schx-itm_number = 000010.
wa_schx-sched_line = 'X'.
wa_schx-updateflag = 'U'.
wa_schx-req_qty = 'X'.
*wa_sch-SCHED_TYPE = 'X'.
APPEND wa_schx TO schx.
headerx-updateflag = 'U'.
wa_item-itm_number = 000010.
wa_item-material = 'M-01'.
wa_item-target_qty = 14.
wa_ITEM-plant = 1200.
APPEND wa_item TO item.
wa_itemx-itm_number = 000010.
wa_itemx-updateflag = 'U'.
wa_itemx-material = 'X'.
wa_itemx-target_qty = 'X'.
wa_itemx-plant = 'X'.
APPEND wa_itemx TO itemx.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = v_vbeln
ORDER_HEADER_IN = header
order_header_inx = headerx
TABLES
return = return
order_item_in = item
order_item_inx = itemx
schedule_lines = sch
schedule_linesx = schx
.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
IMPORTING
return = return1.
‎2007 Jul 17 5:51 AM
do compare with my program and my program works well
&----
*& Report ZNA_SH_CREATE_CHANGE_SO_BAPI
*&
&----
*&
*&
&----
REPORT zna_sh_create_change_so_bapi MESSAGE-ID z7new.
*Internal table declaration for Creating SO
DATA: i_header TYPE bapisdhd1.
DATA: i_details TYPE bapisditm OCCURS 0 WITH HEADER LINE.
DATA: i_partner TYPE bapiparnr OCCURS 0 WITH HEADER LINE.
DATA: i_return1 TYPE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA: i_return2 TYPE bapiret2.
*Work Area declaration for Creating SO
DATA: wa_return1 TYPE bapiret2.
DATA: wa_header TYPE bapisdhd1.
DATA: wa_partner TYPE bapiparnr.
DATA: wa_flag TYPE bapisdhd1x.
DATA: ok_code TYPE sy-ucomm.
DATA: n TYPE i.
*Declaration's for changing SO
*Type Declaration for Item table
TYPES: BEGIN OF type_vbap,
vbeln TYPE vbeln_va,
posnr TYPE posnr_va,
werks TYPE werks_ext,
lgort TYPE lgort_d,
zmeng TYPE dzmeng,
zieme TYPE dzieme,
END OF type_vbap.
*Internal Tables declarations for Changing SO
DATA: i_flag TYPE bapisdh1x OCCURS 0 WITH HEADER LINE.
DATA: i_vbap TYPE STANDARD TABLE OF type_vbap.
DATA: i_bapisditm TYPE bapisditm OCCURS 0 WITH HEADER LINE,
i_bapisditmx TYPE bapisditmx OCCURS 0 WITH HEADER LINE.
*Work Area declaration for Changing SO
DATA: wa_vbap TYPE type_vbap.
DATA: p_vbeln TYPE vbak-vbeln.
DATA: v_vbeln TYPE bapivbeln-vbeln.
*data: v_posnr TYPE posnr_va,
v_werks TYPE werks_ext,
v_lgort TYPE lgort_d,
v_zmeng TYPE dzmeng,
v_zieme TYPE dzieme.
PARAMETERS : rad1 RADIOBUTTON GROUP g1 ,
rad2 RADIOBUTTON GROUP g1.
----
*Selection-Screen Declarations
----
*Selection-Screen for create Sales Order
SELECTION-SCREEN BEGIN OF SCREEN 12 AS WINDOW TITLE text-009.
SELECTION-SCREEN BEGIN OF BLOCK na_create.
PARAMETERS: o_vkorg TYPE vkorg , "Sales Organization
o_vtweg TYPE vtweg , "Distribution Channel
o_spart TYPE spart , "Division
o_auart TYPE auart , "Sales Doc Type
o_matnr TYPE matnr , "Material No.
o_parvw TYPE parvw , "Partner Role
o_kunnr TYPE kunnr . "Partner Number
SELECTION-SCREEN END OF BLOCK na_create.
SELECTION-SCREEN END OF SCREEN 12.
*Selection-Screen for change Sales Order
SELECTION-SCREEN BEGIN OF SCREEN 123 AS WINDOW TITLE text-010.
SELECTION-SCREEN BEGIN OF BLOCK na_change.
PARAMETERS: o_vbeln TYPE vbeln . "sales doc. no.
SELECTION-SCREEN END OF BLOCK na_change.
SELECTION-SCREEN END OF SCREEN 123.
----
*Selection-Screen Validation
----
*Validation for the Create SO screen
AT SELECTION-SCREEN ON BLOCK na_create.
IF o_vkorg IS INITIAL.
MESSAGE e000 WITH 'SALES ORGANIZATION REQUIRED'(001).
ENDIF.
IF o_vtweg IS INITIAL.
MESSAGE e000 WITH 'DISTRIBUTION CHANNEL REQUIRED'(002).
ENDIF.
IF o_spart IS INITIAL.
MESSAGE e000 WITH 'DIVISION REQUIRED'(003).
ENDIF.
IF o_auart IS INITIAL.
MESSAGE e000 WITH 'DOCUMENT TYPE REQUIRED'(004).
ENDIF.
IF o_matnr IS INITIAL.
MESSAGE e000 WITH 'MATERIAL NUMBER. REQUIRED'(005).
ENDIF.
IF o_parvw IS INITIAL.
MESSAGE e000 WITH 'PARTNER ROLE REQUIRED'(006).
ENDIF.
IF o_kunnr IS INITIAL.
MESSAGE e000 WITH 'PARTNER NUMBER REQUIRED'(007).
ENDIF.
*Validation for the Change SO screen
AT SELECTION-SCREEN ON BLOCK na_change.
IF o_vbeln IS INITIAL.
MESSAGE e000 WITH 'SALES DOCUMENT NO. REQUIRED'(008).
ENDIF.
----
*Start-Of-Selection
----
START-OF-SELECTION.
IF rad1 = 'X'.
CALL SELECTION-SCREEN '12'.
ELSE.
CALL SELECTION-SCREEN '123'.
ENDIF.
IF rad1 = 'X' AND NOT o_auart IS INITIAL
AND NOT o_vkorg IS INITIAL AND NOT o_vtweg IS INITIAL
AND NOT o_spart IS INITIAL AND NOT o_parvw IS INITIAL
AND NOT o_kunnr IS INITIAL AND NOT o_matnr IS INITIAL.
i_header-doc_type = o_auart.
i_header-sales_org = o_vkorg.
i_header-distr_chan = o_vtweg.
i_header-division = o_spart.
i_partner-partn_role = o_parvw.
i_partner-partn_numb = o_kunnr.
APPEND i_partner.
i_details-material = o_matnr.
APPEND i_details.
*Bapi for Creating SO
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
order_header_in = i_header
IMPORTING
salesdocument = v_vbeln
TABLES
return = i_return1
order_items_in = i_details
order_partners = i_partner.
IF NOT v_vbeln IS INITIAL.
*Bapi Commit Work
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT =
IMPORTING
return = i_return2
.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
IMPORTING
RETURN =
.
ENDIF.
LOOP AT i_return1 INTO wa_return1.
WRITE:/ wa_return1-message.
ENDLOOP.
----
*For Changing SO
----
ELSEIF rad2 = 'X' AND NOT o_vbeln IS INITIAL.
*Screen for Changing SO
CALL SCREEN '0101'.
ENDIF.
&----
*& Module STATUS_0101 OUTPUT
&----
text
----
MODULE status_0101 OUTPUT.
p_vbeln = o_vbeln.
REFRESH: i_flag,
i_bapisditm,
i_bapisditmx,
i_return1.
IF i_vbap[] IS INITIAL.
SELECT
vbeln
posnr
werks
lgort
zmeng
zieme
FROM vbap INTO TABLE i_vbap WHERE
vbeln = p_vbeln.
n = 1.
ENDIF.
READ TABLE i_vbap INTO wa_vbap INDEX n."with key vbeln = p_vbeln.
n = n + 1.
ENDMODULE. " STATUS_0101 OUTPUT
&----
*& Module USER_COMMAND_0101 INPUT
&----
text
----
MODULE user_command_0101 INPUT.
CASE ok_code.
WHEN 'CHA1'.
v_posnr = wa_vbap-posnr.
v_werks = wa_vbap-werks.
v_lgort = wa_vbap-lgort.
v_zmeng = wa_vbap-zmeng.
v_zieme = wa_vbap-zieme.
MODIFY i_vbap FROM wa_vbap
TRANSPORTING posnr werks lgort
zmeng zieme WHERE vbeln = p_vbeln.
SORT i_vbap BY posnr.
LOOP AT i_vbap INTO wa_vbap .
i_flag-updateflag = 'U'.
APPEND i_flag.
i_bapisditm-itm_number = wa_vbap-posnr.
i_bapisditm-plant = wa_vbap-werks.
i_bapisditm-store_loc = wa_vbap-lgort.
i_bapisditm-target_qty = wa_vbap-zmeng.
i_bapisditm-target_qu = wa_vbap-zieme.
APPEND i_bapisditm.
i_bapisditmx-itm_number = wa_vbap-posnr.
i_bapisditmx-updateflag = 'U'.
i_bapisditmx-po_itm_no = 'U'.
i_bapisditmx-plant = 'U'.
i_bapisditmx-store_loc = 'U'.
i_bapisditmx-target_qty = 'U'.
i_bapisditmx-target_qu = 'U'.
APPEND i_bapisditmx.
*Bapi for Changing SO
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = p_vbeln
order_header_inx = i_flag
TABLES
return = i_return1
order_item_in = i_bapisditm
order_item_inx = i_bapisditmx.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT =
IMPORTING
return = i_return2.
LOOP AT i_return1 INTO wa_return1.
CASE wa_return1-type.
WHEN 'S'.
MESSAGE i000 WITH wa_return1-message.
WHEN 'E'.
MESSAGE i000 WITH wa_return1-message.
WHEN 'W' .
MESSAGE i000 WITH wa_return1-message.
ENDCASE.
ENDLOOP.
LEAVE TO SCREEN 0.
CLEAR wa_vbap.
CALL SCREEN '0101'.
ENDLOOP.
WRITE:/ 'Status ' , i_return1-type.
WRITE:/ 'Reason ' , i_return1-message.
CLEAR i_return1.
REFRESH i_return1.
WHEN 'EXI1'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " USER_COMMAND_0101 INPUT
Thanks
Seshu
‎2007 Jul 17 5:51 AM
do compare with my program and my program works well
&----
*& Report ZNA_SH_CREATE_CHANGE_SO_BAPI
*&
&----
*&
*&
&----
REPORT zna_sh_create_change_so_bapi MESSAGE-ID z7new.
*Internal table declaration for Creating SO
DATA: i_header TYPE bapisdhd1.
DATA: i_details TYPE bapisditm OCCURS 0 WITH HEADER LINE.
DATA: i_partner TYPE bapiparnr OCCURS 0 WITH HEADER LINE.
DATA: i_return1 TYPE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA: i_return2 TYPE bapiret2.
*Work Area declaration for Creating SO
DATA: wa_return1 TYPE bapiret2.
DATA: wa_header TYPE bapisdhd1.
DATA: wa_partner TYPE bapiparnr.
DATA: wa_flag TYPE bapisdhd1x.
DATA: ok_code TYPE sy-ucomm.
DATA: n TYPE i.
*Declaration's for changing SO
*Type Declaration for Item table
TYPES: BEGIN OF type_vbap,
vbeln TYPE vbeln_va,
posnr TYPE posnr_va,
werks TYPE werks_ext,
lgort TYPE lgort_d,
zmeng TYPE dzmeng,
zieme TYPE dzieme,
END OF type_vbap.
*Internal Tables declarations for Changing SO
DATA: i_flag TYPE bapisdh1x OCCURS 0 WITH HEADER LINE.
DATA: i_vbap TYPE STANDARD TABLE OF type_vbap.
DATA: i_bapisditm TYPE bapisditm OCCURS 0 WITH HEADER LINE,
i_bapisditmx TYPE bapisditmx OCCURS 0 WITH HEADER LINE.
*Work Area declaration for Changing SO
DATA: wa_vbap TYPE type_vbap.
DATA: p_vbeln TYPE vbak-vbeln.
DATA: v_vbeln TYPE bapivbeln-vbeln.
*data: v_posnr TYPE posnr_va,
v_werks TYPE werks_ext,
v_lgort TYPE lgort_d,
v_zmeng TYPE dzmeng,
v_zieme TYPE dzieme.
PARAMETERS : rad1 RADIOBUTTON GROUP g1 ,
rad2 RADIOBUTTON GROUP g1.
----
*Selection-Screen Declarations
----
*Selection-Screen for create Sales Order
SELECTION-SCREEN BEGIN OF SCREEN 12 AS WINDOW TITLE text-009.
SELECTION-SCREEN BEGIN OF BLOCK na_create.
PARAMETERS: o_vkorg TYPE vkorg , "Sales Organization
o_vtweg TYPE vtweg , "Distribution Channel
o_spart TYPE spart , "Division
o_auart TYPE auart , "Sales Doc Type
o_matnr TYPE matnr , "Material No.
o_parvw TYPE parvw , "Partner Role
o_kunnr TYPE kunnr . "Partner Number
SELECTION-SCREEN END OF BLOCK na_create.
SELECTION-SCREEN END OF SCREEN 12.
*Selection-Screen for change Sales Order
SELECTION-SCREEN BEGIN OF SCREEN 123 AS WINDOW TITLE text-010.
SELECTION-SCREEN BEGIN OF BLOCK na_change.
PARAMETERS: o_vbeln TYPE vbeln . "sales doc. no.
SELECTION-SCREEN END OF BLOCK na_change.
SELECTION-SCREEN END OF SCREEN 123.
----
*Selection-Screen Validation
----
*Validation for the Create SO screen
AT SELECTION-SCREEN ON BLOCK na_create.
IF o_vkorg IS INITIAL.
MESSAGE e000 WITH 'SALES ORGANIZATION REQUIRED'(001).
ENDIF.
IF o_vtweg IS INITIAL.
MESSAGE e000 WITH 'DISTRIBUTION CHANNEL REQUIRED'(002).
ENDIF.
IF o_spart IS INITIAL.
MESSAGE e000 WITH 'DIVISION REQUIRED'(003).
ENDIF.
IF o_auart IS INITIAL.
MESSAGE e000 WITH 'DOCUMENT TYPE REQUIRED'(004).
ENDIF.
IF o_matnr IS INITIAL.
MESSAGE e000 WITH 'MATERIAL NUMBER. REQUIRED'(005).
ENDIF.
IF o_parvw IS INITIAL.
MESSAGE e000 WITH 'PARTNER ROLE REQUIRED'(006).
ENDIF.
IF o_kunnr IS INITIAL.
MESSAGE e000 WITH 'PARTNER NUMBER REQUIRED'(007).
ENDIF.
*Validation for the Change SO screen
AT SELECTION-SCREEN ON BLOCK na_change.
IF o_vbeln IS INITIAL.
MESSAGE e000 WITH 'SALES DOCUMENT NO. REQUIRED'(008).
ENDIF.
----
*Start-Of-Selection
----
START-OF-SELECTION.
IF rad1 = 'X'.
CALL SELECTION-SCREEN '12'.
ELSE.
CALL SELECTION-SCREEN '123'.
ENDIF.
IF rad1 = 'X' AND NOT o_auart IS INITIAL
AND NOT o_vkorg IS INITIAL AND NOT o_vtweg IS INITIAL
AND NOT o_spart IS INITIAL AND NOT o_parvw IS INITIAL
AND NOT o_kunnr IS INITIAL AND NOT o_matnr IS INITIAL.
i_header-doc_type = o_auart.
i_header-sales_org = o_vkorg.
i_header-distr_chan = o_vtweg.
i_header-division = o_spart.
i_partner-partn_role = o_parvw.
i_partner-partn_numb = o_kunnr.
APPEND i_partner.
i_details-material = o_matnr.
APPEND i_details.
*Bapi for Creating SO
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
order_header_in = i_header
IMPORTING
salesdocument = v_vbeln
TABLES
return = i_return1
order_items_in = i_details
order_partners = i_partner.
IF NOT v_vbeln IS INITIAL.
*Bapi Commit Work
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT =
IMPORTING
return = i_return2
.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
IMPORTING
RETURN =
.
ENDIF.
LOOP AT i_return1 INTO wa_return1.
WRITE:/ wa_return1-message.
ENDLOOP.
----
*For Changing SO
----
ELSEIF rad2 = 'X' AND NOT o_vbeln IS INITIAL.
*Screen for Changing SO
CALL SCREEN '0101'.
ENDIF.
&----
*& Module STATUS_0101 OUTPUT
&----
text
----
MODULE status_0101 OUTPUT.
p_vbeln = o_vbeln.
REFRESH: i_flag,
i_bapisditm,
i_bapisditmx,
i_return1.
IF i_vbap[] IS INITIAL.
SELECT
vbeln
posnr
werks
lgort
zmeng
zieme
FROM vbap INTO TABLE i_vbap WHERE
vbeln = p_vbeln.
n = 1.
ENDIF.
READ TABLE i_vbap INTO wa_vbap INDEX n."with key vbeln = p_vbeln.
n = n + 1.
ENDMODULE. " STATUS_0101 OUTPUT
&----
*& Module USER_COMMAND_0101 INPUT
&----
text
----
MODULE user_command_0101 INPUT.
CASE ok_code.
WHEN 'CHA1'.
v_posnr = wa_vbap-posnr.
v_werks = wa_vbap-werks.
v_lgort = wa_vbap-lgort.
v_zmeng = wa_vbap-zmeng.
v_zieme = wa_vbap-zieme.
MODIFY i_vbap FROM wa_vbap
TRANSPORTING posnr werks lgort
zmeng zieme WHERE vbeln = p_vbeln.
SORT i_vbap BY posnr.
LOOP AT i_vbap INTO wa_vbap .
i_flag-updateflag = 'U'.
APPEND i_flag.
i_bapisditm-itm_number = wa_vbap-posnr.
i_bapisditm-plant = wa_vbap-werks.
i_bapisditm-store_loc = wa_vbap-lgort.
i_bapisditm-target_qty = wa_vbap-zmeng.
i_bapisditm-target_qu = wa_vbap-zieme.
APPEND i_bapisditm.
i_bapisditmx-itm_number = wa_vbap-posnr.
i_bapisditmx-updateflag = 'U'.
i_bapisditmx-po_itm_no = 'U'.
i_bapisditmx-plant = 'U'.
i_bapisditmx-store_loc = 'U'.
i_bapisditmx-target_qty = 'U'.
i_bapisditmx-target_qu = 'U'.
APPEND i_bapisditmx.
*Bapi for Changing SO
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = p_vbeln
order_header_inx = i_flag
TABLES
return = i_return1
order_item_in = i_bapisditm
order_item_inx = i_bapisditmx.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT =
IMPORTING
return = i_return2.
LOOP AT i_return1 INTO wa_return1.
CASE wa_return1-type.
WHEN 'S'.
MESSAGE i000 WITH wa_return1-message.
WHEN 'E'.
MESSAGE i000 WITH wa_return1-message.
WHEN 'W' .
MESSAGE i000 WITH wa_return1-message.
ENDCASE.
ENDLOOP.
LEAVE TO SCREEN 0.
CLEAR wa_vbap.
CALL SCREEN '0101'.
ENDLOOP.
WRITE:/ 'Status ' , i_return1-type.
WRITE:/ 'Reason ' , i_return1-message.
CLEAR i_return1.
REFRESH i_return1.
WHEN 'EXI1'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " USER_COMMAND_0101 INPUT
Thanks
Seshu
‎2007 Jul 17 6:55 AM
Hi,
Flag is set as U. For example: i_bapisditmx-plant = 'U',
i_bapisditmx-store_loc = 'U' as specified in your code, should we set it to U or 'X'?
only updateflag should be kept as U right