Ver Mensaje Individual
  #1  
Viejo 03/04/11, 05:01:39
edgg edgg is offline
Junior Member
 
Fecha de Ingreso: mar 2011
Mensajes: 10
Ayuda!!! Performance

Buen día.
Tengo un reporte ALV, en problema está en que toma mucho tiempo para realizar el reporte (donde toma más tiempo, es en la lectura de la MSEG: 10 millones y sigue en aumento), qué me recomendarían para mejorar. Les pongo el código. Les agradezco de antemano.
concatenate P_GJAHR '.' P_MONAT '.' '01' into v_fecha3.


data: data type DATE8,
data2 type DATE8,
sigo(1) type c.

sigo = 's'.
while sigo eq 's'.
replace '.' with '' into v_fecha3.
if sy-subrc ne 0.
sigo = 'n'.
endif.
endwhile.
condense v_fecha3 NO-GAPS.
data = v_fecha3. "Fecha actual


CALL FUNCTION 'ADD_TIME_TO_DATE'
EXPORTING
i_idate = data
i_time = '-1' "Número de meses a sumar
i_iprkz = '2'
I_RDMHD = '-' " Aquí se le indica el signo + o -
IMPORTING
o_idate = v_fecha "Fecha mes anterior
EXCEPTIONS
invalid_period = 1
invalid_round_up_rule = 2
internal_error = 3
OTHERS = 4.

CALL FUNCTION 'ADD_TIME_TO_DATE'
EXPORTING
i_idate = data
i_time = '1' "Número de meses a sumar
i_iprkz = '2'
I_RDMHD = '-' " Aquí se le indica el signo + o -
IMPORTING
o_idate = v_fecha2 " Fecha mes posterior
EXCEPTIONS
invalid_period = 1
invalid_round_up_rule = 2
internal_error = 3
OTHERS = 4.

* Acá tengo que leer 2 veces la mseg para sacar el consumo, del mes actual y el mes anterior, xq no
*encontraba como discriminarlos después, haciendo una sola lectura de los 2 meses.
*La MSEG tiene 10 millones de registros y la MARA 20000

SELECT MARA~MATNR DMBTR INTO TABLE GTI_CONSUMO
FROM ( MARA INNER JOIN MSEG ON MARA~MATNR = MSEG~MATNR INNER JOIN MKPF ON MSEG~MBLNR = MKPF~MBLNR
AND MSEG~MJAHR = MKPF~MJAHR )
WHERE MARA~MATNR in S_MATNR
AND MATKL LIKE J
AND BUDAT >= v_fecha AND BUDAT < data
AND WERKS = 'CD01'
AND LGORT = '1001'
AND ( BWART = '641' OR BWART = '251' ).
"AND ( BWART = '561' OR BWART = '901' ).

SORT GTI_CONSUMO BY MATNR.

LOOP AT GTI_CONSUMO into WA_CONSUMO.
move-CORRESPONDING WA_CONSUMO to GTI_CONSUMO2.
collect GTI_CONSUMO2.
ENDLOOP.

SELECT MARA~MATNR DMBTR INTO TABLE GTI_CONSUMO3
FROM ( MARA INNER JOIN MSEG ON MARA~MATNR = MSEG~MATNR INNER JOIN MKPF ON MSEG~MBLNR = MKPF~MBLNR
AND MSEG~MJAHR = MKPF~MJAHR )
WHERE MARA~MATNR in S_MATNR
AND MATKL LIKE J
AND BUDAT >= data AND BUDAT < v_fecha2
AND WERKS = 'CD01'
AND LGORT = '1001'
AND ( BWART = '641' OR BWART = '251' ).
"AND ( BWART = '561' OR BWART = '901' ).

SORT GTI_CONSUMO3 BY MATNR.
CLEAR WA_CONSUMO.
LOOP AT GTI_CONSUMO3 into WA_CONSUMO.
move-CORRESPONDING WA_CONSUMO to GTI_CONSUMO4.
collect GTI_CONSUMO4.
ENDLOOP.

Úlima edición por edgg fecha: 03/04/11 a las 21:57:42.
Responder Con Cita