MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 23/09/15, 22:23:51
Vanaleon Vanaleon is offline
Junior Member
 
Fecha de Ingreso: jul 2015
Mensajes: 6
Talking Alternativa para select dentro de loop

Hola gente!

Aun soy muy nuevo en esto de abap y quisiera mejorar el rendimiento de mi programa, el caso es que tengo un select dentro de un loop pero no tengo idea de cual seria una alternativa para realizar lo mismo pero con un mejor performance.

*-> Loop para separar Deducciones por cc-nomina
LOOP AT tl_t596jd INTO sl_t596jd.
LOOP AT tl_rt INTO sl_rt WHERE lgart = sl_t596jd-lgart.
*-> Select para obtener las descripciones de los CC-nomina
SELECT SINGLE lgtxt
INTO sl_deduc-descrip FROM t512t
WHERE sprsl = sy-langu
AND molga = vl_molga
AND lgart = sl_rt-lgart.
*-> Llena la tabla de deducciones
sl_deduc-tipo = sl_t596jd-sumlg(3).
sl_deduc-clave = sl_rt-lgart.
sl_deduc-exento = sl_rt-betrg.
APPEND sl_deduc TO tl_deduc.
ENDLOOP.
ENDLOOP.

Esto es la parte de mi codigo que me gustaria mejorar, espero me puedan apoyar estoy un poco perdido.

Ejemplos con codigo seria lo mejor! Saludos
Responder Con Cita
  #2  
Viejo 24/09/15, 15:13:54
JOrozco JOrozco is offline
Junior Member
 
Fecha de Ingreso: nov 2013
Mensajes: 10
For All Entries

Hola.

Lo que yo haría sería en los LOOP's, usar field-symbols, para que fuera más rápido cada ciclo, posterior, el SELECT lo haría fuera de los dos LOOP's, esto usando la sentencia FOR ALL ENTRIES.

Me crearía una tabla interna tipo HASHED con las llaves molga y lgart, en tu select veo que molga la usas fija, si siempre es la misma para todos puedes hacerlo sólo por lgart, si no ps si usa ambos campos. Así quedaría el SELECT mas o menos:

"Se eliminan duplicados para optimizar el SELECT con FOR ALL ENTRIES.
DATA: tl_copia LIKE tl_rt.
tl_copia[] = tl_rt[].
DELETE ADJACENT DUPLICATES FROM tl_copia COMPARING lgart.

SELECT molga
lgart
lgtxt
INTO TABLE tl_t512t
FROM t512t
FOR ALL ENTRIES IN tl_copia
WHERE sprsl = sy-langu
AND molga = vl_molga
AND lgart = tl_copia-lgart.

Después ya vendrían tus LOOPS(con field-symbol), y en dónde tienes el
select single ahorita, cambiarías eso por un:

"Añadir la condición del campo MOLGA en caso de ser necesaria.
READ TABLE tl_t512t ASSING <sl_t512t> WITH TABLE KEY lgart = sl_rt-lgart.

Espero con esto darte una idea más o menos clara. Lo hice sobre la marcha así que espero que si me haya dado a entender.

Saludos y suerte!
Responder Con Cita
  #3  
Viejo 24/09/15, 18:26:23
Vanaleon Vanaleon is offline
Junior Member
 
Fecha de Ingreso: jul 2015
Mensajes: 6
Gracias!

Hola Muchas gracias al final utilice la idea que me diste del read table y sa que el select del loop.

Por si a alguien le sirve anexo el codigo final

*-> Select trae toda la tabla con las descripciones de los CC-nomina
SELECT *
FROM t512t
INTO TABLE tl_desc
WHERE sprsl = sy-langu
AND molga = vl_molga.
IF sy-subrc EQ 0.
SORT tl_desc BY lgart ASCENDING. "Ordena la tabla con las descripciones de los CC-nomina
ENDIF.

*-> Loop para separar Deducciones por cc-nomina
LOOP AT tl_t596jd INTO sl_t596jd.
LOOP AT tl_rt INTO sl_rt WHERE lgart = sl_t596jd-lgart.
*-> Read Table para obtener las descripciones de los CC-nomina
READ TABLE tl_desc INTO sl_desc
WITH KEY lgart = sl_rt-lgart BINARY SEARCH.
IF sy-subrc EQ 0.
sl_deduc-descrip = sl_desc-lgtxt.
ENDIF.
*-> Llena la tabla de deducciones
sl_deduc-tipo = sl_t596jd-sumlg(3).
sl_deduc-clave = sl_rt-lgart.
sl_deduc-exento = sl_rt-betrg.
APPEND sl_deduc TO tl_deduc.
ENDLOOP.
ENDLOOP.


Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 17:10:44.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web