#1
|
|||
|
|||
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. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|