Sumar Productos Iguales en una factura para que no existan id de productos repetidos y se sumen los importes si así se quisiera

Como crear en el subformulario la opción que me permita que al colocar el mismo código de producto lo sume.

2 Respuestas

Respuesta
1

No he entendido la pregunta. No sé si te refieres a que si, por ejemplo, en un registro nuevo pusieras el código de un producto que ya está en un registro previo, no "rellene" ese registro y las cantidades se las sume al registro que ya está, o si por el contrario, que en un campo al que para el ejemplo llamaremos TotalProducto, te vaya "arrastrando" la suma de las cantidades de ese producto.

Correcto "En un registro nuevo pusieras el código de un producto que ya está en un registro previo, no "rellene" ese registro y las cantidades se las sume al registro que ya está" , es así...

Pero, al menos tendrás que "llegar" hasta el control Cantidad para saber lo que le tiene que sumar "al otro". Por ejemplo, tengo un subformulario DetalleCompra, donde el combinado Producto tiene dos columnas, la dependiente Idproducto y otra Producto( siempre he pensado que es más fácil acordarse de un nombre que de un frío número o código). Tengo dos registros de productos ya llenos. En un nuevo registro voy a repetir un producto, en este caso el Té. Lo elijo, anoto el precio y la cantidad. Puedes ver que el cursor aún está en el control Cantidad

Cuando pulso Enter, me borra el último registro y su cantidad se la suma al primero. Formulario y subformulario están relacionados por IdCompra. El código del evento Después de actualizar del cuadro de texto Cantidad es

Private Sub Cantidad_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdSaveRecord
If DCount("*", "detallecompra", "idproducto=" & Me.IdProducto & "") > 1 Then
DoCmd.RunSQL "update detallecompra set cantidad=cantidad+" & Me.Cantidad & " where idproducto=" & Me.IdProducto & " and Idcompra=" & Me.IdCompra & ""
DoCmd.RunSQL "delete * from detallecompra where subtotal is null"
Me.Requery
End If
End Sub

Primero, me guarda el registro y me comprueba si ya hay un registro con el mismo producto. En caso de que sea así, me actualiza el campo cantidad de ese producto, a la que había más la que acabo de escribir y me borra el último registro ya que Subtotal es nulo( pero podría ser otro criterio). Por último, me reconsulta el origen de registros del subformulario.

Excelente esa es la idea deja probarlo de antemano muchas gracias por su apoyo...

Me había olvidado de poner la imagen de cómo queda

Respuesta
1

Igualmente no lo entiendo si coloca una imagen nos daría mejor aproximación.

¡Gracias! 

He preparado este ejemplo, pero antes unas observaciones si el campo subtotal está definido en la tabla como requerido no se puede retirar el registro con la instrucción:

DELETE * FROM detallecompra WHERE subtotal IS NULL

Y antes access captura el error del valor requerido.

Faltaría el número de la factura si la tabla detallecompra NO es una tabla temporal, porque ya puede estar el idproducto en otras facturas, instrucción:

If DCOUNT("*","detallecompra","idproducto=" & Me.Idproducto & "")>1

En mi ejemplo clono el recordset del formulario y hago el proceso.

Este es el ejemplo:

Tengo esta factura en proceso y voy a seleccionar el producto "Arenque ahumado", que ya tiene 12 unidades y le voy a adicionar 8,

Después de ingresar la cantidad obtengo:

Como se observa la cantidad aumentó a 20 y se actualizaron los valores del subtotal, total y vr factura. Aunque sobra mostrar el subtotal lo deje visible para el ejemplo. No explico el código porque se haría extenso el texto de la respuesta.

Si quiere el ejemplo lo puede utilizar a [email protected], favor anotar en el asunto la consulta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas