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

how to create sales order using BAPI....

Former Member
0 Likes
1,155

Hi ,

i have two flat files ..in one flat file had HEADER details and second flat file had item details....

those two flat files are in my desktop...now i wanted to upload the two flat file and i wanted created sales order using BAPI function module...

could please guide me anyone of you..and please provide if anyone pf you have program logic related to this..that would be helpfull to me...

thanks in advance

Srinivas.....

9 REPLIES 9
Read only

Former Member
0 Likes
1,065

Hi Guru's,

hope my question is clear ..please let me know..if it is not clear.....:)

thanks in advance...

srinivas..

Read only

Former Member
0 Likes
1,065

On selection Screen , r u giving 2 filepaths for header nd item details ?

If yes, then Suppose u have it_header and it_item.

loop at it_header.

move ur data to order_header_in.( Bapis header)

loop at it_item where << condition>>

(bapi's Item level data)

endloop.

BAPI_SALESORDER_CREATEFROMDAT1

endloop.

hope , u understood by this.

Read only

Former Member
0 Likes
1,065

yahh exactly i am doing the thing..

but i am getting document type OR not found error and sales ordernot created...

could please correct the below program llogic...

&----


*& Report ZAREPAS35

&----


REPORT zarepas35

NO STANDARD PAGE HEADING

LINE-SIZE 65

LINE-COUNT 80.

DATA: gv_itemnum(6) TYPE n.

DATA : gs_vbeln TYPE vbak-vbeln,

gs_order_header_in TYPE bapisdhead1,

gs_order_header_inx TYPE bapisdhead1x,

gt_order_items_in TYPE STANDARD TABLE OF bapisditem,

gwa_bapisditem TYPE bapisditem,

gt_order_items_inx TYPE STANDARD TABLE OF bapisditemx,

gwa_bapisditemx TYPE bapisditemx,

gt_order_partners TYPE STANDARD TABLE OF bapipartnr,

gwa_bapipartnr TYPE bapipartnr,

gt_return TYPE STANDARD TABLE OF bapiret2,

gwa_bapiret2 TYPE bapiret2.

TYPES: BEGIN OF gty_itab1,

kunnr(10),

kkunnr(10),

matnr(18),

kwmeng(18),

werks(4),

vbeln(10),

END OF gty_itab1.

DATA: gt_itab1 TYPE STANDARD TABLE OF gty_itab1,

gwa_itab1 TYPE gty_itab1.

TYPES: BEGIN OF gty_itab2,

auart(2),

vkorg(4),

vtweg(2),

spart(2),

edatu(8),

vbeln(10),

END OF gty_itab2.

DATA: gt_itab2 TYPE STANDARD TABLE OF gty_itab2,

gwa_itab2 TYPE gty_itab2.

TYPES: BEGIN OF gty_itab3,

abc(132),

END OF gty_itab3.

DATA: gt_itab3 TYPE STANDARD TABLE OF gty_itab3,

gwa_itab3 TYPE gty_itab3.

TYPES: BEGIN OF gty_itab4,

xyz(132),

END OF gty_itab4.

DATA: gt_itab4 TYPE STANDARD TABLE OF gty_itab4,

gwa_itab4 TYPE gty_itab4.

PARAMETERS: p_a RADIOBUTTON GROUP grp1,

p_b RADIOBUTTON GROUP grp1.

PARAMETERS: p_files1 TYPE string.

PARAMETERS: p_files2 TYPE string.

START-OF-SELECTION.

CALL METHOD cl_gui_frontend_services=>gui_upload

EXPORTING

filename = p_files1

filetype = 'ASC'

CHANGING

data_tab = gt_itab3

EXCEPTIONS

OTHERS = 8.

CALL METHOD cl_gui_frontend_services=>gui_upload

EXPORTING

filename = p_files2

filetype = 'ASC'

CHANGING

data_tab = gt_itab4

EXCEPTIONS

OTHERS = 8.

LOOP AT gt_itab3 INTO gwa_itab3.

IF gwa_itab3-abc(1) = 'H'.

gwa_itab2 = gwa_itab3-abc+1(131).

APPEND gwa_itab2 TO gt_itab2.

ENDIF.

ENDLOOP.

LOOP AT gt_itab4 INTO gwa_itab4.

IF gwa_itab4-xyz(1) = 'I'.

gwa_itab1 = gwa_itab4-xyz+1(131).

APPEND gwa_itab1 TO gt_itab1.

ENDIF.

ENDLOOP.

          • Header data

LOOP AT gt_itab2 INTO gwa_itab2." where so = so.

  • Sales document type

gs_order_header_in-doc_type = gwa_itab2-auart.

gs_order_header_inx-doc_type = 'X'.

  • Sales organization

gs_order_header_in-sales_org = gwa_itab2-vkorg.

gs_order_header_inx-sales_org = 'X'.

  • Distribution channel

gs_order_header_in-distr_chan = gwa_itab2-vtweg.

gs_order_header_inx-distr_chan = 'X'.

  • Division

gs_order_header_in-division = gwa_itab2-spart.

gs_order_header_inx-division = 'X'.

  • Reguested Delivery Date

gs_order_header_in-req_date_h = gwa_itab2-edatu.

gs_order_header_inx-req_date_h = 'X'.

gs_order_header_inx-updateflag = 'I'.

ENDLOOP.

LOOP AT gt_itab1 INTO gwa_itab1." where vbeln = gwa_itab2-vbeln .

gv_itemnum = gv_itemnum + 10.

READ TABLE gt_order_partners INTO gwa_bapipartnr WITH KEY

partn_role = 'AG'

partn_numb = gwa_itab1-kunnr.

IF sy-subrc NE 0.

CLEAR gwa_bapipartnr.

gwa_bapipartnr-partn_role = 'AG'.

gwa_bapipartnr-partn_numb = gwa_itab1-kunnr.

APPEND gwa_bapipartnr TO gt_order_partners.

ENDIF.

READ TABLE gt_order_partners INTO gwa_bapipartnr WITH KEY

partn_role = 'WE'

partn_numb = gwa_itab1-kkunnr.

IF sy-subrc NE 0.

CLEAR gwa_bapipartnr.

gwa_bapipartnr-partn_role = 'WE'.

gwa_bapipartnr-partn_numb = gwa_itab1-kkunnr.

APPEND gwa_bapipartnr TO gt_order_partners.

ENDIF.

gwa_bapisditemx-updateflag = 'I'.

gwa_bapisditem-itm_number = gv_itemnum.

gwa_bapisditemx-itm_number = 'X'.

    • Material

gwa_bapisditem-material = gwa_itab1-matnr.

gwa_bapisditemx-material = 'X'.

    • Plant

gwa_bapisditem-plant = gwa_itab1-werks.

gwa_bapisditemx-plant = 'X'.

    • Quantity

gwa_bapisditem-target_qty = gwa_itab1-kwmeng.

gwa_bapisditemx-target_qty = 'X'.

APPEND gwa_bapisditem TO gt_order_items_in.

APPEND gwa_bapisditemx TO gt_order_items_inx.

ENDLOOP.

CALL FUNCTION 'BAPI_SALESDOCU_CREATEFROMDATA1'

EXPORTING

sales_header_in = gs_order_header_in

sales_header_inx = gs_order_header_inx

IMPORTING

salesdocument_ex = gs_vbeln

TABLES

return = gt_return

sales_items_in = gt_order_items_in

sales_items_inx = gt_order_items_inx

sales_partners = gt_order_partners.

  • Check the return table.

LOOP AT gt_return INTO gwa_bapiret2.

IF gwa_bapiret2-type = 'S' AND

gwa_bapiret2-number = '311'.

  • Success message.

WRITE: gwa_bapiret2-message.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

ELSEIF gwa_bapiret2-type = 'E' OR

gwa_bapiret2-type = 'A'.

  • Error / Abend message

WRITE: / 'Error Message:', gwa_bapiret2-message.

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

ENDIF.

ENDLOOP.

Read only

0 Likes
1,065

As wht i under stood is , In header file , u will give header information , it means if 10 records are in header file , 10 sale orders has to be create.

for that u hav to call BAPi 10 times.

but in ur program u r calling bapi only one time.

So call bapi Inside the Header loop.

and

one more thing u have to put condion for header and item table.

means suppose u have 100 item number , how program will come to know to that for 1st header(sale order )how many line item it has to pass bapi.

Thats y u logic should :

like this .

LOOP AT gt_itab2 INTO gwa_itab2. " Header data

..

..

LOOP AT gt_itab1 INTO gwa_itab1 .<< use Conditon for header table >>.

...

...

endloop.

Call BApi.

Clear all Tables which u r passing to BApi.

Endloop.

If U have Only one header ur logic will ok, but twhen its more than 1 it will fail.

Edited by: Suyog Haralikar on Jun 2, 2008 5:39 AM

Read only

Former Member
0 Likes
1,065

hi,,

i am using in header flat file only one header record and in item flat file i am using 4 item records...still i am fsing the same problem...while executing the program....

thanks in advance

Srinivas...

Read only

ritesh_dugad2
Active Participant
0 Likes
1,065

You can use Bapi - BAPI_SALESDOCU_CREATEFROMDATA for creating sales order.

If you have 1 header line and 4 line items then just append the 4 lines in the ORDER_ITEMS_IN table of the Bapi and just call the Bapi only once. This will create one sales document with 4 line items.

Read only

Former Member
0 Likes
1,065

standard BAPI is there

BAPI_SALESORDER_CREATE

PUT * AND PRES F4 U WILL BE GETTING LIS OF BAPIS

Also u have the options that u can write customise bapi using the BDC recording

Regards

Shashi

Read only

Former Member
0 Likes
1,065

hi all ..

i resoleved the issuee...

please find the below program logic....for your reference....

&----


*& Report ZAREPAS34

&----


REPORT zarepas34

NO STANDARD PAGE HEADING

LINE-SIZE 65

LINE-COUNT 80.

DATA: gv_itemnum(6) TYPE n.

DATA : gs_vbeln TYPE vbak-vbeln,

gs_order_header_in TYPE bapisdhead1,

gs_order_header_inx TYPE bapisdhead1x,

gt_order_items_in TYPE STANDARD TABLE OF bapisditem,

gwa_bapisditem TYPE bapisditem,

gt_order_items_inx TYPE STANDARD TABLE OF bapisditemx,

gwa_bapisditemx TYPE bapisditemx,

gt_order_partners TYPE STANDARD TABLE OF bapipartnr,

gwa_bapipartnr TYPE bapipartnr,

gt_return TYPE STANDARD TABLE OF bapiret2,

gwa_bapiret2 TYPE bapiret2.

TYPES: BEGIN OF gty_itab1,

kunnr(10),

kkunnr(10),

matnr(18),

kwmeng(18),

werks(4),

vbeln(10),

END OF gty_itab1.

DATA: gt_itab1 TYPE STANDARD TABLE OF gty_itab1,

gwa_itab1 TYPE gty_itab1.

TYPES: BEGIN OF gty_itab2,

auart(2),

vkorg(4),

vtweg(2),

spart(2),

edatu(8),

vbeln(10),

END OF gty_itab2.

DATA: gt_itab2 TYPE STANDARD TABLE OF gty_itab2,

gwa_itab2 TYPE gty_itab2.

TYPES: BEGIN OF gty_itab3,

abc(132),

END OF gty_itab3.

DATA: gt_itab3 TYPE STANDARD TABLE OF gty_itab3,

gwa_itab3 TYPE gty_itab3.

TYPES: BEGIN OF gty_itab4,

xyz(132),

END OF gty_itab4.

DATA: gt_itab4 TYPE STANDARD TABLE OF gty_itab4,

gwa_itab4 TYPE gty_itab4.

PARAMETERS: p_a RADIOBUTTON GROUP grp1,

p_b RADIOBUTTON GROUP grp1.

PARAMETERS: p_files1 TYPE string.

PARAMETERS: p_files2 TYPE string.

START-OF-SELECTION.

CALL METHOD cl_gui_frontend_services=>gui_upload

EXPORTING

filename = p_files1

filetype = 'ASC'

CHANGING

data_tab = gt_itab3

EXCEPTIONS

OTHERS = 8.

CALL METHOD cl_gui_frontend_services=>gui_upload

EXPORTING

filename = p_files2

filetype = 'ASC'

CHANGING

data_tab = gt_itab4

EXCEPTIONS

OTHERS = 8.

LOOP AT gt_itab3 INTO gwa_itab3.

IF gwa_itab3-abc(1) = 'H'.

gwa_itab2 = gwa_itab3-abc+1(131).

APPEND gwa_itab2 TO gt_itab2.

ENDIF.

ENDLOOP.

LOOP AT gt_itab4 INTO gwa_itab4.

IF gwa_itab4-xyz(1) = 'I'.

gwa_itab1 = gwa_itab4-xyz+1(131).

APPEND gwa_itab1 TO gt_itab1.

ENDIF.

ENDLOOP.

          • Header data

  • gs_order_header_in-doc_type = 'OR'.

  • "While checking 'OR' is not found in master file so we used in flat file as 'TA'.

LOOP AT gt_itab2 INTO gwa_itab2.

  • Sales document type

gs_order_header_in-doc_type = gwa_itab2-auart.

gs_order_header_inx-doc_type = 'X'.

  • Sales organization

gs_order_header_in-sales_org = gwa_itab2-vkorg.

gs_order_header_inx-sales_org = 'X'.

  • Distribution channel

gs_order_header_in-distr_chan = gwa_itab2-vtweg.

gs_order_header_inx-distr_chan = 'X'.

  • Division

gs_order_header_in-division = gwa_itab2-spart.

gs_order_header_inx-division = 'X'.

  • Reguested Delivery Date

gs_order_header_in-req_date_h = gwa_itab2-edatu.

gs_order_header_inx-req_date_h = 'X'.

gs_order_header_inx-updateflag = 'I'.

ENDLOOP.

LOOP AT gt_itab1 INTO gwa_itab1 WHERE vbeln = gwa_itab2-vbeln .

gv_itemnum = gv_itemnum + 10.

READ TABLE gt_order_partners INTO gwa_bapipartnr WITH KEY

partn_role = 'AG'

partn_numb = gwa_itab1-kunnr.

IF sy-subrc NE 0.

CLEAR gwa_bapipartnr.

gwa_bapipartnr-partn_role = 'AG'.

gwa_bapipartnr-partn_numb = gwa_itab1-kunnr.

APPEND gwa_bapipartnr TO gt_order_partners.

ENDIF.

READ TABLE gt_order_partners INTO gwa_bapipartnr WITH KEY

partn_role = 'WE'

partn_numb = gwa_itab1-kkunnr.

IF sy-subrc NE 0.

CLEAR gwa_bapipartnr.

gwa_bapipartnr-partn_role = 'WE'.

gwa_bapipartnr-partn_numb = gwa_itab1-kkunnr.

APPEND gwa_bapipartnr TO gt_order_partners.

ENDIF.

gwa_bapisditemx-updateflag = 'I'.

gwa_bapisditem-itm_number = gv_itemnum.

gwa_bapisditemx-itm_number = 'X'.

    • Material

gwa_bapisditem-material = gwa_itab1-matnr.

gwa_bapisditemx-material = 'X'.

    • Plant

gwa_bapisditem-plant = gwa_itab1-werks.

gwa_bapisditemx-plant = 'X'.

    • Quantity

gwa_bapisditem-target_qty = gwa_itab1-kwmeng.

gwa_bapisditemx-target_qty = 'X'.

APPEND gwa_bapisditem TO gt_order_items_in.

APPEND gwa_bapisditemx TO gt_order_items_inx.

ENDLOOP.

CALL FUNCTION 'BAPI_SALESDOCU_CREATEFROMDATA1'

EXPORTING

sales_header_in = gs_order_header_in

sales_header_inx = gs_order_header_inx

IMPORTING

salesdocument_ex = gs_vbeln

TABLES

return = gt_return

sales_items_in = gt_order_items_in

sales_items_inx = gt_order_items_inx

sales_partners = gt_order_partners.

  • Check the return table.

LOOP AT gt_return INTO gwa_bapiret2.

IF gwa_bapiret2-type = 'S' AND

gwa_bapiret2-number = '311'.

  • Success message.

WRITE: gwa_bapiret2-message.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

ELSEIF gwa_bapiret2-type = 'E' OR

gwa_bapiret2-type = 'A'.

  • Error / Abend message

WRITE: / 'Error Message:', gwa_bapiret2-message.

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

ENDIF.

ENDLOOP.

Read only

Former Member
0 Likes
1,065

Hi All....

i resolved the isuue....

thanks for your valuble inputs and your valuble inputs....

thanks&regards

Srinivas.....