Sobrecarga de información en For each
Publicado por David (18 intervenciones) el 27/05/2015 23:35:56
Muy buenas. Empiezo aclarando uso Genexus 8 Generador RPG y AS/400
Tengo la siguiente estructura dentro de un reporte:
Dentro del 3er For each debo realizar una subconsulta de todos los productos del código actual. Para aclarar este punto supongamos tenemos los códigos : 3, 5, 7, 45, 48, 114... etc. Vamos por el primer código el cual seria el 3 pues tenemos nuestro for each principal ordenado por codigo, posteriormente será el turno de 5, luego 7 y así sucesivamente recorrerá los códigos que tengan la fecha mayor a la indicada en el for each principal.
Ahora bien dentro del 3er for each se realiza una consulta dentro de una tabla que aproximadamente tiene más de 40 millones de registros demorando el proceso mucho tiempo.
He realizado un sql dentro de la tabla en función a como va a recorrer un for each normal, con lo siguiente, producto de código "3":
Nota: u_com = unidades compradas, u_dev = unidades devueltas y u_inv = unidades en inventario inicial
esta consulta toma aproximadamente de 4 a 5 seg (Por lo mencionado anterior mente más de 40 millones de registros). Ademas debo realizar operaciones matemáticas dentro del for each demorando aún más la consulta.
Sin embargo si realizo el siguiente sql:
El resultado es inmediato y realmente me serviría mucho dentro del 3er for each puesto que mensualmente la media de productos actualizados es de 300000 códigos. Haciendo un poco de matemáticas 300000 * 4 (seg)= 1200000 (seg) esto quiere decir 336 horas que es equivalente a 14 días
Por tanto me pregunto si existe alguna función (he provado con SUM y Sum sin obtener resultados) que me ayude a realizar la suma de "u_com", "u_dev" y "u_inv" dentro del 3er For each.
Si alguien a tenido algo similar o sabe algún método me ayudaría mucho si comenta como lo solucionó gracias.
Tengo la siguiente estructura dentro de un reporte:
1
2
3
4
5
6
7
8
9
10
11
12
13
For each order codigo
where codigo >= &codigo
where fecha > &fecha
For each
//primer for each anidado
endFor
For each
//segundo for each anidado
endFor
For each
//tercer for each anidado
endFor
endFor
Dentro del 3er For each debo realizar una subconsulta de todos los productos del código actual. Para aclarar este punto supongamos tenemos los códigos : 3, 5, 7, 45, 48, 114... etc. Vamos por el primer código el cual seria el 3 pues tenemos nuestro for each principal ordenado por codigo, posteriormente será el turno de 5, luego 7 y así sucesivamente recorrerá los códigos que tengan la fecha mayor a la indicada en el for each principal.
Ahora bien dentro del 3er for each se realiza una consulta dentro de una tabla que aproximadamente tiene más de 40 millones de registros demorando el proceso mucho tiempo.
He realizado un sql dentro de la tabla en función a como va a recorrer un for each normal, con lo siguiente, producto de código "3":
Nota: u_com = unidades compradas, u_dev = unidades devueltas y u_inv = unidades en inventario inicial
1
2
3
select local, codigo, u_com, u_dev, u_inv
from existencia
where codigo = 3
esta consulta toma aproximadamente de 4 a 5 seg (Por lo mencionado anterior mente más de 40 millones de registros). Ademas debo realizar operaciones matemáticas dentro del for each demorando aún más la consulta.
Sin embargo si realizo el siguiente sql:
1
2
3
4
5
select codigo, sum(u_com), sum(u_dev), sum(u_inv)
from existencia
where codigo = 3
group by codigo
order by codigo
El resultado es inmediato y realmente me serviría mucho dentro del 3er for each puesto que mensualmente la media de productos actualizados es de 300000 códigos. Haciendo un poco de matemáticas 300000 * 4 (seg)= 1200000 (seg) esto quiere decir 336 horas que es equivalente a 14 días
Por tanto me pregunto si existe alguna función (he provado con SUM y Sum sin obtener resultados) que me ayude a realizar la suma de "u_com", "u_dev" y "u_inv" dentro del 3er For each.
Si alguien a tenido algo similar o sabe algún método me ayudaría mucho si comenta como lo solucionó gracias.
Valora esta pregunta
0