Ver Mensaje Individual
  #2  
Viejo 13/09/16, 21:02:24
Anthony Martinez Anthony Martinez is offline
Member
 
Fecha de Ingreso: nov 2012
Mensajes: 30
Smile una opcion

hola migconman, te envio el codigo que podrias reemplazar y probar para que obtengas el mismo resultado en menos tiempo, me comentas como te fue:


REPORT zprueba019.

DATA: ra_matnr TYPE RANGE OF mara-matnr.

TYPES: BEGIN OF gty_equi,
equnr TYPE equi-equnr,
erdat TYPE equi-erdat,
matnr TYPE equi-matnr,
sernr TYPE equi-sernr,
kunde TYPE equi-kunde,
END OF gty_equi.

TYPES: BEGIN OF gty_mmt_est_seruni,
sernr TYPE zmmt_est_seruni-sernr,
equnr TYPE zmmt_est_seruni-equnr,
END OF gty_mmt_est_seruni.

DATA: lt_equi TYPE STANDARD TABLE OF gty_equi,
lt_mmt_est_seruni TYPE STANDARD TABLE OF zmmt_est_seruni.

FIELD-SYMBOLS: <fs_equi> LIKE LINE OF lt_equi.

*Realizas tu consulta en la tabla EQUI usando el comodin HINTS para utilizar el indice de esa tabla
SELECT equnr erdat matnr sernr kunde
INTO TABLE lt_equi
FROM equi
WHERE sernr NE space
AND matnr IN ra_matnr
%_HINTS ORACLE 'INDEX("EQUI" "EQUI~A")'.
IF lt_equi[] IS NOT INITIAL.
DELETE lt_equi WHERE erdat LT '20050701'.
DELETE lt_equi WHERE kunde EQ space.

SELECT sernr equnr
INTO TABLE lt_mmt_est_seruni
FROM zmmt_est_seruni
FOR ALL ENTRIES IN lt_equi
WHERE sernr EQ lt_equi-sernr
AND equnr EQ lt_equi-equnr
AND bwart IN ('X78', '241', 'X05').

SORT lt_mmt_est_seruni BY sernr equnr.
LOOP AT lt_equi ASSIGNING <fs_equi>.
READ TABLE lt_mmt_est_seruni
WITH KEY sernr = <fs_equi>-sernr
equnr = <fs_equi>-equnr
BINARY SEARCH
TRANSPORTING NO FIELDS.
IF sy-subrc NE 0.
MOVE 'X' TO <fs_equi>-flag.
ENDIF.
ENDLOOP.
* Despues que borres los registros marcados de esta tabla interna tendras los registros que necesitas en tu inner join inicial
DELETE lt_equi WHERE flag EQ 'X'.
SORT lt_equi BY equnr sernr kunde.
ENDIF.
Responder Con Cita