‎2020 Jan 28 7:17 AM
Hi Experts,
My requirement is to develope a bdc program for uploading and downloading excel file to sap system for that purpose i designed a code like shown in below
TYPES: BEGIN OF LINE_TYPE,
lifnr type lfbk-lifnr,
* koinh type lfbk-koinh,
BANKS TYPE LFBK-BANKS,
bankl type lfbk-bankl,
bankn type lfbk-bankn,
koinh type lfbk-koinh,
banka type bnka-banka,
brnch type bnka-brnch,
swift type bnka-swift,
END OF LINE_TYPE.
* TO CREATE INTERNAL TABLE IT_MAT WITH STRUCTURE LINE_TYPE.
DATA IT_MAT TYPE TABLE OF LINE_TYPE WITH HEADER LINE.
* TO CREATE INTERNAL TABLE IT_EXCEL WITH STRUCTURE ALSMEX_TABLINE.
DATA IT_EXCEL TYPE TABLE OF ALSMEX_TABLINE WITH HEADER LINE.
* TO CREATE INTERNAL TABLE IT_BDCDATA WITH STRUCTURE BDCDATA.
DATA IT_BDCDATA TYPE TABLE OF BDCDATA WITH HEADER LINE.
* TO CREATE INTERNAL TABLE IT_MSG WITH STRUCTURE BDCMSGCOLL.
DATA IT_MSG TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE.
* TO CREATE INTERNAL TABLE IT_ERRORS.
DATA: BEGIN OF IT_ERRORS OCCURS 10,
lifnr type lfbk-lifnr,
* koinh type lfbk-koinh,
BANKS TYPE LFBK-BANKS,
bankl type lfbk-bankl,
bankn type lfbk-bankn,
koinh type lfbk-koinh,
banka type bnka-banka,
brnch type bnka-brnch,
swift type bnka-swift,
TEXT(100),
END OF IT_ERRORS.
* TO CREATE VARIABLES
DATA:S1 TYPE I,E1 TYPE I.
DATA: it_raw TYPE truxs_t_text_data.
DATA:IT_FCAT TYPE SLIS_T_FIELDCAT_ALV,
WA_FCAT TYPE SLIS_FIELDCAT_ALV,
WA_LAYOUT TYPE SLIS_LAYOUT_ALV.
* TO CREATE A FILED TO ENTER EXCEL FILE
SELECTION-SCREEN BEGIN OF BLOCK SCR1 WITH FRAME TITLE TEXT-001.
PARAMETERS P_FILE TYPE IBIPPARMS-PATH.
* TO CRATE A FIELD TO DOWNLOAD FLATFILE.
PARAMETERS P_EFILE TYPE IBIPPARMS-PATH.
PARAMETER : "P_FILE TYPE RLGRAP-FILENAME OBLIGATORY , "'C:/JOURNAL_VOUCHER.TXT', " Input File
"P_ERR TYPE RLGRAP-FILENAME, "'C:/JOURNAL_VOUCHER_ERR.TXT', " Error File
* P_FTYPE LIKE RLGRAP-FILETYPE DEFAULT 'DAT', " File Type
P_MODE TYPE CHAR1 OBLIGATORY DEFAULT 'A'.
SELECTION-SCREEN END OF BLOCK SCR1.
SELECTION-SCREEN BEGIN OF BLOCK SCR2 WITH FRAME TITLE TEXT-002.
PARAMETERS:
download RADIOBUTTON GROUP r1 DEFAULT 'X' ,
test Radiobutton Group r1.
SELECTION-SCREEN END OF BLOCK SCR2.
*DATA WA_FCAT.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
PERFORM BROWSE_FILE USING P_FILE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_EFILE.
PERFORM BROWSE_FILE USING P_EFILE.
START-OF-SELECTION.
PERFORM UPLOAD_EXCELFILE.
PERFORM CONVERT_EXCEL_TO_IT_MAT.
PERFORM VALIDATE_DATA.
PERFORM BUILD_FCAT.
PERFORM DISPLAY_OUTPUT.
END-OF-SELECTION.
IF IT_ERRORS IS NOT INITIAL.
PERFORM DOWLOAD_ERRFILE.
ENDIF.
*&---------------------------------------------------------------------*
*& Form BROWSE_FILE
*&---------------------------------------------------------------------*
FORM BROWSE_FILE USING FILE1.
CALL FUNCTION 'F4_FILENAME'
* EXPORTING
* PROGRAM_NAME = SYST-CPROG
* DYNPRO_NUMBER = SYST-DYNNR
* FIELD_NAME = ' '
IMPORTING
FILE_NAME = FILE1
.
ENDFORM. " BROWSE_FILE
*&---------------------------------------------------------------------*
*& Form UPLOAD_EXCELFILE
*&---------------------------------------------------------------------*
FORM UPLOAD_EXCELFILE .
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = 'X'
i_tab_raw_data = it_raw " WORK TABLE
i_filename = p_file
TABLES
i_tab_converted_data = it_mat[] "ACTUAL DATA
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
*CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
*EXPORTING
*FILENAME = P_FILE
*I_BEGIN_COL = 1
*I_BEGIN_ROW = 1
*I_END_COL = 5
*I_END_ROW = 10
*TABLES
*INTERN = IT_EXCEL
*EXCEPTIONS
*INCONSISTENT_PARAMETERS = 1
*UPLOAD_OLE = 2
*OTHERS = 3
.
*IF SY-SUBRC = 0.
*LOOP AT IT_EXCEL.
*WRITE:/ IT_EXCEL-ROW,IT_EXCEL-COL,IT_EXCEL-VALUE.
*ENDLOOP.
* Implement suitable error handling here
*ENDIF.
ENDFORM. " UPLOAD_EXCELFILE
*&---------------------------------------------------------------------*
*& Form CONVERT_EXCEL_TO_IT_MAT
*&---------------------------------------------------------------------*
FORM CONVERT_EXCEL_TO_IT_MAT .
LOOP AT IT_EXCEL.
CASE IT_EXCEL-COL.
WHEN 1.
IT_MAT-LIFNR = IT_EXCEL-VALUE.
WHEN 2.
IT_MAT-BANKS = IT_EXCEL-VALUE.
WHEN 3.
IT_MAT-BANKL = IT_EXCEL-VALUE.
WHEN 4.
IT_MAT-BANKN = IT_EXCEL-VALUE.
WHEN 5.
IT_MAT-KOINH = IT_EXCEL-VALUE.
WHEN 6.
IT_MAT-BANKA = IT_EXCEL-VALUE.
WHEN 7.
IT_MAT-BRNCH = IT_EXCEL-VALUE.
WHEN 8.
IT_MAT-SWIFT = IT_EXCEL-VALUE.
APPEND IT_MAT.
CLEAR: IT_MAT,IT_EXCEL.
ENDCASE.
ENDLOOP.
ENDFORM.
FORM BUILD_FCAT .
REFRESH:IT_FCAT[].
PERFORM FCAT USING: 'LIFNR' 'VENDOR',
'BANKS' 'COUNTRY KEY',
'BANKL' 'ACC NUM',
'BANKN' 'ACC key',
'KOINH' 'ACCOUNT HOLDER',
'BANKA' 'BANK NAME',
'BRNCH' 'BRANCH',
'SWIFT' 'IFSC CODE'.
ENDFORM. " BUILD_FCAT
FORM DISPLAY_OUTPUT .
WA_LAYOUT-ZEBRA = 'X'.
WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
* I_CALLBACK_PROGRAM = SY-REPID
* I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
* I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
IS_LAYOUT = WA_LAYOUT
IT_FIELDCAT = IT_FCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT = IT_SORT
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = IT_mat
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
ENDFORM.
FORM FCAT USING FIELD TEXT.
WA_FCAT-FIELDNAME = FIELD.
WA_FCAT-SELTEXT_M = TEXT.
APPEND WA_FCAT TO IT_FCAT.
CLEAR WA_FCAT.
ENDFORM.
*WRITE: / IT_MAT-LIFNR,
* IT_MAT-BANKS,
* IT_MAT-BANKL,
* IT_MAT-BANKN,
* IT_MAT-KOINH,
* IT_MAT-BANKA,
* IT_MAT-BRNCH,
* IT_MAT-SWIFT.
*ENDFORM.
*ENDLOOP.
*ENDFORM.
*ENDFORM. " CONVERT_EXCEL_TO_IT_MAT
*&---------------------------------------------------------------------*
*& Form VALIDATE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*FORM FCAT USING FIELD TEXT.
*
* WA_FCAT-FIELDNAME = FIELD.
* WA_FCAT-SELTEXT_M = TEXT.
*
* APPEND WA_FCAT TO IT_FCAT.
* CLEAR WA_FCAT.
*
*ENDFORM.
FORM VALIDATE_DATA .
LOOP AT IT_MAT.
REFRESH : IT_BDCDATA,IT_MSG.
perform bdc_dynpro using 'SAPMF02K' '0101'.
perform bdc_field using 'BDC_CURSOR'
'RF02K-D0130'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'RF02K-LIFNR'
IT_MAT-lifnr.
perform bdc_field using 'RF02K-D0130'
'X'.
perform bdc_dynpro using 'SAPMF02K' '0130'.
perform bdc_field using 'BDC_CURSOR'
'LFBK-KOINH(01)'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'LFBK-BANKS(01)'
IT_MAT-BANKS.
perform bdc_field using 'LFBK-BANKL(01)'
IT_MAT-bankl.
perform bdc_field using 'LFBK-BANKN(01)'
IT_MAT-bankn.
perform bdc_field using 'LFBK-KOINH(01)'
IT_MAT-koinh.
perform bdc_dynpro using 'SAPLBANK' '0100'.
perform bdc_field using 'BDC_CURSOR'
'BNKA-SWIFT'.
perform bdc_field using 'BDC_OKCODE'
'=ENTR'.
perform bdc_field using 'BNKA-BANKA'
IT_MAT-banka.
perform bdc_field using 'BNKA-BRNCH'
IT_MAT-brnch.
perform bdc_field using 'BNKA-SWIFT'
IT_MAT-swift.
perform bdc_dynpro using 'SAPMF02K' '0130'.
perform bdc_field using 'BDC_CURSOR'
'LFBK-KOINH(01)'.
perform bdc_field using 'BDC_OKCODE'
'=ENTR'.
CALL TRANSACTION 'XK02' USING IT_BDCDATA
UPDATE 'A'
MODE 'N'
MESSAGES INTO IT_MSG.
READ TABLE IT_MSG WITH KEY MSGTYP = 'E'.
IF SY-SUBRC = 0.
IT_ERRORS-LIFNR = IT_MAT-LIFNR.
IT_ERRORS-BANKS = IT_MAT-BANKS.
IT_ERRORS-BANKL = IT_MAT-BANKL.
IT_ERRORS-BANKN = IT_MAT-BANKN.
IT_ERRORS-KOINH = IT_MAT-KOINH.
IT_ERRORS-BANKA = IT_MAT-BANKA.
IT_ERRORS-BRNCH = IT_MAT-BRNCH.
IT_ERRORS-SWIFT = IT_MAT-SWIFT.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = SY-MSGID
LANG = '-D'
NO = SY-MSGNO
V1 = SY-MSGV1
V2 = SY-MSGV2
V3 = SY-MSGV3
V4 = SY-MSGV4
**V5 = SY-MSGV5
*V6 = SY-MSGV6
*V7 = SY-MSGV7
*V8 = SY-MSGV8
IMPORTING
MSG = IT_ERRORS-TEXT
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2
.
APPEND IT_ERRORS.
E1 = E1 + 1.
ELSE.
S1 = S1 + 1.
ENDIF.
ENDLOOP.
IF SY-SUBRC = 0.
MESSAGE I100(ZMSG1) WITH S1 'RECORDS TRANSFERRED SUCCESSFULLY' E1
'RECORDS CONTAINS ERRORS,PLS REFER DOWNLOAD FILE'.
ENDIF.
ENDFORM. " VALIDATE_DATA
*&---------------------------------------------------------------------*
*& Form BDC_DYNPRO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0241 text
* -->P_0242 text
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROG SCRNO.
IT_BDCDATA-PROGRAM = PROG.
IT_BDCDATA-DYNPRO = SCRNO.
IT_BDCDATA-DYNBEGIN = 'X'.
APPEND IT_BDCDATA.
CLEAR IT_BDCDATA.
ENDFORM. " BDC_DYNPRO
*&---------------------------------------------------------------------*
*& Form BDC_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0301 text
* -->P_IT_MAT_MAKTX text
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAME FVAL.
IT_BDCDATA-FNAM = FNAME.
IT_BDCDATA-FVAL = FVAL.
APPEND IT_BDCDATA.
CLEAR IT_BDCDATA.
ENDFORM. " BDC_FIELD
*&---------------------------------------------------------------------*
*& Form DOWLOAD_ERRFILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DOWLOAD_ERRFILE .
* TO CREATE VARIABLE OF TYPE STRING.
DATA F_EFILE TYPE STRING.
F_EFILE = P_EFILE.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
FILENAME = F_EFILE
FILETYPE = 'ASC'
* APPEND = ' '
WRITE_FIELD_SEPARATOR = 'X'
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* DAT_MODE = ' '
* CONFIRM_OVERWRITE = ' '
* NO_AUTH_CHECK = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* WRITE_BOM = ' '
* TRUNC_TRAILING_BLANKS_EOL = 'X'
* WK1_N_FORMAT = ' '
* WK1_N_SIZE = ' '
* WK1_T_FORMAT = ' '
* WK1_T_SIZE = ' '
* WRITE_LF_AFTER_LAST_LINE = ABAP_TRUE
* SHOW_TRANSFER_STATUS = ABAP_TRUE
* IMPORTING
* FILELENGTH =
TABLES
DATA_TAB = IT_ERRORS
* FIELDNAMES =
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " DOWNLOAD_ERRFILE
But in that code i need to add some additional functionality like
1. when i am trying to upload flat file to sap system if that file contains error records then I want to download or display those error records because which make user to easily identify and modify those error records.
2. At that time when click the download button I wanted to download the vendor details of specific range which will given in input .
Can you please help me to find out by providing some examples and suggestions etc
Regards,
Bhavani.
‎2020 Jan 28 8:50 PM