Upload arquivo ABAP

DATA:
  BEGIN OF gt_file OCCURS 0,
    line TYPE c LENGTH 400,
  END OF gt_file.

PARAMETERS: p_file     TYPE rlgrap-filename OBLIGATORY DEFAULT 'C:\'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM z_upload_file.

START-OF-SELECTION.
  PERFORM z_load_file.


FORM z_load_file.
  DATA: lv_arq   TYPE string,
        vl_extab TYPE slis_t_extab.

* Abre arquivo de entrada.
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename = p_file
      filetype = 'ASC'
    TABLES
      data_tab = gt_arquivo.

  IF sy-subrc <> 0.
    MESSAGE 'Error upload file' TYPE 'I'.
    EXIT.
  ENDIF.
ENDFORM.                    " z_load_file

FORM z_upload_file.
  DATA: ret TYPE int4,
        act TYPE int4.
  DATA: t_file TYPE TABLE OF file_table,
        s_file TYPE file_table.

  CLEAR: t_file[].

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title            = 'Abrir...'
      default_extension       = '*.txt|*.csv|*.*'
      file_filter             = ' TXT (*.txt)|*.txt| CSV(*.csv)|*.csv| Todas(*.*)|*.* '
      multiselection          = space
    CHANGING
      file_table              = t_file[]
      rc                      = ret
      user_action             = act
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS                  = 5.

  IF sy-subrc EQ 0.
    READ TABLE t_file INTO s_file INDEX 1.
    MOVE s_file TO p_file.
  ENDIF.
ENDFORM.                    "z_upload_file

 

Clear, free e refresh

DATA: itab TYPE TABLE OF mara WITH HEADER LINE,
      a(1) TYPE c.

BREAK-POINT.
MOVE: 1   TO itab-matnr,
      '1' TO itab-ernam,
      'X' TO a.
APPEND itab TO itab.

********************************************************************************
* -= CLEAR =-                                                                  *
* Se for tabela sem header line limpa o conteudo mas o espaço fica em memória  *
* Se for tabela com header line limpa o header mas o espaço fica em memória    *
********************************************************************************
CLEAR: itab, a.

MOVE: 2   TO itab-matnr,
      '2' TO itab-aenam.
APPEND itab TO itab.

********************************************************************************
* -= REFRESH =-                                                                *
* Limpa o conteudo mas o espaço fica em memória                                *
********************************************************************************
REFRESH: itab.

MOVE: 3   TO itab-matnr,
      '3' TO itab-vpsta.
APPEND itab TO itab.

********************************************************************************
* -= FREE =-                                                                   *
* Limpa o conteudo e libera o espaço em memória                                *
********************************************************************************
FREE: itab, a.

MOVE: 4   TO itab-matnr.
APPEND itab TO itab.

BREAK-POINT.

CLEAR: itab.
FREE:  itab.
MOVE: 1   TO itab-matnr,
      '1' TO itab-ernam.
APPEND itab TO itab.

CLEAR: itab[], a.

MOVE: 2   TO itab-matnr,
      '2' TO itab-aenam.
APPEND itab TO itab.

REFRESH: itab[].

MOVE: 3   TO itab-matnr,
      '3' TO itab-vpsta.
APPEND itab TO itab.

FREE: itab[].

MOVE: 4   TO itab-matnr.
APPEND itab TO itab.

BREAK-POINT.

 

Criar um range para usar em um SELECT

DATA: r_kschl          TYPE RANGE OF konv-kschl,
      w_kschl          LIKE LINE OF r_kschl.

CONSTANTS: c_sign_i     TYPE char01          VALUE 'I',
           c_option_eq  TYPE char02          VALUE 'EQ',
           c_bx10       TYPE kscha           VALUE 'BX10',
           c_bx11       TYPE kscha           VALUE 'BX11'.

    CLEAR: r_kschl[], r_kschl.
    MOVE: c_sign_i TO w_kschl-sign,
          c_option_eq TO w_kschl-option,
          c_bx10 TO w_kschl-low.
    APPEND w_kschl TO r_kschl.
    MOVE: c_sign_i TO w_kschl-sign,
          c_option_eq TO w_kschl-option,
          c_bx11 TO w_kschl-low.
    APPEND w_kschl TO r_kschl.

    SELECT * 
      FROM komv 
     WHERE kschl IN r_kschl.