Carga de Archivos de texto por posicion con CALL FUNCTION 'UPLOAD'

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Fab_Bajio
    Junior Member
    • ene
    • 12

    #1

    Carga de Archivos de texto por posicion con CALL FUNCTION 'UPLOAD'

    Hola a todos ojala me puedan ayudar esto me urge realmente, me pordrian decir como hacer para cargar un archivo de texto plano a una IT por medio de CALL FUNCTION 'UPLOAD', dicho archivo no esta delimitado con tab ni pipes, ni comas ya que la creacion del archivo esta por posicion y asi lo tengo que leer pongo las tres lineas que repiten en el archivo N veces con diferentes registros ojala puedan apoyarme
  • salinasa
    Junior Member
    • mar
    • 1

    #2
    REPORT ZBI_MOMM.

    TABLES: RF02K, LFA1, LFB1.

    DATA: V_NOMBRE(50) TYPE C, " NOMBRE PROPUESTO PARA EL LOG FILE
    V_CONTA TYPE I. " CONTADOR DE REGISTROS PROCESADOS

    * Batchinputdata of single transaction
    DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
    * messages of call transaction
    DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

    * ARCHIVO DE ENTRADA
    DATA: BEGIN OF ITFILE OCCURS 0,
    BUKRS LIKE RF02K-BUKRS,
    KTOKK LIKE RF02K-KTOKK,
    NAME1 LIKE LFA1-NAME1,
    SORTL LIKE LFA1-SORTL,
    ORT01 LIKE LFA1-ORT01,
    PSTLZ LIKE LFA1-PSTLZ,
    LAND1 LIKE LFA1-LAND1,
    SPRAS LIKE LFA1-SPRAS,
    AKONT LIKE LFB1-AKONT,
    FDGRV LIKE LFB1-FDGRV,
    ZTERM LIKE LFB1-ZTERM,
    ZWELS LIKE LFB1-ZWELS,
    REPRF LIKE LFB1-REPRF,
    END OF ITFILE.

    * LOG DE SALIDA
    DATA: BEGIN OF ITLOG OCCURS 0,
    TEXTO(100),
    END OF ITLOG.


    * ================================================== ===================
    * >>> PANTALLA DE SELECCIÓN
    SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME TITLE TEXT-B01.
    PARAMETERS:
    P_FILE LIKE RLGRAP-FILENAME DEFAULT 'C:\BI TEST.txt' OBLIGATORY,
    P_CARP LIKE RLGRAP-FILENAME DEFAULT 'C:\' OBLIGATORY,
    P_LOGF(50) TYPE C OBLIGATORY. "TYPE STRING OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK B01.


    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
    CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
    MASK = ',*.*,*.*.'
    MODE = 'O'
    TITLE = ' '
    IMPORTING
    FILENAME = P_FILE
    EXCEPTIONS
    INV_WINSYS = 1
    NO_BATCH = 2
    SELECTION_CANCEL = 3
    SELECTION_ERROR = 4
    OTHERS = 5.


    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_CARP.
    CALL FUNCTION 'TMP_GUI_BROWSE_FOR_FOLDER'
    EXPORTING
    WINDOW_TITLE = 'Seleccione una carpeta'
    IMPORTING
    SELECTED_FOLDER = P_CARP
    EXCEPTIONS
    CNTL_ERROR = 1
    OTHERS = 2.


    AT SELECTION-SCREEN OUTPUT.
    CONCATENATE 'Log_Carga_MIC_'
    SY-DATUM
    '_'
    SY-UZEIT
    '.txt'
    INTO V_NOMBRE.
    P_LOGF = V_NOMBRE.
    LOOP AT SCREEN.
    IF SCREEN-NAME = 'P_LOGF'.
    SCREEN-INPUT = 0.
    MODIFY SCREEN.
    ENDIF.
    ENDLOOP.



    START-OF-SELECTION.
    PERFORM CARGAR_ARCHIVO.
    IF ITFILE[] IS NOT INITIAL.
    LOOP AT ITFILE.
    PERFORM CARGAR_MIC.
    PERFORM GUARDAR_LOG.
    CLEAR BDCDATA.
    REFRESH BDCDATA.
    CLEAR MESSTAB.
    REFRESH MESSTAB.
    ENDLOOP.
    IF ITLOG[] IS NOT INITIAL.
    PERFORM BAJAR_LOG.
    IF SY-SUBRC = 0.
    MESSAGE S001(00) WITH V_CONTA ' registros procesados.'
    ' Revise log en ' P_LOGF.
    ELSE.
    MESSAGE S001(00) WITH V_CONTA ' registros procesados.'
    'Error al guardar archivo log.'.
    ENDIF.
    ELSE.
    MESSAGE S001(00) WITH V_CONTA ' registros procesados.'.
    ENDIF.
    ELSE.
    MESSAGE S001(00) WITH 'No se encontraron registros en el'
    'archivo de entrada.'.
    ENDIF.
    * <<< PANTALLA DE SELECCIÓN
    * ================================================== ===================



    ************************************************** ***********************
    * >>> SUBRUTINAS ************************************************** ******
    * ================================================== ===================
    * CARGAR_ARCHIVO
    * ================================================== ===================
    FORM CARGAR_ARCHIVO.

    DATA V_FILE LIKE RLGRAP-FILENAME. " TYPE STRING.

    V_FILE = P_FILE.

    * CALL FUNCTION 'GUI_UPLOAD'
    * EXPORTING
    * FILENAME = V_FILE
    * FILETYPE = 'DAT'
    * TABLES
    * DATA_TAB = ITFILE
    * 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 <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    * ENDIF.

    CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
    * CODEPAGE = ' '
    FILENAME = V_FILE
    FILETYPE = 'DAT'
    * HEADLEN = ' '
    * LINE_EXIT = ' '
    * TRUNCLEN = ' '
    * USER_FORM = ' '
    * USER_PROG = ' '
    * DAT_D_FORMAT = ' '
    * IMPORTING
    * FILELENGTH =
    TABLES
    DATA_TAB = ITFILE
    * EXCEPTIONS
    * CONVERSION_ERROR = 1
    * FILE_OPEN_ERROR = 2
    * FILE_READ_ERROR = 3
    * INVALID_TYPE = 4
    * NO_BATCH = 5
    * UNKNOWN_ERROR = 6
    * INVALID_TABLE_WIDTH = 7
    * GUI_REFUSE_FILETRANSFER = 8
    * CUSTOMER_ERROR = 9
    * NO_AUTHORITY = 10
    * OTHERS = 11
    .
    IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.



    ENDFORM. " CARGAR_ARCHIVO
    * ================================================== ===================


    * ================================================== ===================
    * CARGAR_MIC
    * ================================================== ===================
    FORM CARGAR_MIC.

    DATA: V_TCODE LIKE SY-TCODE VALUE 'FK01',
    V_UPDT LIKE CTU_PARAMS-UPDMODE VALUE 'A',
    "S: synchronously
    "A: asynchronously
    "L: local
    V_MODO LIKE CTU_PARAMS-DISMODE VALUE 'N'.
    "A: show all dynpros
    "E: show dynpro on error only
    "N: do not display dynpro

    * PANTALLA 1
    PERFORM bdc_dynpro USING 'SAPMF02K' '0105'.
    PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
    perform bdc_field using 'RF02K-BUKRS' ITFILE-BUKRS.
    perform bdc_field using 'RF02K-KTOKK' ITFILE-KTOKK.

    * PANTALLA 2
    PERFORM bdc_dynpro USING 'SAPMF02K' '0110'.
    PERFORM bdc_field USING 'BDC_OKCODE' '=VW'.
    PERFORM bdc_field USING 'LFA1-NAME1' ITFILE-NAME1.
    PERFORM bdc_field USING 'LFA1-SORTL' ITFILE-SORTL.
    PERFORM bdc_field USING 'LFA1-ORT01' ITFILE-ORT01.
    PERFORM bdc_field USING 'LFA1-PSTLZ' ITFILE-PSTLZ.
    PERFORM bdc_field USING 'LFA1-LAND1' ITFILE-LAND1.
    PERFORM bdc_field USING 'LFA1-SPRAS' ITFILE-SPRAS.

    * PANTALLA 3
    perform bdc_dynpro using 'SAPMF02K' '0120'.
    perform bdc_field using 'BDC_OKCODE' '=VW'.

    * PANTALLA 4
    perform bdc_dynpro using 'SAPMF02K' '0130'.
    perform bdc_field using 'BDC_OKCODE' '=VW'.

    * PANTALLA 5
    perform bdc_dynpro using 'SAPMF02K' '0210'.
    perform bdc_field using 'BDC_OKCODE' '=VW'.
    perform bdc_field using 'LFB1-AKONT' ITFILE-AKONT.
    perform bdc_field using 'LFB1-FDGRV' ITFILE-FDGRV.

    * PANTALLA 6
    PERFORM bdc_dynpro USING 'SAPMF02K' '0215'.
    PERFORM bdc_field USING 'BDC_OKCODE' '=UPDA'.
    PERFORM bdc_field USING 'LFB1-ZTERM' ITFILE-ZTERM.
    PERFORM bdc_field USING 'LFB1-REPRF' ITFILE-REPRF.
    PERFORM bdc_field USING 'LFB1-ZWELS' ITFILE-ZWELS.

    CALL TRANSACTION V_TCODE USING BDCDATA
    MODE V_MODO
    UPDATE V_UPDT
    MESSAGES INTO MESSTAB.

    V_CONTA = V_CONTA + 1.

    ENDFORM. " CARGAR_MIC
    * ================================================== ===================


    * ================================================== ===================
    * GUARDAR_LOG
    * ================================================== ===================
    FORM GUARDAR_LOG.

    DATA: V_TEXTO LIKE T100-TEXT,
    V_MSID LIKE SY-MSGID,
    V_MSGNO LIKE SY-MSGNO,
    V_MSGV1 LIKE SY-MSGV1,
    V_MSGV2 LIKE SY-MSGV2,
    V_MSGV3 LIKE SY-MSGV3,
    V_MSGV4 LIKE SY-MSGV4.

    LOOP AT MESSTAB.

    V_MSID = MESSTAB-MSGID.
    V_MSGNO = MESSTAB-MSGNR.
    V_MSGV1 = MESSTAB-MSGV1.
    V_MSGV2 = MESSTAB-MSGV2.
    V_MSGV3 = MESSTAB-MSGV3.
    V_MSGV4 = MESSTAB-MSGV4.

    CALL FUNCTION 'TB_MESSAGE_BUILD_TEXT'
    EXPORTING
    LANGU = SY-LANGU
    MSGID = V_MSID
    MSGNO = V_MSGNO
    MSGV1 = V_MSGV1
    MSGV2 = V_MSGV2
    MSGV3 = V_MSGV3
    MSGV4 = V_MSGV4
    IMPORTING
    TEXT = V_TEXTO.

    IF SY-SUBRC = 0 AND V_TEXTO IS NOT INITIAL.
    ITLOG-TEXTO = V_TEXTO.
    APPEND ITLOG.
    CLEAR ITLOG.
    ENDIF.

    ENDLOOP.

    ENDFORM. " GUARDAR_LOG
    * ================================================== ===================


    * ================================================== ===================
    * BAJAR_LOG
    * ================================================== ===================
    FORM BAJAR_LOG.


    DATA: LV_VAR TYPE STRING.

    CONCATENATE P_CARP '\' P_LOGF INTO P_LOGF.
    LV_VAR = P_LOGF.

    CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
    FILENAME = LV_VAR
    FILETYPE = 'DAT'
    TABLES
    DATA_TAB = ITLOG
    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.

    ENDFORM. " BAJAR_LOG
    * ================================================== ===================


    * <<< SUBRUTINAS ************************************************** ******
    ************************************************** ***********************




    *** >> Rutinas para generar BDC ***************************************
    *----------------------------------------------------------------------*
    * Start new screen *
    *----------------------------------------------------------------------*
    FORM BDC_DYNPRO USING PROGRAM DYNPRO.
    CLEAR BDCDATA.
    BDCDATA-PROGRAM = PROGRAM.
    BDCDATA-DYNPRO = DYNPRO.
    BDCDATA-DYNBEGIN = 'X'.
    APPEND BDCDATA.
    ENDFORM.

    *----------------------------------------------------------------------*
    * Insert field *
    *----------------------------------------------------------------------*
    FORM BDC_FIELD USING FNAM FVAL.
    CLEAR BDCDATA.
    BDCDATA-FNAM = FNAM.
    BDCDATA-FVAL = FVAL.
    APPEND BDCDATA.
    ENDFORM.
    *** << Rutinas para generar BDC ***************************************

    Aqui tienes un ejemplo que realiza un batch input espero y te sirca suerte

    Comentario

    • Fab_Bajio
      Junior Member
      • ene
      • 12

      #3
      Salinasa primero qeu nada muchas gracias, tengo una duda lo que pasa es que no soy muy experto en programacion ABAP, he visto algunos codigos de carga de archivos a tablas IT pero basicamente mi problema es cargar una archivo no delimitado por espacios ni tabulaciones etc... en el codigo que hicsite favor de agregar no enceuntro la parte en la que esta leyendo por posicion ojala me puedas decir que que parte esta , de cualquier forma GRACIAS!!

      Comentario

      • isratol
        Member
        • jul
        • 63

        #4
        Tal vez puedas guardar cada registro de datos en una tabla interna, en un solo campo y si ya sabes como estan acomodados los datos en el registro, irlos separando, masomenos asi:

        v_waers = bkpf-bktxt+v_longitud(3).
        it_movs-creobien = bkpf-bktxt+v_longitud(1).

        v_waers = bkpf-bktxt+2(3). --> empieza en la posicion 2 de la cadena, y te toma los siguientes 3 caracteres.

        Espero q sea eso a lo que te refieras...

        Saludos
        Israel Toledo

        Comentario

        • DavidXD_XD
          Moderator
          • ago
          • 1255

          #5
          Hola, supongamos que tienes esto en tu txt..

          PELIM0103200701052008

          Y tienes que guardarlo en una tabla interna en la que los campos son

          land1 -> Pais
          regio -> Region
          Date1 -> Fecha1
          Date 2 -> Fecha 2

          Nunca lo he probado pero estoy seguro que resultara, create una variable de esta manera teniendo en cuenta el numero de caracteres de cada campo
          TYPES: BEGIN OF ty_tab,
          land1(2),
          regio(3),
          date1(8),
          date2(8),
          END OF ty_carga.

          TYPES: BEGIN OF ty_carga,
          line1(21), "Para el ejemplo es 21
          END OF ty_carga.

          DATA: ti_tab TYPE TABLE OF ty_tab WITH HEADER LINE,
          ti_carga TYPE TABLE OF ty_carga WITH HEADER LINE.

          Ahi estoy creando 2 tablas internas, uno para la carga y otra para la conversion, tendrias que hacer el GUI_UPLOAD a la tabla interna ti_carga y lo que despues tendrias que hacer es esto

          ti_tab[] = ti_carga[].

          Porque al final SAP siempre trabaja las estructuras como una cadena separadas por una longuitud del atributo del campo ... espero te sirva
          David Carballido Córdova

          Comentario

          • abapconsultoria
            Senior Member
            • ene
            • 101

            #6
            La funcion GUI_UPLOAD tiene el parametro 'HAS_FIELD_SEPARATOR' aqui mando la descripcion. Lo que intentas hacer es levantar todo el archivo linea por linea como si tuviera un unico campo ??

            Con respecto a las posiciones.... En este caso te recomendaria que te armes una variable(estructura) a modo de plantilla de como vas a leer las posiciones y despues asignes linea por linea de la tabla levantada a esa variable(estructura) y leas tus posiciones desde ahi.

            Saludos.

            Javier.


            FU GUI_UPLOAD HAS_FIELD_SEPARATOR
            __________________________________________________ __
            Txt.brv.
            Columns Separated by Tabs in Case of ASCII Upload

            Description
            Specifies if the fields in the file are separated by a tab. This is necessary if the structure passed contains several components. CR/LF occurs instead of a tab after the last field of a row.

            Value range
            'X': Fields are separated by tabs.
            SPACE: Fields are not separated by tabs. In this case, the table must
            contain either only one single column or all columns must be contained
            in the file in their full length.
            Default
            SPACE

            Módulo funciones
            GUI_UPLOAD
            ABAPCONSULTORIA@GMAIL.COM

            www.consultoriaabap.blogspot.com

            Lo importante no es saber sino saber quien es el que sabe

            Comentario

            Trabajando...