Cargar Archivo de Texto desde Ruta e Insertar los registros en BD

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • BluehScouth
    Junior Member
    • may
    • 13

    #1

    Cargar Archivo de Texto desde Ruta e Insertar los registros en BD

    Buenos dias:

    Se me presento el siguiente requerimiento por un lado tengo un archivo plano que debe subir desde una ruta dinamica y posteriormente insertar todos esos registros en la BD.

    Ya luego vere el tema de las validaciones...por ejemplo una columna numerica...si el dato es una letra escribir esos registros en un archivo log de errores.

    Saludos!
  • BluehScouth
    Junior Member
    • may
    • 13

    #2
    Bueno Finalmente Logre mi objetivo...ahora el siguiente paso es hacer las validaciones para complicar un poco más el proyecto...descargare el archivo desde un servidor FTP y posteriormente los descomprimir...y obtendre el archivo automáticamente....si estoy haciendo alguna
    mala practica porfavor espero sus comentarios el código es el siguiente:


    Código:
    REPORT  Z_PROGRAMA_PRUEBA.
    
    PARAMETERS: P_infile LIKE RLGRAP-FILENAME
                            OBLIGATORY DEFAULT  '/usr/sap/'..
    
    *DATA: ld_file LIKE rlgrap-filename.
    DATA: gd_file type string.
    
    *Internal tabe to store upload data
    TYPES: BEGIN OF t_record,
        codigo LIKE ztabla_prueba-cod_empl,
        nombre LIKE ztabla_prueba-nomb_ape,
        estado   LIKE ztabla_prueba-std_com,
        END OF t_record.
    
    DATA: it_record TYPE STANDARD TABLE OF t_record INITIAL SIZE 0,
          wa_record TYPE t_record.
    
    DATA: ln_tabla   TYPE  ztabla_prueba. "tabla: nombre de la tabla"
    
    *Internal table to upload data into
    DATA: BEGIN OF it_datatab OCCURS 0,
      row(500) TYPE c,
     END OF it_datatab.
    
    *Text version of data table
    TYPES: BEGIN OF t_uploadtxt,
      codigo(10) TYPE c,
      nombre(15) TYPE c,
      estado(5)  TYPE c,
     END OF t_uploadtxt.
    DATA: wa_uploadtxt TYPE t_uploadtxt.
    
    
    *String value to data in initially.
    DATA: wa_string(255) TYPE c.
    
    CONSTANTS: con_tab TYPE x VALUE '09'.
    
    *If you have Unicode check active in program attributes then you will
    *need to declare constants as follows:
    
    *class cl_abap_char_utilities definition load.
    *constants:
    *    con_tab  type c value cl_abap_char_utilities=>HORIZONTAL_TAB.
    
    *Función para abrir el browser
    *AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_INFILE.
    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
    START-OF-SELECTION.
      gd_file = p_infile.
    
      CALL FUNCTION 'GUI_UPLOAD'
        EXPORTING
          filename                = gd_file
          has_field_separator     = 'X'  "X is for 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.
    
    * Alternative method, where by you split fields at each TAB after you
    * have returned the data. No point unless you dont have access to
    * GUI_UPLOAD but just included for information
    *
    *  CALL FUNCTION 'GUI_UPLOAD'
    *       EXPORTING
    *            filename        = gd_file
    *            filetype        = 'ASC'
    *       TABLES
    *            data_tab        = it_datatab  "ITBL_IN_RECORD[]"
    *       EXCEPTIONS
    *            file_open_error = 1
    *            OTHERS          = 2.
    *  IF sy-subrc NE 0.
    *  ELSE.
    *    LOOP AT it_datatab.
    *      CLEAR: wa_string, wa_uploadtxt.
    *      wa_string = it_datatab.
    *      SPLIT wa_string AT con_tab INTO wa_uploadtxt-name1
    *                                      wa_uploadtxt-name2
    *                                      wa_uploadtxt-age.
    *      MOVE-CORRESPONDING wa_uploadtxt TO wa_record.
    *      APPEND wa_record TO it_record.
    *    ENDLOOP.
    *  ENDIF.
    ************************************************************************
    *END-OF-SELECTION
    END-OF-SELECTION.
    
    
    *!! Text data is now contained within the internal table IT_RECORD
    * Display report data for illustration purposes
    LOOP AT it_record INTO wa_record.
        ln_tabla-cod_empl = wa_record-codigo.
          ln_tabla-nomb_ape = wa_record-nombre.
          ln_tabla-std_com = wa_record-estado.
    
      WRITE:/     sy-vline,
             (10) wa_record-codigo, sy-vline,
             (10) wa_record-nombre, sy-vline,
             (10) wa_record-estado, sy-vline.
      
         
          insert into ztabla_prueba values ln_tabla.
          MESSAGE 'Datos Insertados' TYPE 'S'.
    
    ENDLOOP.
    Editado por última vez por BluehScouth; 11/06/2014, 17:57:13.

    Comentario

    • sconoredhot
      Senior Member
      • feb
      • 341

      #3
      Base de datos

      Me parece todo bien pero no veo que estes mandando los registros a la base de datos, que tabla tenes que modificar?
      Sebas

      Desarrollador ABAP.

      Comentario

      Trabajando...