Avalados por :

Guía para trabajar con bucles anidados en programación OOP

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 0 Vistas
0
Loading...

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

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Loading...

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

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Loading...

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

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Loading...

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

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Loading...

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

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?