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 12/08/10, 19:02:25
andresf02 andresf02 is offline
Senior Member
 
Fecha de Ingreso: nov 2009
Mensajes: 190
Optimizacion Consulta con LOOP y READ TABLE

Buenas Tardes:

Tengo un escenario en el cual traigo informacion de las tablas EKKO (Doc de Compra).

El reporte imprimi el listado de documentos de Compra con los items y para cada una, muestra el/los los correspondiente(s) documentos MIRO (si los tiene) con el valor del importe.

Al comienzo estaba excluyendo del reporte todos aquellos documentos de compras que nunca hubieran tenido MIRO. El reporte asi se corriera para todo un año completo, nunca pasaba de los 2 minutos en tiempo de ejecucion.

Pero ahora el usuario quiere que se muestren tambien los documentos de compras que no tienen MIRO, y que en la columna MIRO salga para esos documentos el texto "NO CREADO".

Pude resolver el problema pero ahora el tiempo de ejecucion del reporte para 1 año es de 9 minutos.

Les envio el codigo que tuve que realizar para este nuevo requerimiento. Resalto en ROJO el ajuste que hice para que mostrara los Documentos de compra sin MIRO.

Por favor si saben como podria optimizar eso, o si existe alguna forma mejor de preguntar si el doc de compras EBELN esta en la tabla interna IT_EKBE sin realizar el READ TABLE, se los agradeceria.








Gracias!
Responder Con Cita
  #2  
Viejo 12/08/10, 19:46:27
Avatar de mysmb2
mysmb2 mysmb2 is offline
Senior Member
 
Fecha de Ingreso: ene 2007
Localización: Cordoba
Mensajes: 406
Hola,
Proba con ordenar la tabla it_ekbe por ebeln y realizar una lectura binaria. Ademas seria bueno que uses field-symbol en vez de un area de trabajo en los READ y LOOP

En cuanto a las relaciones entre las tablas fijate si hay algun otro campo clave que te sirva para restringir las lecuras.

Espero te siriva.
Saludos!
__________________
Sebastián Chiavia
Responder Con Cita
  #3  
Viejo 16/08/10, 17:35:32
aldape aldape is offline
Senior Member
 
Fecha de Ingreso: dic 2007
Mensajes: 204
Wink

Igual podrias crear una(s) tabla(s) fisicas, para insertarles los datos desde tus tablas en memoria y una vez que esten los datos en disco duro hacer los queries necesarios...

se que hacer un "delete from"->"insert from table"... es muy lento... pero estoy seguro que seran menos de 2 minutos para obtener tu reporte final...

Saludos!
Responder Con Cita
  #4  
Viejo 16/08/10, 18:37:00
Avatar de DavidXD_XD
DavidXD_XD DavidXD_XD is offline
Moderator
 
Fecha de Ingreso: ago 2006
Localización: Lima - Perú
Mensajes: 1,251
Hola, lo que haria seria un ordenamiento por el campo EBELN y realizaria la consulta de esta manera


La sentencia BINARY SEARCH agiliza de manera considerable la busqueda del registro que quieres, y como ese registro que encuentras no t servira para el proceso luego del sy-subrc = 0, adiciono la sentencia TRANSPORTING NO FIELDS para evitar gastar memorias en asignacion y copia del registro en un area de trabajo, espero te ayude ...
__________________
David Carballido Córdova
Responder Con Cita
  #5  
Viejo 16/08/10, 20:00:41
Garces Garces is offline
Senior Member
 
Fecha de Ingreso: ago 2006
Localización: Lima - Perú
Mensajes: 321
Lo que estás haciendo con ese cambio es duplicar la cantidad de lecturas a tu tabla interna...

No necesitas ni siquiera hacer un READ TABLE, puesto que en el LOOP ... WHERE ya estás validando el hecho de que exista o no la entrada buscada... además, el LOOP ya te devuelve el sy-subrc = 0 si encuentra el registro o el sy-subrc = 4 si no existe, por lo que lo único que necesitarías hacer es agregar tus líneas de código validando el valor sy-subrc justo despues de terminar tu LOOP... Con eso debería ser suficiente sin necesidad de utilizar tu READ TABLE...

Lo que sí te recomendaría es que la table que recorres con el LOOP sea tipo SORTED o mejor aún, de tipo HASHED... Esto acelera el prodceso de búsqueda en el loop...

Algo así...

DATA: it_ekko TYPE HASHED TABLE OF ekko WITH UNIQUE KEY ebeln.

Esto último utilízalo sólo en caso la tabla it_ekko la llenas una única vez con un select y luego ya no le hagas inserts ni la modifiques, pues eso puede terminar en un dump si la tabla es tipo HASHED o si la tabla es tipo SORTED y el registro ingresado no está ordenado.
__________________
Miguel Ángel Garcés Ramírez
Responder Con Cita
  #6  
Viejo 18/08/10, 17:08:14
aldape aldape is offline
Senior Member
 
Fecha de Ingreso: dic 2007
Mensajes: 204

Voy a hacer pruebas con esto
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 10:21:27.


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