‎2007 Jun 19 10:15 AM
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?
‎2007 Jun 19 10:19 AM
make use fo the BAPI : BAPI_PO_CREATE
see its documentation of how to use it
Regards
Gopi
‎2007 Jun 19 10:25 AM
i don't know bapi. so any other way or if bapi then how? Plz help me..
‎2007 Jun 19 10:20 AM
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
‎2007 Jun 20 6:31 AM
Hi,
You can use LSMW-BAPI : BAPI_PO_CREATE (BUS2012)
This is smple method to use the BAPI in LSMW method...
award if useful..
‎2007 Jun 20 6:45 AM
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: