Ver Mensaje Individual
  #1  
Viejo 22/07/10, 15:02:39
Yessica Suarez Yessica Suarez is offline
Junior Member
 
Fecha de Ingreso: jun 2010
Mensajes: 1
Red face optimizar mi programa

Tengo estas dos rutinas me gustaria mejorarlas ya que duran ucho en la ejecucion, me podrian ayudar?



FORM buscar_datos.

SELECT banfn bnfpo sakto kostl lstar
INTO CORRESPONDING FIELDS OF TABLE t_ebkn FROM ebkn
WHERE kostl IN p_ceco.

SORT t_ebkn.
DESCRIBE TABLE t_ebkn LINES v_cont.
CHECK v_cont NE 0. CLEAR v_cont.

SELECT banfn bnfpo loekz txz01 menge badat lfdat preis ebeln ebelp
bedat waers
INTO CORRESPONDING FIELDS OF TABLE t_eban FROM eban
FOR ALL ENTRIES IN t_ebkn
WHERE banfn = t_ebkn-banfn AND
bnfpo = t_ebkn-bnfpo AND
BADAT IN p_fech.
* lfdat IN p_fech.

*
SORT t_eban.
DESCRIBE TABLE t_eban LINES v_cont.
CHECK v_cont NE 0. CLEAR v_cont.
*
SORT t_ebkn BY banfn bnfpo.
LOOP AT t_ebkn.
CLEAR t_eban.
READ TABLE t_eban WITH KEY banfn = t_ebkn-banfn
bnfpo = t_ebkn-bnfpo.
IF sy-subrc EQ 0.
PERFORM blanquea.
IF NOT t_eban-ebeln IS INITIAL.
PERFORM buscar_pedido.
IF w_ent EQ 0.
PERFORM validar_partidas.
ENDIF.
ELSE.
PERFORM validar_partidas.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " BUSCAR_DATOS






FORM buscar_pedido.


SELECT * FROM eket WHERE ebeln = t_eban-ebeln AND
ebelp = t_eban-ebelp AND
banfn = t_eban-banfn AND
bnfpo = t_eban-bnfpo.
MOVE eket-eindt TO w_eindt.
EXIT.
ENDSELECT.

SELECT SINGLE * FROM ekpo WHERE ebeln = t_eban-ebeln AND
ebelp = t_eban-ebelp.
IF sy-subrc EQ 0.
MOVE ekpo-ebeln TO w_ebeln.
MOVE ekpo-ebelp TO w_ebelp.
MOVE ekpo-txz01 TO w_txz01.
MOVE ekpo-netwr TO w_netwr.
MOVE ekpo-loekz TO w_loekz.
SELECT SINGLE * FROM ekko WHERE ebeln = ekpo-ebeln.
IF sy-subrc EQ 0.
MOVE ekko-waers TO w_waers.
SELECT SINGLE * FROM lfa1 WHERE lifnr = ekko-lifnr.
IF sy-subrc EQ 0.
MOVE ekko-lifnr TO w_lifnr.
MOVE lfa1-name1 TO w_name1.
ENDIF.
ENDIF.
ENDIF.

SELECT * FROM ekkn WHERE ebeln = t_eban-ebeln AND
ebelp = t_eban-ebelp.
MOVE ekkn-loekz TO w_loekz1.
IF t_eban-ebeln+0(2) EQ '51'.
MOVE t_eban-bedat TO w_aedat.
ELSE.
MOVE ekkn-aedat TO w_aedat.
ENDIF.
EXIT.
ENDSELECT.

REFRESH: t_ekbe,
t_ekbe1,
t_ekbe2,
t_ekbe3.

CLEAR: t_ekbe,
t_ekbe1,
t_ekbe2,
t_ekbe3.

SELECT ebeln ebelp vgabe gjahr belnr buzei bwart
budat wrbtr waers lfbnr
INTO CORRESPONDING FIELDS OF TABLE t_ekbe2 FROM ekbe
WHERE ebeln = t_eban-ebeln AND
ebelp = t_eban-ebelp AND
vgabe = '1' AND
bwart = '101' AND
wrbtr <> 0.

SELECT ebeln ebelp vgabe gjahr belnr buzei bwart
budat wrbtr waers lfbnr
INTO CORRESPONDING FIELDS OF TABLE t_ekbe3 FROM ekbe
WHERE ebeln = t_eban-ebeln AND
ebelp = t_eban-ebelp AND
vgabe = '1' AND
bwart = '102' AND
wrbtr <> 0.
.
MOVE 1 TO w_index.
LOOP AT t_ekbe2.
READ TABLE t_ekbe3 INDEX w_index.
IF sy-subrc NE 0.
MOVE-CORRESPONDING t_ekbe2 TO t_ekbe.
APPEND t_ekbe.
ENDIF.
ADD 1 TO w_index.
ENDLOOP.

DESCRIBE TABLE t_ekbe LINES v_cont1.

SELECT ebeln ebelp vgabe gjahr belnr buzei bwart
budat wrbtr waers lfbnr
INTO CORRESPONDING FIELDS OF TABLE t_ekbe1 FROM ekbe
WHERE ebeln = t_eban-ebeln AND
ebelp = t_eban-ebelp AND
( vgabe = '2' OR
vgabe = 'P' ).

DESCRIBE TABLE t_ekbe1 LINES v_cont2.

LOOP AT t_ekbe1.
SELECT SINGLE * FROM rbkp WHERE gjahr = t_ekbe1-gjahr AND
belnr = t_ekbe1-belnr.
IF sy-subrc EQ 0.
IF rbkp-stblg NE space.
DELETE t_ekbe1.
ENDIF.
ENDIF.
ENDLOOP.

SORT t_ekbe BY lfbnr.
MOVE 1 TO w_index.
LOOP AT t_ekbe.
MOVE space TO w_belnr.
MOVE 0 TO w_wrbtr1.
MOVE 0 TO w_dif.
LOOP AT t_ekbe1 WHERE lfbnr = t_ekbe-lfbnr.
IF t_ekbe-wrbtr GT t_ekbe1-wrbtr.
w_dif = t_ekbe-wrbtr - t_ekbe1-wrbtr.
ELSE.
IF t_ekbe-wrbtr LT t_ekbe1-wrbtr.
w_dif = t_ekbe1-wrbtr - t_ekbe-wrbtr.
ELSE.
w_dif = t_ekbe1-wrbtr - t_ekbe-wrbtr.
ENDIF.
ENDIF.
IF w_dif GE 0 AND
w_dif LE 1.
MOVE t_ekbe1-belnr TO w_belnr.
MOVE t_ekbe1-wrbtr TO w_wrbtr1.
PERFORM buscar_doccont.
EXIT.
ENDIF.
ENDLOOP.
** MOVE t_ekbe-lfbnr TO w_lfbnr.
MOVE t_ekbe-belnr TO w_belnr1.
MOVE t_ekbe-budat TO w_budat.
MOVE t_ekbe-waers TO w_waers1.
MOVE t_ekbe-wrbtr TO w_wrbtr.
MOVE 1 TO w_ent.
PERFORM validar_partidas.
ADD 1 TO w_index.
ENDLOOP.
IF v_cont1 EQ 0 AND v_cont2 NE 0.
LOOP AT t_ekbe1.
MOVE t_ekbe1-belnr TO w_belnr.
MOVE t_ekbe1-wrbtr TO w_wrbtr1.
PERFORM buscar_doccont.
MOVE 1 TO w_ent.
PERFORM validar_partidas.
ENDLOOP.
ENDIF.

ENDFORM. " buscar_pedido
Responder Con Cita