Help con a VA01

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

    #1

    Help con a VA01

    Hola a todos
    tengo este programa BI de la VA01 pero no se como hacer para que me lea la cantidad de devoluicion de cada posicion.

    El archivo de entrada esta asi:

    11001495726 (Indicador 1 luego nro de pedido)
    4000000000000800212000000000000002 (Indicador de material, material, canti)
    4000000000000800460000000000000003


    Programa:

    REPORT ZBI_PED_DEVOL
    MESSAGE-ID 00.

    TABLES: VBAK.

    DATA:
    W_TRATAMIENTO(1) VALUE 'N',
    XFICHERO LIKE RLGRAP-FILENAME,
    LIN TYPE N, MARCA, W_AVANCE TYPE N,
    W_VAR(25), W_TOTAL-MATERIAL TYPE I,
    NRO_PEDIDO(10),
    W_VAR1(25), W_AVANCE1 TYPE N, W_POSUP(2),
    TCODE_TRANS LIKE TSTC-TCODE VALUE ' ',
    TCODE_PED_CREA LIKE TSTC-TCODE VALUE 'VA01', " Transacción
    TCODE_PED_BORR LIKE TSTC-TCODE VALUE 'VA02', "Borrar Pedido
    W_GRABAR-ANTERIOR(2) VALUE 'NO',
    PED_AUX(4), ORG_AUX(4), MAT_AUX(18), IND_PED,
    TIPPED(4),
    MSG(100), REG(50).

    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.

    DATA REC TYPE REC_T OCCURS 1 WITH HEADER LINE.


    *--
    DATA: BEGIN OF TAB-LISTA-MAT OCCURS 10,
    MATNR(18), " Material de la lista
    END OF TAB-LISTA-MAT.

    *----------ESTRUCTURA PARA LA BDC-DATA -----------------------------*
    DATA: BEGIN OF BDC_TAB OCCURS 0.
    INCLUDE STRUCTURE BDCDATA.
    DATA: END OF BDC_TAB.

    *------------- TABLA INTERNA DONDE SE VOLCARÁ EL FICHERO --------------*

    DATA: BEGIN OF TAB-DATA OCCURS 100,
    DATOS(91), " Registro de extracción
    END OF TAB-DATA.

    *------- TABLA INTERNA DONDE SE VOLCARÁ LOS PEDIDOS OKEY -------------

    DATA: BEGIN OF T_PEDIDO_POSICIONES OCCURS 40000,
    K-VBELN LIKE VBAK-VBELN, " N° de pedido
    VBELN LIKE VBAK-VBELN, " N° de PEDIDO
    POSN TYPE I, "Contador posicion
    END OF T_PEDIDO_POSICIONES.

    *------------- PARAMETROS ---------------------------------------------*
    SELECTION-SCREEN BEGIN OF BLOCK BL3 WITH FRAME TITLE TEXT-003
    NO INTERVALS.

    *PARAMETERS: FICHERO LIKE RLGRAP-FILENAME DEFAULT
    * 'C:\devolucion.txt'.

    PARAMETERS: FICHERO LIKE RLGRAP-FILENAME.

    PARAMETERS: USRNM_P(12) DEFAULT 'DEVOL-PEDIDO'.

    SELECTION-SCREEN END OF BLOCK BL3.

    *------------- PROGRAMA PRINCIPAL -------------------------------------*

    START-OF-SELECTION.

    PERFORM CREAR-BDC-GROUP-PEDIDOS.
    IF SY-SUBRC = 0.
    PERFORM ABRIR-DATA-INPUT.
    PERFORM PROCESAR-TAB-DATA.
    PERFORM BDC-CLOSE-GROUP.
    ENDIF.
    END-OF-SELECTION.

    ************************************************** **********************
    *--- ABRIR LA SESION PARA GENERRA EL JUEGO DE DATOS *******************
    ************************************************** **********************
    FORM CREAR-BDC-GROUP-PEDIDOS.
    CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
    CLIENT = SY-MANDT
    GROUP = USRNM_P
    USER = SY-UNAME
    KEEP = 'X'.
    ENDFORM.
    *-------------------------------------------------------------------
    FORM ABRIR-DATA-INPUT.
    CALL FUNCTION 'UPLOAD'
    EXPORTING
    FILENAME = FICHERO
    FILETYPE = 'DAT'
    TABLES
    DATA_TAB = TAB-DATA
    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 PROCESAR-TAB-DATA.
    LOOP AT TAB-DATA.

    IF TAB-DATA-DATOS+0(1) = '1'. "Nro de Pedido Nuevo
    IF W_GRABAR-ANTERIOR = 'SI'.
    IF IND_PED = 'X'.
    PERFORM GRABAR-REGISTRO.
    ENDIF.
    PERFORM BDC-INSERT-PEDIDOS USING TCODE_PED_CREA.
    W_GRABAR-ANTERIOR = 'NO'.
    ENDIF.
    CLEAR W_TOTAL-MATERIAL.
    PERFORM BUSQUEDA.
    PERFORM GENERAR-DATOS-ORGANIZACION.
    * PERFORM GENERAR-DATOS-CABEZA-DOC.
    PERFORM GENERAR-POSICION-NORMAL. " Se unio al codigo 4
    ENDIF.
    *
    * IF TAB-DATA-DATOS+0(1) = '2'.
    * ADD 1 TO W_TOTAL-MATERIAL.
    * PERFORM GENERAR-POSICION-NORMAL.
    * W_GRABAR-ANTERIOR = 'SI'.
    * ENDIF.
    *
    * IF TAB-DATA-DATOS+0(1) = '3'.
    * ADD 1 TO W_TOTAL-MATERIAL.
    * PERFORM GENERAR-POSICION-NORMAL.
    * W_GRABAR-ANTERIOR = 'SI'.
    * ENDIF.

    IF TAB-DATA-DATOS+0(1) = '4'.
    PERFORM GENERAR-LISTA-MATERIALES.
    W_GRABAR-ANTERIOR = 'SI'.
    ENDIF.


    AT LAST.
    IF W_GRABAR-ANTERIOR = 'SI'.
    IF IND_PED = 'X'.
    PERFORM GRABAR-REGISTRO.
    ENDIF.
    PERFORM BDC-INSERT-PEDIDOS USING TCODE_PED_CREA.
    ENDIF.
    ENDAT.

    ENDLOOP.
    ENDFORM.



    FORM GENERAR-DATOS-ORGANIZACION.

    CLEAR BDC_TAB.
    REFRESH BDC_TAB.

    BDC_TAB-PROGRAM = 'SAPMV45A'.
    BDC_TAB-DYNPRO = '0101'.
    BDC_TAB-DYNBEGIN = 'X'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.

    BDC_TAB-FNAM = 'VBAK-AUART'.
    BDC_TAB-FVAL = TIPPED. "Clase de Pedido
    APPEND BDC_TAB.
    CLEAR BDC_TAB.
    PED_AUX = TIPPED.

    BDC_TAB-FNAM = 'VBAK-VKORG'.
    BDC_TAB-FVAL = REC-OV. "Organizacion de Ventas
    APPEND BDC_TAB.
    CLEAR BDC_TAB.
    ORG_AUX = REC-OV.

    BDC_TAB-FNAM = 'VBAK-VTWEG'.
    BDC_TAB-FVAL = REC-CANAL. "Canal de Distribucion
    APPEND BDC_TAB.
    CLEAR BDC_TAB.

    BDC_TAB-FNAM = 'VBAK-SPART'.
    BDC_TAB-FVAL = REC-SECTOR. "Sector
    APPEND BDC_TAB.
    CLEAR BDC_TAB.


    BDC_TAB-FNAM = 'BDC_OKCODE'.
    BDC_TAB-FVAL = '/0'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.

    ENDFORM.




    FORM GENERAR-POSICION-NORMAL.


    BDC_TAB-PROGRAM = 'SAPLV45C'.
    BDC_TAB-DYNPRO = '0100'.
    BDC_TAB-DYNBEGIN = 'X'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.


    BDC_TAB-FNAM = 'LV45C-VBELN'.
    BDC_TAB-FVAL = TAB-DATA-DATOS+1(10). "Numero del Pedido
    APPEND BDC_TAB.
    CLEAR BDC_TAB.


    BDC_TAB-FNAM = 'BDC_OKCODE'.
    BDC_TAB-FVAL = '=UEBR'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.
    ENDFORM.



    FORM GENERAR-LISTA-MATERIALES.

    BDC_TAB-PROGRAM = 'SAPMV45A'.
    BDC_TAB-DYNPRO = '4001'.
    BDC_TAB-DYNBEGIN = 'X'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.


    BDC_TAB-FNAM = 'BDC_OKCODE'.
    BDC_TAB-FVAL = 'P++ '.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-FNAM = 'VBAK-AUGRU'.
    BDC_TAB-FVAL = 'Z05'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.


    BDC_TAB-FNAM = 'RV45A-VBAP_SELKZ(01)'. " Para que sombree y tome la posicion
    BDC_TAB-FVAL = 'X'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.


    BDC_TAB-FNAM = 'BDC_OKCODE'.
    BDC_TAB-FVAL = '=PKAU'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-PROGRAM = 'SAPMV45A'.
    BDC_TAB-DYNPRO = '4003'.
    BDC_TAB-DYNBEGIN = 'X'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.


    BDC_TAB-FNAM = 'RV45A-KWMENG'.
    BDC_TAB-FVAL = TAB-DATA-DATOS+19(15). "Cantidad del Pedido
    APPEND BDC_TAB.
    CLEAR BDC_TAB.


    BDC_TAB-FNAM = 'BDC_OKCODE'.
    BDC_TAB-FVAL = '/EBACK'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.


    BDC_TAB-PROGRAM = 'SAPMV45A'.
    BDC_TAB-DYNPRO = '4001'.
    BDC_TAB-DYNBEGIN = 'X'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-FNAM = 'BDC_OKCODE'.
    BDC_TAB-FVAL = '=KBES'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-PROGRAM = 'SAPMV45A'.
    BDC_TAB-DYNPRO = '4002'.
    BDC_TAB-DYNBEGIN = 'X'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-FNAM = 'BDC_OKCODE'.
    BDC_TAB-FVAL = '/EBACK'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-FNAM = 'VBKD-IHREZ_E'.
    BDC_TAB-FVAL = '0'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-PROGRAM = 'SAPMV45A'.
    BDC_TAB-DYNPRO = '4001'.
    BDC_TAB-DYNBEGIN = 'X'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-FNAM = 'RV45A-VBAP_SELKZ(02)'. " Para que sombree y tome la posicion
    BDC_TAB-FVAL = 'X'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.


    BDC_TAB-FNAM = 'VBAK-AUGRU'.
    BDC_TAB-FVAL = 'Z05'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-FNAM = 'BDC_OKCODE'.
    BDC_TAB-FVAL = '=PKAU'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-PROGRAM = 'SAPMV45A'.
    BDC_TAB-DYNPRO = '4003'.
    BDC_TAB-DYNBEGIN = 'X'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-FNAM = 'RV45A-KWMENG'.
    BDC_TAB-FVAL = TAB-DATA-DATOS+19(15). "Cantidad del Pedido
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-FNAM = 'BDC_OKCODE'.
    BDC_TAB-FVAL = '/EBACK'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-PROGRAM = 'SAPMV45A'.
    BDC_TAB-DYNPRO = '4001'.
    BDC_TAB-DYNBEGIN = 'X'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.


    BDC_TAB-FNAM = 'BDC_OKCODE'.
    BDC_TAB-FVAL = '=KBES'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-PROGRAM = 'SAPMV45A'.
    BDC_TAB-DYNPRO = '4003'.
    BDC_TAB-DYNBEGIN = 'X'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.


    *
    * BDC_TAB-FNAM = 'VBAP-MATNR(2)'.
    * BDC_TAB-FVAL = TAB-DATA-DATOS+1(18). "Numero del Material
    *


    BDC_TAB-PROGRAM = 'SAPMV45A'.
    BDC_TAB-DYNPRO = '4002'.
    BDC_TAB-DYNBEGIN = 'X'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-FNAM = 'BDC_OKCODE'. " ***
    BDC_TAB-FVAL = '/EBACK'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.



    BDC_TAB-FNAM = 'VBKD-IHREZ_E'.
    BDC_TAB-FVAL = '0'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.


    BDC_TAB-FNAM = 'BDC_OKCODE'.
    BDC_TAB-FVAL = '=SICH'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.

    ENDFORM.




    *FORM GENERAR-POSICION-ESTAMPAS.
    *
    * BDC_TAB-PROGRAM = 'SAPMV45A'.
    * BDC_TAB-DYNPRO = '4001'.
    * BDC_TAB-DYNBEGIN = 'X'.
    * APPEND BDC_TAB.
    * CLEAR BDC_TAB.
    *
    * BDC_TAB-FNAM = 'BDC_OKCODE'.
    * BDC_TAB-FVAL = '/0'.
    * APPEND BDC_TAB.
    * CLEAR BDC_TAB.
    *
    * W_POSUP = W_TOTAL-MATERIAL.
    * W_POSUP = W_POSUP * 10.
    * W_AVANCE1 = W_TOTAL-MATERIAL + LIN + 1.
    *
    * CONCATENATE 'VBAP-MATNR(' W_AVANCE1 ')' INTO W_VAR1.
    * BDC_TAB-FNAM = W_VAR1.
    * BDC_TAB-FVAL = TAB-DATA-DATOS+1(18). "Numero del Material
    * APPEND BDC_TAB.
    * CLEAR BDC_TAB.
    *
    * CONCATENATE 'RV45A-KWMENG('W_AVANCE1 ')' INTO W_VAR1.
    * BDC_TAB-FNAM = W_VAR1.
    * BDC_TAB-FVAL = TAB-DATA-DATOS+19(15). "Cantidad del Pedido
    * APPEND BDC_TAB.
    * CLEAR BDC_TAB.
    *
    *
    * BDC_TAB-FNAM = 'BDC_OKCODE'.
    * BDC_TAB-FVAL = '/0 '.
    * APPEND BDC_TAB.
    * CLEAR BDC_TAB.
    *
    *ENDFORM.
    *


    FORM GRABAR-REGISTRO.

    BDC_TAB-PROGRAM = 'SAPMV45A'.
    BDC_TAB-DYNPRO = '4001'.
    BDC_TAB-DYNBEGIN = 'X'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.

    BDC_TAB-FNAM = 'BDC_OKCODE'.
    BDC_TAB-FVAL = '/11'.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.

    ENDFORM.



    FORM BDC-INSERT-PEDIDOS USING TCODE_TRANS.
    CALL FUNCTION 'BDC_INSERT'
    EXPORTING
    TCODE = TCODE_TRANS
    TABLES
    DYNPROTAB = BDC_TAB.

    ENDFORM.



    FORM BDC-CLOSE-GROUP.
    CALL FUNCTION 'BDC_CLOSE_GROUP'.
    ENDFORM.


    FORM busqueda.

    NRO_PEDIDO = TAB-DATA-DATOS+1(10).

    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 VBELN = NRO_PEDIDO
    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.


    CASE VBAK-AUART.
    WHEN 'ZRE4'.
    TIPPED = 'ZRE5'.
    IND_PED = 'X'.
    WHEN 'ZPSA'.
    TIPPED = 'ZRE2'.
    IND_PED = 'X'.
    WHEN 'ZPF9'.
    TIPPED = 'ZRE3'.
    IND_PED = 'X'.
    WHEN 'ZPFH'.
    TIPPED = 'ZPGH'.
    IND_PED = 'X'.
    WHEN 'ZPFI'.
    TIPPED = 'ZRE6'.
    IND_PED = 'X'.
    WHEN 'ZP00'.
    TIPPED = 'ZRE7'.
    IND_PED = 'X'.
    WHEN 'ZP01'.
    TIPPED = 'ZRE8'.
    IND_PED = 'X'.
    WHEN 'ZP02'.
    TIPPED = 'ZRE9'.
    IND_PED = 'X'.
    ENDCASE.
    ENDSELECT.
    ENDFORM.

    Gracias de Antemano.

    Saludos

    AMAM
Trabajando...