¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Guia para trabalhar com loops aninhados na programação OOP

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 9 Vistas
0
Cargando...

Olá,

Alguém pode me ajudar com loops aninhados? É urgente...

O código é o seguinte..........

OOP AT gt_indata INTO gs_indata.

  • Obter valores de período do cabeçalho

IF ld_first_time = gc_J.

ld_first_time = gc_N.

  • Dividir cabeçalho de entrada em estrutura de período

  • FIELD-SYMBOLS: <lfs_hex> TYPE x,

  • <lfs_char> TYPE c.

  • ATRIBUIR gc_tab A <lfs_hex>.

ATRIBUIR <lfs_hex> A <lfs_char> CASTING.

Realizar split1.

LIMPAR: gs_split_1.

DIVIDIR gs_indata AT <lfs_char> EM

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.

*Criar tabela interna com todos os períodos do cabeçalho do arquivo de entrada

LIMPAR ld_tabix.

Realizar 56 vezes Variando

  • ENQUANTO w_tabix LT 56

gs_period-per DE gs_split_1-per_1 A gs_split_1-per_2.

SOMAR 1 A ld_tabix.

*Interrupção no valor END no arquivo

SE gs_period-per = gc_END.

SAIR.

FIM-SE.

ADICIONAR gs_period A gt_period.

  • FIM-ENQUANTO.

Enddo.

*Converter tipo de data e período para data real

LOOP AT gt_period INTO gs_period.

SEGUNDO gs_period-per(1).

QUANDO gc_W.

  • Semana

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

4 Respuestas

0
Cargando...

Para obter melhor desempenho, utilize a técnica de cursor paralelo ou recupere dados em tabelas internas usando Select .... FOR all entries....

Saudações

Naveen Gupta

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

Não é possível evitar loops aninhados, pois muitas vezes é necessário comparar tabelas internas.

1. Uma tabela deve ser a tabela externa e deve ser processada completamente.

Para cada linha da tabela externa:

Não é necessário processar uma tabela interna completa.

Mas apenas uma linha da tabela interna, depois usar 'READ ... BINARY SEARCH' e ORDENAR essa tabela uma vez fora da tabela externa.

Ou algumas poucas linhas da tabela interna, depois usar 'READ BINARY SEARCH' e 'LOOP ... FROM INDEX' com uma condição de saída, o que é muito importante.

Leia este blog, especialmente a última seção:

/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
Cargando...

Olá

Você pode usar a instrução de leitura "read statement" com busca binária em vez de usar loops aninhados em algumas partes do seu programa. Mas não se esqueça de ordenar a tabela que está lendo antes de lê-la.

Outra coisa, dentro do loop você usou "select single *". Mas você pode usar "select" com os campos necessários fora do loop em uma tabela interna e, em seguida, ler essa tabela interna dentro do loop.

Recompensa se funcionar.

Obrigado

Siva Kumar

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

Não é possível evitar loops aninhados, pois muitas vezes é necessário comparar tabelas internas.

1. Uma tabela deve ser a externa e processada integralmente.

Para cada linha da tabela externa:

Não é necessário processar a tabela interna completa.

Apenas uma linha da tabela interna deve ser processada, em seguida, usar 'READ ... BINARY SEARCH' e ORDENAR essa tabela uma vez fora da tabela externa.

Ou algumas linhas da tabela interna, em seguida, usar READ BINARY SEARCH e LOOP ... FROM INDEX com uma condição de saída, o que é muito importante.

Leia este blog, especialmente a última seção:

/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?