Urgente, Ayuda Con Reporte Y Query En Las Tablas Bseg Y Bkpf

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • TIN_JD
    Junior Member
    • nov
    • 24

    #1

    Urgente, Ayuda Con Reporte Y Query En Las Tablas Bseg Y Bkpf

    HOLA ATODOS
    HOLA NESESITO AYUDOA CON UN PROCESO DE EL QUERY LOQ UE PASA ES QUE SE TARDA MUCHISIMO EN HACER EL QUERY, Y NECITO QUE TARDE COMO LA TRANSACCION FBL1N QUE SI COMPARAMOS LA ESA TRANSACCION HACE Y MUESTRA EL RESULTADO BIEN Y POR MUCHO EN 10 MINUTOS Y EL MIO NUNCA ACABA PERO SI LEE LOS DATOS.
    AYUDA NO SE QUE MAS HACER.

    DE ANTEMANO MUCHAS GRACIAS.


    REPORT ZRFI_ANT_SAL_PROV LINE-SIZE 163 NO STANDARD PAGE HEADING.
    TABLES: BKPF,
    BSEG,
    LFA1.
    *----------------------------------------------------------------------*
    * Definición de Parámetros y Select-Options *
    *----------------------------------------------------------------------*
    SELECTION-SCREEN BEGIN OF BLOCK sele WITH FRAME TITLE text-t02.
    PARAMETERS: S_BUKRS LIKE BKPF-BUKRS OBLIGATORY default 'AL00',
    S_BELNR LIKE BKPF-BELNR default '*',
    S_LIFNR LIKE BSEG-LIFNR MATCHCODE object ZSH_001
    default '*',
    S_BLART LIKE BKPF-BLART default 'PL',
    S_GJAHR LIKE BKPF-GJAHR,
    S_DATUM LIKE SY-DATUM OBLIGATORY default SY-DATUM.
    SELECTION-SCREEN END OF BLOCK sele.
    *----------------------------------------------------------------------*
    * Definición de Tablas Internas y Estructuras *
    *----------------------------------------------------------------------*
    DATA: BEGIN OF T_DATOS OCCURS 0,
    BUKRS LIKE BSEG-BUKRS, "COMPANY
    ZUONR LIKE BSEG-ZUONR, "ASSIGMENT
    XOPVW LIKE BSEG-XOPVW, "DOCUMENTO ABIERO O NO
    WRBTR LIKE BSEG-WRBTR, "MONTO REAL EN LA FACTURA
    MWSKZ LIKE BSEG-MWSKZ, "APLICACION DE IVA?
    LIFNR LIKE BSEG-LIFNR, "PROVEEDOR
    BELNR LIKE BSEG-BELNR, "NO. DOCUMENTO GENERADO POR SAP
    BLART LIKE BKPF-BLART, "TIPO DE DOCUMENTO
    BLDAT LIKE BKPF-BLDAT, "FECHA DE CARGA EN SAP
    WAERS LIKE BKPF-WAERS, "TIPO DE MONEDA EN LA FACTURA
    ZFBDT LIKE BSIK-ZFBDT, "FECHA EN FACTURA
    ZTERM LIKE BSIK-ZTERM, "TERMINOS DE PAGO
    NAME1 LIKE LFA1-NAME1, "DESCRIPCION PROVEEDOR
    NETDU LIKE BKPF-BLDAT, "FECHA LIMITE DE PAGO
    DIASV LIKE BKPF-GJAHR, "DIAS VENCIDOS
    SATOT LIKE BSEG-WRBTR, "TOTAL DE DOCUMENTO
    END OF T_DATOS.
    DATA: LT_DATOS LIKE LINE OF T_DATOS.
    DATA: L_OUT_DATE LIKE SY-DATUM.
    DATA: DIFF_D TYPE I.
    *----------------------------------------------------------------------*
    * Variables *
    *----------------------------------------------------------------------*
    DATA: CONTADOR TYPE I.
    DATA: CONTADOR2 TYPE I.
    DATA: CONTADOR3 TYPE I.
    DATA: CONTADOR4 TYPE I.
    *----------------------------------------------------------------------*
    * Evento Iniatialization *
    *----------------------------------------------------------------------*
    START-OF-SELECTION.
    PERFORM OBTENER_DATOS.
    PERFORM IMPRIMIR_DATOS.
    *----------------------------------------------------------------------*
    * Funciones *
    *----------------------------------------------------------------------*

    *----------------------------------------------------------------------*
    * Forms *
    *----------------------------------------------------------------------*
    * Form OBTENER_DATOS *
    *----------------------------------------------------------------------*
    FORM OBTENER_DATOS.
    SELECT BUKRS ZUONR XOPVW WRBTR MWSKZ LIFNR BELNR
    INTO T_DATOS
    FROM BSEG
    WHERE BUKRS EQ S_BUKRS
    AND LIFNR = S_LIFNR
    AND XOPVW = 'X'.
    *AND BELNR EQ S_BELNR.
    APPEND T_DATOS.
    ENDSELECT.
    **----------------------------------------------------------------------
    LOOP AT T_DATOS.
    CONTADOR = SY-TABIX.
    SELECT SINGLE BLART BLDAT WAERS
    INTO (T_DATOS-BLART, T_DATOS-BLDAT, T_DATOS-WAERS)
    FROM BKPF
    WHERE BUKRS EQ S_BUKRS
    AND BLART EQ S_BLART
    AND BELNR EQ T_DATOS-BELNR.
    MODIFY T_DATOS INDEX CONTADOR.
    ENDLOOP.
    **----------------------------------------------------------------------
    LOOP AT T_DATOS.
    CONTADOR2 = SY-TABIX.
    SELECT SINGLE ZFBDT ZTERM
    INTO (T_DATOS-ZFBDT, T_DATOS-ZTERM)
    FROM BSIK
    WHERE BELNR EQ T_DATOS-BELNR.
    MODIFY T_DATOS INDEX CONTADOR2.
    ENDLOOP.
    **----------------------------------------------------------------------
    LOOP AT T_DATOS.
    CONTADOR3 = SY-TABIX.
    SELECT SINGLE NAME1
    INTO (T_DATOS-NAME1)
    FROM LFA1
    WHERE LIFNR EQ T_DATOS-LIFNR.
    MODIFY T_DATOS INDEX CONTADOR3.
    ENDLOOP.
    **----------------------------------------------------------------------
    LOOP AT T_DATOS.
    CONTADOR4 = SY-TABIX.
    *PERFORM ADD_TIME.
    PERFORM DAYS.
    *T_DATOS-NETDU = L_OUT_DATE.
    T_DATOS-DIASV = DIFF_D.
    T_DATOS-SATOT = T_DATOS-WRBTR.
    MODIFY T_DATOS INDEX CONTADOR4.
    ENDLOOP.
    ENDFORM.
    *----------------------------------------------------------------------*
    * Form IMPRIMIR_DATOS *
    *----------------------------------------------------------------------*
    FORM IMPRIMIR_DATOS.
    WRITE: /5 'REPORTE DE PAGO A PROVEEDORES' COLOR 1 ON.
    WRITE: 135 'FECHA ACTUAL : ' INVERSE COLOR 6, SY-DATUM INVERSE COLOR 6,
    SY-ULINE.
    SKIP 2.
    * WRITE: /2 'COMPAÑIA',
    * 'PROVEEDOR',
    * 'NOMBRE PROVEEDOR',
    * 'ASSIGMENT',
    * 'NO. DOC',
    * 'TIPO DE DOC',
    * 'POSTING DATE',
    * 'MONTO EN FACT',
    * 'MONEDA FACT',
    * 'IVA',
    * 'FECHA EN FACT',
    * 'TERMINOS',
    * 'FECHA LIMITE',
    * 'DIAS VENCIDOS',
    * 'TOTAL DOC'.
    LOOP AT T_DATOS.
    SORT T_DATOS BY LIFNR.
    IF T_DATOS-LIFNR <> '00000'.
    MOVE T_DATOS TO LT_DATOS.
    *CADA CAMBIO DE PROVEEDOR
    *AT NEW LIFNR.
    WRITE: /2 LT_DATOS-BUKRS,
    8 LT_DATOS-LIFNR,
    15 LT_DATOS-NAME1,
    /2 LT_DATOS-ZUONR,
    LT_DATOS-BELNR,
    * LT_DATOS-XOPVW,
    LT_DATOS-BLART,
    LT_DATOS-BLDAT,
    LT_DATOS-WRBTR,
    LT_DATOS-WAERS,
    LT_DATOS-MWSKZ,
    LT_DATOS-ZFBDT,
    LT_DATOS-ZTERM,
    LT_DATOS-NETDU,
    LT_DATOS-DIASV,
    LT_DATOS-SATOT INVERSE COLOR 2.
    SKIP 1.
    *ENDAT.
    **AL FINAL DE CADA PROVEEDOR
    AT END OF LIFNR.
    SUM.
    WRITE: /78 'MONTO TOTAL DEL PROVEEDOR:',
    104 LT_DATOS-WRBTR COLOR 2 ON.
    SKIP 1.
    ENDAT.
    ***AL FINAL DE LOS PROVEEDORES
    **AT LAST.
    **SUM.
    **SKIP 2.
    **WRITE: /80 'M O N T O T O T A L A P A G A R:' INVERSE COLOR 6,
    **120 ZAV_REPORTE-MONTO INVERSE COLOR 6.
    **ENDAT.
    ENDIF.
    ENDLOOP.
    ENDFORM.
    *---------------------------------------------------------------------*
    * Form de FUNCION PARA AGREGAR LOS TERMINOS O DIAS DE PLAZO ALA FECHA *
    * DE FACTURACION *
    *---------------------------------------------------------------------*
    FORM ADD_TIME.
    CALL FUNCTION 'ADD_TIME_TO_DATE'
    EXPORTING
    I_IDATE = T_DATOS-ZFBDT
    I_TIME = T_DATOS-ZTERM
    I_IPRKZ = '' " ''=Day, 1=Week, 2=Month ,3 = Year
    IMPORTING
    O_IDATE = L_OUT_DATE
    EXCEPTIONS
    INVALID_PERIOD = 01
    INVALID_ROUND_UP_RULE = 02
    INTERNAL_ERROR = 03 .
    ENDFORM.
    *---------------------------------------------------------------------*
    * Form FUNCION PARA DETERMINAR CUANTOS DIAS LLEVA VENCIDA LA FACTURA *
    *---------------------------------------------------------------------*
    FORM DAYS.
    CALL FUNCTION 'DAYS_BETWEEN_TWO_DATES'
    EXPORTING
    I_DATUM_BIS = S_DATUM
    I_DATUM_VON = T_DATOS-ZFBDT
    IMPORTING
    E_TAGE = DIFF_D
    EXCEPTIONS
    DAYS_METOD_NOT_DEFINED = 1
    OTHERS = 2.
    ENDFORM.
    *---------------------------------------------------------------------*
  • larmadovr
    Member
    • ene
    • 77

    #2
    Hola:

    En tu query

    FORM OBTENER_DATOS.
    SELECT BUKRS ZUONR XOPVW WRBTR MWSKZ LIFNR BELNR
    INTO T_DATOS
    FROM BSEG
    WHERE BUKRS EQ S_BUKRS
    AND LIFNR = S_LIFNR
    AND XOPVW = 'X'.
    *AND BELNR EQ S_BELNR.
    APPEND T_DATOS.
    ENDSELECT.


    cambialo por algo así

    FORM OBTENER_DATOS.

    SELECT BUKRS ZUONR XOPVW WRBTR MWSKZ LIFNR BELNR
    INTO TABLE T_DATOS
    FROM BSEG
    WHERE BUKRS EQ S_BUKRS
    AND LIFNR = S_LIFNR
    AND XOPVW = 'X'.

    NOTA 1: Revisa que la tabla BSEG tenga los campos que estas pidiendo en el mismo orden que estan declarados en T_DATOS

    Despues de esa prueba, si no te convence el performance aún, me avisas y sigo analizando tu codigo para ver que más podemos mejorar.
    I.S.C.T. Luis Armando Valdez Rodríguez
    Consultor ABAP
    correo: larmandovr@hotmail.com
    cel: (045) 5537406023

    "La vida premia la acción"

    Comentario

    • larmadovr
      Member
      • ene
      • 77

      #3
      ok, aqui va más performance.

      Uno de los principales problemas en los tiempos de un reporte es la cantidad de veces que sea accesa a la BD, y como tu tenías un ciclo el cual contenía select's pues lo hacía lentísimo, pero aquí te mando un ejemplo de tu mismo código pero con otra lógica en el proceso de la información en la cuál primero traemos los datos y después ordenamos de acuerdo a que tu tabla t_datos se poble.

      Es más barato trabajar en abap que accesar a la BD.

      Espero que baje mucho el tiempo, y para eso puedes entrar a la SE30 y desde ahí ejecutar tu transacción, y mides los tiempos antes y despues de el cambio que aqui anexo:

      REPORT ZRFI_ANT_SAL_PROV LINE-SIZE 163 NO STANDARD PAGE HEADING.
      TABLES: BKPF,
      BSEG,
      LFA1.
      *----------------------------------------------------------------------*
      * Definición de Parámetros y Select-Options *
      *----------------------------------------------------------------------*
      SELECTION-SCREEN BEGIN OF BLOCK sele WITH FRAME TITLE text-t02.
      PARAMETERS: S_BUKRS LIKE BKPF-BUKRS OBLIGATORY default 'AL00',
      S_BELNR LIKE BKPF-BELNR default '*',
      S_LIFNR LIKE BSEG-LIFNR MATCHCODE object ZSH_001
      default '*',
      S_BLART LIKE BKPF-BLART default 'PL',
      S_GJAHR LIKE BKPF-GJAHR,
      S_DATUM LIKE SY-DATUM OBLIGATORY default SY-DATUM.
      SELECTION-SCREEN END OF BLOCK sele.
      *----------------------------------------------------------------------*
      * Definición de Tablas Internas y Estructuras *
      *----------------------------------------------------------------------*
      DATA: BEGIN OF T_BSEG OCCURS 0,
      BUKRS LIKE BSEG-BUKRS,
      BELNR LIKE BSEG-BELNR,
      MWSKZ LIKE BSEG-MWSKZ,
      WRBTR LIKE BSEG-WRBTR,
      ZUONR LIKE BSEG-ZUONR,
      XOPVW LIKE BSEG-XOPVW,
      LIFNR LIKE BSEG-LIFNR,
      END OF T_BSEG.

      DATA: BEGIN OF T_BKPF_BSIK OCCURS 0,
      BELNR LIKE BKPF-BELNR,
      BLART LIKE BKPF-BLART,
      BLDAT LIKE BKPF-BLDAT,
      WAERS LIKE BKPF-WAERS,
      ZFDBT LIKE BSIK-ZFBDT,
      ZTERM LIKE BSIK-ZTERM,
      END OF T_BKPF_BSIK.

      DATA: BEGIN OF T_LFA1 OCCURS 0,
      LIFNR LIKE LFA1-LIFNR,
      NAME1 LIKE LFA1-NAME1,
      END OF T_LFA1.

      DATA: BEGIN OF T_DATOS OCCURS 0,
      BUKRS LIKE BSEG-BUKRS, "COMPANY
      ZUONR LIKE BSEG-ZUONR, "ASSIGMENT
      XOPVW LIKE BSEG-XOPVW, "DOCUMENTO ABIERO O NO
      WRBTR LIKE BSEG-WRBTR, "MONTO REAL EN LA FACTURA
      MWSKZ LIKE BSEG-MWSKZ, "APLICACION DE IVA?
      LIFNR LIKE BSEG-LIFNR, "PROVEEDOR
      BELNR LIKE BSEG-BELNR, "NO. DOCUMENTO GENERADO POR SAP
      BLART LIKE BKPF-BLART, "TIPO DE DOCUMENTO
      BLDAT LIKE BKPF-BLDAT, "FECHA DE CARGA EN SAP
      WAERS LIKE BKPF-WAERS, "TIPO DE MONEDA EN LA FACTURA
      ZFBDT LIKE BSIK-ZFBDT, "FECHA EN FACTURA
      ZTERM LIKE BSIK-ZTERM, "TERMINOS DE PAGO
      NAME1 LIKE LFA1-NAME1, "DESCRIPCION PROVEEDOR
      NETDU LIKE BKPF-BLDAT, "FECHA LIMITE DE PAGO
      DIASV LIKE BKPF-GJAHR, "DIAS VENCIDOS
      SATOT LIKE BSEG-WRBTR, "TOTAL DE DOCUMENTO
      END OF T_DATOS.

      DATA: LT_DATOS LIKE LINE OF T_DATOS.
      DATA: L_OUT_DATE LIKE SY-DATUM.
      DATA: DIFF_D TYPE I.
      *----------------------------------------------------------------------*
      * Variables *
      *----------------------------------------------------------------------*
      DATA: CONTADOR TYPE I.
      DATA: CONTADOR2 TYPE I.
      DATA: CONTADOR3 TYPE I.
      DATA: CONTADOR4 TYPE I.
      *----------------------------------------------------------------------*
      * Evento Iniatialization *
      *----------------------------------------------------------------------*
      START-OF-SELECTION.
      PERFORM OBTENER_DATOS.
      PERFORM IMPRIMIR_DATOS.
      *----------------------------------------------------------------------*
      * Funciones *
      *----------------------------------------------------------------------*

      *----------------------------------------------------------------------*
      * Forms *
      *----------------------------------------------------------------------*
      * Form OBTENER_DATOS *
      *----------------------------------------------------------------------*
      Form OBTENER_DATOS.

      * 1.- Obtiene informacion de BSEG
      SELECT BUKRS BELNR MWSKZ WRBTR ZUONR XOPVW LIFNR
      INTO TABLE T_BSEG
      FROM BSEG
      WHERE BUKRS EQ S_BUKRS
      AND BELNR EQ S_BELNR
      AND LIFNR EQ S_LIFNR
      AND XOPVW EQ 'X'.

      * 2.- Obtiene informacion de BKPF y de BSIK basado en BSEG
      IF SY-SUBRC EQ 0. " Si hay registros en BSEG

      SELECT BKPF~BELNR BKPF~BLART BKPF~BLDAT BKPF~WAERS
      BSIK~ZFBDT BSIK~ZTERM
      INTO TABLE T_BKPF_BSIK
      FROM BKPF
      INNER JOIN BSIK
      ON BKPF~BUKRS EQ BSIK~BUKRS
      AND BKPF~BELNR EQ BSIK~BELNR
      AND BKPF~GJAHR EQ BSIK~GJAHR
      FOR ALL ENTRIES IN T_BSEG
      WHERE BKPF~BUKRS EQ T_BSEG-BUKRS
      AND BKPF~BELNR EQ T_BSEG-BELNR
      AND BKPF~GJAHR EQ S_GJAHR
      AND BKPF~BLART EQ S_BLART.

      * 3.- Obtiene información de LFA1 basado en BSEG
      SELECT LIFNR NAME1
      INTO TABLE T_LFA1
      FROM LFA1
      FOR ALL ENTRIES IN T_BSEG
      WHERE LIFNR EQ T_BSEG-LIFNR.

      ENDIF.

      *----------------------------------------------------------------------*
      * Procesa datos
      *----------------------------------------------------------------------*

      * Recorre t_bseg para poblar t_datos
      LOOP AT T_BSEG.

      MOVE: T_BSEG-BUKRS TO T_DATOS-BUKRS,
      T_BSEG-ZUONR TO T_DATOS-ZUONR,
      T_BSEG-XOPVW TO T_DATOS-XOPVW,
      T_BSEG-WRBTR TO T_DATOS-WRBTR,
      T_BSEG-MWSKZ TO T_DATOS-MWSKZ,
      T_BSEG-LIFNR TO T_DATOS-LIFNR,
      T_BSEG-BELNR TO T_DATOS-BELNR,
      T_BSEG-WRBTR TO T_DATOS-WRBTR.

      * Lee de la tabla T_BKPF_BSIK datos que faltan para t_datos
      READ TABLE T_BKPF_BSIK WITH KEY BELNR = T_BSEG-BELNR.
      IF SY-SUBRC EQ 0.
      MOVE: T_BKPF_BSIK-BLART TO T_DATOS-BLART,
      T_BKPF_BSIK-BLDAT TO T_DATOS-BLDAT,
      T_BKPF_BSIK-WAERS TO T_DATOS-WAERS,
      T_BKPF_BSIK-BLDAT TO T_DATOS-BLDAT,
      T_BKPF_BSIK-ZTERM TO T_DATOS-ZTERM.
      ENDIF.

      * Lee de la tabla T_LFA1 datos que faltan para t_datos
      READ TABLE T_LFA1 WITH KEY LIFNR = T_BSEG-LIFNR.
      IF SY-SUBRC EQ 0.
      MOVE: T_LFA1-NAME1 TO T_DATOS-NAME1.
      ENDIF.

      APPEND T_DATOS. " Agrega registros compleatados
      CLEAR: T_BSEG, T_BKPF_BSIK, T_LFA1. " Limpia cabeceras

      ENDLOOP.

      **----------------------------------------------------------------------
      LOOP AT T_DATOS.
      CONTADOR4 = SY-TABIX.
      *PERFORM ADD_TIME.
      PERFORM DAYS.
      *T_DATOS-NETDU = L_OUT_DATE.
      T_DATOS-DIASV = DIFF_D.
      T_DATOS-SATOT = T_DATOS-WRBTR.
      MODIFY T_DATOS INDEX CONTADOR4.
      ENDLOOP.
      ENDFORM.
      *----------------------------------------------------------------------*
      * Form IMPRIMIR_DATOS *
      *----------------------------------------------------------------------*
      FORM IMPRIMIR_DATOS.
      WRITE: /5 'REPORTE DE PAGO A PROVEEDORES' COLOR 1 ON.
      WRITE: 135 'FECHA ACTUAL : ' INVERSE COLOR 6, SY-DATUM INVERSE COLOR 6,
      SY-ULINE.
      SKIP 2.
      * WRITE: /2 'COMPAÑIA',
      * 'PROVEEDOR',
      * 'NOMBRE PROVEEDOR',
      * 'ASSIGMENT',
      * 'NO. DOC',
      * 'TIPO DE DOC',
      * 'POSTING DATE',
      * 'MONTO EN FACT',
      * 'MONEDA FACT',
      * 'IVA',
      * 'FECHA EN FACT',
      * 'TERMINOS',
      * 'FECHA LIMITE',
      * 'DIAS VENCIDOS',
      * 'TOTAL DOC'.
      LOOP AT T_DATOS.
      SORT T_DATOS BY LIFNR.
      IF T_DATOS-LIFNR <> '00000'.
      MOVE T_DATOS TO LT_DATOS.
      *CADA CAMBIO DE PROVEEDOR
      *AT NEW LIFNR.
      WRITE: /2 LT_DATOS-BUKRS,
      8 LT_DATOS-LIFNR,
      15 LT_DATOS-NAME1,
      /2 LT_DATOS-ZUONR,
      LT_DATOS-BELNR,
      * LT_DATOS-XOPVW,
      LT_DATOS-BLART,
      LT_DATOS-BLDAT,
      LT_DATOS-WRBTR,
      LT_DATOS-WAERS,
      LT_DATOS-MWSKZ,
      LT_DATOS-ZFBDT,
      LT_DATOS-ZTERM,
      LT_DATOS-NETDU,
      LT_DATOS-DIASV,
      LT_DATOS-SATOT INVERSE COLOR 2.
      SKIP 1.
      *ENDAT.
      **AL FINAL DE CADA PROVEEDOR
      AT END OF LIFNR.
      SUM.
      WRITE: /78 'MONTO TOTAL DEL PROVEEDOR:',
      104 LT_DATOS-WRBTR COLOR 2 ON.
      SKIP 1.
      ENDAT.
      ***AL FINAL DE LOS PROVEEDORES
      **AT LAST.
      **SUM.
      **SKIP 2.
      **WRITE: /80 'M O N T O T O T A L A P A G A R:' INVERSE COLOR 6,
      **120 ZAV_REPORTE-MONTO INVERSE COLOR 6.
      **ENDAT.
      ENDIF.
      ENDLOOP.
      ENDFORM.
      *---------------------------------------------------------------------*
      * Form de FUNCION PARA AGREGAR LOS TERMINOS O DIAS DE PLAZO ALA FECHA *
      * DE FACTURACION *
      *---------------------------------------------------------------------*
      FORM ADD_TIME.
      CALL FUNCTION 'ADD_TIME_TO_DATE'
      EXPORTING
      I_IDATE = T_DATOS-ZFBDT
      I_TIME = T_DATOS-ZTERM
      I_IPRKZ = '' " ''=Day, 1=Week, 2=Month ,3 = Year
      IMPORTING
      O_IDATE = L_OUT_DATE
      EXCEPTIONS
      INVALID_PERIOD = 01
      INVALID_ROUND_UP_RULE = 02
      INTERNAL_ERROR = 03 .
      ENDFORM.
      *---------------------------------------------------------------------*
      * Form FUNCION PARA DETERMINAR CUANTOS DIAS LLEVA VENCIDA LA FACTURA *
      *---------------------------------------------------------------------*
      FORM DAYS.
      CALL FUNCTION 'DAYS_BETWEEN_TWO_DATES'
      EXPORTING
      I_DATUM_BIS = S_DATUM
      I_DATUM_VON = T_DATOS-ZFBDT
      IMPORTING
      E_TAGE = DIFF_D
      EXCEPTIONS
      DAYS_METOD_NOT_DEFINED = 1
      OTHERS = 2.
      ENDFORM.
      *---------------------------------------------------------------------*


      Recibe un cordial saludo.
      I.S.C.T. Luis Armando Valdez Rodríguez
      Consultor ABAP
      correo: larmandovr@hotmail.com
      cel: (045) 5537406023

      "La vida premia la acción"

      Comentario

      • ibecerra

        #4
        Q tal , creo q estas dando demasiado vuelta al asunto, si lo q necesitas es obtener las partidar de los provedores abiertas y canceladas solo debes accesar a la bsik y bsak
        mas no a la bseg ya que es una tabla cluster y tiene toda la informacion de los asientos contables. Bueno el funcional a cargo deberia de saber esto.
        te doy los querys con los que deberias de obtener la informacion tal como lo hace la fbl1n
        *** con esta capturas las partidas pendientes
        SELECT
        bukrs lifnr zuonr umsks
        umskz augdt gjahr belnr
        buzei budat bldat waers
        xblnr blart bschl shkzg
        dmbtr wrbtr zfbdt zbd1t
        zlsch zlspr hbkid rebzg
        rebzj rebzz xzahl augbl
        SGTXT QBSHB
        FROM bsik
        INTO TABLE it_bsik
        WHERE
        * lifnr EQ W_LIFNR
        LIFNR IN R_LIFNR
        AND bukrs IN s_bukrs
        AND GJAHR BETWEEN '0001' AND '9999'
        AND bldat > fecini
        AND BUDAT <= FECFIN
        AND xblnr NE Wxblnr "regulariz retención temporal
        AND blart IN r_blart1.
        SORT it_bsik BY bukrs belnr gjahr buzei.
        *---------------------------------------
        * con esto capturas las partidas canceladas
        SELECT
        bukrs lifnr umsks umskz
        augdt augbl zuonr gjahr
        belnr buzei budat bldat
        waers xblnr blart bschl
        shkzg dmbtr wrbtr zfbdt
        zbd1t zlsch zlspr hbkid
        rebzg rebzj rebzz xzahl
        SGTXT QBSHB
        FROM bsak
        INTO TABLE it_bsak
        WHERE bukrs IN s_bukrs
        * AND lifnr EQ W_LIFNR
        AND LIFNR IN R_LIFNR
        AND AUGDT BETWEEN FECINI AND FECFIN
        AND xblnr NE Wxblnr
        AND blart IN r_blart1
        AND xzahl NE 'X'.

        y si necesitas algunos campos de la bseg q no tengan la bsik o bsak
        vas con el campo llave a la bseg. y listo!!!

        Comentario

        • conrad10ar
          Banned
          • mar
          • 296

          #5
          Completamente de acuerdo con ibecerra. El problema es que muchas veces los funcionales realmente no tienen ni idea y tiran la búsqueda en la BSEG porque es la única que conocen.

          Saludos a todos!

          Comentario

          • vickxo
            Senior Member
            • nov
            • 118

            #6
            Solo para complementar...

            Lo mas dificil en la programacion ABAP para mi gusto es hacer que el acceso a la BD sea el mas optimo para ello en su momento me sugieron lo siguiente y yo lo sugiero tambien:
            1. Al accesar a alguna tabla siempre hay que hacerlo por los indices, en el acceso a la BSEG que haces no lo estas usando por lo que eso hace mas lento el acceso a la misma.

            2. Evita los select single, esos implican una lectura a BD por solo un registro, meterlos dentro de un loop es mala idea por haces n lecturas a la misma, solucuon? Hace un solo select carga la informacion a una tabla interna y has un read table.

            3. Evita los selec dentro de un loop, rompes con la programacion estructurada, primero debes de obtenerlos datos que despues procesaras con ABAP.

            4. En memoria puedes hacer lo que se te antoje, cuidando claro no consumir muchos recursos.

            Estos son los basicos yo creo, saludos .
            el tema esta en hacer la pregunta correcta...

            Comentario

            Trabajando...