DavidXD_XD
13/01/09, 12:27:50
Buenos dias gente .... tengo una consulta, esta relacionado a Performance, veran tengo un SELECT en el cual me trae todos los movimientos de la MSEG y la MKPF y la guardo dentro de una tabla interna gt_mseg la cual es de tipo HASHED con llaves en mblnr, mjahr y zeile y despues hago lo siguiente
SELECT a~mblnr a~mjahr
zeile
budat
bwart matnr werks lgort charg bustm
shkzg menge
meins
lifnr grund
xblnr
ummat umcha umwrk umlgo
INTO CORRESPONDING FIELDS OF TABLE gt_mseg
FROM mkpf AS a
INNER JOIN
mseg AS b
ON a~mandt = b~mandt AND
a~mblnr = b~mblnr AND
a~mjahr = b~mjahr
WHERE a~mjahr IN lr_mjahr AND
a~budat >= gv_fechaini AND
b~mjahr IN lr_mjahr AND
b~matnr IN s_matnr AND
b~werks EQ p_werks AND
b~lgort IN s_lgort AND
b~charg IN s_charg AND
b~bustm NE 'MA02' AND
b~bustm NE 'MA05' AND
b~lgort NE space.
LOOP AT gt_mseg ASSIGNING <gfs_mseg> WHERE bwart IN lr_bwart.
IF <gfs_mseg>-matnr = <gfs_mseg>-ummat AND
<gfs_mseg>-charg = <gfs_mseg>-umcha AND
<gfs_mseg>-werks = <gfs_mseg>-umwrk AND
<gfs_mseg>-umlgo IN s_lgort.
DELETE gt_mseg WHERE mblnr = <gfs_mseg>-mblnr
AND mjahr = <gfs_mseg>-mjahr
AND zeile = <gfs_mseg>-zeile.
ENDIF.
ENDLOOP.
El problema es que el SELECT me bota aproximadamente como un millon de registros y donde se demora el programa es en el LOOP, el LOOP ya lleva muchas horas y no acaba :( , xfa necesito sus sugerencias o una mejor forma d q el LOOP avance rapido, un saludo a todos !!!
SELECT a~mblnr a~mjahr
zeile
budat
bwart matnr werks lgort charg bustm
shkzg menge
meins
lifnr grund
xblnr
ummat umcha umwrk umlgo
INTO CORRESPONDING FIELDS OF TABLE gt_mseg
FROM mkpf AS a
INNER JOIN
mseg AS b
ON a~mandt = b~mandt AND
a~mblnr = b~mblnr AND
a~mjahr = b~mjahr
WHERE a~mjahr IN lr_mjahr AND
a~budat >= gv_fechaini AND
b~mjahr IN lr_mjahr AND
b~matnr IN s_matnr AND
b~werks EQ p_werks AND
b~lgort IN s_lgort AND
b~charg IN s_charg AND
b~bustm NE 'MA02' AND
b~bustm NE 'MA05' AND
b~lgort NE space.
LOOP AT gt_mseg ASSIGNING <gfs_mseg> WHERE bwart IN lr_bwart.
IF <gfs_mseg>-matnr = <gfs_mseg>-ummat AND
<gfs_mseg>-charg = <gfs_mseg>-umcha AND
<gfs_mseg>-werks = <gfs_mseg>-umwrk AND
<gfs_mseg>-umlgo IN s_lgort.
DELETE gt_mseg WHERE mblnr = <gfs_mseg>-mblnr
AND mjahr = <gfs_mseg>-mjahr
AND zeile = <gfs_mseg>-zeile.
ENDIF.
ENDLOOP.
El problema es que el SELECT me bota aproximadamente como un millon de registros y donde se demora el programa es en el LOOP, el LOOP ya lleva muchas horas y no acaba :( , xfa necesito sus sugerencias o una mejor forma d q el LOOP avance rapido, un saludo a todos !!!