GeneXus - Optimizacion de un for each

 
Vista:
Imágen de perfil de Luis

Optimizacion de un for each

Publicado por Luis (5 intervenciones) el 15/01/2016 16:21:03
Hola, tengo un procedimiento que se ejecuta en una cadena batch, y que esta actualmente demorando 3 a 4 horas, dada la cantidad de registros involucrados.
Analizando un poco el codigo he ido optimizando algunas consultas repetidas, etc.
Me encuentro si con el siguiente codigo, el cual realiza una serie de for each dependiendo de una cantidad de ocurrencias de un vector:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// aca se carga el vector con los rubros
&Vector() = 0
&i = 1
For Each  // tabla de rubros
	Where PgCod = &Pgcod
	Where CICpo = 'RUBCASTI'
	Defined By CIPzoD
	If Rubro <> &Rubro
		&Vector(&i) = Rubro
		&i = &i + 1
	EndIf
EndFor
 
// aca se recorre el vector, y dentro del loop, se hace nuevamente otra busqueda con foreach
Do While &j < &i
	For Each    // FSD011
		Where PgCod  =  &Pgcod
		Where Scmod  =  &Scmod
		Where Scsuc  =  &Scsuc
		Where Sccta  =  &Sccta
		Where Scoper =  &Scoper
		Where Scrub  =  &Vector(&j)   //aca se itera con cada rubro encontrado
		Where Scsdo  <> 0
			&SaldoCastigado = &SaldoCastigado + Scsdo*-1
				&ScsbopCast = Scsbop
				&ScfvalCast = Scfval
	EndFor
	&j = &j + 1
EndDo

Existe alguna manera de poder optimizar esta rutina, del mismo modo quie por ejemplo se realiza en sql generando un select interno de esta forma?
select * from FSD011
where PgCod = @Pgcod
and Scmod = @Scmod
and Scsuc = @Scsuc
and Sccta = @Sccta
and Scoper = @Scoper
and Scrub in (select Rubro from TBLRUB where PgCod = @Pgcod and CICpo = 'RUBCASTI')

ojala quede clara la pregunta, y muchas gracias por sus sugenrencias
Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Luis

Optimizacion de un for each

Publicado por Luis (5 intervenciones) el 21/01/2016 19:41:21
Me auto contesto, por si alguien mas le sirve esto.

basta con solo poner la clausula IN en el Where del for each (muy sencillo)
quedando asi:

1
2
3
4
5
6
7
8
9
10
11
12
For Each    // FSD011
	Where PgCod  =  &Pgcod
	Where Scmod  =  &Scmod
	Where Scsuc  =  &Scsuc
	Where Sccta  =  &Sccta
	Where Scoper =  &Scoper
	Where Scrub  IN &Vector()   //solo se especifica el vector que ya esta lleno con valores
	Where Scsdo  <> 0
		&SaldoCastigado = &SaldoCastigado + Scsdo*-1
			&ScsbopCast = Scsbop
			&ScfvalCast = Scfval
EndFor

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Optimizacion de un for each

Publicado por Pedro (3 intervenciones) el 01/04/2016 14:17:37
Hola que tal, he visto tu código, realice varios sistemas con el foreach y business component.

tendrias alguna forma nueva para optimizar una búsqueda en una grilla?

gracias y saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar