Botón de comando para seleccionar factura?

En un formulario tengo un botón de comando que cuando le clico se abre una ventana y me pregunta el nº de factura, para ver directamente en un informe la factura que yo quiera. El error esta en que no hace caso del nº de factura que le pongo y me visualiza otra distinta.

¿Cómo lo puedo hacer para que al clicarle al botón de comando e introducirle el nº de factura me visualice únicamente la factura deseada?

1 Respuesta

Respuesta
1

Sin ver lo que tienes, te doy una idea general.

Suponiendo que tu tabla/consulta sobre la que haces el informe se llama "Facturas", y tiene un campo llamado "NumFact", que será de tipo numérico, que es por el que quieres filtrar, y si el informe se llama "RFacturas", en el código asociado al botón, le has de poner:
Dim miFact as Integer

miFact=InputBox("Teclee un número de factura.")

If StrPtr(miFact)=0 Then
Msgbox "Operación Cancelada",vbOkOnly

Exit Sub

End If

DoCmd.OpenReport "RFactura", acViewPreview, , "[NumFact]=" & miFact

Si tu campo NumFact fuera alfanumérico, el código a usar sería este otro:

Dim miFact as String

miFact=InputBox("Teclee un número de factura.")

If StrPtr(miFact)=0 Then
Msgbox "Operación Cancelada",vbOkOnly

Exit Sub

End If

DoCmd.OpenReport "RFactura", acViewPreview, , "[NumFact]='" & miFact & "'"

Otra opción, más "sencilla", sería crearte una consulta con los campos que necesites mostrar, en el campo en el que tengas el número de factura, en la fila de criterios le pones:

[Escribe el número de factura]

Y haces el informe sobre esta consulta. Luego, en el botón, lo único que le tienes que decir es que abra directamente el informe. Al tener la consulta parametrizada, ya se te encarga de pedir el número y filtrar el informe (si existe esa factura)

Hola, perdón me voy a explicar mejor..

En el formulario llamado "facturacion3" tengo un botón de comando llamado "Ver factura" el cual si me voy a propiedades en hacer clic tengo el código siguiente:

Private Sub Ver_factura_Click()

On Error GoTo Err_Ver_factura_Click
Me.Pago = Null

Dim stDocName As String

stDocName = "informe factura actual"
DoCmd.OpenReport stDocName, acPreview, , "NumFactura= " & [Nº de factura] & ""

Exit_Ver_factura_Click:
Exit Sub

Err_Ver_factura_Click:
MsgBox Err.Description
Resume Exit_Ver_factura_Click
End Sub

Entonces después de todo esto, ¿tendría qué poner lo que me indicas tu?

¿[Nº de factura] qué es?, ¿Un cuadro de texto de tu formulario facturacion3?

¿El campo NumFactura de la tabla, de qué tipo es (número, texto...)?

¿Te da algún error o simplemente te abre en la factura que quiere (la primera de la tabla, imagino)?

Hola, si Nº de Factura es un cuadro de texto del formulario3 que viene de la tabla llamada facturación, el cuadro de texto se llama NumFactura y viene de la tabla donde el campo se llama Nº de Factura, el cual es numérico.

Si me sitúo es la factura nº 122, por ejemplo, y le ciclo al botón de comando y le digo la fra nº 122, me aparece esa y si le doy a la flecha de siguiente registro, me aparece la siguiente. Por el contrario si le pongo el nº de fra 123 me aparece el informe en blanco sin opción a darle al siguiente registro.

Por otro lado si me voy a la fra nº 123 del formulario y le clico al botón de comando y pongo la nº 122, me sale en blanco, si le pongo la nº 123, me aparece la nº 122 y en la flecha de siguiente registro me aparece la nº 123 y si pongo un nº de factura que no existe, me aparece el informe en blanco.

Me gustaría que al escribir el nº de factura, te apareciera unicamente la factura deseada, y si escribes un nº de factura que no las has introducido en el formulario te salga un mensaje algo así "No existe ninguna factura con esta numeración".

Como ya te comenté, en el código del botón de comando ya tengo algo introducido.

Ya me dices como lo debería hacer.

Gracias!

Pues con tu explicación aún me has generado más dudas en cuanto a los nombres de los controles... Además, hay algo que no me estás contando, porque a la vista del código de tu botón, no veo el por qué te pregunta el número de factura (me imagino que tu informe lo tendrás hecho sobre una consulta y en esta consulta es donde le dices que te pregunte...)

Te digo cómo lo haría yo, y luego ves cómo lo adaptas a tu caso particular.

1º/ El informe lo haría directamente sobre la tabla de facturas, o si necesitas datos de varias tablas, sobre una consulta que reúna todos esos campos, pero la consulta sin ponerle parámetros.

2º/ En el formulario, en el botón de ver factura se me ocurren dos opciones:

Opción 1: que al pulsar el botón se muestre en el informe la factura correspondiente al registro actual del formulario, sin preguntar nada.

Opción 2: ponerle al formulario un cuadro de texto independiente (llamado, por ejemplo, txtSelFact) y que el botón abra el informe en el registro correspondiente al número de factura introducido en ese cuadro de texto.

Para que el informe no se te abra si no hay la factura que le dices, has de programar el evento "Al no haber datos" del informe.

Te dejo un ejemplo con los códigos funcionando, tienes las dos opciones en dos botones del mismo formulario, y ambos abren el mismo informe.

Perdón por el retraso, lo estoy intentando y cambio tus nombres por los míos, pero creo que algo estoy haciendo mal. Me gusta la idea de poner 2 botones de comando y uno que te abra la actual y el otro que busques la factura deseada.

Te digo mis nombre:

Tabla: facturación

Formulario: facturacion3

Informe: informe factura actual

NumFactura

Fecha

BImponible

IVA

ImporteIVA

Total

El botón de comando para ver la factura actual: Ver factura

El botón de comando para buscar la factura: BuscarFactura

Creo que no me dejo nada, a ver si me lo puedes volver a enviar por favor!

Muchas gracias por tu ayuda!

Private Sub Ver_factura_Click()
If Nz(Me.NumFact, -1) = -1 Then
MsgBox "No hay un número de factura para visualizar.", vbInformation, "ERROR"
Else
DoCmd.OpenReport "informe factura actual", acViewPreview, , "[NumFact]=" & Me.NumFact
End If
End Sub

Private Sub BuscarFactura_Click()
On Error GoTo sol_err
If Nz(Me.txtSelFact, -1) = -1 Then
MsgBox "No has introducido un número de factura.", vbInformation, "ERROR"
Else
DoCmd.OpenReport "informe factura actual", acViewPreview, , "[NumFact]=" & Me.txtSelFact
End If
Salida:
Exit Sub
sol_err:
If Err.Number = 2501 Then
'Error provocado al cancelar la apertura del informe, pq no hay datos
Else
MsgBox "Se ha producido el error " & Err.Number & ":" & vbCrLf & Err.Description, vbInformation, "ERROR"
End If
End Sub

Lo que está en negrita es el nombre del cuadro de texto en el que pondrás el número de factura que quieres mostrar en el informe. Lo que está en cursiva, es el nombre del campo en la tabla/consulta.

Hola, ok, el botón de Ver Factura es correcto porque ya me aparece la factura que esta en pantalla.

Pero en en botón de BuscarFactura, hay algo que falla porque cuando pongo el nº de factura en el cuadro de texto llamado txtSelFact, se me habré un parámetro que me indica Nº de factura y al ponerle el nº no me aparece correcto.

Esto es lo que tengo:

Private Sub BuscarFactura_Click()
On Error GoTo sol_err
If Nz(Me.txtSelFact, -1) = -1 Then
MsgBox "No has introducido un número de factura.", vbInformation, "ERROR"
Else
DoCmd.OpenReport "informe factura actual", acViewPreview, , "[Nº de factura]=" & Me.txtSelFact
End If
Salida:
Exit Sub
sol_err:
If Err.Number = 2501 Then
'Error provocado al cancelar la apertura del informe, pq no hay datos
Else
MsgBox "Se ha producido el error " & Err.Number & ":" & vbCrLf & Err.Description, vbInformation, "ERROR"
End If
End Sub

Ya me comentas!

Gracias.

La línea del DoCmd. OpenReport tiene que ser igual que la que te funciona con el otro botón, lo único que tienes que cambiar es la parte del final:

en vez de: Me. NumFact

tiene que ser: Me.txtSetFact

Hola, ahora me funciona, lo único que cuando pongo un nº de factura que no existe, no me aparece ningún mensaje de "error, no existe factura con esta numeración" o algo así. Ahora le pongo un nº de factura que no existe y me aparece el informe en blanco.

Te digo lo que tengo ahora mismo:

Private Sub Buscar_nº_de_Factura_Click()
On Error GoTo sol_err
If Nz(Me.txtSelFact, -1) = -1 Then
MsgBox "No has introducido un número de factura.", vbInformation, "ERROR"
Else
DoCmd.OpenReport "informe factura actual", acViewPreview, , "[Nº de factura]=" & Me.txtSelFact
End If
Salida:
Exit Sub
sol_err:
If Err.Number = 2501 Then
'Error provocado al cancelar la apertura del informe, pq no hay datos'
Else
MsgBox "Se ha producido el error " & Err.Number & ":" & vbCrLf & Err.Description, vbInformation, "ERROR"
End If
End Sub

Gracias!

En el ejemplo que te pasé, el código del evento "Al no haber datos" del informe, que es el que te manda ese mensaje

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas