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

BDC

Former Member
0 Likes
537

How to upload data to a transaction like ME21 where header and item data exist differently? Whats the procedure? Plz help me with an example if possible? And how to run them in 7 days only?

5 REPLIES 5
Read only

gopi_narendra
Active Contributor
0 Likes
484

make use fo the BAPI : BAPI_PO_CREATE

see its documentation of how to use it

Regards

Gopi

Read only

0 Likes
484

i don't know bapi. so any other way or if bapi then how? Plz help me..

Read only

Former Member
0 Likes
484

Hi,

Hai

Please find herewith code for vendor master

LOOP AT i_flatfile INTO wa_flatfile.

SPLIT wa_flatfile-fdata AT c_pip

INTO wa_flupload-ekorg

wa_flupload-ktokk

wa_flupload-anred

wa_flupload-name1

wa_flupload-sortl

wa_flupload-stras

wa_flupload-ort01

wa_flupload-regio

wa_flupload-pstlz

wa_flupload-land1

wa_flupload-spras

wa_flupload-telf1

wa_flupload-telfx

wa_flupload-telf2

wa_flupload-lfurl

wa_flupload-remark

wa_flupload-parvw

wa_flupload-lifn2

wa_flupload-defpa.

APPEND wa_flupload TO i_flupload.

CLEAR : wa_flupload , wa_flatfile.

ENDLOOP.

DATA: lv_index TYPE sy-tabix.

  • Sort internal table on Name1

SORT i_flupload BY name1.

LOOP AT i_flupload INTO lwa_flupload.

lv_index = sy-tabix.

  • Fetch all partner function from internal table for succesfully

  • uploaded vendor and populate item table.

MOVE : lwa_flupload-ktokk TO wa_item-ktokk,

lwa_flupload-ekorg TO wa_item-ekorg,

lwa_flupload-parvw TO wa_item-parvw,

lwa_flupload-lifn2 TO wa_item-lifn2,

lwa_flupload-defpa TO wa_item-defpa.

APPEND wa_item TO i_item.

AT END OF name1.

READ TABLE i_flupload INTO lwa_flupload INDEX lv_index.

  • This Subroutine for upload new vendor common details

PERFORM upload_new_vendor USING lwa_flupload.

  • Call transaction MK01 for create new Vendor

CALL TRANSACTION lc_tcode USING i_bdcdata

options from lv_opt

MESSAGES INTO i_bdcerror.

if sy-subrc eq 0.

  • Read table BDCERROR for success message and fetch latest created

  • LIFNR(vendor)

READ TABLE i_bdcerror INTO wa_bdcerror

WITH KEY msgtyp = lc_smsgtyp

msgnr = lc_173

msgid = lc_F2..

IF sy-subrc EQ 0.

MOVE wa_bdcerror-msgv1 TO lv_lifnr.

wa_report-lifnr = lv_lifnr.

wa_report-desc = text-007.

APPEND wa_report TO i_report.

endif.

LOOP AT i_item INTO wa_item.

REFRESH i_bdcdata.

PERFORM bdc_dynpro USING 'SAPMF02K' '0108'.

PERFORM bdc_field USING 'BDC_OKCODE' c_00.

PERFORM bdc_field USING 'RF02K-LIFNR' wa_item-lifn2.

PERFORM bdc_field USING 'RF02K-EKORG' wa_item-ekorg.

PERFORM bdc_field USING 'WRF02K-D0320' c_x.

PERFORM bdc_field USING 'BDC_OKCODE' '=ENTR'.

PERFORM bdc_dynpro USING 'SAPMF02K' '0320'.

CASE wa_item-ktokk.

WHEN c_ktokk1.

MOVE lc_parvw1 TO wa_item-parvw.

WHEN c_ktokk2.

MOVE lc_parvw2 TO wa_item-parvw.

ENDCASE.

*->> Find number of partners already in the system for this partner

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = wa_item-lifn2

IMPORTING

output = wa_item-lifn2.

SELECT COUNT( * ) INTO lv_i

FROM wyt3 WHERE lifnr = wa_item-lifn2 AND

ekorg = wa_item-ekorg.

if lv_i ge 13.

lv_mod = lv_i div 13.

if lv_mod gt 0.

do lv_mod times.

PERFORM bdc_field USING 'BDC_OKCODE' 'P+'.

PERFORM bdc_dynpro USING 'SAPMF02K' '0320'.

enddo.

lv_i = lv_i - 13.

endif.

lv_mod = lv_i mod 13.

lv_i = lv_mod.

endif.

lv_i = lv_i + 1.

CONCATENATE 'WYT3-PARVW(' lv_i ')' INTO lv_field.

PERFORM bdc_field USING lv_field wa_item-parvw.

CONCATENATE 'WRF02K-GPARN(' lv_i ')' INTO lv_field.

PERFORM bdc_field USING lv_field lv_lifnr.

PERFORM bdc_dynpro USING 'SAPMF02K' '0320'.

PERFORM bdc_field USING 'BDC_OKCODE' '=ENTR'.

PERFORM bdc_dynpro USING 'SAPLSPO1' '0300'.

PERFORM bdc_field USING 'BDC_OKCODE' '=YES'.

  • Call transaction MK02 for upload vendors partner function

CALL TRANSACTION 'MK02' USING i_bdcdata

options from lv_opt

MESSAGES INTO i_bdcerror.

  • Check if call transaction has any error then create session with error

  • record

IF sy-subrc NE 0.

READ TABLE i_bdcerror INTO wa_bdcerror

WITH KEY msgtyp = c_msgtyp.

IF sy-subrc = 0.

IF lv_bdc_opened IS INITIAL.

  • This Subroutine is for open BDC group create session

PERFORM bdc_open_group USING lv_group.

lv_bdc_opened = c_x.

ENDIF.

  • This Subroutine for store BDCDATA into open session

PERFORM bdc_insert USING 'MK02'.

ENDIF.

ELSE.

wa_report-lifnr = wa_item-lifn2.

wa_report-desc = text-009.

APPEND wa_report TO i_report.

ENDIF.

REFRESH : i_bdcdata , i_bdcerror.

IF lv_bdc_opened = c_x.

  • Close BDC open group

CALL FUNCTION 'BDC_CLOSE_GROUP'.

CLEAR lv_bdc_opened.

ENDIF.

ENDLOOP.

ELSE.

  • Search for error in bdcerror internal table , if found then add into

  • error log file

READ TABLE i_bdcerror INTO wa_bdcerror

WITH KEY msgtyp = c_msgtyp.

IF sy-subrc = 0.

PERFORM format_err_message USING wa_bdcerror

lwa_flupload.

ENDIF.

ENDIF.

CLEAR lv_lifnr.

refresh: i_bdcdata, i_bdcerror, i_item.

ENDAT.

CLEAR : lwa_flupload , wa_item .

REFRESH : i_bdcdata , i_bdcerror.

ENDLOOP.

FORM upload_new_vendor USING p_flupload1 TYPE t_flupload.

PERFORM bdc_dynpro USING 'SAPMF02K' '0107'.

PERFORM bdc_field USING 'BDC_CURSOR' 'RF02K-LIFNR'.

PERFORM bdc_field USING 'BDC_OKCODE' c_00.

PERFORM bdc_field USING 'RF02K-EKORG' p_flupload1-ekorg.

PERFORM bdc_field USING 'RF02K-KTOKK' p_flupload1-ktokk.

PERFORM bdc_field USING 'USE_ZAV' c_x.

PERFORM bdc_dynpro USING 'SAPMF02K' '0111'.

PERFORM bdc_field USING 'BDC_OKCODE' c_00.

PERFORM bdc_field USING 'BDC_CURSOR' 'ADDR1_DATA-REMARK'.

PERFORM bdc_field USING 'SZA1_D0100-TITLE_MEDI' p_flupload1-anred.

PERFORM bdc_field USING 'ADDR1_DATA-NAME1' p_flupload1-name1.

PERFORM bdc_field USING 'ADDR1_DATA-SORT1' p_flupload1-sortl.

PERFORM bdc_field USING 'ADDR1_DATA-STREET' p_flupload1-stras.

PERFORM bdc_field USING 'ADDR1_DATA-POST_CODE1' p_flupload1-pstlz.

PERFORM bdc_field USING 'ADDR1_DATA-CITY1' p_flupload1-ort01.

PERFORM bdc_field USING 'ADDR1_DATA-REGION' p_flupload1-regio.

PERFORM bdc_field USING 'ADDR1_DATA-COUNTRY' p_flupload1-land1.

PERFORM bdc_field USING 'ADDR1_DATA-LANGU' p_flupload1-spras.

PERFORM bdc_field USING 'SZA1_D0100-TEL_NUMBER' p_flupload1-telf1.

IF p_flupload1-ktokk EQ c_ktokk2.

PERFORM bdc_field USING 'SZA1_D0100-MOB_NUMBER' p_flupload1-telf2.

ENDIF.

PERFORM bdc_field USING 'SZA1_D0100-FAX_NUMBER' p_flupload1-telfx.

PERFORM bdc_field USING 'SZA1_D0100-SMTP_ADDR' p_flupload1-lfurl.

PERFORM bdc_field USING 'ADDR1_DATA-REMARK' p_flupload1-remark.

PERFORM bdc_dynpro USING 'SAPMF02K' '0320'.

PERFORM bdc_field USING 'BDC_CURSOR' 'WRF02K-GPARN(1)'.

PERFORM bdc_field USING 'BDC_OKCODE' '=ENTR'.

DATA: lv_cnt(2) TYPE n,

lv_fld TYPE bdcdata-fnam.

lv_cnt = '01'.

LOOP AT i_item INTO wa_item.

CONCATENATE 'WYT3-PARVW(' lv_cnt ')' INTO lv_fld.

PERFORM bdc_field USING lv_fld wa_item-parvw.

CONCATENATE 'WRF02K-GPARN(' lv_cnt ')' INTO lv_fld.

PERFORM bdc_field USING lv_fld wa_item-lifn2.

lv_cnt = lv_cnt + 1.

IF lv_cnt = '14'.

PERFORM bdc_field USING 'BDC_OKCODE' 'P+'.

PERFORM bdc_dynpro USING 'SAPMF02K' '0320'.

lv_cnt = '01'.

ENDIF.

ENDLOOP.

IF p_flupload1-lifn2 IS NOT INITIAL.

PERFORM bdc_field USING 'BDC_OKCODE' '=ENTR'.

PERFORM bdc_dynpro USING 'SAPMF02K' '0320'.

ENDIF.

PERFORM bdc_dynpro USING 'SAPLSPO1' '0300'.

PERFORM bdc_field USING 'BDC_OKCODE' '=YES'.

ENDFORM. " upload_new_vendor

Regards

Read only

Former Member
0 Likes
484

Hi,

You can use LSMW-BAPI : BAPI_PO_CREATE (BUS2012)

This is smple method to use the BAPI in LSMW method...

award if useful..

Read only

Former Member
0 Likes
484

hi,

use BAPI:

ex:

See the simple example :

REPORT ZBAPI.

DATA: BEGIN OF i_data OCCURS 0,

text(255),

END OF i_data.

DATA: i_ekko TYPE bapiekkoc.

DATA: it_ekko LIKE TABLE OF i_ekko INITIAL SIZE 0 WITH HEADER LINE.

DATA: BEGIN OF i_ekpo OCCURS 0,

po_item(5),

pur_mat(18),

plant(4),

net_price(23),

disp_quan(13),

END OF i_ekpo.

DATA: it_ekpo LIKE TABLE OF bapiekpoc INITIAL SIZE 0 WITH HEADER LINE .

DATA: BEGIN OF i_eket OCCURS 0,

po_item(5),

deliv_date(8),

quantity(13),

END OF i_eket.

DATA: it_eket LIKE TABLE OF bapieket INITIAL SIZE 0 WITH HEADER LINE.

DATA: v_index TYPE i.

DATA: return TYPE TABLE OF bapireturn INITIAL SIZE 0 WITH HEADER LINE.

DATA: po_num(10).

START-OF-SELECTION.

CALL FUNCTION 'UPLOAD'

  • EXPORTING

  • CODEPAGE = ' '

  • FILENAME = ' '

  • FILETYPE = ' '

  • ITEM = ' '

  • FILEMASK_MASK = ' '

  • FILEMASK_TEXT = ' '

  • FILETYPE_NO_CHANGE = ' '

  • FILEMASK_ALL = ' '

  • FILETYPE_NO_SHOW = ' '

  • LINE_EXIT = ' '

  • USER_FORM = ' '

  • USER_PROG = ' '

  • SILENT = 'S'

  • IMPORTING

  • FILESIZE =

  • CANCEL =

  • ACT_FILENAME =

  • ACT_FILETYPE =

TABLES

data_tab = i_data

  • EXCEPTIONS

  • CONVERSION_ERROR = 1

  • INVALID_TABLE_WIDTH = 2

  • INVALID_TYPE = 3

  • NO_BATCH = 4

  • UNKNOWN_ERROR = 5

  • GUI_REFUSE_FILETRANSFER = 6

  • OTHERS = 7

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

loop at i_data.

if i_data-text(1) = 'H'.

shift i_data-text.

v_index = v_index + 1.

split i_data-text at ',' into i_ekko-doc_type

i_ekko-purch_org

i_ekko-pur_group

i_ekko-vendor.

append i_ekko to it_ekko.

elseif i_data-text(1) = 'I'.

shift i_data-text.

split i_data-text at ',' into i_ekpo-po_item

i_ekpo-pur_mat

i_ekpo-plant

i_ekpo-net_price

i_ekpo-disp_quan.

append i_ekpo.

move-corresponding i_ekpo to it_ekpo.

append it_ekpo.

clear it_ekpo.

else.

shift i_data-text.

split i_data-text at ',' into i_eket-po_item

i_eket-deliv_date

i_eket-quantity.

append it_eket .

move-corresponding i_eket to it_eket.

append it_eket.

clear it_eket.

endif.

endloop.

CALL FUNCTION 'BAPI_PO_CREATE'

EXPORTING

po_header = i_ekko

  • PO_HEADER_ADD_DATA =

  • HEADER_ADD_DATA_RELEVANT =

  • PO_ADDRESS =

  • SKIP_ITEMS_WITH_ERROR = 'X'

  • ITEM_ADD_DATA_RELEVANT =

  • HEADER_TECH_FIELDS =

  • IMPORTING

  • PURCHASEORDER =

tables

po_items = it_ekpo

  • PO_ITEM_ADD_DATA =

po_item_schedules = it_eket

  • PO_ITEM_ACCOUNT_ASSIGNMENT =

  • PO_ITEM_TEXT =

RETURN = return

  • PO_LIMITS =

  • PO_CONTRACT_LIMITS =

  • PO_SERVICES =

  • PO_SRV_ACCASS_VALUES =

  • PO_SERVICES_TEXT =

  • PO_BUSINESS_PARTNER =

  • EXTENSIONIN =

  • POADDRDELIVERY =

.

write: po_num.

loop at return.

write:/ return-message,return-type.

endloop.

BDC: