"-Begin-----------------------------------------------------------------
  REPORT z_import_csv.

  DATA:
    it_raw_data   TYPE  truxs_t_text_data,
    lv_useraction TYPE i,
    lv_filetable  TYPE filetable,
    lv_rc         TYPE sy-subrc,
    lv_file       TYPE string,
    lr_data       TYPE REF TO data,
    lv_headline   TYPE abap_bool,
    lv_system     TYPE cccategory,
    lv_cnt        TYPE i
    .

  FIELD-SYMBOLS:
    <lt_data> TYPE STANDARD TABLE
    .

  TYPE-POOLS:truxs.

  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(40) cm_tname FOR FIELD pa_tname.
    PARAMETERS pa_tname TYPE table_name.
  SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(40) cm_file FOR FIELD pa_file.
    PARAMETERS pa_file TYPE sapb-sappfad LOWER CASE.
  SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN SKIP 1.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(40) cm_sep FOR FIELD pa_sep.
    PARAMETERS pa_sep(1) TYPE c LOWER CASE DEFAULT ';'.
  SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN SKIP 1.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(40) cm_del FOR FIELD pa_del.
    PARAMETERS pa_del As CheckBox Default Space.
  SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(40) cm_head FOR FIELD pa_head.
    PARAMETERS pa_head As CheckBox Default Space.
  SELECTION-SCREEN END OF LINE.

  INITIALIZATION.
    cm_tname = 'Tabellenname'.
    cm_file  = 'Dateiname'.
    cm_sep   = 'Feldtrenner'.
    cm_del   = 'Tabellendaten löschen'.
    cm_head  = 'Kopfzeile vorhanden'.

  AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_file.

    CLEAR pa_file.
    CLEAR lv_filetable.

    CALL METHOD cl_gui_frontend_services=>file_open_dialog
      EXPORTING
        window_title      = 'CSV-Datei zum Upload in eine Tabelle'
        multiselection    = abap_false
        default_extension = 'CSV'
        file_filter       = '(*.csv)|*.csv|(*.*)|*.*|'
      CHANGING
        file_table        = lv_filetable
        rc                = lv_rc
        user_action       = lv_useraction
      EXCEPTIONS
        others            = 1
      .

    IF lv_useraction = 0 AND sy-subrc = 0 AND lv_rc = 1.
      READ TABLE lv_filetable INTO pa_file INDEX 1.
    ENDIF.

  AT SELECTION-SCREEN.

    CALL FUNCTION 'TR_SYS_PARAMS'
       IMPORTING
         SYSTEM_CLIENT_ROLE = lv_system
       EXCEPTIONS
         NO_SYSTEMNAME = 1
         NO_SYSTEMTYPE = 2
         OTHERS = 3.

    IF sy-subrc <> 0 Or lv_system = 'P'.
      MESSAGE 'Keine Berechtigung zur Nutzung dieser Funktionen' Type 'I'.
      EXIT.
    ENDIF.

    SELECT COUNT( * ) INTO lv_cnt FROM tadir
    WHERE pgmid = 'R3TR' AND object = 'TABL' AND obj_name = pa_tname.

    IF lv_cnt <> 1.
      MESSAGE 'Tabelle nicht vorhanden' Type 'I'.
      EXIT.
    ENDIF.

    CLEAR lv_file.
    lv_file = pa_file.

    CHECK lv_file IS NOT INITIAL AND pa_tname IS NOT INITIAL.

    IF pa_head IS INITIAL.
      lv_headline = abap_false.
    ELSE.
      lv_headline = abap_true.
    ENDIF.

    CALL FUNCTION 'GUI_UPLOAD'
      EXPORTING
        filename = lv_file
        filetype = 'ASC'
      TABLES
        data_tab = it_raw_data
      EXCEPTIONS
        others   = 1
      .

    IF sy-subrc <> 0.
      Message 'Upload konnte nicht durchgeführt werden' Type 'E'.
      EXIT.
    ENDIF.

    CREATE DATA lr_data TYPE STANDARD TABLE OF (pa_tname).
    ASSIGN lr_data->* TO <lt_data>.

    CALL FUNCTION 'TEXT_CONVERT_CSV_TO_SAP'
      EXPORTING
        i_field_seperator    = pa_sep
        i_line_header        = lv_headline
        i_tab_raw_data       = it_raw_data
      TABLES
        i_tab_converted_data = <lt_data>
      EXCEPTIONS
        conversion_failed = 1
        others = 2
      .

    IF sy-subrc <> 0.
      MESSAGE 'Konvertierung in CSV konnte nicht durchgeführt werden' Type 'E'.
      EXIT.
    ENDIF.

    IF pa_del IS NOT INITIAL.
      DELETE FROM (pa_tname).
      IF sy-subrc = 0.
        INSERT (pa_tname) FROM TABLE <lt_data>.
        IF sy-subrc = 0.
          MESSAGE 'Daten wurden in Tabelle übernommen' Type 'S'.
        ENDIF.
      ELSE.
        MESSAGE 'Daten konnten nicht gelöscht werden' Type 'E'.
      ENDIF.
    ELSE.
      INSERT (pa_tname) FROM TABLE <lt_data>.
      IF sy-subrc = 0.
        MESSAGE 'Daten wurden in Tabelle übernommen' Type 'S'.
      ENDIF.
    ENDIF.

"-End-------------------------------------------------------------------