Para los abapers es común que nos pidan hacer programas para descargar información que generalmente se procesa y analiza luego en Excel, dicho archivo debe guardarse en algún lugar de la computadora de la persona que desea descargar el archivo. En estos casos debemos mostrar el cuadro de dialogo «Guardar Como …» para que la persona pueda seleccionar la carpeta y el nombre del archivo que desea utilizar.Para hacer esto podemos hacer uso de las funciones file_save_dialog y GUI_DOWNLOAD, como se muestra a continuación:

DATA: ld_filename TYPE string,
      ld_path TYPE string,
      ld_fullpath TYPE string,
      ld_result TYPE i,
      file TYPE string.

"Tabla interna con los datos que deseamos grabar en archivo de texto
DATA: it_xml LIKE STANDARD TABLE OF line WITH HEADER LINE.

"Función para mostrar ventana para seleccionar archivo
CALL METHOD cl_gui_frontend_services=>file_save_dialog
  EXPORTING
    window_title      = 'Guardar archivo' "Titulo del dialogo
    default_extension = 'TXT' "Extension predeterminada
    default_file_name = 'File' "Nombre predeterminado del archivo
    initial_directory = 'C:\' "Directorio inicial
  CHANGING
    filename          = ld_filename
    path              = ld_path
    fullpath          = ld_fullpath
    user_action       = ld_result.

file = ld_fullpath.

"Función para descargar archivos
CALL FUNCTION 'GUI_DOWNLOAD'
  EXPORTING
    filename                = file "Nombre del archivo
    filetype                = 'ASC' "Tipo de archivo (texto)
  TABLES
    data_tab                = it_xml "Tabla interna con los datos
  EXCEPTIONS
    file_write_error        = 1
    no_batch                = 2
    gui_refuse_filetransfer = 3
    invalid_type            = 4
    no_authority            = 5
    unknown_error           = 6
    header_not_allowed      = 7
    separator_not_allowed   = 8
    filesize_not_allowed    = 9
    header_too_long         = 10
    dp_error_create         = 11
    dp_error_send           = 12
    dp_error_write          = 13
    unknown_dp_error        = 14
    access_denied           = 15
    dp_out_of_memory        = 16
    disk_full               = 17
    dp_timeout              = 18
    file_not_found          = 19
    dataprovider_exception  = 20
    control_flush_error     = 21
    OTHERS                  = 22.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.