PDA

Ver la Versión Completa : Optimización de código con Loop at y Move-Corresponding


Leonardo Carnicella
06/07/18, 12:49:49
Hola a todos, espero puedan ayudarme. Estoy trabajando un programa que hizo un desarrollador q ya no esta más en la empresa, el programa funciona pero es sumamente lento y me han dado la tarea de optimizarlo.

Este es el código.

LOOP AT ls_addr_complete-adtel_tab INTO ls_adtel_tab.
CLEAR: ls_telefondata.

MOVE-CORRESPONDING ls_adtel_tab TO ls_telefondata.
ls_telefondata-std_no = ls_adtel_tab-adtel-flgdefault.
ls_telefondata-telephone = ls_adtel_tab-adtel-tel_number.
ls_telefondata-extension = ls_adtel_tab-adtel-tel_extens.
ls_telefondata-tel_no = ls_adtel_tab-adtel-telnr_long.
ls_telefondata-caller_no = ls_adtel_tab-adtel-telnr_call.
ls_telefondata-valid_from = ls_adtel_tab-date_from.
ls_telefondata-valid_to = '99991231'.
APPEND ls_telefondata TO lt_telefondata.
ENDIF.
ENDLOOP.


Tengo entendido, que el move-corresponding no es tan eficiente y me podría ser más útil usar un Join o un For all entries ?

Alguien podría ayudarme ? gracias...

C

mysmb2
06/07/18, 16:05:20
Hola,
Es mas eficiente hacer un MOVE campo por campo en vez del MOVE-CORRESPONDING.
Lo que decis de JOIN y FAE aplica para las operaciones con la BD.(select)

Primero hay que determinar que bloque de código consume mas tiempo. Para esto existen herramientas como la transacción ST30 que analiza el rendimiento del programa. Luego se vera si hay que optimizar un acceso a la BD o algun loop.

Saludos!

julmungal
28/07/18, 23:48:15
Buenas, para el caso de s4/hana:



move-corresponding ls_addr_complete-adtel_tab[] to lt_telefondata[].

loop at lt_telefondata[] ASSIGNING FIELD-SYMBOL(<ls_telefondata>).

<ls_telefondata>-std_no =<ls_telefondata>-adtel-flgdefault.
<ls_telefondata>-telephone = <ls_telefondata>-adtel-tel_number.
<ls_telefondata>-extension = <ls_telefondata>-adtel-tel_extens.
<ls_telefondata>-tel_no = <ls_telefondata>-adtel-telnr_long.
<ls_telefondata>-caller_no = <ls_telefondata>-adtel-telnr_call.
<ls_telefondata>-valid_from = <ls_telefondata>-date_from.
<ls_telefondata>-valid_to = '99991231'.

endloop.



a) el move-corresponding de tablas ya está optimizado por el propio s4 y lo soporta.
b) Siempre será mejor ya modificar los registros por FIELD-SYMBOL que un modify, incluso también lo haría para el caso de tu append.

Saludos.