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
1 Respuesta
Respuesta de Neckkito Nck
1
1
Neckkito Nck, Access... ser o no ser. Esa es la cuestión
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