Actualización de campo Constante

Hola Experto :D, Ya Estoy Terminando La Base De Datos, Solo me hace falta un detallito y es este
Tengo 3 Formularios
Ventas
Productos
Compras
El Formulario Ventas Tiene Un Campo Llamado Cantidad
El Formulario Productos Tiene Un Campo Llamado Cantidad Restante
El Formulario Compras Tiene Un Campo Llamado Cantidad Comprada
lo que necesito es, que al llenar el campo cantidad (formulario ventas) con un valor, tome el valor de este campo y lo reste del campo Cantidad Restante (formulario Productos) que sea correspondiente al producto al cual se le hace referencia.
Aquí es donde me esta dando vueltas:
Digamos que en el campo cantidad (formulario ventas) puse 50
digamos que el campo cantidad restante (formulario productos) tiene un valor de 100
al poner el valor 50 en cantidad me reste esta cantidad por el valor de cantidad restante en este caso el resultado vendría siendo 50. Hasta aquí todo va bien
pero digamos que la resta ya se efectúo y en cantidad restante tenemos 50, pero hubo un error de redacción y no era 50, Era 5 lo que se quería poner en el campo cantidad.
Se va al registro donde tenemos el 50 y lo cambiamos por un 5, efectivamente, queremos que el resultado adecuado, ¿qué seria 95
como se haría esto?
El otro formulario compras, es exactamente igual pero sumando
muchas gracias de antemano :D
aquí una imagen de los formularios
Respuesta
1
No acabo de entender bien tu consulta, creo que porque me falta algo de información sobre el proceso.
Te voy a describir el proceso que creo que realizas, a ver si es correcto, y dando por supuesto que trabajas con los tres formularios siempre abiertos a la vez:
- Rellenas primero los datos el formulario Compras (y ahí asignas un valor a la cantidad comprada)
- Te vas después al formulario Ventas y rellenas los datos de la venta (y ahí asignas un valor a la cantidad vendida)
- En el formulario Productos la "Cantidad resultante" se actualiza automáticamente (y su valor es la diferencia entre ambas <-¿Esto ya lo sabes hacer?)
¿Es así? Si no es así dime cómo es el proceso a ver si puedo hacer alguna cosilla.
No no trabajo con los 3 formulariso abiertos a la vez, los abrí para mostar los campos
El campo cantidad restante tiene un numero predeterminado que es 0 en el formulario productos este numero aumenta conforme valla llenando la tabla compras (aquí es donde esta la suma) y cada ves que venda ese producto (formulario ventas) reste la cantidad que vendí, a cantidad restantes que tenia en productos
Lo cierto es que lo que pides es un poco complicado, no porque el proceso sea complicado sino porque desconozco cómo está estructurada tu base de datos, ni cómo son sus relaciones (¡Intuirlo no es saberlo!). Además, me da la sensación de que tú identificas los productos por nombre de producto, y no por código de producto, y eso complica un poco las cosas.
Si me permites voy a comentarte un par de cosas antes de darte una posible solución a lo que pides (ponte cómodo, porque esto va a parecer un capítulo de libro de Access ;) ). Si comento algo que ya sabes te pido disculpas, pero piensa que yo no sé hasta dónde tú sabes.
Normalmente en Access se suele utilizar un código numérico para identificar inequívocamente el elemento principal de la tabla. Es decir, código cliente, código trabajador, código producto. No se suele utilizar el nombre porque se parte de la premisa que otras personas van a utilizar la BD y que no tienen ni idea de Access (sólo saben que es un programa). Por eso si, por ejemplo, tu das de alta un producto llamado "Melón" y el usuario, en el formulario de ventas, escribe que vende "Melon" (sin tilde), o "melon" (en minúscula), para Access eso ya es una cosa diferente. Si el melón tiene el código 24 el usuario, si quiere vender un melón, tendrá forzosamente que introducir el código 24. Así se reducen posibles errores (entiende esto como un ejemplo general).
Te voy a explicar el proceso utilizando una mezcla de consultas y VBA para que puedas ver todos los pasos de una manera más directa. Digamos que vamos a hacer un "trabajo artesanal". Creo que aprenderás más cosas si lo hacemos así.
Partiendo de la base de que pienso que lo que tú quieres es conseguir que, al abrir el formulario Productos, te aparezca automáticamente el stock de ese producto en el campo cantidad restante, solamente me queda darte un último consejo: testea todos los pasos que hagas. Es un fastidio que, después de horas de trabajo, el "final" no funcione porque no has testeado los "parciales". En la explicación yo te escribiré TESTEA en los puntos donde yo testearía, para ver si esos resultados parciales son correctos.
Manos a la obra:
A) Creamos la primera consulta, que nos suma todas las cantidades compradas de los productos
1. Crea una consulta sin el asistente (Botón "Diseño de Consulta"). De las tablas que te muestra selecciona la de COMPRAS y la agregas. Cierras la pantalla "Mostrar Tabla".
2. Arrastras al grid de la consulta el campo "Producto" (primera columna), y arrastras también el campo "CantCompra" (yo lo he llamado así) (segunda columna).
3. Conviertes esa consulta de selección en una consulta de totales. Para eso basta que hagas click sobre el botón de sumatorio (letra griega sigma que abajo pone Totales).
4. En la columna "CantCompra", donde pone "Agrupar por", despliegas y seleccionas el valor "Suma"
5. Guardas la consulta. Yo la he llamado "CCOMPRAS"
6. Testea
B) Creamos la segunda consulta, que nos sumará las cantidades vendidas de todos los productos
1. Creas una nueva consulta de la misma manera que en el punto A), pero agregando la tabla VENTAS. Dos columnas, la primera "Producto" y la segunda "CantVenta". La conviertes en una consulta de totales y al campo "CantVenta" lo agrupas por "Suma".
2. Guardas la consulta. Yo la he llamado "CVENTAS"
3. Testea
C) Creamos la tercera consulta, que realizará las operaciones para sacar el stock
1. Creas una nueva consulta "manual". En la pantalla "Agregar tabla" que te sale le das a la pestaña "Consultas" y seleccionas CCOMPRAS (agregar) y CVENTAS (agregar). Cierras la pantalla
2. Si has establecido relaciones cuando creaste la BD el campo "Producto" debería aparecer unido con una línea entre CCOMPRAS y CVENTAS. Si no te aparece ninguna línea lo que tienes que hacer es clicas sobre el campo "Producto" en CCOMPRAS y lo arrastras hasta ponerte encima del campo "Producto" de CVENTAS. Cuando sueltes el botón izquierdo del ratón debería aparecerte una línea que una ambos campos.
3. Arrastras al grid de la consulta el campo "Producto" (primera columna. No importa desde qué consulta lo arrastres).
4. Arrastras al grid el campo "SumaDeCantCompra" (segunda columna)
5. Arrastras al grid el campo "SumaDeCantVenta" (tercera columna)
6. En la cuarta columna (que está vacía) escribes, en la línea "Campo", lo siguiente:
Stock: [SumaDeCantCompra]-[SumaDeCantVenta]
Ahora tenemos la consulta perfecta, pero con un pequeño problema: las combinaciones de la relación entre las consultas que hemos creado no funcionarán porque, por defecto, la consulta muestra los datos en el caso en que los valores que aparecen en cada una de ellas sean iguales. Traducido al cristiano, si tú compras el producto POR pero todavía no has vendido nada de ese producto POR, en la consulta de compras sí te aparecerá POR, pero no en la consulta de ventas. Como no aparece ese valor en ambas consultas (no "son iguales") no se te mostrará.
Lógicamente eso falsea los datos, porque en realidad tendrías un stock de "n" unidades del producto X.
Para arreglar este problemilla vamos a hacer lo siguiente:
7. Haz click sobre la línea que une los campos "Producto" (debes tener buen ojo). La línea se volverá un poco más negrita. En ese momento haz click con el botón derecho del ratón y selecciona la opción "Propiedades de la combinación"
8. En la pantalla que te sale le marcas la opción que te dice que selecciones TODOS los registros de "CCOMPRAS" y sólo aquellos registros de "CVENTAS" donde los campos sean iguales. Aceptas
Nota: la otra combinación la doy por imposible, porque en teoría no puedes vender un producto que no has comprado aún.
Nota2: si, efectivamente, tuvieras algún producto X, verás que al ejecutar la consulta el campo "Stock" te aparece en blanco. No te preocupes: eso lo corregiremos con código más adelante.
9. Guardas la consulta. Yo la he llamado "CSTOCK"
Testeas
D) Aplicando código para recuperar el valor
IMPORTANTE: para poder utilizar el código debes tener registrada la biblioteca de objetos DAO. Para ello abre el editor de VBA (Alt+F11) y te vas a Menú Herramientas-> Referencias.
De la lista que te sale seleccionas "Microsoft DAO 3.6 Object Library"
Ya la tienes registrada. Ahora podemos seguir:
1. Abre el formulario PRODUCTOS en vista diseño, saca sus propiedades y al evento "Al activar registro" le pones este código:
---
Private Sub Form_Current()
'Creamos el filtro, que en este caso será el nombre
'del producto
Dim strFiltro As Variant
strFiltro = Me.Producto.Value
'Comprobamos que haya un valor en el campo producto
'para evitar errores
If IsNull(strFiltro) Then
Exit Sub
End If
'Creamos el recordset
Dim dbs As DAO.Database
Dim miRst As DAO.Recordset
Set dbs = CurrentDb
Set miRst = dbs.OpenRecordset("CSTOCK", dbOpenSnapshot)
'Recorremos los registros hasta encontrar el valor
'buscado y actualizamos el dato en el formulario
miRst.MoveFirst
Do Until miRst.EOF
If miRst.Fields("Producto").Value = strFiltro Then
If IsNull(miRst.Fields("Stock").Value) Then
Me.CantRestante.Value = miRst.Fields("SumaDeCantCompra").Value
Exit Do
Else
Me.CantRestante.Value = miRst.Fields("Stock").Value
Exit Do
End If
Else
miRst.MoveNext
End If
Loop
'Cerramos las conexiones y liberamos memoria
miRst.Close
dbs.Close
Set miRst = Nothing
Set dbs = Nothing
End Sub
---
Y ahora (cruzando los dedos), te debería mostrar, en el formulario PRODUCTOS la cantidad de stock de ese producto en concreto, actualizándose cada vez (es decir, que si cambias la cantidad vendida introducida por error, cuando vuelvas a abrir el formulario productos te mostrará la cantidad restante actualizada.
Aprovecho para comentarte una pequeña tontería, pero un par de líneas más no creo que hagan daño: si en el formulario PRODUCTOS (vista diseño) haces click con el botón derecho del ratón sobre el campo "Cantidad Restante" verás que te aparece una opción que se llama "Formato condicional". Si, por ejemplo, quieres que te llame la atención el valor del stock cuando tienes menos de 10 unidades, le dices ahí que si el valor del campo es menor que diez te ponga la letra en rojo.
Eso es todo. A ver si te funciona.
Suerte!
Gracias Amigo Sos Un Crack :) ten stars
si todo lo del principio yo lo tengo bien, los IDs todo solo que los tengo ocultos en los formularios porque los uso más que todo para consultas, y acciones extras je je, informes etc, el ID se autorellena automáticamente con un campo combinado, con código :) amigo muchas gracias por tu ayuda

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas