Created
February 5, 2019 10:58
-
-
Save kgorin8/1d2d5e71312ecbe32bd1daee40e72827 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
*&---------------------------------------------------------------------* | |
*& Report ZUPLOADEXCEL | |
*& | |
*&---------------------------------------------------------------------* | |
*& | |
*& | |
*&---------------------------------------------------------------------* | |
REPORT ZUPLOADEXCEL NO STANDARD PAGE HEADING. | |
PARAMETERS: p_file LIKE rlgrap-filename OBLIGATORY MEMORY ID Z_FILENAME_ID. | |
PARAMETERS: p_table TYPE TABNAME AS LISTBOX VISIBLE LENGTH 50 MEMORY ID Z_TABLE_ID. | |
DATA: it_tab TYPE filetable. | |
DATA: tb_data TYPE REF TO data. | |
DATA: g_raw_data TYPE TRUXS_T_TEXT_DATA. | |
FIELD-SYMBOLS <tb_data> TYPE STANDARD TABLE. | |
FIELD-SYMBOLS <fs> TYPE ANY. | |
FIELD-SYMBOLS <fs_field>. | |
AT SELECTION-SCREEN OUTPUT. | |
DATA: list TYPE vrm_values, | |
value LIKE LINE OF list. | |
DATA: T_ZUPLOADEXCEL TYPE STANDARD TABLE OF ZUPLOADEXCEL WITH HEADER LINE. | |
SELECT * | |
INTO CORRESPONDING FIELDS OF TABLE T_ZUPLOADEXCEL | |
FROM ZUPLOADEXCEL. | |
LOOP AT T_ZUPLOADEXCEL WHERE TABNAME IS NOT INITIAL. | |
value-key = T_ZUPLOADEXCEL-TABNAME. | |
value-text = T_ZUPLOADEXCEL-TABLETEXT. | |
APPEND value TO list. | |
ENDLOOP. | |
CALL FUNCTION 'VRM_SET_VALUES' | |
EXPORTING id = 'P_TABLE' | |
values = list. | |
IF P_TABLE IS INITIAL. | |
READ TABLE T_ZUPLOADEXCEL INDEX 1. | |
IF SY-SUBRC EQ 0. | |
P_TABLE = T_ZUPLOADEXCEL-TABNAME. | |
ENDIF. | |
ENDIF. | |
AT SELECTION-SCREEN ON P_TABLE. | |
IF P_TABLE EQ ''. | |
MESSAGE 'Имя таблицы не указано' TYPE 'E'. | |
ENDIF. | |
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. | |
REFRESH: it_tab. | |
DATA : gd_subrc TYPE I. | |
CALL METHOD cl_gui_frontend_services=>file_open_dialog | |
EXPORTING | |
window_title = 'Выберите файл Excel' | |
default_filename = '*.xls' | |
multiselection = ' ' | |
CHANGING | |
file_table = it_tab | |
rc = gd_subrc. | |
LOOP AT it_tab INTO p_file. | |
ENDLOOP. | |
START-OF-SELECTION. | |
CREATE DATA tb_data TYPE TABLE OF (p_table). | |
ASSIGN tb_data->* TO <tb_data>. | |
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' | |
EXPORTING | |
i_tab_raw_data = g_raw_data | |
i_filename = p_file | |
TABLES | |
i_tab_converted_data = <tb_data> | |
EXCEPTIONS | |
conversion_failed = 1 | |
OTHERS = 2. | |
IF sy-subrc NE 0. | |
MESSAGE 'Ошибка загрузки данных' TYPE 'S' DISPLAY LIKE 'E'. | |
EXIT. | |
ENDIF. | |
IF <tb_data> IS INITIAL. | |
MESSAGE 'Данные для загрузки отсутствуют' TYPE 'S' DISPLAY LIKE 'E'. | |
EXIT. | |
ELSE. | |
DATA td TYPE sydes_desc. | |
DATA td_names TYPE LINE OF sydes_desc-names. | |
LOOP AT <tb_data> ASSIGNING <fs>. | |
DO. | |
ASSIGN COMPONENT sy-index OF STRUCTURE <fs> TO <fs_field>. | |
IF SY-SUBRC NE 0. | |
EXIT. | |
ENDIF. | |
IF <fs_field> IS NOT INITIAL. | |
DESCRIBE FIELD <fs_field> INTO td. | |
DATA cnt TYPE I. | |
cnt = LINES( td-NAMES ). | |
IF cnt GT 2. | |
DATA CONVEXIT_NAME LIKE td_names-NAME. | |
READ TABLE td-NAMES INTO td_names INDEX cnt. | |
MOVE td_names-NAME TO CONVEXIT_NAME. | |
IF CONVEXIT_NAME+0(2) = '=='. | |
CONVEXIT_NAME = CONVEXIT_NAME+2. | |
CONDENSE CONVEXIT_NAME. | |
DATA FN_CONVEXIT TYPE STRING. | |
CONCATENATE 'CONVERSION_EXIT_' CONVEXIT_NAME '_INPUT' INTO FN_CONVEXIT. | |
TRY. | |
CALL FUNCTION FN_CONVEXIT | |
EXPORTING | |
INPUT = <fs_field> | |
IMPORTING | |
OUTPUT = <fs_field>. | |
CATCH cx_sy_dyn_call_illegal_type. | |
ENDTRY. | |
ENDIF. | |
ENDIF. | |
ENDIF. | |
ENDDO. | |
ENDLOOP. | |
MODIFY (p_table) FROM TABLE <tb_data>. | |
MESSAGE 'Данные успешно загружены' TYPE 'S'. | |
ENDIF. | |
END-OF-SELECTION. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment