Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие авар.doc
Скачиваний:
62
Добавлен:
02.09.2019
Размер:
2.34 Mб
Скачать

Программа загрузки данных из файла csv в таблицу бд

Данная программа позволяет загружать данные из плоского файла CSV в таблицу базы данных с идентичной структурой без модификации ABAP кода.

*&---------------------------------------------------------------------* *& Report  Z_FRM_MAP_UPLAOD *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT  z_csv_to_ztab_upload. TYPES: BEGIN OF ttab, rec TYPE string, END OF ttab. DATA: l_fname_str TYPE string, txt_str TYPE string, l_f_tab TYPE TABLE OF ttab, l_t_frm_map TYPE TABLE OF  zfr_kf_mapping, l_s_frm_map LIKE LINE OF l_t_frm_map, l_t_list TYPE table_of_strings, l_counter TYPE i, l_tab_name(30) TYPE c. DATA: BEGIN OF l_t_taget OCCURS 0.         INCLUDE STRUCTURE dntab. DATA: END OF l_t_taget. DATA:  i_alv_cat TYPE TABLE OF lvc_s_fcat,        ls_alv_cat LIKE LINE OF i_alv_cat,        d_ref TYPE REF TO data. FIELD-SYMBOLS: <fs_t_tab> TYPE table,                <fs_s_tab> TYPE ANY,                <l_f_tab_line> LIKE LINE OF l_f_tab,                <fs_s_tab_field> TYPE ANY,                <fs_l_s_list> LIKE LINE OF l_t_list. PARAMETERS: p_fname TYPE localfile DEFAULT 'Y:\CSV\', p_sk_lin TYPE i DEFAULT 1, p_t_name TYPE tabname DEFAULT '', p_del_t TYPE rs_bool DEFAULT 'X'. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.   CALL FUNCTION 'KD_GET_FILENAME_ON_F4'     EXPORTING       static    = 'X'     CHANGING       file_name = p_fname. START-OF-SELECTION.   l_fname_str = p_fname.   l_tab_name = p_t_name.   REFRESH l_t_taget.   CALL FUNCTION 'NAMETAB_GET'     EXPORTING       langu          = sy-langu       tabname        = p_t_name     TABLES       nametab        = l_t_taget     EXCEPTIONS       no_texts_found = 1.   LOOP AT l_t_taget .     ls_alv_cat-fieldname = l_t_taget-fieldname.     ls_alv_cat-ref_table = p_t_name.     ls_alv_cat-ref_field = l_t_taget-fieldname.     APPEND ls_alv_cat TO i_alv_cat.   ENDLOOP. * internal table build   CALL METHOD cl_alv_table_create=>create_dynamic_table     EXPORTING       it_fieldcatalog = i_alv_cat     IMPORTING       ep_table        = d_ref.   ASSIGN d_ref->* TO <fs_t_tab>.   CALL FUNCTION 'GUI_UPLOAD'     EXPORTING       filename                = l_fname_str     TABLES       data_tab                = l_f_tab     EXCEPTIONS       file_open_error         = 1       file_read_error         = 2       no_batch                = 3       gui_refuse_filetransfer = 4       invalid_type            = 5       no_authority            = 6       unknown_error           = 7       bad_data_format         = 8       header_not_allowed      = 9       separator_not_allowed   = 10       header_too_long         = 11       unknown_dp_error        = 12       access_denied           = 13       dp_out_of_memory        = 14       disk_full               = 15       dp_timeout              = 16       OTHERS                  = 17.   APPEND INITIAL LINE TO <fs_t_tab>.   READ TABLE <fs_t_tab> INDEX 1 ASSIGNING <fs_s_tab>.   IF p_del_t EQ 'X'.     DELETE FROM (p_t_name).   ENDIF.   ADD 1 TO p_sk_lin. "If no lines to skip start from first line   LOOP AT l_f_tab ASSIGNING <l_f_tab_line> FROM  p_sk_lin. *    CALL FUNCTION 'RSDS_CONVERT_CSV' *      EXPORTING *        i_data_sep    = ';' *        i_esc_char    = '"' *        i_record      = <l_f_tab_line>-rec *        i_field_count = l_fld_n *      IMPORTING *        e_t_data      = l_t_list.     SPLIT <l_f_tab_line>-rec AT ';' INTO TABLE l_t_list.     l_counter = 1.     LOOP AT l_t_list ASSIGNING <fs_l_s_list>.       ASSIGN COMPONENT l_counter OF STRUCTURE <fs_s_tab> TO  <fs_s_tab_field>.       <fs_s_tab_field> = <fs_l_s_list>.       ADD 1 TO l_counter.     ENDLOOP.     INSERT (l_tab_name) FROM <fs_s_tab>.     CLEAR <fs_s_tab>.   ENDLOOP.   WRITE: / sy-subrc.