Batch Input de la VA01

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • amam2605
    Senior Member
    • ene
    • 150

    #1

    Batch Input de la VA01

    Hola a Todos !! Estoy realizando u batch input de la transaccion VA01 el archivo me lo han pasado de la sigueinte forma:

    0 1001495368
    1 600000 1
    1 600033 2
    0 1001493228
    1 800212 1
    1 800460 3

    Donde: el 0 indica que es un Pedido al que se le hara una devolucion
    1001495368 y 1001493228 son los nros de pedidos
    1: indica los nros de material que tienen esos pedidos en sus posiciones 10 y 20.
    1 y 2 - 1 y 3 que acompañan a los nros de materiales son la cantidad que tendra de devolucion cada pedido.

    No se como leer esto en un batch input o si hay otra forma mejor de hacerlo. Aqui esta el programa que he realizado pero solo lee un solo nro de pedido y su cantidad.

    REPORT ZBI_DEVOLUCION NO STANDARD PAGE HEADING.


    * Definición de tabla que recibe datos del archivo de texto
    TYPES: BEGIN OF REC_T,
    TIPPED1(4), " Tipo pedido
    OV(4), " Organizacion Venta
    CANAL(2), " Canal
    SECTOR(2), " Sector
    PEDIDO(10), " Nro. pedido
    POS(6), " Posicion
    CANTIDAD(5), " Cantidad ejemplares
    END OF REC_T.

    TABLES: VBAP,
    VBAK.

    DATA REC TYPE REC_T OCCURS 1 WITH HEADER LINE.
    DATA: NUMPOS(6),
    TIPPED(4),
    CANTI TYPE I.


    * Tabla interna donde se volcara el fichero.

    DATA: BEGIN OF TI OCCURS 0,
    INDI(1), " Indicador
    DEVOLU(12), " Numero de Devolucion
    CANTI_PEDI(5), " Cantidad de Pedido
    END OF TI.


    DATA: BEGIN OF BDC_TAB OCCURS 0.
    INCLUDE STRUCTURE BDCDATA.
    DATA: END OF BDC_TAB.

    *------------- PARAMETROS----------------------------------------------*
    PARAMETERS:

    * Archivo de donde se cargaran los datos
    N_FICH LIKE RLGRAP-FILENAME DEFAULT ' ',

    * Nombre del Grupo de Sesiòn
    NOMBREJD LIKE APQI-GROUPID DEFAULT 'PEDIDO_DEVOL'.



    *------------- PROGRAMA PRINCIPAL -------------------------------------*
    START-OF-SELECTION.


    * Abre el Grupo de Sesiòn

    CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
    CLIENT = SY-MANDT
    GROUP = NOMBREJD
    USER = SY-UNAME
    KEEP = 'X'.

    * Carga el Archivo de Datos pasado por paràmetro en la Tabla Interna TI

    PERFORM CARGAR_TABLA.
    CLEAR: TI.
    LOOP AT TI.
    IF TI-DEVOLU IS INITIAL.
    EXIT.
    ELSE.
    *---- Carga la tabla interna BDC_TAB con los datos de ti

    PERFORM TRATAMIENTO_PRINCIPAL.
    ENDIF.
    ENDLOOP.
    * Cierra el grupo de sesiòn
    CALL FUNCTION 'BDC_CLOSE_GROUP'
    EXCEPTIONS
    NOT_OPEN = 1
    QUEUE_ERROR = 2
    OTHERS = 3.
    WRITE: / 'JUEGO DE DATOS CREADO CON EL NOMBRE: ',
    NOMBREJD LEFT-JUSTIFIED.
    END-OF-SELECTION.

    *-----------------------------------------------------------------------
    * FORM CARGAR_TABLA
    *-----------------------------------------------------------------------
    * LLama a la Funciòn Upload con el nombre del archivo pasado por paramt.

    FORM CARGAR_TABLA.
    CALL FUNCTION 'UPLOAD'
    EXPORTING
    FILENAME = N_FICH
    FILETYPE = 'DAT'
    TABLES
    DATA_TAB = TI
    EXCEPTIONS
    CONVERSION_ERROR = 1
    INVALID_TABLE_WIDTH = 2
    INVALID_TYPE = 3
    NO_BATCH = 4
    UNKNOWN_ERROR = 5
    GUI_REFUSE_FILETRANSFER = 6
    OTHERS = 7.
    ENDFORM.

    *-----------------------------------------------------------------------
    * FORM INSERTAR_EN_BDC_TAB
    *-----------------------------------------------------------------------
    * Llama a la funciòn BDC_INSERT con el nùmero de transaciòn que va a
    * emular y el nombre de la tabla.

    FORM INSERTAR_EN_BDC_TAB.
    CALL FUNCTION 'BDC_INSERT'
    EXPORTING
    TCODE = 'VA01'
    TABLES
    DYNPROTAB = BDC_TAB
    EXCEPTIONS
    INTERNAL_ERROR = 1
    NOT_OPEN = 2
    QUEUE_ERROR = 3
    TCODE_INVALID = 4
    PRINTING_INVALID = 5
    POSTING_INVALID = 6
    OTHERS = 7.
    ENDFORM.

    *-----------------------------------------------------------------------
    * FORM TRATAMIENTO_PRINCIPAL
    *-----------------------------------------------------------------------
    * LLama al form Dynpro con los paràmetros correspondientes a cada
    * pantalla de la transacciòn. LLama a Insertar_en_BDC_Tab.

    FORM TRATAMIENTO_PRINCIPAL.

    REFRESH BDC_TAB.
    CLEAR BDC_TAB.

    SELECT VKORG VTWEG SPART VBELN AUART
    INTO (VBAK-VKORG , VBAK-VTWEG , VBAK-SPART , VBAK-VBELN , VBAK-AUART)
    FROM VBAK
    WHERE AUART IN ('ZRE4','ZPSA','ZPF9','ZPFH','ZPFI','ZP00','ZP01', 'ZP02')
    AND VBAK~VBELN = TI-DEVOLU
    AND FAKSK = ' '
    ORDER BY VBELN.

    REC-TIPPED1 = VBAK-AUART.
    REC-OV = VBAK-VKORG.
    REC-CANAL = VBAK-VTWEG.
    REC-SECTOR = VBAK-SPART.
    REC-PEDIDO = VBAK-VBELN.
    * REC-POS = VBAP-POSNR.
    * CANTI = VBAP-KWMENG.
    * REC-CANTIDAD = CANTI.

    APPEND REC.
    CLEAR REC.
    ENDSELECT.


    LOOP AT REC.
    IF REC-TIPPED1 = 'ZRE4'.
    TIPPED = 'ZRE5'.
    ENDIF.
    IF REC-TIPPED1 = 'ZPSA'.
    TIPPED = 'ZRE2'.
    ENDIF.
    IF REC-TIPPED1 = 'ZPF9'.
    TIPPED = 'ZRE3'.
    ENDIF.
    IF REC-TIPPED1 = 'ZPFH'.
    TIPPED = 'ZPGH'.
    ENDIF.
    IF REC-TIPPED1 = 'ZPFI'.
    TIPPED = 'ZRE6'.
    ENDIF.
    IF REC-TIPPED1 = 'ZP00'.
    TIPPED = 'ZRE7'.
    ENDIF.
    IF REC-TIPPED1 = 'ZP01'.
    TIPPED = 'ZRE8'.
    ENDIF.
    IF REC-TIPPED1 = 'ZP02'.
    TIPPED = 'ZRE9'.
    ENDIF.

    * Busca Nro. posiciones pedido original

    SELECT MAX( POSNR ) INTO NUMPOS FROM VBAP
    WHERE VBELN = REC-PEDIDO.
    IF NUMPOS = ''.
    WRITE: / REC-PEDIDO, 'NO EXISTE'.
    TIPPED = ''.
    ENDIF.


    PERFORM DYNPRO USING:
    'X' 'SAPMV45A' '0101',
    ' ' 'VBAK-AUART' TIPPED,
    ' ' 'VBAK-VKORG' REC-OV,
    ' ' 'VBAK-VTWEG' REC-CANAL,
    ' ' 'VBAK-SPART' REC-SECTOR,
    ' ' 'BDC_OKCODE' '/00'.

    PERFORM DYNPRO USING:
    'X' 'SAPLV45C' '0100',
    ' ' 'LV45C-VBELN' TI-DEVOLU,
    ' ' 'BDC_CURSOR' 'LV45C-VBELN',
    ' ' 'BDC_OKCODE' '=UEBR'.


    PERFORM DYNPRO USING:
    'X' 'SAPMV45A' '4001',
    ' ' 'VBAK-AUGRU' 'Z05',
    ' ' 'BDC_SUBSCR' 'SAPMV45A 4050SUBSCREEN_BUTTONS',
    ' ' 'RV45A-VBAP_SELKZ(01)' 'X',
    ' ' 'BDC_CURSOR' 'VBAP-POSNR(01)',
    ' ' 'BDC_SUBSCR' 'SAPMV45A 4021SUBSCREEN_HEADER',
    ' ' 'BDC_SUBSCR' 'SAPMV45A 4701PART-SUB',
    ' ' 'BDC_OKCODE' '=PKAU'.

    PERFORM DYNPRO USING:
    'X' 'SAPMV45A' '4003',
    ' ' 'RV45A-KWMENG' TI-CANTI_PEDI,
    ' ' 'BDC_OKCODE' '/EBACK'.


    PERFORM DYNPRO USING:
    'X' 'SAPMV45A' '4001',
    ' ' 'BDC_OKCODE' '=KBES'.


    PERFORM DYNPRO USING:
    'X' 'SAPMV45A' '4002',
    ' ' 'VBKD-IHREZ_E' '0',
    ' ' 'BDC_CURSOR' 'VBKD-IHREZ_E',
    ' ' 'BDC_SUBSCR' 'SAPMV45A 4351SUBSCREEN_BODY',
    ' ' 'BDC_SUBSCR' 'SAPMV45A 4012SUBSCREEN_HEADER',
    ' ' 'BDC_OKCODE' '=SICH'.

    PERFORM INSERTAR_EN_BDC_TAB.
    ENDLOOP.
    ENDFORM.

    *-----------------------------------------------------------------------
    * FORM DYNPRO
    *-----------------------------------------------------------------------
    * Carga la tabla interna bdc con los datos de cada una de las pantallas

    FORM DYNPRO USING DYNBEGIN CAMPO VALOR.
    CLEAR BDC_TAB.
    IF DYNBEGIN = 'X'.
    MOVE: CAMPO TO BDC_TAB-PROGRAM,
    VALOR TO BDC_TAB-DYNPRO,
    'X' TO BDC_TAB-DYNBEGIN.
    ELSE.
    MOVE: CAMPO TO BDC_TAB-FNAM,
    VALOR TO BDC_TAB-FVAL.
    ENDIF.
    APPEND BDC_TAB.
    ENDFORM.

    Muchas Gracias por alguna ayuda o sugerencia.

    Saludos


    AMAM
Trabajando...