PDA

Ver la Versión Completa : Rendimiento...


DCErick
18/04/06, 00:56:12
Holas hice la siguiente BAPI y me gustaria saber si se puede hacer que corra mas rapido... :D haber si alguien me ayuda a tener un codigo mas eficiente :D....


FUNCTION zbapi_traslado_selall.
*"----------------------------------------------------------------------
*"*"Interfase local
*" TABLES
*" T_ZEKKO STRUCTURE ZSEKKO OPTIONAL
*" T_ZEKPO STRUCTURE ZSEKPO OPTIONAL
*" T_ZEKET STRUCTURE ZSEKET OPTIONAL
*"----------------------------------------------------------------------


*CABECERA.
SELECT ebeln aedat reswk ekgrp bedat
FROM ekko INTO CORRESPONDING FIELDS OF TABLE t_zekko
WHERE aedat < sy-datum AND bsakz EQ 'T' AND bstyp EQ 'F' AND statu EQ '9' AND ebeln BETWEEN 430000000 AND 4399999999.

**Articulos.
LOOP AT t_zekko.
SELECT ebeln ebelp matnr menge
APPENDING CORRESPONDING FIELDS OF TABLE t_zekpo
FROM ekpo
WHERE loekz NE 'L' AND ebeln = t_zekko-ebeln.
ENDLOOP.

***Tallas
LOOP AT t_zekpo.
SELECT ebeln ebelp j_3asize menge
FROM eket APPENDING CORRESPONDING FIELDS OF TABLE t_zeket
WHERE ebeln = t_zekpo-ebeln AND ebelp EQ t_zekpo-ebelp.
ENDLOOP.




ENDFUNCTION.

sap2006
18/04/06, 15:42:01
Un par de consejos: Utiliza operadores del tipo <,=.... ganaras algo de rendimiento....

Este fragmento:

LOOP AT t_zekko.
SELECT ebeln ebelp matnr menge
APPENDING CORRESPONDING FIELDS OF TABLE t_zekpo
FROM ekpo
WHERE loekz NE 'L' AND ebeln = t_zekko-ebeln.
ENDLOOP.

Mejor substituyelo por este otro:

*Copio el contenido t_ekpo en su auxial
t_zekko_aux[] = t_zekko.
Select ebeln ebelp matnr menge FROM ekpo into table t_zekpo
FOR ALL ENTRIES IN t_zekko_aux
WHERE loekz NE 'L' AND ebeln = t_zekko-ebeln.

De esta manera solo accedes una vez a la BBDD, con esta sentencia obtendras un buen rendimiento. Salu2.

DCErick
19/04/06, 00:02:45
Que bien... Me tome el tiempo de anotar los tiempos jeje..

Mi Codigo.
Tiempo ejec.: 2,464,757 Microsegundos <----En Frio.
Tiempo ejec.: 2,003,064 Microsegundos <----Despues de 5 llamados consecutivos.

Con tu observacion.
Tiempo ejec.: 1,917,061 Microsegundos <----En Frio.
Tiempo ejec.: 1,753,163 Microsegundos<----Despues de 5 llamados consecutivos.


Acomodando los dos Select.....

Tiempo ejec.: 504,501 Microsegundos <----en Frio...
Tiempo ejec.: 453,952 Microsegundos <----Despues de 5 llamados consecutivos.

Gracias por tu ayuda..... Me dejaste libre casi dos segundos a SAP para otra tarea :D..... Eso es oro para nosotros jeej...:p