GeneXus - Si un dato de una columna es distinto que se imprima el registro

   
Vista:

Si un dato de una columna es distinto que se imprima el registro

Publicado por Tronx (2 intervenciones) el 12/08/2016 17:29:12
bb

A modo de ejemplo: En la foto tengo dos bloques de registros(aunque puede tener varios, es solo un ejemplo), Quiero que se muestren solo los bloques de datos donde en la C6 existe un campo distinto(como sale en la foto con un cuadrado rojo).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Solo la C1 y la C2 se pueden repetir.
 
For Each Order C1, C2
 
	Where ano = &ano
	Where mes = &mes
 
	Print Encabezado
 
	For Each
		&C1 = C1
		&C2 = C2
		&C3 = C3
		&C4 = C4
		&C5 = C5
		&C6 = C6    //Aqui tengo que encontrar la forma de comparar el registro anterior con el siguiente
							// y si es distinto que se imprima
		Print Datos
	EndFor
 
EndFor

Se comprende mi duda ?, en Conclusión tengo que encontrar la forma que en el segundo For si algún campo
en la C6 sea distinto que se muestre( Print Datos ).
Si agrupara Solo por la C6 me mostraría solo registros que están iguales, yo quiero mostrar lo contrario.
Ya probé con SDT y también tope con el mismo problema de como comparar el anterior con el siguiente.
NOTA: Ambos For recorren la misma Tabla.

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

Si un dato de una columna es distinto que se imprima el registro

Publicado por Marcelo (35 intervenciones) el 16/08/2016 22:13:32
Hola, no sé si te entendí bien, pero lo que podrías hacer es agregar antes del For una variable que te guarde el valor anterior, por ejemplo &CAnterior, a la que le das un valor inválido, por ejemplo 0 o -1 dependiendo de tus condiciones.
Luego vas comparando el &CAnterior con el &C6, la primera vez siempre debería ser distinto, así que imprimes y le das el valor &CAnterior el valor de &C6. Entonces, a la segunda vuelta, si son iguales no haces nada y si son iguales vuelves a imprimir y a cambiar el valor del &CAnterior.

Una vez un programador viejo me dijo que, por lo menos con Genexus, evite utilizar For Each dentro de otro For Each, a no ser que sea extremadamente necesario, es mejor utilizar Sub rutinas. Efectivamente, en una situación X, que no recuerdo, el código no funcionaba siguiendo la lógica que debería, y con la sub rutina si me resultó.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
&CAnterior = 0
For Each Order C1, C2
	Where ano = &ano
	Where mes = &mes
	Print Encabezado
 
	For Each
		&C1 = C1
		&C2 = C2
		&C3 = C3
		&C4 = C4
		&C5 = C5
		&C6 = C6
                If &CAnterior <> &C6
		           &CAnterior = &C6
                           Print Datos
                EndIf
	EndFor
EndFor

Espero te sea de ayuda, 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