Para un mejor rendimiento, utiliza la técnica de cursor paralelo o recupera datos en tablas internas utilizando Select .... FOR all entries....
Saludos
Naveen Gupta
Avalados por :
Hola,
¿Alguien puede ayudarme con bucles anidados? Es urgente...
El código es el siguiente..........
OOP AT gt_indata INTO gs_indata.
Obtener valores de período del encabezado
IF ld_first_time = gc_J.
ld_first_time = gc_N.
Dividir encabezado de entrada en estructura de período
FIELD-SYMBOLS: <lfs_hex> TYPE x,
<lfs_char> TYPE c.
ASIGNAR gc_tab A <lfs_hex>.
ASIGNAR <lfs_hex> A <lfs_char> CASTING.
Realizar split1.
LIMPIAR: gs_split_1.
DIVIDIR gs_indata AT <lfs_char> EN
gs_split_1-head_1
gs_split_1-head_2
gs_split_1-head_3
gs_split_1-head_4
*Período 1 a 10
gs_split_1-per_1 gs_split_1-per_2 gs_split_1-per_3 gs_split_1-per_4
gs_split_1-per_5 gs_split_1-per_6 gs_split_1-per_7 gs_split_1-per_8
gs_split_1-per_9 gs_split_1-per_10
*Período 11 a 20
gs_split_1-per_11 gs_split_1-per_12 gs_split_1-per_13 gs_split_1-per_14
gs_split_1-per_15 gs_split_1-per_16 gs_split_1-per_17 gs_split_1-per_18
gs_split_1-per_19 gs_split_1-per_20
*Período 21 a 30
gs_split_1-per_21 gs_split_1-per_22 gs_split_1-per_23 gs_split_1-per_24
gs_split_1-per_25 gs_split_1-per_26 gs_split_1-per_27 gs_split_1-per_28
gs_split_1-per_29 gs_split_1-per_30
*Período 31 a 40
gs_split_1-per_31 gs_split_1-per_32 gs_split_1-per_33 gs_split_1-per_34
gs_split_1-per_35 gs_split_1-per_36 gs_split_1-per_37 gs_split_1-per_38
gs_split_1-per_39 gs_split_1-per_40
*Período 41 a 50
gs_split_1-per_41 gs_split_1-per_42 gs_split_1-per_43 gs_split_1-per_44
gs_split_1-per_45 gs_split_1-per_46 gs_split_1-per_47 gs_split_1-per_48
gs_split_1-per_49 gs_split_1-per_50
*Período 51 a 55
gs_split_1-per_51 gs_split_1-per_52 gs_split_1-per_53 gs_split_1-per_54
gs_split_1-per_55.
*Crear tabla interna con todos los períodos del encabezado del archivo de entrada
LIMPIAR ld_tabix.
Realizar 56 veces Variando
MIENTRAS w_tabix LT 56
gs_period-per DE gs_split_1-per_1 A gs_split_1-per_2.
SUMAR 1 A ld_tabix.
*Interrumpir en el valor END en el archivo
SI gs_period-per = gc_END.
SALIR.
FIN-SI.
AÑADIR gs_period A gt_period.
FIN-MIENTRAS.
Enddo.
*Convertir tipo de fecha y período a fecha real
LOOP AT gt_period INTO gs_period.
SEGÚN gs_period-per(1).
CUANDO gc_W.
Semana
Para un mejor rendimiento, utiliza la técnica de cursor paralelo o recupera datos en tablas internas utilizando Select .... FOR all entries....
Saludos
Naveen Gupta
No se pueden evitar los bucles anidados, ya que a menudo es necesario comparar tablas internas,
1. Una tabla debe ser la tabla exterior y debe ser procesada completamente,
Para cada línea de la tabla exterior:
No se debe procesar una tabla interna completa.
Sino solo una línea de la tabla interna, luego usar 'READ ... BINARY SEARCH' y ORDENAR esta tabla una vez fuera de la tabla exterior.
O unas pocas líneas de la tabla interna, luego usar 'READ BINARY SEARCH' y 'LOOP ... FROM INDEX' con una condición de salida, lo cual es muy importante.
Lee este blog, especialmente la última sección:
/people/siegfried.boes/blog/2007/09/12/runtimes-of-reads-and-loops-on-internal-tables
Siegfried
Hola
Puedes utilizar la instrucción de lectura "read statement" con búsqueda binaria en lugar de utilizar bucles anidados en algunas partes de tu programa. Pero no olvides ordenar la tabla que estás leyendo antes de leerla.
Otra cosa, dentro del bucle utilizaste "select single *". Pero puedes utilizar "select" con los campos requeridos fuera del bucle en una tabla interna, luego leer esa tabla interna dentro del bucle.
Recompensa si funciona.
Gracias
Siva Kumar
No se pueden evitar los bucles anidados, ya que a menudo es necesario comparar tablas internas.
1. Una tabla debe ser la tabla externa y debe procesarse completamente.
Para cada línea de la tabla externa:
No se debe procesar una tabla interna completa.
Sino solo una línea de la tabla interna, luego usar 'READ ... BINARY SEARCH' y ORDENAR esta tabla una vez fuera de la tabla externa.
O unas pocas líneas de la tabla interna, luego usar READ BINARY SEARCH y LOOP ... FROM INDEX con una condición de salida, lo cual es muy importante.
Lee este blog, especialmente la última sección:
/people/siegfried.boes/blog/2007/09/12/runtimes-of-reads-and-loops-on-internal-tables
Siegfried
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute