The document describes a program that demonstrates how to create material master data using the BAPI_MATERIAL_SAVEDATA function. It loads data from an Excel file into internal tables, deletes any header or empty records, then calls the BAPI to create the material master records, generating a report of errors or successes.
Download as DOCX, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
349 views
MM01 Upload Using BAPI
The document describes a program that demonstrates how to create material master data using the BAPI_MATERIAL_SAVEDATA function. It loads data from an Excel file into internal tables, deletes any header or empty records, then calls the BAPI to create the material master records, generating a report of errors or successes.
*&---------------------------------------------------------------------* *& This program demonstrates how easy it is to create Material master *& data using BAPI_MATERIAL_SAVEDATA *& The program also generates a report post-execution displaying errors *& as well as successful uploads *&---------------------------------------------------------------------* REPORT zkar_matmas_bapi. *----------------------------------------------------------------------* * TABLES *----------------------------------------------------------------------* *----------------------------------------------------------------------* * FLAGS * *----------------------------------------------------------------------* DATA: f_stop. " Flag used to stop processing *----------------------------------------------------------------------* * DATA DECLARATIONS * *----------------------------------------------------------------------* DATA: v_empty TYPE i, " No. of empty records v_total TYPE i. " Total no. of records. *----------------------------------------------------------------------* * STRUCTURES & INTERNAL TABLES *----------------------------------------------------------------------* *BAPI structures *----------------------------------------------------------------------* DATA: bapi_head LIKE bapimathead, " Header Segment with Control Information bapi_makt LIKE bapi_makt, " Material Description bapi_mara1 LIKE bapi_mara, " Client Data bapi_marax LIKE bapi_marax, " Checkbox Structure for BAPI_MARA bapi_marc1 LIKE bapi_marc, " Plant View bapi_marcx LIKE bapi_marcx, " Checkbox Structure for BAPI_MARC bapi_mbew1 LIKE bapi_mbew, " Accounting View bapi_mbewx LIKE bapi_mbewx, " Checkbox Structure for BAPI_MBEW bapi_return LIKE bapiret2. " Return Parameter *--- Internal table to hold excel file data DATA: it_intern TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE. *--- Internal table to hold Matetrial descriptions DATA: BEGIN OF it_makt OCCURS 100. INCLUDE STRUCTURE bapi_makt. DATA: END OF it_makt. *--- Internal to hold the records in the text file DATA : BEGIN OF it_data OCCURS 100, werks(4), " Plant mtart(4), " Material type matnr(18), " Material number matkl(9) , " Material group mbrsh(1), " Industry sector meins(3), " Base unit of measure gewei(3), " Weight Unit spart(2), " Division ekgrp(3), " Purchasing group vprsv(1), " Price control indicator stprs(12), " Standard price peinh(3), " Price unit spras(2), " Language key maktx(40), " Material description END OF it_data. *----------------------------------------------------------------------* * SELECTION SCREEN. * *----------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK scr1 WITH FRAME TITLE text-111. PARAMETER : p_file TYPE rlgrap-filename OBLIGATORY DEFAULT " Input File 'C:\Material_master.XLS'. PARAMETER : p_max(4) OBLIGATORY DEFAULT '100'. " no.of recs in a session PARAMETERS: p_header TYPE i DEFAULT 0. " Header Lines PARAMETERS: p_begcol TYPE i DEFAULT 1 NO-DISPLAY, p_begrow TYPE i DEFAULT 1 NO-DISPLAY, p_endcol TYPE i DEFAULT 100 NO-DISPLAY, p_endrow TYPE i DEFAULT 32000 NO-DISPLAY. SELECTION-SCREEN END OF BLOCK scr1. *---------------------------------------------------------------------* * AT SELECTION-SCREEN * *---------------------------------------------------------------------* AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. *--- Validating file PERFORM validate_file USING p_file. *----------------------------------------------------------------------* * START-OF-SELECTION *----------------------------------------------------------------------* START-OF-SELECTION. *--- Perform to convert the Excel data into an internal table PERFORM convert_xls_itab. IF NOT it_data[] IS INITIAL. *--- Perform to delete Header lines PERFORM delete_header_empty_recs. ENDIF. *----------------------------------------------------------------------* * END OF SELECTION. * *----------------------------------------------------------------------* END-OF-SELECTION. *--- Perform to upload Material Master data PERFORM upload_matmas. *----------------------------------------------------------------------* * Form : validate_input_file *----------------------------------------------------------------------* * Description : To provide F4 help for file if read from PC *----------------------------------------------------------------------* FORM validate_file USING f_file TYPE rlgrap-filename. CALL FUNCTION 'KD_GET_FILENAME_ON_F4' CHANGING file_name = f_file EXCEPTIONS mask_too_long = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE s010(zlkpl_msgclass). " 'Error in getting filename'. ENDIF. ENDFORM. " validate_input_file *&---------------------------------------------------------------------* *& Form CONVER_XLS_ITAB *&---------------------------------------------------------------------* FORM convert_xls_itab. CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = p_file i_begin_col = p_begcol i_begin_row = p_begrow i_end_col = p_endcol i_end_row = p_endrow TABLES intern = it_intern. IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. *--- Perform to move the data into an internal data PERFORM move_data. ENDFORM. " CONVERT_XLS_ITAB *&---------------------------------------------------------------------* *& Form MOVE_DATA *&---------------------------------------------------------------------* FORM move_data. DATA : lv_index TYPE i. FIELD-SYMBOLS <fs>. *--- Sorting the internal table SORT it_intern BY row col. CLEAR it_intern. LOOP AT it_intern. MOVE it_intern-col TO lv_index. *--- Assigning the each record to an internal table row ASSIGN COMPONENT lv_index OF STRUCTURE it_data TO <fs>. *--- Asigning the field value to a field symbol MOVE it_intern-value TO <fs>. AT END OF row. APPEND it_data. CLEAR it_data. ENDAT. ENDLOOP. ENDFORM. " MOVE_DATA *&---------------------------------------------------------------------* *& Form DELETE_HEADER_EMPTY_RECS *&---------------------------------------------------------------------* * To delete the Header and empty records *----------------------------------------------------------------------* FORM delete_header_empty_recs. DATA: lv_tabix LIKE sy-tabix. IF NOT p_header IS INITIAL. LOOP AT it_data. IF p_header > 0 AND NOT it_data IS INITIAL. DELETE it_data FROM 1 TO p_header. * P_HEADER = 0. EXIT. ENDIF. ENDLOOP. ENDIF. CLEAR it_data. *--- To delete the empty lines from internal table LOOP AT it_data. lv_tabix = sy-tabix. IF it_data IS INITIAL. v_empty = v_empty + 1. DELETE it_data INDEX lv_tabix.. ENDIF. ENDLOOP. CLEAR it_data. *--- Total no of recs in file DESCRIBE TABLE it_data LINES v_total. IF v_total = 0. MESSAGE i013(zlkpl_msgclass). " No records in the file f_stop = 'X'. STOP. ENDIF. ENDFORM. " DELETE_HEADER_EMPTY_RECS *&---------------------------------------------------------------------* *& Form UPLOAD_MATMAS *&---------------------------------------------------------------------* * to upload Material Master data *----------------------------------------------------------------------* FORM upload_matmas . LOOP AT it_data. * Header bapi_head-material = it_data-matnr. bapi_head-ind_sector = it_data-mbrsh. bapi_head-matl_type = it_data-mtart. bapi_head-basic_view = 'X'. bapi_head-purchase_view = 'X'. bapi_head-account_view = 'X'. * Material Description REFRESH it_makt. it_makt-langu = it_data-spras. it_makt-matl_desc = it_data-maktx. APPEND it_makt. * Client Data - Basic bapi_mara1-matl_group = it_data-matkl. bapi_mara1-base_uom = it_data-meins. bapi_mara1-unit_of_wt = it_data-gewei. bapi_mara1-division = it_data-spart. bapi_marax-matl_group = 'X'. bapi_marax-base_uom = 'X'. bapi_marax-unit_of_wt = 'X'. bapi_marax-division = 'X'. * Plant - Purchasing bapi_marc1-plant = it_data-werks. bapi_marc1-pur_group = it_data-ekgrp. bapi_marcx-plant = it_data-werks. bapi_marcx-pur_group = 'X'. * Accounting bapi_mbew1-val_area = it_data-werks. bapi_mbew1-price_ctrl = it_data-vprsv. bapi_mbew1-std_price = it_data-stprs. bapi_mbew1-price_unit = it_data-peinh. bapi_mbewx-val_area = it_data-werks. bapi_mbewx-price_ctrl = 'X'. bapi_mbewx-std_price = 'X'. bapi_mbewx-price_unit = 'X'. *--- BAPI to create material CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA' EXPORTING headdata = bapi_head clientdata = bapi_mara1 clientdatax = bapi_marax plantdata = bapi_marc1 plantdatax = bapi_marcx IMPORTING return = bapi_return TABLES materialdescription = it_makt. IF bapi_return-type = 'E'. WRITE:/ 'Error:' ,bapi_return-message ,'for material:' ,it_data-matnr. ELSEIF bapi_return-type = 'S'. WRITE: 'Successfully created material' ,it_data-matnr. ENDIF. ENDLOOP. ENDFORM. " UPLOAD_MATMAS