MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 07/03/08, 13:57:45
TIN_JD TIN_JD is offline
Junior Member
 
Fecha de Ingreso: nov 2007
Mensajes: 24
Unhappy 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.
*---------------------------------------------------------------------*
Responder Con Cita
  #2  
Viejo 07/03/08, 14:22:13
larmadovr larmadovr is offline
Member
 
Fecha de Ingreso: ene 2008
Localización: Monterrey N.L. México
Mensajes: 77
Smile 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:
cel: (045) 5537406023

"La vida premia la acción"
Responder Con Cita
  #3  
Viejo 07/03/08, 15:47:11
larmadovr larmadovr is offline
Member
 
Fecha de Ingreso: ene 2008
Localización: Monterrey N.L. México
Mensajes: 77
Thumbs up 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:
cel: (045) 5537406023

"La vida premia la acción"
Responder Con Cita
  #4  
Viejo 07/03/08, 16:02:54
ibecerra
 
Mensajes: n/a
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!!!
Responder Con Cita
  #5  
Viejo 07/03/08, 16:42:54
conrad10ar conrad10ar is offline
Banned
 
Fecha de Ingreso: mar 2006
Mensajes: 296
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!
Responder Con Cita
  #6  
Viejo 10/03/08, 10:32:50
vickxo vickxo is offline
Senior Member
 
Fecha de Ingreso: nov 2006
Localización: Madrid, España
Mensajes: 118
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...
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 15:42:18.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web