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 16/01/09, 11:30:24
javibest javibest is offline
Senior Member
 
Fecha de Ingreso: ene 2007
Mensajes: 185
Performance de una select

Tengo un par de selects para recoger documentos contables a partir de :

Sociedad
Fecha de contabilizacion
Cuenta de mayor.

FORM get_data.

SELECT * INTO TABLE gt_bkpf
FROM bkpf
WHERE bukrs IN p_bukrs
AND bstat = space
AND budat IN p_budat
AND blart IN p_blart
AND gjahr IN s_gjahr.

CLEAR gt_bseg.
REFRESH gt_bseg.

LOOP AT gt_bkpf.
SELECT * APPENDING TABLE gt_bseg
FROM bseg
WHERE bukrs = gt_bkpf-bukrs
AND belnr = gt_bkpf-belnr
AND gjahr = gt_bkpf-gjahr
AND hkont IN p_hkont.

ENDLOOP.

ENDFORM. " get_data

el tema es que para una rango de fechas de contabilizacion de 12 meses tarda casi 30 minutos, mientras que la FBL3N tarda 1 minuto.

Alguien sabe como puedo depurar esta consulta a la bbdd para que sea mas rapida?

Gracias
Responder Con Cita
  #2  
Viejo 16/01/09, 12:04:50
ballan ballan is offline
Senior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 671

Lo que ralentiza muchisimo es el

LOOP AT gt_bkpf.
SELECT * APPENDING TABLE gt_bseg
FROM bseg
WHERE bukrs = gt_bkpf-bukrs
AND belnr = gt_bkpf-belnr
AND gjahr = gt_bkpf-gjahr
AND hkont IN p_hkont.

ENDLOOP.

deberias utilizar FOR ALL ENTRIES

SELECT *
APPENDING TABLE gt_bseg
FROM bseg
FOR ALL ENTRIES IN gt_bkpf
WHERE bukrs = gt_bkpf-bukrs
AND belnr = gt_bkpf-belnr
...

Otra cosa que mejorara el rendimiento es que en lugar de hacer SELECT * solo cojas los campos que necesitas y los seleccionas en el mismo orden en el que estan definidos en la tabla
Responder Con Cita
  #3  
Viejo 16/01/09, 15:51:52
oalanis
 
Mensajes: n/a
Post

que tal javibest, si lo que necesitas es solo los datos en tu tabla interna gt_bseg podrías utilizar un JOIN entre ambas tablas, seria algo así:

FORM get_data.

CLEAR gt_bseg.
REFRESH gt_bseg.

SELECT
B~campo1
B~campo2
B~campo3
A~campoX
"... los campos que requieres de tu tabla bseg (B) o de la bkpf (A)
INTO CORRESPONDING FIELDS OF TABLE gt_bseg
FROM bkpf as A
JOIN bseg as B
ON A~bukrs = B~bukrs
AND A~belnr = B~belnr
AND A~gjahr = B~gjahr
WHERE A~bukrs IN p_bukrs
AND A~bstat IN p_bstat
AND A~budat IN p_budat
AND A~blart IN p_blart
AND A~gjahr IN p_gjahr
AND B~hkont IN p_hkont
.
ENDFORM. " get_data


espero te sea de ayuda.
Responder Con Cita
  #4  
Viejo 16/01/09, 16:28:08
Avatar de DavidXD_XD
DavidXD_XD DavidXD_XD is offline
Moderator
 
Fecha de Ingreso: ago 2006
Localización: Lima - Perú
Mensajes: 1,251
Hola oalanis, lo que dices no es del todo cierto ... un buen metodo es el INNER JOIN pero para los casos de tablas cluster como la BSEG se usa los FOR ALL ENTRIES como menciona ballan ... un saludo !!
__________________
David Carballido Córdova
Responder Con Cita
  #5  
Viejo 16/01/09, 17:12:02
oalanis
 
Mensajes: n/a
Talking

Que tal david, tienes razón, se me estaba pasando ese grandisimo detalle una disculpa, por mi respuesta errónea, gracias por corregir.
Responder Con Cita
  #6  
Viejo 16/01/09, 17:12:08
Mauricio Hidalgo Mauricio Hidalgo is offline
Senior Member
 
Fecha de Ingreso: may 2006
Localización: Santiago, Chile
Mensajes: 481
Pero mejor que usar la BSEG es usar las tablas que forman la BSEG, como BSAD, BSID, BSAK, BSIK, entre otras que componen el cluster.

¿Creo o me equivoco?

Saludos
Responder Con Cita
  #7  
Viejo 16/01/09, 19:23:49
Avatar de DavidXD_XD
DavidXD_XD DavidXD_XD is offline
Moderator
 
Fecha de Ingreso: ago 2006
Localización: Lima - Perú
Mensajes: 1,251
Sep, es correcto, si tienes los proveedores, materiales o codigos de clientes a la mano seria mejor con esas tablas y tbm usar el JOIN para agilizar las busquedas
__________________
David Carballido Córdova
Responder Con Cita
  #8  
Viejo 19/01/09, 03:37:18
Avatar de Edd_401
Edd_401 Edd_401 is offline
Senior Member
 
Fecha de Ingreso: may 2007
Mensajes: 119
Coincido con Maurio y tal vez un indice estaria a la tabla bien .

El 'for all entries' ...........
Responder Con Cita
  #9  
Viejo 19/01/09, 07:07:41
bisonye bisonye is offline
Senior Member
 
Fecha de Ingreso: ago 2006
Mensajes: 635

No puedes crear un índice en la bseg, es una tabla cluster.

Por lo que veo quiere imitar el rendimiento de la FBL3N que es el listado de cuentas de mayor. Creo que la mejor solución es utilizar las tablas BSIS y BSAS dependiendo de si se tratan de partidas abiertas o compensadas y olvidarse de la BKPF y la BSEG.

Saludos
Responder Con Cita
  #10  
Viejo 19/01/09, 10:10:59
javibest javibest is offline
Senior Member
 
Fecha de Ingreso: ene 2007
Mensajes: 185
Muchas gracias a todos.

el programa, para un año cuenta y sociedad determinada, tardaba unos 30 minutos.

- Cambiando el loop at gt_bkpf por un all entries , el tiempo ha bajado a 20 minutos

- Cambiando la bseg por la bsis y la bsas, el tiempo ha bajado a menos de un minuto.
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 07:24:05.


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