Generar informe a partir de datos de formulario con campos independientes

Tengo un formulario con 3 campos independientes: dos de fecha (Fdesde y Fhasta) y un cuadro combinado (TxtEmpresa) que busca valores de texto en una consulta. A partir de aquí, quiero poner un botón que genere un informe Pedidos que muestre los datos filtrados según los campos del formulario.

Si el cuadro combinado TxtEmpresa está vacío, al hacer clic en el botón cmdFiltro, se debe generar el informe con todas las empresas que tengan su campo FechaPedido comprendido entre el intervalo de fechas Fdesde<=FechaPedido=<Fhasta

Si el cuadro combinado TxtEmpresa no está vacío, al hacer clic en el botón cmdFiltro, se debe generar el informe con la empresa seleccionada en TxtEmpresa y que tenga su campo FechaPedido comprendido entre el intervalo de fechas Fdesde<=FechaPedido=<Fhasta

Y si no es rizar el rizo demasiado, que se establezca una condición para que Fdesde no pueda seer mayor que Fhasta, pero esto no es tan importante.

1 Respuesta

Respuesta
1

Lo que vamos a hacer es pasar el origen del registro del informe desde un botón del formulario mediante una variable, esta variable tendrá que ser pública para que la podamos utilizar en cualquier sitio de la Base de Datos.
En la pestaña módulos abres uno nuevo y declaras la variable como pública:
Public vsql as string
Guardas el módulo con el nombre que quieras.
Tenemos la tabla Empresas campos: Empresa y Fecha
Creas el informe basado en esta tabla, lo llamaré Empresas, en las propiedades del informe, en la acción Al abrir --- procedimiento de evento --- picas en el cuadrado de la derecha, el de los ... para abrir el generador de código y pones:
Report.RecordSource = vsql
Es decir, igualamos el origen del control del informe a la variable vsql
Un formulario:
Un cuadro combinado (selEmpresa), 2 cuadros de texto (fdesde y fhasta) y un botón, en las propiedades del botón:
Nombre: Enviar
Al hacer clic --- procedimiento de evento --- código:
If CDate(Form!Fdesde.Value) > CDate(Form!fHasta.Value) Then
MsgBox "Fechas Incorrectas"
Else
If IsNull(Form!selEmpresa.Value) Then
vsql = "Select * from Empresas where Fecha Between cdate('" & Form!Fdesde.Value & "') and cdate('" & Form!fHasta.Value & "')"
Else
vsql = "Select * from Empresas where Fecha Between cdate('" & Form!Fdesde.Value & "') and cdate('" & Form!fHasta.Value & "') and Empresa='" & Form!selEmpresa.Value & "'"
End If
DoCmd.OpenReport "Empresas", acViewPreview
End If
Es decir, damos valor a la variable vsql según sea nulo o no el valor del cuadro combinado.
Verás que utilizo la función cDate() con los valores de los cuadros de texto, esto es porque un cuadro de texto devuelve un texto y el campo de la tabla es de fecha, por lo que hay que pasar de texto a fecha.

Otra cosa... en vez de cuadros de texto para introducir la fecha... ¿por qué no pones 2 calendarios para simplemente picarlas y no escribirlas con los errores que eso conlleva...?

En la página: http://angelessebas.es/

En el apartado supuestos y soluciones ---> Calendarios

Tienes un ejemplo de como funcionan.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas