Te sigo diciendo que al no saber como trabajas me tengo que imaginar las cosas. Por ejemplo, vamos a suponer que tengo una tabla Compras y otra Detalle Compras como explicaba arriba.
Si tengo el numero de factura que por definición tiene que ser único e irrepetible(no puede haber dos facturas con el mismo número), ¿para qué necesito más?. Si yo sé tu Documento Nacional de identidad, si voy Al registro Civil, puedo saber donde vives, si tienes hijos etc. Si voy a la Jefatura de Tráfico puedo saber cuántos vehículos, modelos, etc que tienes. Si voy al banco, puedo saber cuantas cuentas tienes, etc. Pues esto es lo mismo, si en una tabla tengo el Num Factura, en las demás puedo sacar los datos que quiera.
Normalmente el "centro de operaciones" es un formulario al que he llamado Principal
En ese combinado me aparecen las facturas que no están totalmente pagadas. Si elijo la 222
Se abre el formulario Pagos(con origen en la tabla Compras, ya que lo que tengo que ir pagando es una Compra). En el subformulario anoto la fecha, lo que pago y en Pendiente me pone la cantidad que me queda por pagar de esa factura.
Cuando Pendiente sea 0, te marca como pagada, en la tabla Compras, esa factura y ya no aparece más como impagada.
¿Qué en un determinado momento quiero saber lo que me falta por pagar de una factura? En el formulario Principal, en el combinado de abajo, elijo una, en este caso la 222, ya que no he rellenado más,
Y cuando la elijo
Que quiero saber cuanto llevo pagado de una factura sin tener que abrir el formulario Pagos, le pongo un combinado como el anterior, etc, etc.
Y con los datos, tal como están, puedes hacer los informes que quieras, compras por mes, entre fechas, pagos por mes, etc, etc.
El código del formulario Principal es
Private Sub ElegirFactura_AfterUpdate()
DoCmd.OpenForm "pagos", , , "numfactura='" & Me.ElegirFactura & "'", , acDialog
End Sub
Private Sub Pendiente_AfterUpdate()
Dim c As Currency
c = DLast("pendiente", "detallepagos", "numfactura='" & Me.Pendiente & "'")
MsgBox "A esta factura aún le queda por pagar " & c & " eurazos", vbOKOnly, "Puedes pagar cuando quieras"
End Sub
Y el código del subformulario DetallePagos es
Private Sub Pagado_AfterUpdate()
DoCmd.RunCommand acCmdSaveRecord
Pendiente = DLookup("totalfactura", "compras", "numfactura='" & Me.NumFactura & "'") - DSum("pagado", "DetallePagos", "numfactura='" & Me.NumFactura & "'")
If Pendiente = 0 Then
DoCmd.RunSQL "update compras set pagada=true where numfactura='" & Me.NumFactura & "'"
End If
Pendiente.SetFocus
End Sub