Foro -Documentación -Código fuente -Contacto -Empleo

Buscar

Traducir

Amazon

ZIFICHEROS PDF Imprimir E-mail
Usar puntuación: / 0
MaloBueno 
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




Comentarios
Buscar
¡Sólo los usuarios registrados pueden escribir comentarios!

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 
home search