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

Quantity update into sales order using BAPI_SALESORDER_CREATEFROMDAT2

Former Member
0 Likes
1,760

Hi All,

I am able to create a sales order using the BAPI "BAPI_SALESORDER_CREATEFROMDAT2".

But even after assinging the Target_quntity and the Target_quantity_units, the values are not getting updated into the Sales order, but the sales order gets created .

Did anyone of you had a similare problem, how was it solved.

cold some one please help me out on this.

Regards

4 REPLIES 4
Read only

Former Member
0 Likes
1,006

Haven't some one faced a similar problem on the same issue.

Regards

Read only

uwe_schieferstein
Active Contributor
0 Likes
1,006

Hello Sushi

I am currently working on sales orders, too.

If I understand you correctly you want to update order quantities in an EXISTING sales order.

If so, then you have to use BAPI_SALESORDER_CHANGE.

In my example I have a single position in the sales order with a single schedule line. To change the order quantity of the schedule line I called the BAPI with the following parameters:

(1) ORDER_HEADER_INX-UPDATEFLAG = 'U' (is required even if the header is not changed at all)

(2) SCHEDULE_LINES: contains the schedule line (ITM_NUMBER, SCHED_LINE and REQ_QTY filled) to be modified

(3) SCHEDULE_LINES_INX: fields ITM_NUMBER, SCHED_LINE filled, -UPDATEFLAG = 'U' and -REQ_QTY = 'X' (only field to be changed)

If the procedure is not clear feel free to ask for more details.

Regards

Uwe

Read only

Former Member
0 Likes
1,006

Hi

I had used below code (using <b>BAPI_SALESORDER_CREATEFROMDAT1</b>)..but never faced any problem.. you can try the same...

Regards,

Raj

REPORT z_sd_salesorder_create

NO STANDARD PAGE HEADING

LINE-SIZE 150

MESSAGE-ID zz.

&----


  • S T R U C T U R E D E C L A R A T I O N S *

&----


TYPES: BEGIN OF x_ppl,

ppl_order(18), " ppl Orderno

auart(4), " Sales Doc Type

vkorg(4), " Sales Organization

vtweg(2), " Distribution Channel

spart(2), " Division

div(3), " Division

kunnr(10), " Sold-to Party

date(10), " Doc Dt

matnr(18), " Item Matnr#

uom(3), " UOM

qty(15), " Qty

  • kschl(4), " Pricing condiiton type

  • kbetr(11), " Rate

END OF x_ppl.

TYPES: BEGIN OF x_file,

loc(30), " Location

div(3), " Division

ppl_order(18), " ppl Orderno

kunnr(10), " Sold-to Party

date(10), " Doc Dt

matnr(20), " Item Matnr#

qty(15), " Qty

uom(3), " UOM

  • kbetr(11), " Rate

  • discount(5), " Discount

END OF x_file.

TYPES: BEGIN OF x_output,

ppl_order(18), " ppl Orderno

mesg(130), " Mesg Success/Error

END OF x_output.

TYPES: BEGIN OF x_werks,

name2(30), " Location

werks TYPE werks_ext, " Plant

END OF x_werks.

TYPES: BEGIN OF x_info,

vkorg TYPE vkorg , " Sales org

vtweg TYPE vtweg, " Dist channel

werks TYPE werks_ext," Plant

spart TYPE spart, " Storage Loc

END OF x_info.

TYPES: BEGIN OF x_material,

ppl_prdid(20), " ppl Prd id

matnr TYPE matnr, " Material (SAP)

END OF x_material.

&----


  • I N T E R N A L T A B L E D E C L A R A T I O N S *

&----


DATA: it_file TYPE STANDARD TABLE OF x_file WITH HEADER LINE." File Data

DATA: it_data TYPE STANDARD TABLE OF x_ppl WITH HEADER LINE." ppl File

DATA: it_out TYPE STANDARD TABLE OF x_output WITH HEADER LINE. " Outcome

DATA: it_werks TYPE STANDARD TABLE OF x_werks WITH HEADER LINE. " Plant

DATA: it_info TYPE STANDARD TABLE OF x_info WITH HEADER LINE. " Othr Info

DATA: it_matnr TYPE STANDARD TABLE OF x_material WITH HEADER LINE. " Material Info

DATA: it_item TYPE STANDARD TABLE OF bapiitemin WITH HEADER LINE. "Order Itm data

DATA: it_partner TYPE STANDARD TABLE OF bapipartnr WITH HEADER LINE. "Order Partner data

&----


  • V A R I A B L E S D E C L A R A T I O N S *

&----


DATA : v_correct TYPE i,

v_error TYPE i,

v_total TYPE i,

v_return LIKE bapireturn1,

v_index LIKE sy-tabix.

*- Return values

DATA: it_orderh TYPE bapisdhead, "Order Hdr data

order TYPE bapivbeln-vbeln,

soldto TYPE bapisoldto,

shipto TYPE bapishipto,

return TYPE bapireturn1.

DATA: hdate TYPE sy-datum.

&----


  • U S E R I N P U T S S C R E E N *

&----


SELECTION-SCREEN: BEGIN OF BLOCK blk01 WITH FRAME TITLE text-t01.

PARAMETERS: p_file TYPE rlgrap-filename OBLIGATORY. " File name

SELECTION-SCREEN END OF BLOCK blk01.

&----


  • S E L E C T I O N S C R E E N *

&----


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

PERFORM get_file.

&----


  • S t a r t o f S e l e c t i o n *

&----


START-OF-SELECTION.

PERFORM get_upload.

PERFORM validate_data. " Validate the data

PERFORM data_swap. " Prepare the data for processing

IF NOT it_data[] IS INITIAL.

PERFORM get_update. " Create SalesOrders

ELSE.

MESSAGE i001(zz) WITH text-001.

STOP.

ENDIF.

&----


  • E n d o f S e l e c t i o n *

&----


END-OF-SELECTION.

IF NOT it_data[] IS INITIAL.

PERFORM get_write.

ENDIF.

&----


*& Form get_file

&----


  • Get File name

----


FORM get_file .

CALL FUNCTION 'KD_GET_FILENAME_ON_F4'

EXPORTING

program_name = syst-repid

mask = '*'

CHANGING

file_name = p_file

EXCEPTIONS

mask_too_long = 1

OTHERS = 2.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDFORM. " get_file

&----


*& Form get_upload

&----


  • to upload the file

----


FORM get_upload .

DATA l_file TYPE string.

CLEAR: it_file, it_file[].

l_file = p_file.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = l_file

filetype = 'ASC'

has_field_separator = 'X'

TABLES

data_tab = it_file

EXCEPTIONS

file_open_error = 1

file_read_error = 2

no_batch = 3

gui_refuse_filetransfer = 4

invalid_type = 5

no_authority = 6

unknown_error = 7

bad_data_format = 8

header_not_allowed = 9

separator_not_allowed = 10

header_too_long = 11

unknown_dp_error = 12

access_denied = 13

dp_out_of_memory = 14

disk_full = 15

dp_timeout = 16

OTHERS = 17.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ELSEIF sy-subrc = 0.

SORT it_file BY loc ppl_order.

ENDIF.

ENDFORM. " get_upload

&----


*& Form get_update

&----


  • Creating mapping Data in Z table

----


FORM get_update .

DATA: l_itemno(2) TYPE n,

l_partner TYPE parvw,

l_kunnr TYPE kunnr,

l_matnr TYPE matnr,

l_mesg TYPE string,

l_kbetr TYPE p DECIMALS 2.

DATA: l_in_qty LIKE vbap-zmeng,

l_meins LIKE mara-meins,

l_qty LIKE vbap-zmeng.

CLEAR: v_correct, v_error, v_total.

SORT it_data BY ppl_order.

LOOP AT it_data.

CLEAR v_index.

v_index = sy-tabix.

*- New SalesOrder

AT NEW ppl_order.

READ TABLE it_data INDEX v_index.

CLEAR: it_orderh, it_item, it_partner,

order, soldto, shipto, return,

it_item[], it_partner[].

v_total = v_total + 1. "Increment Total SalesOrders counter

CLEAR l_itemno.

l_itemno = '10'.

*- Covert date fields into Internal format

CALL FUNCTION 'CONVERT_DATE_TO_INTERN_FORMAT'

EXPORTING

datum = it_data-date

dtype = 'DATS'

IMPORTING

idate = it_data-date.

*- Populate SalesOrder header data.

CALL FUNCTION 'CONVERSION_EXIT_AUART_INPUT'

EXPORTING

input = it_data-auart

IMPORTING

output = it_data-auart.

it_orderh-doc_type = it_data-auart.

it_orderh-sales_org = it_data-vkorg.

it_orderh-distr_chan = it_data-vtweg.

it_orderh-division = it_data-spart.

it_orderh-purch_no = 'DEPOT'.

it_orderh-price_date = it_data-date. "Doc Dt

it_orderh-req_date_h = it_data-date. "Del.Dt

it_orderh-purch_no_s = it_data-ppl_order.

*- Partner data

CLEAR: l_partner, l_kunnr.

*- Convert Partner type into internal format

l_partner = 'SP'. "SoldTo Party

CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'

EXPORTING

input = l_partner

IMPORTING

output = l_partner.

*- Convert Customer into internal format

l_kunnr = it_data-kunnr.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = l_kunnr

IMPORTING

output = l_kunnr.

it_partner-partn_role = l_partner.

it_partner-partn_numb = l_kunnr.

APPEND it_partner.

CLEAR it_partner.

ENDAT.

*- Item data

it_item-itm_number = l_itemno.

*- Convert material number into internal format

CLEAR l_matnr.

l_matnr = it_data-matnr.

CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'

EXPORTING

input = l_matnr

IMPORTING

output = l_matnr

EXCEPTIONS

length_error = 1

OTHERS = 2.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

it_item-material = l_matnr.

*- Call FM to get new qty based on SAP UOM

CLEAR: l_meins, l_qty, l_in_qty.

l_in_qty = it_data-qty.

CALL FUNCTION 'Z_GET_QTY_FROM_UOM'

EXPORTING

matnr = it_item-material

in_meins = it_data-uom

in_qty = l_in_qty

IMPORTING

out_meins = l_meins

quantity = l_qty.

IF sy-subrc = 0.

it_data-qty = l_qty.

it_data-uom = l_meins.

ENDIF.

it_data-qty = it_data-qty * 1000.

it_item-req_qty = it_data-qty.

it_item-sales_unit = it_data-uom.

it_item-req_date = it_data-date.

*- Pricing data

  • it_item-cond_type = it_data-kschl. "Pricing condition

  • CLEAR l_kbetr.

  • l_kbetr = it_data-kbetr / 10. "Price (Rate)

  • it_item-cond_value = l_kbetr.

APPEND it_item.

CLEAR it_item.

*- Increment Item counter.

l_itemno = l_itemno + 10.

*- At end of SalesOrder

AT END OF ppl_order.

READ TABLE it_data INDEX v_index.

*- Call the BAPI for SalesOrder creation

CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT1'

EXPORTING

order_header_in = it_orderh

IMPORTING

salesdocument = order

sold_to_party = soldto

ship_to_party = shipto

return = return

TABLES

order_items_in = it_item

order_partners = it_partner.

IF sy-subrc = 0.

COMMIT WORK.

ENDIF.

v_return = return+0(1).

IF v_return = 'E'.

v_error = v_error + 1.

CLEAR l_mesg.

l_mesg = return.

CONDENSE l_mesg.

ELSE.

v_correct = v_correct + 1.

CLEAR l_mesg.

CONCATENATE 'Salesorder'(007) order 'successfully created.'(008)

INTO l_mesg SEPARATED BY space.

CONDENSE l_mesg.

ENDIF.

*- Populate the output table

CLEAR it_out.

it_out-ppl_order = it_data-ppl_order.

it_out-mesg = l_mesg.

APPEND it_out.

CLEAR it_out.

ENDAT.

ENDLOOP.

ENDFORM. " get_update

&----


*& Form get_write

&----


  • Write the results

----


FORM get_write .

WRITE:/ 'Total Number of Records :'(002), v_total COLOR 1.

WRITE:/ 'Total Correct Records :'(003), v_correct COLOR 3.

WRITE:/ 'Total Error Records :'(004), v_error COLOR 6.

SKIP 3.

IF NOT it_out[] IS INITIAL.

WRITE:/5 'ppl Order #'(005),

28 'Message'(006).

ENDIF.

SKIP 1.

LOOP AT it_out.

WRITE:/5 it_out-ppl_order,

28 it_out-mesg.

ENDLOOP.

ENDFORM. " get_write

&----


*& Form validate_data

&----


  • Validate the data

----


FORM validate_data .

DATA: l_bstkde TYPE bstkd_e.

LOOP AT it_file.

SELECT bstkd_e INTO l_bstkde

UP TO 1 ROWS

FROM vbkd

WHERE bstkd_e = it_file-ppl_order.

ENDSELECT.

IF sy-subrc = 0. " This ppl Order is already been created in SAP, so delete record

DELETE it_file.

ENDIF.

ENDLOOP.

SORT it_file BY ppl_order.

ENDFORM. " validate_data

&----


*& Form data_swap

&----


  • Prepare the data for processing

----


FORM data_swap .

CLEAR: it_werks, it_info, it_matnr, it_data,

it_werks[], it_info[], it_matnr[], it_data[].

IF NOT it_file[] IS INITIAL.

*- Get the plant from location

SELECT name2

werks

INTO CORRESPONDING FIELDS OF TABLE it_werks

FROM t001w FOR ALL ENTRIES IN it_file

WHERE name2 = it_file-loc.

IF sy-subrc = 0.

SORT it_werks BY name2 werks.

*- Get the Sales Org, Division and Distribution Channel

IF NOT it_werks[] IS INITIAL.

SELECT vkorg

vtweg

werks

INTO CORRESPONDING FIELDS OF TABLE it_info

FROM tvkwz FOR ALL ENTRIES IN it_werks

WHERE werks = it_werks-werks.

IF sy-subrc = 0.

LOOP AT it_info.

it_info-spart = '99'.

MODIFY it_info INDEX sy-tabix.

ENDLOOP.

SORT it_info BY vkorg vtweg werks.

ENDIF.

ENDIF.

ENDIF.

*- Get material from ppl material

SELECT ppl_prdid

matnr

FROM zppl_master

INTO TABLE it_matnr FOR ALL ENTRIES IN it_file

WHERE ppl_prdid = it_file-matnr.

IF sy-subrc = 0.

SORT it_matnr BY ppl_prdid matnr.

ENDIF.

ENDIF.

*- Update the data in it_data

LOOP AT it_file.

CLEAR it_data.

  • it_data-auart = 'OR'.

it_data-auart = 'OR'. " CHANGED BY Jo ON 3103005

READ TABLE it_werks WITH KEY name2 = it_file-loc BINARY SEARCH.

IF sy-subrc = 0.

READ TABLE it_info WITH KEY werks = it_werks-werks BINARY SEARCH.

IF sy-subrc = 0.

it_data-vkorg = it_info-vkorg.

it_data-vtweg = it_info-vtweg.

ENDIF.

ENDIF.

*- Material

READ TABLE it_matnr WITH KEY ppl_prdid = it_file-matnr BINARY SEARCH.

IF sy-subrc = 0.

it_data-matnr = it_matnr-matnr.

ENDIF.

it_data-ppl_order = it_file-ppl_order.

it_data-date = it_file-date.

CONCATENATE it_file-kunnr it_file-loc+1(2) INTO it_data-kunnr.

it_data-qty = it_file-qty.

it_data-uom = it_file-uom.

  • it_data-kbetr = it_file-kbetr.

*- Pricing condition

  • it_data-kschl = 'PR00'.

CASE it_file-div.

WHEN 'BRN'.

it_data-div = '04'.

WHEN 'GEN'.

it_data-div = '03'.

WHEN 'IVF'.

it_data-div = '02'.

WHEN 'OPH'.

it_data-div = '01'.

ENDCASE.

it_data-spart = it_data-div.

APPEND it_data.

CLEAR it_data.

ENDLOOP.

ENDFORM. " data_swap

Read only

Former Member
0 Likes
1,006

Hi ,

Please fill the

ORDER_SCHEDULES_IN - Fields are ITM_NUMBER and

REQ_QTY.

Thanks.,

V.Rangarajan