Autor Tema: URGENTE, AYUDA CON REPORTE Y QUERY EN LAS TABLAS BSEG Y BKPF  (Leído 10893 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado TIN_JD

  • Novato
  • *
  • Mensajes: 15
    • Ver Perfil
URGENTE, AYUDA CON REPORTE Y QUERY EN LAS TABLAS BSEG Y BKPF
« en: 07 de Marzo de 2008, 03:53:40 pm »
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.
*---------------------------------------------------------------------*

Desconectado Carlos

  • Usuario Sr.
  • ****
  • Mensajes: 177
    • Ver Perfil
Re: URGENTE, AYUDA CON REPORTE Y QUERY EN LAS TABLAS BSEG Y BKPF
« Respuesta #1 en: 09 de Marzo de 2008, 07:27:32 pm »
Yo te aconsejo que te olvides de la tabla BSEG y accedas a las tablas BSIK y BSAK que tienes los mismos datos y es mas rápido.

Desconectado nacho_jimf

  • Novato
  • *
  • Mensajes: 6
    • Ver Perfil
Re: URGENTE, AYUDA CON REPORTE Y QUERY EN LAS TABLAS BSEG Y BKPF
« Respuesta #2 en: 14 de Marzo de 2008, 02:45:39 pm »
Es logico que no acabe nunca. Primero haces un select-endselect a una tabla que puede tener millones de registros... eso por si solo tardara una eternidad utiliza un select *. Segundo, cuando tienes todos los datos que necesitas te recorres la tabla 4 veces. Intenta aprovechar al maximo los bucles. Utiliza field-symbols para ahorrarte los modify. Con eso yo creo que ganaras algo de tiempo.