Sumar o restar entradas y salidas en un campo

Hola a tod@s, necesito de vuestra ayuda, necesito que el campo cantidad disponible de subformulario se vaya sumando o restando según vaya poniendo en campo MOVIMIENTO si es de entrada o salida, si es entrada que sume y si es salida que reste, ¿hay alguna forma de hacerlo?

2 respuestas

Respuesta
1

Puedes hacerlo de mil formas. Pero, pregunto, ¿No sería más lógico que UN cofrade compre VARIOS artículos?

Por otro lado, el beneficio será cuando vendas un artículo, ya que cuando lo compras todavía no hay beneficio.

Es de suponer que tienes una serie de artículos que vas comprando y vendiendo. Por tanto deberías tener una tabla Artículos con, por ejemplo, IdArtículo, Artículo, precio( que ya se irá modificando cada vez que compres) y Existencias( que también se irá modificando a medida que vayas comprando y vendiendo). Luego una Tabla Movimientos con, por ejemplo, IdCofrade, Cofrade, etc., y otra tabla Movimientos con IdArticulo(numérico), Idcofrade(numérico), FechaMov, Concepto, Precio, Cantidad

Y con Artículos y Movimientos haces un formulario con subformulario. No necesitas el subformulario de la esquina superior derecha.

Mira, si quieres, repito, si quieres, mándame un mensaje (sólo el mensaje) a [email protected] y te mando un ejemplo.

Si lo haces, en el asunto del mensaje pon tu alias Angel Bote, ya que si no sé quien me escribe ni los abro.

Estas son las tablas que tengo ... en el formulario tengo los artículos, en el subformulaio de abajo Movimiento de articulo, y en el sunformulario de arriba inventario, donde refleja las cantidades disponiebles ... y lo que quiero es cuando en el subformulario movimiento de artículos en el tipo de movimiento cuando ponga entrada me lo sume en cantidades disponibles o salida que me lo reste.

No soy partidario de las relaciones porque sí, ya que para eso están las funciones Dlookup, Dcount, etc. Pero si que se deben relacionar cuando van a trabajar juntas, caso de formulario y subformulario, informe y subinforme, nada más. Por ejemplo, si tengo una tabla Productos donde se refleja el nombre del producto, sus existencias y el beneficio acumulado que me va generando ese producto cuando lo vendo y otra tabla Movimientos que va a recoger los ídem de ese producto y hago un formulario con subformulario

Cunado selecciono el concepto, en precio me pone el que figura en el formulario( que no sé de donde sale ni para que sirve, ya que el verdadero precio se determina cuando te entra un producto) y en Antes me pone las existencias que hay de ese producto hasta ese momento. Cuando anoto una cantidad y pulso Enter

En después me pone las nuevas existencias de ese producto, me actualiza las existencias de la tabla Productos, y como es una entrada no hay beneficios. Por el contrario si pongo una salida

En antes me pone las existencias que hay en ese momento y cuando pulso Enter, como es "una venta".

Me rebaja las existencias y en beneficio me pone la diferencia acumulada de ese producto de

Cantidad*(precioventa-preciocompra). Otro movimiento

Al pulsar Enter

Es decir, tengo siempre las existencias de un producto actualizadas sin necesidad de un segundo subformulario y en Beneficio me va mostrando los beneficios acumulados de ese producto.

El código del evento Después de actualizar del combinado Concepto es

Private Sub Concepto_AfterUpdate()
DoCmd.SetWarnings False
Antes = Nz(DLookup("existencias", "productos", "idproducto=" & Me.IdProducto & ""))
Precio = Me.Parent!precioventa
Cantidad.SetFocus
End Sub

Y el código del evento Después de actualizar del control Cantidad es

Private Sub Cantidad_AfterUpdate()
DoCmd.RunCommand acCmdSaveRecord
If Concepto = "entrada" Then
Despues = Antes + Cantidad
Else
Despues = Antes - Cantidad
Me.Parent!beneficio = DSum("Cantidad", "productos", "idproducto=" & Me.IdProducto & " and concepto=""Salida""") * (Me.Parent!precioventa - Me.Parent!preciocompra)
End If
DoCmd.RunSQL "update productos set existencias=Despues where idproducto=" & Me.IdProducto & ""
End Sub

También se le podría poner un simple cuadro de texto en el formulario que te fuera mostrando los "vaivenes" de las existencias de un producto entre entradas y salidas.

No le hagas caso al retrasado mental de Eperezfer. Viene a decirte que estudies mecánica de cohetes por si un día fueras astronauta.

Respuesta

Me parece absurdo que no se de importancia a las relaciones, es desconocer el buen diseño de una base de datos relacional, esto porque las personas no salen de utilizar Dlookup() y DSum() y DCoun() algo que no existe en SQL y hace que se creen malos hábitos de programación. Imagínese haciendo estos cálculos en un sistema multiusuario, mientras se hace un Dlookup() y otra "terminal" va vender el mismo producto puede estar obteniendo una existencia que ya no corresponda.

Eso que le muestran no es la forma de manejar un inventario.

Si quiere algo completo puede solicitarlo a [email protected] favor en el asunto anotar la consulta.

Siga las respuestas de este mediocre y no llegará lejos. Es todo un ignorante que se aprovecha del poco conocimiento de los usuarios para responderlos cualquier cosa. No tiene ni edea de la programación cliente servidor. ¿No es cierto retrasado Julián?

Ya usted es quien decide.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas