You are on page 1of 2

REPORT ztest_upload .

******************************************************************
PARAMETERS : p_file LIKE rlgrap-filename,
p_table TYPE dd02l-tabname.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.


CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = 'P_FILE'
IMPORTING
file_name = p_file.
*******************************************************************
START-OF-SELECTION.

TYPES : BEGIN OF ty_upd,


line(1024) TYPE c,
END OF ty_upd.
DATA : gt_upd TYPE STANDARD TABLE OF ty_upd,
wa_upd TYPE ty_upd.

*-> Download data from CSV to Internal Table


DATA: l_filename TYPE string.
l_filename = p_file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = l_filename
has_field_separator = 'X'
TABLES
data_tab = gt_upd
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.

*******************************************************
* Create Dynamic Internal table
*******************************************************
DATA : ref TYPE REF TO data,
i_table TYPE REF TO data,
ref_line TYPE REF TO data.
FIELD-SYMBOLS : <fs> TYPE ANY,
<fs_table> TYPE STANDARD TABLE,
<fs_line> TYPE ANY,
<fs_field> TYPE ANY.
DATA : lt_alv_cat TYPE lvc_t_fcat.
GET REFERENCE OF p_table INTO ref.
ASSIGN ref->* TO <fs>.

CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'


EXPORTING
i_structure_name = <fs>
CHANGING
ct_fieldcat = lt_alv_cat
* EXCEPTIONS
* INCONSISTENT_INTERFACE = 1
* PROGRAM_ERROR = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

CALL METHOD cl_alv_table_create=>create_dynamic_table


EXPORTING
it_fieldcatalog = lt_alv_cat
IMPORTING
ep_table = i_table.

ASSIGN i_table->* TO <fs_table>.

CREATE DATA ref_line LIKE LINE OF <fs_table>.

ASSIGN ref_line->* TO <fs_line>.

********************************************************
* Put data into the dynamic internal table
********************************************************
TYPES : BEGIN OF ty_split,
field(100),
END OF ty_split.
DATA : gt_split TYPE STANDARD TABLE OF ty_split,
wa_split TYPE ty_split.

LOOP AT gt_upd INTO wa_upd.


REFRESH gt_split.
SPLIT wa_upd AT ',' INTO TABLE gt_split.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE <fs_line> TO <fs_field>.
IF sy-subrc EQ 0.
READ TABLE gt_split INTO wa_split INDEX sy-index.
<fs_field> = wa_split.
ELSE.
APPEND <fs_line> TO <FS_TABLE>.
EXIT.
ENDIF.
ENDDO.
ENDLOOP.

MODIFY (p_table) FROM TABLE <FS_TABLE>.

You might also like