Hay varias formas de hacerlo, en mi caso siempre utilizo tablas independientes porque evito conflictos en entornos multiusuario, porque utilizo PostgreSQL como BackEnd.
Para abreviar en este ejemplo utilizo 2 tablas
TABLAS
No obstante, para hacer el ejemplo más simple solo utilizo la tabla temporal temventa para el subformulario que es donde se debe controlar el ingreso de productos de la factura.
Formulario principal con el subformulario
Voy a realizar otro ingreso del producto "Aceite", como ya existe se la cantidad debe aumentar en 1 unidad y el vrventa debe calcularse, tanto del producto como general.
Observe que la cantidad ahora es 2 y los valores cambiaron, es decir, se incrementaron en $1.700. Puede cambiarse manualmente la cantidad nuevamente a 1 ! Pero no es lo recomendado ! Se deben buscar otros mecanismos más seguros.
Como asumo que el usuario que hace la consulta sabe VBA solo presento el código del subformulario.
Código para actualizar cuando se cambia manualmente la cantidad ! Repito no es lo mejor !
Private Sub cantidad_AfterUpdate()
If Me.cboProducto > 0 Then
Me.vrventa = Me.costounitario * Me.cantidad
Me.Parent.Refresh
End If
End Sub
Código del evento Después de actualizar el producto (en su caso reemplácelo por el código de barras)Observe que utilizo el código de error 2105 porque en la tabla temporal el idproducto se diseñó indexado y sin duplicados. Si hay error es porque ya existe producto, me ubico sobre éste utilizando Bookmark. Es decir, si no alcanzo el final del archivo EOF() aumento la cantidad y vuelvo a calcular el costo de la venta. Envío el cursor a un nuevo registro y refresco el formulario padre porque llamo la siguiente función para actualizar la suma.
Function totalventa()
totalventa = DSum("vrventa", "temventa")
End Function
Formulario Principal
Observe que he definido como Origen del control la función.
Si quieren el ejemplo lo pueden solicitar a [email protected] favor en el asunto anotar la consulta.