Checkbox en datawindows
Espero que me puedan ayudar tengo una tabla con estos datos:
Crédito
Bcp-------interbank----scotiabank
1253.06 00.00 363.20
00.00 2563.32 123.22
00.00 23.36 00.00
Cree 2 dw el 1º en grid y el 2º en freeform ahora en el freeform los campos bcp, interbank, scotiabank los convertí en checkbox ahora quiero que cuando yo le de check por ejemplo en bcp solo me muestre los que su valor sea >0 y si esta desactivado que muestre todos nomas, igual con los demás.
Ojo: si selecciono 2 de ellos debe ocurrir lo mismo.
Ojala me puedan ayudar espero su respuesta.
Crédito
Bcp-------interbank----scotiabank
1253.06 00.00 363.20
00.00 2563.32 123.22
00.00 23.36 00.00
Cree 2 dw el 1º en grid y el 2º en freeform ahora en el freeform los campos bcp, interbank, scotiabank los convertí en checkbox ahora quiero que cuando yo le de check por ejemplo en bcp solo me muestre los que su valor sea >0 y si esta desactivado que muestre todos nomas, igual con los demás.
Ojo: si selecciono 2 de ellos debe ocurrir lo mismo.
Ojala me puedan ayudar espero su respuesta.
1 respuesta
Respuesta de fer1710
1
1
fer1710, Fernando Loza Años de Experiencia en el Desarrollo de sistemas...
Primero, ya debes tener creado tu DW de tipo grid, que esta relacionado a la tabla que indicas.
El objeto del Freeform, debe ser un DW del tipo external, con 3 column de tipo string(1) que se llamen bcp, interbank, y scotiabank, que van a tener los valores 'S' cuando el chek este activado, y 'N' cuando este desactivado.
Debes tener una window con 2 DataWindows: dw_1 con el grid, y dw_2 con el freeform.
1. En el Open de la Window
dw_1.SetTransObject(SQLCA)
dw_2.InsertRow(0)
2. Crea un evento llamado ue_filtrar con el siguiente codigo:
String ls_filter = ""
// Creamos la condicion filter
if dw_2.Object.bcp[1] = 'S' then
ls_filter = ls_filter + " AND bcp > 0"
end if
if dw_2.Object.interbank[1] = 'S' then
ls_filter = ls_filter + " AND interbank > 0"
end if
if dw_2.Object.scotiabank[1] = 'S' then
ls_filter = ls_filter + " AND scotiabank > 0"
end if
// Le quitamos en 'AND' que sobra
ls_filter = right(ls_filter, len(ls_filter) - 5)
//Recuperamos todo el grid
dw_1.Retrieve()
//Filtramos lo necesario
messagebox(ls_filter,ls_filter)
dw_1.SetFilter(ls_filter)
dw_1.Filter()
3. en el objeto dw_2.itemchanged copia lo siguiente:
This.AcceptText()
Parent.PostEvent("ue_filtrar")
El objeto del Freeform, debe ser un DW del tipo external, con 3 column de tipo string(1) que se llamen bcp, interbank, y scotiabank, que van a tener los valores 'S' cuando el chek este activado, y 'N' cuando este desactivado.
Debes tener una window con 2 DataWindows: dw_1 con el grid, y dw_2 con el freeform.
1. En el Open de la Window
dw_1.SetTransObject(SQLCA)
dw_2.InsertRow(0)
2. Crea un evento llamado ue_filtrar con el siguiente codigo:
String ls_filter = ""
// Creamos la condicion filter
if dw_2.Object.bcp[1] = 'S' then
ls_filter = ls_filter + " AND bcp > 0"
end if
if dw_2.Object.interbank[1] = 'S' then
ls_filter = ls_filter + " AND interbank > 0"
end if
if dw_2.Object.scotiabank[1] = 'S' then
ls_filter = ls_filter + " AND scotiabank > 0"
end if
// Le quitamos en 'AND' que sobra
ls_filter = right(ls_filter, len(ls_filter) - 5)
//Recuperamos todo el grid
dw_1.Retrieve()
//Filtramos lo necesario
messagebox(ls_filter,ls_filter)
dw_1.SetFilter(ls_filter)
dw_1.Filter()
3. en el objeto dw_2.itemchanged copia lo siguiente:
This.AcceptText()
Parent.PostEvent("ue_filtrar")
Hola gracias por contestar la pregunta pero me podrías explicar eso del dw external y declarar es y n podrías decirme como hacerlo ademas
Te adjutno la ventana para que me puedas entender mejor
Este es el código que he utilizado para filtrar por sexo, estcivil, distrito domicilio y distrito empresa ahora me falta filtrar por medio de los checkbox
string ls_select, ls_where, ls_query
string ls_edad, ls_sexo, ls_est, ls_demp, ls_ddomi
this.accepttext()
ls_select= "SELECT personas.dni, "&
+ " personas.fecnac, "&
+ " personas.insex, "&
+ " personas.edad, "&
+ " personas.brut, "&
+ " personas.distemp, "&
+ " personas.distrito, "&
+ " personas.estcivil, "&
+ " personas.bcp, "&
+ " personas.interbank, "&
+ " personas.scotiabank, "&
+ " personas.bbva, "&
+ " personas.comercio, "&
+ " personas.citibank, "&
+ " personas.bif, "&
+ " personas.trabajo, "&
+ " personas.financor, "&
+ " personas.sudamericano, "&
+ " personas.financiero, "&
+ " personas.mibanco, "&
+ " personas.cmr "&
+ " FROM personas "
//int suei,suef,p,b
//P=Integer(sle_1.Text)
//B=Integer(sle_2.Text)
//
//suei=p
//suef=b
//
//dw_2.retrieve(suei,suef)
ls_demp=trim(this.getitemstring(1,'laboral_provdistemp'))
ls_ddomi=trim(this.getitemstring(1,'vivienda1_distrito'))
ls_sexo=trim(this.getitemstring(1,'personas_insex'))
ls_est=trim(this.getitemstring(1,'vivienda2_estcivil'))
if isnull(ls_demp) then ls_demp=""
if isnull(ls_ddomi) then ls_ddomi=""
if isnull(ls_est) then ls_est=""
if isnull(ls_sexo) then ls_sexo=""
ls_where="WHERE"
if ls_sexo <> '' then ls_where=ls_where + " insex like '%" + ls_sexo + "%' and "
if ls_est <> '' then ls_where=ls_where + " estcivil like '%" + ls_est + "%' and "
if ls_demp <> '' then ls_where=ls_where + " distemp like '%" + ls_demp + "%' and "
if ls_ddomi <> '' then ls_where=ls_where + " distrito like '%" + ls_ddomi + "%' and "
integer li_longitud
li_longitud=len(ls_where)
ls_where=left(ls_where, li_longitud - 5)
if ls_where='W' then
messagebox('Aviso!!!','Debe Considerar Un Filtro Para La Busqueda')
return
else
ls_query=ls_select + ls_where
end if
dw_2.SetSQLSelect(ls_query)
dw_2.retrieve( )
Con este código no tengo problemas solo me falta saber como realizar el código para los checkbox.
Espero que me entiendas mejor y así poder ayudarme de antemano muchas gracias por el interés prestado.
Este es el código que he utilizado para filtrar por sexo, estcivil, distrito domicilio y distrito empresa ahora me falta filtrar por medio de los checkbox
string ls_select, ls_where, ls_query
string ls_edad, ls_sexo, ls_est, ls_demp, ls_ddomi
this.accepttext()
ls_select= "SELECT personas.dni, "&
+ " personas.fecnac, "&
+ " personas.insex, "&
+ " personas.edad, "&
+ " personas.brut, "&
+ " personas.distemp, "&
+ " personas.distrito, "&
+ " personas.estcivil, "&
+ " personas.bcp, "&
+ " personas.interbank, "&
+ " personas.scotiabank, "&
+ " personas.bbva, "&
+ " personas.comercio, "&
+ " personas.citibank, "&
+ " personas.bif, "&
+ " personas.trabajo, "&
+ " personas.financor, "&
+ " personas.sudamericano, "&
+ " personas.financiero, "&
+ " personas.mibanco, "&
+ " personas.cmr "&
+ " FROM personas "
//int suei,suef,p,b
//P=Integer(sle_1.Text)
//B=Integer(sle_2.Text)
//
//suei=p
//suef=b
//
//dw_2.retrieve(suei,suef)
ls_demp=trim(this.getitemstring(1,'laboral_provdistemp'))
ls_ddomi=trim(this.getitemstring(1,'vivienda1_distrito'))
ls_sexo=trim(this.getitemstring(1,'personas_insex'))
ls_est=trim(this.getitemstring(1,'vivienda2_estcivil'))
if isnull(ls_demp) then ls_demp=""
if isnull(ls_ddomi) then ls_ddomi=""
if isnull(ls_est) then ls_est=""
if isnull(ls_sexo) then ls_sexo=""
ls_where="WHERE"
if ls_sexo <> '' then ls_where=ls_where + " insex like '%" + ls_sexo + "%' and "
if ls_est <> '' then ls_where=ls_where + " estcivil like '%" + ls_est + "%' and "
if ls_demp <> '' then ls_where=ls_where + " distemp like '%" + ls_demp + "%' and "
if ls_ddomi <> '' then ls_where=ls_where + " distrito like '%" + ls_ddomi + "%' and "
integer li_longitud
li_longitud=len(ls_where)
ls_where=left(ls_where, li_longitud - 5)
if ls_where='W' then
messagebox('Aviso!!!','Debe Considerar Un Filtro Para La Busqueda')
return
else
ls_query=ls_select + ls_where
end if
dw_2.SetSQLSelect(ls_query)
dw_2.retrieve( )
Con este código no tengo problemas solo me falta saber como realizar el código para los checkbox.
Espero que me entiendas mejor y así poder ayudarme de antemano muchas gracias por el interés prestado.
El select que me muestras esta OK.
A esto debes agregarle las opciones de filtrar según los ckecks, en la parte donde están los cheks, puedes agregar un Datawindow de tipo FreeForm External.
Los pasos son:
1. Nuevo DataWindow
2. Tipo FreeForm
3. Origen: External, que se encuentra en la ventana en donde eliges el DataSource (Quick select, SQL Select, Query, External ...) Seleccionas External
4. En la ventana que aparece, indicas por cada elemento, el nombre (name), por ejemplo 'bcp', en el tipo de datos (type) que se quede con string, y en longitud (length) le pones a 1, para que contenga "S", o "N", le das click a ADD, para agregar nuevos campos.
Después te aparece la ventana de diseño del DataWindow, y simplemente acomodas los datos a tu gusto, y en el Edit, le indicas a cada column, o campo, que va a ser del tipo checkbox (Style Type), en text le pones lo que deseas que muestre (ej, Scotiabank), en DataValue for On, le indicas que dato va a guardar cuando el checkbox este seleccionado, en nuestro caso le ponemos ES, y en Data Value for Off le pones N.
Luego este datawindow lo pegas en tu ventana y lo acomodas para que encaje bien
El tipo de DataWindow External, no se enlasa con ninguna tabla, se utiliza mayormente cuando se quiere presentar al usuario opciones que no se enlazan directamente con la data del sistema, como en este caso, que se usa para condiciones de filtro.
A esto debes agregarle las opciones de filtrar según los ckecks, en la parte donde están los cheks, puedes agregar un Datawindow de tipo FreeForm External.
Los pasos son:
1. Nuevo DataWindow
2. Tipo FreeForm
3. Origen: External, que se encuentra en la ventana en donde eliges el DataSource (Quick select, SQL Select, Query, External ...) Seleccionas External
4. En la ventana que aparece, indicas por cada elemento, el nombre (name), por ejemplo 'bcp', en el tipo de datos (type) que se quede con string, y en longitud (length) le pones a 1, para que contenga "S", o "N", le das click a ADD, para agregar nuevos campos.
Después te aparece la ventana de diseño del DataWindow, y simplemente acomodas los datos a tu gusto, y en el Edit, le indicas a cada column, o campo, que va a ser del tipo checkbox (Style Type), en text le pones lo que deseas que muestre (ej, Scotiabank), en DataValue for On, le indicas que dato va a guardar cuando el checkbox este seleccionado, en nuestro caso le ponemos ES, y en Data Value for Off le pones N.
Luego este datawindow lo pegas en tu ventana y lo acomodas para que encaje bien
El tipo de DataWindow External, no se enlasa con ninguna tabla, se utiliza mayormente cuando se quiere presentar al usuario opciones que no se enlazan directamente con la data del sistema, como en este caso, que se usa para condiciones de filtro.
Excelente Fernando lo he conseguido ya filtro por sexo, estcivil, distrito y por banco(bcp, inter, scot) realmente muchas gracias y una ultima pregunta claro si es que puedes ayudarme aunque ya me has ayudado mucho quiero filtrar ahora también por sueldo, para que me entiendas por ejemplo filtrar desde 1000 hasta 5000 (salario) desde el freeform external.
tendre q declarar otra variable = que con los check.
Ojala puedas ayudarme
Atentamente
MigueL
tendre q declarar otra variable = que con los check.
Ojala puedas ayudarme
Atentamente
MigueL
Si, en ese caso declaras otro objeto checkbox, en el Free Form external, que se llame checkbox_sueldo, y puedes acomodar el siguiente código en el evento ue_filtrar
...
If dw_2.object.checkbox_sueldo[1] = 'S' then
ls_filtro = ls_filtro + " AND sueldo = " + string(n_sueldo)
End If
...
Para esto, ya debes haber creado la variable n_sueldo y el contenido en ella.
...
If dw_2.object.checkbox_sueldo[1] = 'S' then
ls_filtro = ls_filtro + " AND sueldo = " + string(n_sueldo)
End If
...
Para esto, ya debes haber creado la variable n_sueldo y el contenido en ella.
No leí bien la parte del rango de sueldos,
para que te muestre un rango de sueldos, puedes declarar 2 variables n_ini, n_fin, que las puedes inicializar con datos del form.
Luego puedes agregar el código:
if dw_2.object.checkbox_rango[1] = 'S' then
ls_filtro = ls_filtro + " AND sueldo >= " + string(n_ini) + " AND sueldo <= " + string(n_fin)
end if
para que te muestre un rango de sueldos, puedes declarar 2 variables n_ini, n_fin, que las puedes inicializar con datos del form.
Luego puedes agregar el código:
if dw_2.object.checkbox_rango[1] = 'S' then
ls_filtro = ls_filtro + " AND sueldo >= " + string(n_ini) + " AND sueldo <= " + string(n_fin)
end if
Hola creo que me entendiste mal, yo debo tener 2 cajas de texto donde ingresare el sueldo de inicio y el sueldo final y según lo que haya ingresado realizara el filtrado ya no con check observa la imagen que puse ahí esta el formulario
Gracias
Atentamente
MigueL
Gracias
Atentamente
MigueL
Ok,
En ese caso, puedes agregar algo como esto:
Decimal ld_sueldo_inicial, ld_sueldo_final
ld_sueldo_inicial = decimal(sle_sueldo_inicial.text)
ld_sueldo_final = decimal(sle_sueldo_final.text)
// Debes haber agregado las 2 SingleLineEdit
y el comando para filtrar puede ser:
//Si vas a agregar el filtro junto a los checkbox
...
ls_filtro = ls_filtro + " AND sueldo >= " + string(n_ini) + " AND sueldo <= " + string(n_fin)
...
//Si vas a trabajar el filtro en forma independiente a los checkbox
ls_filtro = "sueldo >= " + string(d_sueldo_inicial) + " AND sueldo <= " + string(d_sueldo_final)
dw_1.SetFilter(ls_filtro)
dw_1.filter()
En ese caso, puedes agregar algo como esto:
Decimal ld_sueldo_inicial, ld_sueldo_final
ld_sueldo_inicial = decimal(sle_sueldo_inicial.text)
ld_sueldo_final = decimal(sle_sueldo_final.text)
// Debes haber agregado las 2 SingleLineEdit
y el comando para filtrar puede ser:
//Si vas a agregar el filtro junto a los checkbox
...
ls_filtro = ls_filtro + " AND sueldo >= " + string(n_ini) + " AND sueldo <= " + string(n_fin)
...
//Si vas a trabajar el filtro en forma independiente a los checkbox
ls_filtro = "sueldo >= " + string(d_sueldo_inicial) + " AND sueldo <= " + string(d_sueldo_final)
dw_1.SetFilter(ls_filtro)
dw_1.filter()
Hola, pero yo lo quiero hacer desde el freeform external sin sle_1.text sino yo declare en el external suei(number) y suef(number) ahora deseo que filtre según lo que ingrese en esos campos claro yo puedo chequear algunos check y a la vez también poner un rango de sueldos y solo me filtraría los que cumplan esos parámetros
Espero que me ayas entendido mejor
Atentamente
MigueL
Espero que me ayas entendido mejor
Atentamente
MigueL
Ok, en ese caso, modifica el evento que creamos ue_filtrar con este script:
String ls_filter = ""
///// aqui definimos las variables del sueldo inicial y final
Decimal ld_suei, ld_suef
ld_suei = dw_2.Object.suei[1]
ld_suef = dw_2.Object.suef[1]
//**************************//
// Creamos la condicion filter
if dw_2.Object.bcp[1] = 'S' then
ls_filter = ls_filter + " AND bcp > 0"
end if
if dw_2.Object.interbank[1] = 'S' then
ls_filter = ls_filter + " AND interbank > 0"
end if
if dw_2.Object.scotiabank[1] = 'S' then
ls_filter = ls_filter + " AND scotiabank > 0"
end if
//// Aquí agegamos las condiciones del sueldo al filtro
ls_filtro = ls_filtro + " AND sueldo >= " + string(ld_suei) + " AND sueldo <= " + string(ld_suef)
//**************************//
// Le quitamos en 'AND' que sobra
ls_filter = right(ls_filter, len(ls_filter) - 5)
//Recuperamos todo el grid
dw_1.Retrieve()
//Filtramos lo necesario
dw_1.SetFilter(ls_filter)
dw_1.Filter()
Y en el objeto dw_2.itemchanged lo llamas igual:
This.AcceptText()
Parent.PostEvent("ue_filtrar")
Ahora si debe funcionar,
Fernando
String ls_filter = ""
///// aqui definimos las variables del sueldo inicial y final
Decimal ld_suei, ld_suef
ld_suei = dw_2.Object.suei[1]
ld_suef = dw_2.Object.suef[1]
//**************************//
// Creamos la condicion filter
if dw_2.Object.bcp[1] = 'S' then
ls_filter = ls_filter + " AND bcp > 0"
end if
if dw_2.Object.interbank[1] = 'S' then
ls_filter = ls_filter + " AND interbank > 0"
end if
if dw_2.Object.scotiabank[1] = 'S' then
ls_filter = ls_filter + " AND scotiabank > 0"
end if
//// Aquí agegamos las condiciones del sueldo al filtro
ls_filtro = ls_filtro + " AND sueldo >= " + string(ld_suei) + " AND sueldo <= " + string(ld_suef)
//**************************//
// Le quitamos en 'AND' que sobra
ls_filter = right(ls_filter, len(ls_filter) - 5)
//Recuperamos todo el grid
dw_1.Retrieve()
//Filtramos lo necesario
dw_1.SetFilter(ls_filter)
dw_1.Filter()
Y en el objeto dw_2.itemchanged lo llamas igual:
This.AcceptText()
Parent.PostEvent("ue_filtrar")
Ahora si debe funcionar,
Fernando
Excelente mucha pero muchas gracias no solo por por ayudarme sino también por haberte tomado el interés de ayudar. Realmente gracias espero seguir contando con tu apoyo en otra oportunidad ahora no se como contactarte pero espero que cuando veas mis preguntas me ayudes.
Realmente Agradecido...
Atentamente
MigueL
Realmente Agradecido...
Atentamente
MigueL
- Compartir respuesta
- Anónimo
ahora mismo