Formulario que permita cerrar sin guardar datos access

Tengo un formulario llamado FrIngresoFacturaCompra con dos subformularios Factura y Detalle de Factura.

El formulario trae o carga la información del proveedor.

En el subformulario factura se guarda la fecha y numero de la factura.

El subformulario detalle carga los productos de este numero de factura.

El proceso de Ingreso de facturas de Compra se hace hasta aquí muy bien.

Pero el problema radica en que al llegar al ingreso del numero de la factura y el usuario decide cancelar el ingreso, o se apaga el equipo o se cierra el programa etc...

Al intentar de nuevo a ingresar la factura el sistema no le permite repetir el numero de factura (porque ya se había digitado en el intento anterior y porque la tabla tiene configurado si, sin duplicados). La idea mía seria poner cuadros de texto independientes tanto para el numero de factura como para los detalles de la factura y solo al darle al botón guardar se llenen las tablas correspondientes para cada dato.

Así evitar que se llenen las tablas a medias.

¿Cómo podría lograr esto?

Respuesta
2

Para que tantos formularios. Este es el problema de los formularios dependientes al registrar algo ya se da por guardado. Le recomiendo trabajar en lo posible con formularios independientes. En mi caso particular utilizo una tabla temporal, un formulario principal y un subformulario. Por ejemplo.

Observe que deshabilito el botón cerrar del formulario, si el usuario hace clic en terminar y no ha grabado la factura, le informa con este mensaje.

Este es el formulario en diseño:

Observe que el formulario principal tiene la información de la factura pero los datos no dependen de ningún formulario, existen muchas formas de hacerlo, el subformulario como es continuo utilizo una tabla temporal para registrar el detalle de la factura. No obstante, utilizo como servidor de datos PostgreSQL pero no importa, solo que es más seguro que Access y no hay la limitación de datos.

Explicar por acá todo el código que contiene el formulario sería muy extenso, si quiere escríbame a [email protected] y así nos ponemos de acuerdo para una charla por Zoom. Este caso favor incluir en el asunto el nombre de la consulta.

¿Qué pasa si se apaga el equipo o el usuario cierra el formulario con ALT F4?. Queda registrada la factura, no hay opción de preguntar al usuario si retira la factura.

Respondo yo mismo. Al abrir el formulario se debe verificar si la ultima factura existe en la tabla detalles de la factura mediante Dcount(). Si existe no hacer nada sino retirar el registro de la tabla facturas, aunque se puede preguntar si continua con la factura. Esto en formulario dependiente.

1 respuesta más de otro experto

Respuesta
2

Puedes hacerlo como quieras. De todas formas, permíteme una consideración. Si en el formulario Factura tienes un campo que indique que proveedor es, como puede ser, Idproveedor, Nit, etc., no necesitas para nada los demás campos, ya que con ese campo puedes "averiguarr" los otros, usando, por ejemplo la función Dlookup. Te decía que puedes hacerlo como quieras, lo único que tienes que decidir es como quieres que actúe el formulario al cerrarse. Por ejemplo, puedes ver el diseño del formulario y subformulario, que dependen de la tabla Compras y de la tabla DetalleCompra.

Ahora voy a anotar sólo el número de factura

Cuando lo cierro, manteniendo el botón Cerrar del formulario( ¿para qué quitarlo?)

Si le digo que sí, ya que no se ha completado, me lo elimina y la tabla Compras queda como

El código del evento Al cerrar del formulario es, simplemente

Private Sub Form_Close()
If IsNull([IdProveedor]) Or IsNull(Forms!compras!DetalleCompra.Form!IdProducto) Then
MsgBox " ¿Quiere que el registro se elimine?", vbYesNo, "Luego no te quejes, yo te lo advertí"
If vbYes Then
DoCmd.SetWarnings False
DoCmd.RunSQL "delete * from compras where numfactura='" & Me.NumFactura & "'"
Else
Exit Sub
End If
End If
End Sub

O sea, le digo que si no ha rellenado el proveedor, o que no ha puesto ningún producto en el subformulario, me haga la pregunta. Si le digo que lo elimine lo hace y si le digo que no lo elimine, lo guarda

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas