Using BAPI upload excel file for t-code AS02 in SAP
Using BAPI " BAPI_FIXEDASSET_CHANGE " create a zprogram to upload excel file for mass change fixed asset in SAP.
REPORT ZAS02_ASSET_CHANGE_UPLOAD.
TYPE-POOLS: truxs.
" Structure for Excel data
TYPES: BEGIN OF ty_excel,
anln1 TYPE anln1,
bukrs TYPE bukrs,
kostl TYPE kostl,
werks TYPE werks,
prctr TYPE prctr,
END OF ty_excel.
DATA: lt_excel TYPE TABLE OF ty_excel,
ls_excel TYPE ty_excel,
ls_time TYPE bapi1022_feglg003, " Time-dependent data
ls_timex TYPE bapi1022_feglg003x, " Change flags
ls_return TYPE bapiret2, " Holds BAPI response structure
lv_subnumber TYPE anln2. " To enforce correct subnumber length
DATA: lv_raw_data TYPE truxs_t_text_data.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_file TYPE localfile.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN skip 2.
SELECTION-SCREEN COMMENT /1(80) TEXT-002. " Excel Format:
SELECTION-SCREEN COMMENT /1(80) TEXT-003. " (Purchase Group | Supplying Plant | Article | Plant | Quantity)
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
IMPORTING
file_name = p_file.
START-OF-SELECTION.
IF p_file IS INITIAL.
MESSAGE 'Please select an Excel file before executing.' TYPE 'E'.
EXIT.
ENDIF.
*--- 1. Upload Excel Data ---*
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_tab_raw_data = lv_raw_data
i_filename = p_file
TABLES
i_tab_converted_data = lt_excel
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
WRITE: / 'Error: Could not read Excel file.'.
EXIT.
ENDIF.
*--- 2. Process and Update Assets ---*
LOOP AT lt_excel INTO ls_excel.
CLEAR: ls_time, ls_timex, ls_return.
" Fix Asset alpha-numeric padding (Ensures 12 characters with leading zeros)
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_excel-anln1
IMPORTING
output = ls_excel-anln1.
" Enforce correct 4-character asset subnumber format
lv_subnumber = '0000'.
ls_time-costcenter = ls_excel-kostl.
ls_time-plant = ls_excel-werks.
ls_time-profit_ctr = ls_excel-prctr.
" Mark which fields to update (The 'X' flags)
ls_timex-costcenter = 'X'.
ls_timex-plant = 'X'.
ls_timex-profit_ctr = 'X'.
" Call the BAPI
CALL FUNCTION 'BAPI_FIXEDASSET_CHANGE'
EXPORTING
companycode = ls_excel-bukrs
asset = ls_excel-anln1
subnumber = lv_subnumber
timedependentdata = ls_time
timedependentdatax = ls_timex
IMPORTING
return = ls_return. " <-- Populates structure directly
" Check the real response inside ls_return directly
IF ls_return-type <> 'E' AND ls_return-type <> 'A'.
" No errors or aborts found, commit the change to the database
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
WRITE: / ls_excel-anln1, ls_excel-bukrs, ls_excel-kostl, ls_excel-werks, ls_excel-prctr, '- Updated successfully'.
ELSE.
" If there's a real error, it will now show up here
WRITE: / 'Error on Asset', ls_excel-anln1, ':', ls_return-message.
ENDIF.
ENDLOOP.
Comments
Post a Comment