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

Bapi

Former Member
0 Likes
794

Hi Guru's

Can any body give example of bapi used to upload data in sap for particular transaction.

8 REPLIES 8
Read only

Former Member
0 Likes
753

Hi,

Go through this program:

REPORT zmm_gr_fuel.

PARAMETERS : p_file LIKE rlgrap-filename.

TYPES: BEGIN OF ty_data_format,

header_text1 TYPE char7,

header_text2 TYPE char3,

header_text3 TYPE char3,

header_text4 TYPE char3,

vendor TYPE lifnr,

uplft_date TYPE d,

qnty TYPE erfmg,

ignore TYPE char6,

unload_pt TYPE ablad,

del_no TYPE lfbnr,

bill_of_lad TYPE frbnr_long,

indicator TYPE char1,

END OF ty_data_format.

TYPES: BEGIN OF ty_data_header.

INCLUDE STRUCTURE bapi2017_gm_head_01.

TYPES: END OF ty_data_header.

TYPES: BEGIN OF ty_ekko.

INCLUDE STRUCTURE ekko.

TYPES: END OF ty_ekko.

TYPES: BEGIN OF ty_ekpo.

INCLUDE STRUCTURE ekpo.

TYPES: END OF ty_ekpo.

TYPES: BEGIN OF ty_ekbe.

INCLUDE STRUCTURE ekbe.

TYPES: END OF ty_ekbe.

TYPES: BEGIN OF ty_data_item.

INCLUDE STRUCTURE bapi2017_gm_item_create.

TYPES: END OF ty_data_item.

DATA: it_data TYPE TABLE OF ty_data_format,

return TYPE TABLE OF bapiret2,

wa_return LIKE LINE OF return,

it_data_item TYPE TABLE OF ty_data_item,

it_ekko TYPE TABLE OF ty_ekko,

it_ekpo TYPE TABLE OF ty_ekpo,

it_ekbe TYPE TABLE OF ty_ekbe.

DATA: wa_data LIKE LINE OF it_data,

wa_data_item LIKE LINE OF it_data_item,

wa_data_header TYPE ty_data_header,

wa_ekko LIKE LINE OF it_ekko,

wa_ekpo LIKE LINE OF it_ekpo,

wa_ekbe LIKE LINE OF it_ekbe.

  • Data Declaration

DATA: goodsmvt_code LIKE bapi2017_gm_code.

INITIALIZATION.

goodsmvt_code-gm_code = '01'.

START-OF-SELECTION.

PERFORM clear_data.

PERFORM upload_file.

PERFORM get_ekko.

PERFORM get_ekpo.

PERFORM make_gr.

*{ INSERT UBDK900068 1

**

  • AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file .

      • to provide f4 help

*CALL FUNCTION 'F4_FILENAME'

  • IMPORTING

  • FILE_NAME = p_file.

*} INSERT

*{ INSERT UBDK900068 2

*Help to Search for the Input file

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

CALL FUNCTION 'WS_FILENAME_GET'

EXPORTING

mask = ',.TXT,.txt.'

mode = 'O'

title = ' '

IMPORTING

filename = p_file

EXCEPTIONS

inv_winsys = 1

no_batch = 2

selection_cancel = 3

selection_error = 4

OTHERS = 5.

&----


*& FORM FIND_FILE_PATH

&----


  • Find the file path

----


  • --> p1 p_file

----


&----


*& Form clear_data

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM clear_data .

CLEAR: it_data[],return[],it_data_item[],it_ekbe[],it_ekko[],it_ekpo[].

CLEAR: wa_data,wa_return,wa_data_item,wa_data_header,wa_ekbe, wa_ekpo, wa_ekko.

ENDFORM. " clear_data

&----


*& Form upload_file

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM upload_file .

DATA: file TYPE string.

file = p_file.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = file

has_field_separator = '#'

TABLES

data_tab = it_data

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.

ENDIF.

ENDFORM. " upload_file

&----


*& Form get_ekko

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM get_ekko .

SORT it_data BY vendor.

IF NOT it_data[] IS INITIAL.

SELECT * FROM ekko INTO CORRESPONDING FIELDS OF TABLE it_ekko

FOR ALL ENTRIES IN it_data

WHERE lifnr = it_data-vendor AND bsart = 'ZB'.

ENDIF.

ENDFORM. " get_ekko

&----


*& Form get_ekpo

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM get_ekpo .

IF NOT it_ekko[] IS INITIAL.

SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE it_ekpo

FOR ALL ENTRIES IN it_ekko

WHERE ebeln = it_ekko-ebeln.

ENDIF.

ENDFORM. " get_ekpo

&----


*& Form make_gr

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM make_gr .

DATA: it_ekko_temp TYPE TABLE OF ty_ekko,

wa_ekko_temp LIKE LINE OF it_ekko_temp.

DATA: line_count LIKE sy-tabix.

it_ekko_temp[] = it_ekko[].

REFRESH it_ekko[].

LOOP AT it_data INTO wa_data.

line_count = sy-tabix.

"Date Validation

CONCATENATE wa_data-uplft_date4(4) wa_data-uplft_date2(2) wa_data-uplft_date+0(2)

INTO wa_data-uplft_date.

"READ TABLE it_ekko INTO wa_ekko WITH KEY lifnr = wa_data-vendor.

LOOP AT it_ekko_temp INTO wa_ekko_temp WHERE lifnr = wa_data-vendor.

IF wa_ekko_temp-kdatb <= wa_data-uplft_date AND wa_ekko_temp-kdate >= wa_data-uplft_date.

MOVE-CORRESPONDING wa_ekko_temp TO wa_ekko.

APPEND wa_ekko TO it_ekko.

ENDIF.

ENDLOOP.

"IF sy-subrc = 0 AND wa_ekko-kdatb <= wa_data-uplft_date AND wa_ekko-kdate >= wa_data-uplft_date.

LOOP AT it_ekko INTO wa_ekko.

wa_data_header-pstng_date = wa_data-uplft_date.

wa_data_header-doc_date = sy-datum.

wa_data_header-bill_of_lading = wa_data-bill_of_lad.

wa_data_header-ref_doc_no = wa_data-del_no.

CONCATENATE wa_data-header_text1 '-'

wa_data-header_text2 '-'

wa_data-header_text3 '-'

wa_data-header_text4

into wa_data_header-HEADER_TXT.

IF wa_data-indicator = 'Y'.

wa_data_item-material = '000000000000200568'.

ELSE.

wa_data_item-material = '000000000000200566'.

ENDIF.

LOOP AT it_ekpo INTO wa_ekpo WHERE ebeln = wa_ekko-ebeln AND matnr = wa_data_item-material.

"Collect Item Level Data

wa_data_item-plant = '1000'.

wa_data_item-stge_loc = '1001'.

wa_data_item-move_type = '101'.

wa_data_item-vendor = wa_data-vendor.

wa_data-qnty = wa_data-qnty / 1000.

wa_data_item-entry_qnt = wa_data-qnty.

wa_data_item-po_pr_qnt = wa_data-qnty.

wa_data_item-entry_uom = 'KL'.

wa_data_item-entry_uom_iso = 'KL'.

wa_data_item-orderpr_un = 'KL'.

wa_data_item-orderpr_un_iso = 'KL'.

wa_data_item-no_more_gr = 'X'.

wa_data_item-po_number = wa_ekpo-ebeln.

wa_data_item-po_item = wa_ekpo-ebelp.

wa_data_item-unload_pt = wa_data-unload_pt.

wa_data_item-mvt_ind = 'B'.

APPEND wa_data_item TO it_data_item.

CLEAR wa_data_item.

ENDLOOP.

CALL FUNCTION 'BAPI_GOODSMVT_CREATE'

EXPORTING

goodsmvt_header = wa_data_header

goodsmvt_code = goodsmvt_code

testrun = 'X'

TABLES

goodsmvt_item = it_data_item

return = return.

READ TABLE return INTO wa_return WITH KEY type = 'S'.

IF sy-subrc <> 0.

DESCRIBE TABLE return LINES sy-tfill.

IF sy-tfill = 0.

CALL FUNCTION <b>'BAPI_GOODSMVT_CREATE'</b>

EXPORTING

goodsmvt_header = wa_data_header

goodsmvt_code = goodsmvt_code

testrun = ' '

TABLES

goodsmvt_item = it_data_item

return = return.

CALL FUNCTION <b>'BAPI_TRANSACTION_COMMIT'</b> EXPORTING

WAIT = 'X'

  • IMPORTING

  • RETURN =

.

ENDIF.

ENDIF.

LOOP AT return INTO wa_return.

WRITE: 'Messsage TYPE ', wa_return-type,

/,'ID ', wa_return-id,

/, 'Number ', wa_return-number,

/, 'Message ', wa_return-message,

/, 'Long Text ', wa_return-message_v1,

wa_return-message_v2,

wa_return-message_v3,

wa_return-message_v4,

/, 'Failed at line', line_count.

ENDLOOP.

CLEAR: wa_ekko, wa_ekpo, wa_data, it_data_item[], wa_data_header.

ENDLOOP.

REFRESH it_ekko[].

"ENDIF.

ENDLOOP.

ENDFORM. " make_gr

Reward if useful!

Read only

Former Member
0 Likes
753

Hi Rohit,

I have a very good program for this.

please give me ur id so that i can forward it to u..

Regards,

Sapna

Read only

Former Member
0 Likes
753

Hi

see this sample code

Check this example of creating a sales order and for creating delivery...and PGI

************SALES ORDER INPUT CREATION.

PARAMETERS: p_auart TYPE auart OBLIGATORY.

PARAMETERS: p_vkorg TYPE vkorg OBLIGATORY.

PARAMETERS: p_vtweg TYPE vtweg OBLIGATORY.

PARAMETERS: p_spart TYPE vtweg OBLIGATORY.

PARAMETERS: p_sold TYPE kunnr OBLIGATORY.

PARAMETERS: p_ship TYPE kunnr OBLIGATORY.

*ITEM

PARAMETERS: p_matnr TYPE matnr OBLIGATORY.

PARAMETERS: p_menge TYPE kwmeng OBLIGATORY.

PARAMETERS: p_plant TYPE werks_d OBLIGATORY.

PARAMETERS: p_itcat TYPE pstyv OBLIGATORY.

  • DATA DECLARATIONS.

DATA: v_vbeln LIKE vbak-vbeln.

DATA: header LIKE bapisdhead1.

DATA: headerx LIKE bapisdhead1x.

DATA: item LIKE bapisditem OCCURS 0 WITH HEADER LINE.

DATA: itemx LIKE bapisditemx OCCURS 0 WITH HEADER LINE.

DATA: partner LIKE bapipartnr OCCURS 0 WITH HEADER LINE.

DATA: return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.

DATA: lt_schedules_inx TYPE STANDARD TABLE OF bapischdlx

WITH HEADER LINE.

DATA: lt_schedules_in TYPE STANDARD TABLE OF bapischdl

WITH HEADER LINE.

  • HEADER DATA

header-doc_type = p_auart.

headerx-doc_type = 'X'.

header-sales_org = p_vkorg.

headerx-sales_org = 'X'.

header-distr_chan = p_vtweg.

headerx-distr_chan = 'X'.

header-division = p_spart.

headerx-division = 'X'.

headerx-updateflag = 'I'.

  • PARTNER DATA

partner-partn_role = 'AG'.

partner-partn_numb = p_sold.

APPEND partner.

partner-partn_role = 'WE'.

partner-partn_numb = p_ship.

APPEND partner.

  • ITEM DATA

itemx-updateflag = 'I'.

item-itm_number = '000010'.

itemx-itm_number = 'X'.

item-material = p_matnr.

itemx-material = 'X'.

item-plant = p_plant.

itemx-plant = 'X'.

item-target_qty = p_menge.

itemx-target_qty = 'X'.

item-target_qu = 'EA'.

itemx-target_qu = 'X'.

item-item_categ = p_itcat.

itemx-item_categ = 'X'.

APPEND item.

APPEND itemx.

  • Fill schedule lines

lt_schedules_in-itm_number = '000010'.

lt_schedules_in-sched_line = '0001'.

lt_schedules_in-req_qty = p_menge.

APPEND lt_schedules_in.

  • Fill schedule line flags

lt_schedules_inx-itm_number = '000010'.

lt_schedules_inx-sched_line = '0001'.

lt_schedules_inx-updateflag = 'X'.

lt_schedules_inx-req_qty = 'X'.

APPEND lt_schedules_inx.

  • Call the BAPI

CALL FUNCTION 'BAPI_SALESDOCU_CREATEFROMDATA1'

EXPORTING

sales_header_in = header

sales_header_inx = headerx

IMPORTING

salesdocument_ex = v_vbeln

TABLES

return = return

sales_items_in = item

sales_items_inx = itemx

sales_schedules_in = lt_schedules_in

sales_schedules_inx = lt_schedules_inx

sales_partners = partner.

  • Check the return table.

LOOP AT return WHERE type = 'E' OR type = 'A'.

EXIT.

ENDLOOP.

IF sy-subrc = 0.

WRITE: / 'Error in creating document'.

ELSE.

COMMIT WORK AND WAIT.

WRITE: / 'Document ', v_vbeln, ' created'.

ENDIF.

************DELIVERY CREATION.

DATA: BEGIN OF t_vbap OCCURS 0,

vbeln LIKE vbap-vbeln,

posnr LIKE vbap-posnr,

zmeng LIKE vbap-kwmeng,

matnr LIKE vbap-matnr,

werks LIKE vbap-werks,

END OF t_vbap.

DATA: t_request TYPE STANDARD TABLE OF bapideliciousrequest

WITH HEADER LINE.

DATA: t_created TYPE STANDARD TABLE OF bapideliciouscreateditems

WITH HEADER LINE.

DATA: t_return TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE.

SELECT vbeln posnr zmeng matnr werks

INTO TABLE t_vbap

FROM vbap

WHERE vbeln = v_vbeln.

LOOP AT t_vbap.

t_request-document_numb = t_vbap-vbeln.

t_request-document_item = t_vbap-posnr.

t_request-quantity_sales_uom = t_vbap-zmeng.

t_request-quantity_base__uom = t_vbap-zmeng.

t_request-id = 1.

t_request-document_type = 'A'.

t_request-delivery_date = sy-datum.

t_request-material = t_vbap-matnr.

t_request-plant = t_vbap-werks.

t_request-date = sy-datum.

t_request-goods_issue_date = sy-datum.

t_request-goods_issue_time = sy-uzeit.

APPEND t_request.

ENDLOOP.

CALL FUNCTION 'BAPI_DELIVERYPROCESSING_EXEC'

TABLES

request = t_request

createditems = t_created

return = t_return.

READ TABLE t_return WITH KEY type = 'E'.

IF sy-subrc = 0.

MESSAGE e208(00) WITH 'Delivery creation error'.

ENDIF.

COMMIT WORK.

*

************Post goods issue.

READ TABLE t_created INDEX 1.

DATA: vbkok_wa TYPE vbkok.

vbkok_wa-vbeln_vl = t_created-document_numb.

vbkok_wa-wabuc = 'X'.

DATA: v_error.

CALL FUNCTION 'WS_DELIVERY_UPDATE'

EXPORTING

vbkok_wa = vbkok_wa

delivery = t_created-document_numb

IMPORTING

ef_error_in_goods_issue_0 = v_error.

COMMIT WORK.

Please try this link

http://www.erpgenie.com/abap/bapi/example.htm

<b>Reward points if useful</b>

Regards

Ashu

Read only

Former Member
0 Likes
753

Hi,

Use the following for Transaction VA01.

data:

l_i_ret TYPE STANDARD TABLE OF bapiret2, "Return

l_i_schdl TYPE STANDARD TABLE OF bapischdl, "Schedule line

l_i_partners TYPE STANDARD TABLE OF bapiparnr, "Partner

l_i_orderitems TYPE STANDARD TABLE OF bapisditm, "Item

l_rec_orderhd TYPE bapisdhd1.

CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'

EXPORTING

order_header_in = l_rec_orderhd

IMPORTING

salesdocument = l_vbeln

TABLES

return = l_i_ret

order_items_in = l_i_orderitems

order_partners = l_i_partners

order_schedules_in = l_i_schdl.

You can use this to create the sales documents.

For more Info,

https://wiki.sdn.sap.com/wiki/display/Snippets/ABAP-Simpleprogramtocreatesalesorderusing+BAPI

Regards,

Padmam.

Read only

Former Member
0 Likes
753

hi Sapna,

My id is : mohit.sap1@gmail.com

Regards,

Mohit