GeneXus - Ayuda con esto

   
Vista:

Ayuda con esto

Publicado por Lex Franco (101 intervenciones) el 17/08/2011 20:17:34
Utilizo Gx X, C#, asp.net, ADO.net, AS400

tengo unos data views en el proyecto (es un proyecto web en C# que se conecta por odbc a las tablas del as400) (nada del otro mundo)

centremonos en una sola tabla:
entonces tengo que filtrar toda esa informacion de esa tabla (imagina miles de miles de registros) por medio de unos parametros que espero tener almacenados en una transaccion de Gx que yo he creado con el nombre precisamente de "parametros" y que se compone de algo asi

Cuentasdeahorros = 0
Cuentasdecheques = 0
Cuentasdeempleados = 0
cuentasderegistro = 0
cuentasDeCambio = 0
Moneda = ' '

entonces imagina que mando a llamar esa transaccion (que tiene un UNICO registro) en modo update y muestro esos campos en forma de chekbox (1 checked, 0 uncheked) entonces el usuario podra modificar y encender los valores que quiere mostrar y guardar los cambios
el campo de moneda lo muestro como un combo con tres posibles valores

un suponer que despues de modificado el registro quede asi:

Cuentasdeahorros = 0
Cuentasdecheques = 1
Cuentasdeempleados = 0
cuentasderegistro = 1
cuentasDeCambio = 0
Moneda = 'L'


ahora la pregunta es......
EN EL REPORTE QUE TENGO QUE GENERAR
Como hago para generar un xForEach (generico) del data view donde me filtre unicamente por los registros en los cuales el campo de la trn de parametros este en 1? o sea en el caso deberia decir asi:

xfor each 'CUENTAS' index 'Icuentas'
where CuentaTipo = 'CK001' OR CuentaTipo = 'CR001'
print loquesea
.
.
.
.
.xendfor

pero ahi hice una sentencia for each en duro, quisiera que se generara de acuerdo a los parametros que esten encendidos
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

Ayuda con esto

Publicado por Julio (301 intervenciones) el 17/08/2011 23:20:36
Hola Lex, si te entendí bien podría ser algo así:
Espero que te sirva como idea.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
for each parametros
  &Moneda = Moneda
    if Cuentasdeahorros = 1
      &Identificador = 'A'
      do 'Listar'
  endif
  if Cuentasdecheques = 1
    &Identificador = 'C'
    do 'Listar'
  endif
if Cuentasdeempleados = 0
  &Identificador = 'E'
  do 'Listar'
endif
// if Otros parámteros
endfor
 
Sub 'Listar'
  xfor each 'CUENTAS' index 'Icuentas'
    where CuentaTipo = &Identificador
    print loquesea
  xendfor
EndSub // 'Listar'
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

Ayuda con esto

Publicado por Lex Franco (101 intervenciones) el 18/08/2011 01:21:54
Gracias Julio.
entiendo lo que me indicas, basicamente es evaluar el registro de parametros (es uno solo) y hacer una evaluacion para cada campo si tiene el valor '1' que haga la rutina, lo filtre en el archivo (DATAVIEW) y lo imprima y luego hacer lo mismo para el siguiente campo del registro es una buena solucion solo que le veo dos inconvenientes: 1 me genera una ruptura forzada en el informe y pierdo el orden del indice 'ICUENTAS' 2. se trata de un archivo de 12 millones de registros no se cuan afectado se valla a ver el performance de mi conexion y el tiempo de respuesta, de todas formas intentare ya que es la unica solucion que poseo en estos momentos, muchas gracias..

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

Ayuda con esto

Publicado por Victor (7 intervenciones) el 18/08/2011 17:22:31
Hola Lex

Mira si con este código solucionas algo.

Primero te guardas en variables el valor de los parámetros de selección:

For Each Parametros
&Cuentasdeahorros = Cuentasdeahorros
&Cuentasdecheques = Cuentasdecheques
&Cuentasdeempleados = Cuentasdeempleados
&cuentasderegistro = cuentasderegistro
&cuentasDeCambio = cuentasDeCambio
&Moneda = Moneda
EndFor

Y despues haces la selección de registros de la siguiente manera:

XFor Each 'CUENTAS' index 'Icuentas'
Where ((CuentaTipo = "CA001" .and. &Cuentasdeahorros = 1) .or.
(CuentaTipo = "CK001" .and. &Cuentasdecheques = 1) .or.
(CuentaTipo = "CE001" .and. &Cuentasdeempleados = 1) .or.
(CuentaTipo = "CR001" .and. &cuentasderegistro = 1) .or.
(CuentaTipo = "CC001" .and. &cuentasDeCambio = 1) .and.
CuentaMoneda = &Moneda

Print LoQueSea

EndFor

Espero que te sea util. Ya diras algo.

Saludos

Victor
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

Ayuda con esto

Publicado por Lex Franco (101 intervenciones) el 18/08/2011 17:36:07
Gracias Victor empezare a ponerlo en practica, gracias por tomarse la molestia de responder
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