Bueno me propuse desde ahora en adelante documentar sobre los requerimientos que me vallan dejando en la empresa, de esa manera como mi memoria aveces falla (mi memoria interna, o sea la de la tatema no la USB xDD), podré entrar y recordar lo que ya hize algún día, solo espero que los blogs no pasen de moda xD o al menos que los tumben y mi info quede intacta.
Ahora veremos la manera de utilizar la función gui_upload en sap, esta función sirve para subir algún archivo y leerlo en mi caso lo pondré en una tabla interna, el programa que hize fué sobre carga de pedidos, en este ejemplo solo subiremos un archivo de texto con 4 datos muy básicos.
Comenzamos creando nuestro reporte:

Z_REPORT_GUI_UPLOAD.
*declaramos un parametro para subir nuestro archivo.
PARAMETERS: p_infile LIKE rlgrap-filename
OBLIGATORY DEFAULT '/ruta/de/tu/archivo'..

DATA: gd_file type string.
*Tabla interna para almacenar los datos que subamos.
TYPES: BEGIN OF t_record,
nombre1 LIKE pa0002-vorna,
nombre2 LIKE pa0002-name2,
edad TYPE i,
ocupacion(15) TYPE c,
END OF t_record.

DATA: it_record TYPE STANDARD TABLE OF t_record INITIAL SIZE 0,
wa_record TYPE t_record.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_infile.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = p_infile
mask = ',*.txt.'
mode = 'O'
title = 'Upload File'(078)
IMPORTING
filename = p_infile
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.


START-OF-SELECTION.
gd_file = p_infile.

CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = gd_file
has_field_separator = 'X' "file is TAB delimited
TABLES
data_tab = it_record
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.
IF sy-subrc NE 0.
write: 'Error ', sy-subrc, 'returned from GUI_UPLOAD FM'.
skip.
endif.

END-OF-SELECTION.

*los datos de nuestro archivo ahora estan dentro de la tabla interna
*it_record

* Loopeamos nuestra tabla interna y mostramos los datos :)
WRITE:/1 'Nombre',15 sy-vline,
(10) 'Apellido',30 sy-vline,
(10) 'Edad',40 sy-vline,
(10) 'Profesión', sy-vline.

LOOP AT it_record INTO wa_record.
WRITE:/ sy-vline,
(10) wa_record-nombre1,15 sy-vline,
(10) wa_record-nombre2,30 sy-vline,
(10) wa_record-edad,40 sy-vline,
(10) wa_record-ocupacion, sy-vline.
ENDLOOP.

Y bien eso sería todo, como ven es un ejemplo bastante básico pero muy útil, solo restaría crear un archivo .txt con los datos nombre, apellido, edad y ocupación dando un tab entre cada dato =).