|
Código fuente -
Includes
|
|
Miércoles, 18 de Mayo de 2005 18:35 |
Include con definiciones y forms para el tratamiento de ficheros
************************************************************************
*
* INCLUDE ZIFICHEROS
*
* DESCRIPCIÓN: Include con definiciones y forms para el tratamiento de
* ficheros.
*
* FORMS:
*-----------------------------------------------------------------------
* FORM f_borrar_fichero_local USING p_nombre.
*
* Elimina del sistema de archivos local un fichero
*-----------------------------------------------------------------------
* FORM f_borrar_fichero_unix USING p_nombre.
*
* Elimina del sistema de archivos unix un fichero.
*-----------------------------------------------------------------------
* FORM f_cargar_fichero_excel TABLES p_fichero
* USING p_nombre.
*
* Esta función carga un fichero del tipo excel de local, sera
* obligatorio que la tabla interna en la que se cargue tenga el
* mismo número de campos que columnas tiene el fichero.
* ATENCIÓN: NO SE CONTROLAN LOS TIPOS NI TAMAÑOS DE LAS VARIABLES!
*-----------------------------------------------------------------------
* FORM f_cargar_fichero_excel_unix TABLES p_fichero
* USING p_nombre.
*
* Esta función carga un fichero del tipo excel del servidor, sera
* obligatorio que la tabla interna en la que se cargue tenga el
* mismo número de campos que columnas tiene el fichero.
* ATENCIÓN: NO SE CONTROLAN LOS TIPOS NI TAMAÑOS DE LAS VARIABLES!
*-----------------------------------------------------------------------
* FORM f_cargar_fichero_local TABLES p_fichero
* USING p_nombre
* p_tipo_archivo.
*
* Carga de la ruta local el contenido de la tabla interna
*-----------------------------------------------------------------------
* FORM f_cargar_fichero_unix TABLES p_fichero
* USING p_nombre.
*
* Carga de la ruta UNIX el contenido a una tabla interna
*-----------------------------------------------------------------------
* FORM f_grabar_fichero_local TABLES p_fichero
* USING p_nombre
* p_tipo_archivo.
*
* Almacena en la ruta local el contenido de la tabla interna
*-----------------------------------------------------------------------
* FORM f_grabar_fichero_unix TABLES p_fichero
* USING p_nombre
* p_modo.
*
* Almacena en la ruta UNIX el contenido de la tabla interna
* Dos modos diferentes:
* OUTPUT -> Si existe el fichero lo borra
* APPENDING -> Si existe el fichero añade al final
*-----------------------------------------------------------------------
* FORM f_obtener_fichero_unix_logico USING
* p_p_logico LIKE filename-fileintern
* p_p_unix.
*
* Si se le pasa un fichero logico devuelve su ruta correspondiente
* y si se le pasa una ruta devuelve su fichero logico.
* En caso de que se le pasen los dos devuelve un mensaje de error
* si no se corresponden, y en caso de que no se pase ninguno o
* el parametro pasado no exista devuelve un mensaje de error.
*-----------------------------------------------------------------------
* FORM f_obtener_directorio USING
* p_directorio
* p_maquina
*
* Para utilizar en un
* AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_D_FICH
* EJEMPLO DE USO:
* AT SELECTION-SCREEN ON VALUE-REQUEST FOR parametro.
* * Se asigna un valor de carpeta por defecto (OPCIONAL)
* parametro = 'c:/'.
* * Se obtiene el nombre del fichero
* PERFORM F_OBTENER_DIRECTORIO USING parametro
* maquina.
*
* MAQUINA PUEDE TENER DOS VALORES: 'A' -> Servidor de aplicación
* 'P' -> Servidor de presentación
*----------------------------------------------------------------------*
* FORM f_obtener_ruta_fichero USING p_fichero.
*
* Para utilizar en un
* AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_D_FICH
*
* EJEMPLO DE USO:
*
* AT SELECTION-SCREEN ON VALUE-REQUEST FOR parametro.
* * Se obtiene el nombre del fichero
* PERFORM F_OBTENER_RUTA_FICHERO_LOCAL USING parametro.
*-----------------------------------------------------------------------
*
* MÓDULO AL QUE PERTENECE:
*
* AUTOR: IGNACIO ARNAIZ PIORNO FECHA: 06-09-2004
* CONTACTA CONMIGO :
Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
*
* ----------------------------------------------------------------------
* CONTROL DE MODIFICACIONES
* AUTOR EMPRESA FECHA MOTIVO
* .......... ....... DD/MM/AA ................................
* .......... ....... DD/MM/AA ................................
*-----------------------------------------------------------------------
************************************************************************
*INCLUDE ZIFICHEROS.
************************************************************************
* INCLUDES
************************************************************************
************************************************************************
* Definición de tablas del sistema
************************************************************************
************************************************************************
* Definición de constantes
************************************************************************
CONSTANTS: c_ruta_defecto_local(100) TYPE c VALUE 'C:\',
c_fich_temp(1000) TYPE c VALUE 'C:\WINDOWS\TEMP\TMP.TMP'.
************************************************************************
* Definición de variables
************************************************************************
************************************************************************
* Definición de estructuras
************************************************************************
************************************************************************
* Definición de tablas internas
************************************************************************
************************************************************************
* Definición de parámetros
************************************************************************
************************************************************************
* Definición de rango de selección
************************************************************************
************************************************************************
* Definición de la pantalla de selección
************************************************************************
************************************************************************
* Definición de FIELD-SYMBOLS
************************************************************************
************************************************************************
*
* LÓGICA DEL PROGRAMA
*
************************************************************************
************************************************************************
* Definición de inicializaciones
************************************************************************
*INITIALIZATION.
************************************************************************
* Proceso principal
************************************************************************
*START-OF-SELECTION.
************************************************************************
* Acciones de final de proceso
************************************************************************
*END-OF-SELECTION.
************************************************************************
* Definición de cabeceras de listado
************************************************************************
*TOP-OF-PAGE.
************************************************************************
* Definición de líneas de pie del listado
************************************************************************
*END-OF-PAGE.
************************************************************************
* Definición de acciones a tomar en caso de selección con doble click
************************************************************************
*AT LINE-SELECTION.
************************************************************************
* Definición y control de acciones a tomar según entrada del usuario
************************************************************************
*AT USER-COMMAND.
************************************************************************
* Definición y control de acciones a tomar según la tecla de función
************************************************************************
*AT PFM.
************************************************************************
* Definición de las validaciones a realizar de los parámetros de entrada
************************************************************************
*AT SELECTION-SCREEN.
************************************************************************
*
* FORMS ADICIONALES
*
************************************************************************
*&---------------------------------------------------------------------*
*& Form f_obtener_ruta_fichero_unix_logico
*&---------------------------------------------------------------------*
* Si se le pasa un fichero logico devuelve su ruta correspondiente
* y si se le pasa una ruta devuelve su fichero logico.
* En caso de que se le pasen los dos devuelve un mensaje de error
* si no se corresponden, y en caso de que no se pase ninguno o
* el parametro pasado no exista devuelve un mensaje de error.
*----------------------------------------------------------------------*
* -->P_P_LOGICO text
* -->P_P_UNIX text
*----------------------------------------------------------------------*
FORM f_obtener_fichero_unix_logico USING p_p_logico LIKE
filename-fileintern
p_p_unix.
CHECK NOT p_p_logico IS INITIAL OR NOT p_p_unix IS INITIAL.
* Si los dos campos estan informados comprobamos que coinciden, sino
* se recupera el correspondiente.
IF NOT p_p_logico IS INITIAL AND NOT p_p_unix IS INITIAL.
SELECT SINGLE fileintern
INTO p_p_logico
FROM filename
WHERE fileintern = p_p_logico
AND fileextern = p_p_unix.
IF NOT sy-subrc IS INITIAL.
SELECT SINGLE fileintern
INTO p_p_logico
FROM filenameci
WHERE fileintern = p_p_logico
AND fileextern = p_p_unix.
ENDIF.
IF NOT sy-subrc IS INITIAL.
MESSAGE i666(01) WITH 'La ruta del fichero logico seleccionado'
'y la introducida no coinciden, por favor'
'elimine uno de los dos para continuar.'.
ENDIF.
ELSEIF NOT p_p_logico IS INITIAL.
SELECT SINGLE fileextern
INTO p_p_unix
FROM filename
WHERE fileintern = p_p_logico.
IF NOT sy-subrc IS INITIAL.
SELECT SINGLE fileextern
INTO p_p_unix
FROM filenameci
WHERE fileintern = p_p_logico.
ENDIF.
ELSEIF NOT p_p_unix IS INITIAL.
SELECT SINGLE fileintern
INTO p_p_logico
FROM filename
WHERE fileextern = p_p_unix.
IF NOT sy-subrc IS INITIAL.
SELECT SINGLE fileintern
INTO p_p_logico
FROM filenameci
WHERE fileextern = p_p_unix.
ENDIF.
ENDIF.
ENDFORM. " f_obtener_ruta_fichero_unix_logico
*&---------------------------------------------------------------------*
*& Form f_grabar_fichero_local
*&---------------------------------------------------------------------*
* Almacena en la ruta local el contenido de la tabla interna
*----------------------------------------------------------------------*
* -->P_FICHERO
* -->P_NOMBRE
*----------------------------------------------------------------------*
FORM f_grabar_fichero_local TABLES p_fichero
USING p_nombre
p_tipo_archivo.
DATA l_nombre TYPE string.
l_nombre = p_nombre.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = l_nombre
filetype = p_tipo_archivo
* APPEND = ' '
* WRITE_FIELD_SEPARATOR = ' '
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* DAT_MODE = ' '
* CONFIRM_OVERWRITE = ' '
* NO_AUTH_CHECK = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* WRITE_BOM = ' '
* IMPORTING
* FILELENGTH =
TABLES
data_tab = p_fichero
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
.
CASE sy-subrc.
WHEN 1.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: file_write_error.'.
WHEN 2.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: no_batch.'.
WHEN 3.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: gui_refuse_filetransfer.'.
WHEN 4.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: invalid_type.'.
WHEN 5.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: no_authority.'.
WHEN 6.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: unknown_error.'.
WHEN 7.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: header_not_allowed.'.
WHEN 8.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: separator_not_allowed.'.
WHEN 9.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: filesize_not_allowed.'.
WHEN 10.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: header_too_long.'.
WHEN 11.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: dp_error_create.'.
WHEN 12.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: dp_error_send.'.
WHEN 13.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: dp_error_write.'.
WHEN 14.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: unknown_dp_error.'.
WHEN 15.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: access_denied.'.
WHEN 16.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: dp_out_of_memory.'.
WHEN 17.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: disk_full.'.
WHEN 18.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: dp_timeout.'.
WHEN 19.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: file_not_found.'.
WHEN 20.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: dataprovider_exception.'.
WHEN 21.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: control_flush_error.'.
WHEN 22.
MESSAGE e666(01) WITH 'GUI_DOWNLOAD:'
'No se pudo grabar el fichero'
p_nombre
'Excepción: OTHERS.'.
ENDCASE.
ENDFORM. " f_grabar_fichero_local
*&---------------------------------------------------------------------*
*& Form f_grabar_fichero_unix
*&---------------------------------------------------------------------*
* Almacena en la ruta UNIX el contenido de la tabla interna
*----------------------------------------------------------------------*
* -->P_FICHERO
* -->P_NOMBRE
* -->P_MODO
* D modos diferentes OUTPUT -> Si existe el fichero lo borra
* APPENDING -> Si existe el fichero añade al final
*
*----------------------------------------------------------------------*
FORM f_grabar_fichero_unix TABLES p_fichero
USING p_nombre
p_modo.
CASE p_modo.
WHEN 'OUTPUT'.
OPEN DATASET p_nombre FOR OUTPUT IN TEXT MODE." ENCODING DEFAULT.
WHEN 'APPENDING'.
OPEN DATASET p_nombre FOR APPENDING IN TEXT MODE." ENCODING DEFAULT
.
WHEN OTHERS.
MESSAGE e666(01) WITH 'Revise la llamada a la función'
'f_grabar_fichero_unix, existen dos modos de'
'escritura. (OUTPUT -> si existe el fichero'
' lo sobre escribe, APPENDING -> lo modifica)'.
ENDCASE.
IF NOT sy-subrc IS INITIAL.
MESSAGE e666(01) WITH 'OPEN DATASET:'
'No se pudo abrir el fichero'
p_nombre
'para escribir en el.'.
ENDIF.
LOOP AT p_fichero.
TRANSFER p_fichero TO p_nombre.
ENDLOOP.
CLOSE DATASET p_nombre.
ENDFORM. " f_grabar_fichero_unix
*&---------------------------------------------------------------------*
*& Form f_cargar_fichero_local
*&---------------------------------------------------------------------*
* Carga de la ruta local el contenido de la tabla interna
*----------------------------------------------------------------------*
* -->P_FICHERO
* -->P_NOMBRE
*----------------------------------------------------------------------*
FORM f_cargar_fichero_local TABLES p_fichero
USING p_nombre
p_tipo_archivo.
DATA l_nombre TYPE string.
l_nombre = p_nombre.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = l_nombre
filetype = p_tipo_archivo
* HAS_FIELD_SEPARATOR = ' '
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* IMPORTING
* FILELENGTH =
* HEADER =
TABLES
data_tab = p_fichero
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
.
CASE sy-subrc.
WHEN 1.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: file_open_error.'.
WHEN 2.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: file_read_error.'.
WHEN 3.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: no_batch.'.
WHEN 4.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: gui_refuse_filetransfer.'.
WHEN 5.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: invalid_type.'.
WHEN 6.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: no_authority.'.
WHEN 7.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: unknown_error.'.
WHEN 8.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: bad_data_format.'.
WHEN 9.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: header_not_allowed.'.
WHEN 10.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: separator_not_allowed.'.
WHEN 11.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: header_too_long.'.
WHEN 12.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: unknown_dp_error.'.
WHEN 13.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: access_denied.'.
WHEN 14.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: dp_out_of_memory.'.
WHEN 15.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: disk_full.'.
WHEN 16.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: dp_timeout.'.
WHEN 17.
MESSAGE e666(01) WITH 'GUI_UPLOAD:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: OTHERS.'.
ENDCASE.
ENDFORM. " f_cargar_fichero_local
*&---------------------------------------------------------------------*
*& Form f_cargar_fichero_unix
*&---------------------------------------------------------------------*
* Carga de la ruta UNIX el contenido de la tabla interna
*----------------------------------------------------------------------*
* -->P_FICHERO
* -->P_NOMBRE
*----------------------------------------------------------------------*
FORM f_cargar_fichero_unix TABLES p_fichero
USING p_nombre.
OPEN DATASET p_nombre FOR INPUT IN TEXT MODE." ENCODING DEFAULT.
IF sy-subrc IS INITIAL.
DO.
READ DATASET p_nombre INTO p_fichero.
IF NOT sy-subrc IS INITIAL.
EXIT.
ENDIF.
APPEND p_fichero.
ENDDO.
CLOSE DATASET p_nombre.
ELSE.
MESSAGE e666(01) WITH 'OPEN DATASET:'
'No se pudo abrir el fichero'
p_nombre
'Probablemente no exista.'.
ENDIF.
ENDFORM. " f_cargar_fichero_unix
*&---------------------------------------------------------------------*
*& Form f_borrar_fichero_local
*&---------------------------------------------------------------------*
* Elimina del sistema de archivos local un fichero
*----------------------------------------------------------------------*
* -->P_NOMBRE
*----------------------------------------------------------------------*
FORM f_borrar_fichero_local USING p_nombre.
CALL FUNCTION 'GUI_DELETE_FILE'
EXPORTING
file_name = p_nombre
EXCEPTIONS
failed = 1
OTHERS = 2.
CASE sy-subrc.
WHEN 1.
MESSAGE e666(01) WITH 'GUI_DELETE_FILE:'
'No se pudo borrar el fichero'
p_nombre.
WHEN 2.
MESSAGE e666(01) WITH 'GUI_DELETE_FILE:'
'Error desconocido en funcion.'
'Probablemente no se pudo borrar el fichero'
p_nombre.
ENDCASE.
ENDFORM. " f_borrar_fichero_local
*&---------------------------------------------------------------------*
*& Form f_borrar_fichero_unix
*&---------------------------------------------------------------------*
* Elimina del sistema de archivos unix un fichero
*----------------------------------------------------------------------*
* -->P_NOMBRE
*----------------------------------------------------------------------*
FORM f_borrar_fichero_unix USING p_nombre.
DELETE DATASET p_nombre.
IF NOT sy-subrc IS INITIAL.
MESSAGE e666(01) WITH 'DELETE DATASET:'
'No se pudo borrar el fichero'
p_nombre.
ENDIF.
ENDFORM. " f_borrar_fichero_unix
*&---------------------------------------------------------------------*
*& Form F_OBTENER_RUTA_FICHERO_LOCAL
*&---------------------------------------------------------------------*
* Para utilizar en un
* AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_D_FICH
* EJEMPLO DE USO:
* AT SELECTION-SCREEN ON VALUE-REQUEST FOR parametro.
* * Se asigna un valor de carpeta por defecto (OPCIONAL)
* parametro = 'c:/'.
* * Se obtiene el nombre del fichero
* PERFORM F_OBTENER_RUTA_FICHERO USING parametro
* maquina.
*
* MAQUINA PUEDE TENER DOS VALORES: 'A' -> Servidor de aplicación
* 'P' -> Servidor de presentación
*----------------------------------------------------------------------*
* -->P_D_FICH Fichero local a cargar
*----------------------------------------------------------------------*
FORM f_obtener_ruta_fichero USING p_fichero
p_maquina.
DATA l_fich LIKE dxfields-longpath.
DATA l_abend.
l_fich = p_fichero.
CALL FUNCTION 'F4_DXFILENAME_TOPRECURSION'
EXPORTING
i_location_flag = p_maquina
i_server = ''
i_path = l_fich
* FILEMASK = '*.*'
* FILEOPERATION = 'R'
IMPORTING
* O_LOCATION_FLAG =
* O_SERVER =
o_path = l_fich
abend_flag = l_abend
EXCEPTIONS
rfc_error = 1
error_with_gui = 2
OTHERS = 3
.
CASE sy-subrc.
WHEN 1.
MESSAGE e666(01) WITH 'F4_DXFILENAME_TOPRECURSION:'
'No se pudo explorar.'
'Excepción: rfc_error.'.
WHEN 2.
MESSAGE e666(01) WITH 'F4_DXFILENAME_TOPRECURSION:'
'No se pudo explorar.'
'Excepción: error_with_gui.'.
WHEN 3.
MESSAGE e666(01) WITH 'F4_DXFILENAME_TOPRECURSION:'
'No se pudo explorar.'
'Excepción: others.'.
ENDCASE.
IF l_abend IS INITIAL.
p_fichero = l_fich.
ENDIF.
ENDFORM. " F_OBTENER_NOMBRE_FICHERO
*&---------------------------------------------------------------------*
*& Form f_cargar_fichero_excel
*&---------------------------------------------------------------------*
* Esta función carga un fichero del tipo excel de local, sera
* obligatorio que la tabla interna en la que se cargue tenga el
* mismo número de campos que columnas tiene el fichero.
* ATENCIÓN: NO SE CONTROLAN LOS TIPOS NI TAMAÑOS DE LAS VARIABLES!
*----------------------------------------------------------------------*
* -->P_fichero
* -->P_nombre
*----------------------------------------------------------------------*
FORM f_cargar_fichero_excel TABLES p_fichero
USING p_nombre.
* En el caso de maquina CRM es necesario crearse una estructura llamada
* ZALSMEX_TABLINE como copia de la de la maquina normal
DATA: it_intern TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE,
* DATA: it_intern TYPE zalsmex_tabline OCCURS 0 WITH HEADER LINE,
l_start_col TYPE i VALUE 1,
l_start_row TYPE i VALUE 1,
l_end_col TYPE i VALUE 256,
l_end_row TYPE i VALUE 65536.
DATA l_filename LIKE rlgrap-filename.
FIELD-SYMBOLS .
l_filename = p_nombre.
* En el caso de maquina CRM es necesario crearse una funcion llamada
* 'ZALSM_EXCEL_TO_INTERNAL_TABLE' como copia de la de la maquina normal
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
* CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = l_filename
i_begin_col = l_start_col
i_begin_row = l_start_row
i_end_col = l_end_col
i_end_row = l_end_row
TABLES
intern = it_intern
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
CASE sy-subrc.
WHEN 1.
MESSAGE e666(01) WITH 'ALSM_EXCEL_TO_INTERNAL_TABLE:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: inconsistent_parameters.'.
WHEN 2.
MESSAGE e666(01) WITH 'ALSM_EXCEL_TO_INTERNAL_TABLE:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: upload_ole.'.
WHEN 3.
MESSAGE e666(01) WITH 'ALSM_EXCEL_TO_INTERNAL_TABLE:'
'No se pudo cargar el fichero'
p_nombre
'Excepción: OTHERS.'.
ENDCASE.
LOOP AT it_intern.
ASSIGN COMPONENT it_intern-col OF STRUCTURE p_fichero TO .
IF NOT sy-subrc IS INITIAL.
MESSAGE e666(01) WITH 'ALSM_EXCEL_TO_INTERNAL_TABLE:'
'No se pudo cargar el fichero'
p_nombre
'Nº de columnas mayor que de campos en tabla interna.'.
ENDIF.
= it_intern-value.
AT END OF row.
APPEND p_fichero.
CLEAR p_fichero.
ENDAT.
ENDLOOP.
ENDFORM. " f_cargar_fichero_excel
*&---------------------------------------------------------------------*
*& Form f_cargar_fichero_excel_unix
*&---------------------------------------------------------------------*
* Esta función carga un fichero del tipo excel del servidor, sera
* obligatorio que la tabla interna en la que se cargue tenga el
* mismo número de campos que columnas tiene el fichero.
* ATENCIÓN: NO SE CONTROLAN LOS TIPOS NI TAMAÑOS DE LAS VARIABLES!
*----------------------------------------------------------------------*
* -->P_fichero
* -->P_nombre
*----------------------------------------------------------------------*
FORM f_cargar_fichero_excel_unix TABLES p_fichero
USING p_nombre.
DATA l_filename LIKE sapb-sappfad.
DATA l_filename1 LIKE sapb-sappfad.
l_filename = p_nombre.
l_filename1 = 'C:\saptemp.xls'.
CALL FUNCTION 'ARCHIVFILE_SERVER_TO_CLIENT'
EXPORTING
path = l_filename
targetpath = l_filename1
EXCEPTIONS
error_file = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
PERFORM f_cargar_fichero_excel
TABLES
p_fichero
USING
l_filename1.
ENDFORM. " f_cargar_fichero_excel_unix
*&---------------------------------------------------------------------*
*& Form f_obtener_directorio
*&---------------------------------------------------------------------*
* Para utilizar en un
* AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_D_FICH
* EJEMPLO DE USO:
* AT SELECTION-SCREEN ON VALUE-REQUEST FOR parametro.
* * Se asigna un valor de carpeta por defecto (OPCIONAL)
* parametro = 'c:/'.
* * Se obtiene el nombre del fichero
* PERFORM F_OBTENER_DIRECTORIO USING parametro
* maquina.
*
* MAQUINA PUEDE TENER DOS VALORES: 'A' -> Servidor de aplicación
* 'P' -> Servidor de presentación
*----------------------------------------------------------------------*
* -->P_DIRECTORIO text
* -->P_MAQUINA text
*----------------------------------------------------------------------*
FORM f_obtener_directorio USING p_directorio
p_maquina.
CASE p_maquina.
WHEN 'P'.
CALL FUNCTION 'TMP_GUI_BROWSE_FOR_FOLDER'
EXPORTING
window_title = 'Elija un directorio'
initial_folder = p_directorio
IMPORTING
selected_folder = p_directorio
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF NOT p_directorio IS INITIAL.
sy-index = strlen( p_directorio ) - 1.
IF NOT p_directorio+sy-index(1) = '\'.
CONCATENATE p_directorio '\' INTO p_directorio.
ENDIF.
ENDIF.
ENDIF.
WHEN 'A'.
ENDCASE.
ENDFORM. " f_obtener_directorio
|