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

Change Order Quantity using BAPI_SALESORDER_CHANGE

Former Member
0 Likes
2,039

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.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
850

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

2 REPLIES 2
Read only

Former Member
0 Likes
851

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

Read only

Former Member
0 Likes
850

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