Ayuda con enento por favor!

Hola a quien responda!
Tengo una base de datos con estas tablas: Productos, Empleados, Detalle de Ventas y Ventas.
La tabla (Productos) tiene los siguientes Campos: IdProducto, Nombre Producto, Precio Unidad y Stock.
La tabla (Detalle de Ventas) tiene los siguientes Campos: IdDetalle de Ventas, IdProducto, Precio Unidad y Cantidad.
Luego hice un Formulario Ventas y dentro de este, un Subformulario Detalle de Ventas que por supuesto el origen de datos es de la base (Detalle de Ventas).
La Pregunta es: ¿Qué evento tengo que hacer en el Campo Cantidad del Subformulario Detalle de Ventas para que cuando ingrese la cantidad vendida me reste el Stock en la tabla (Productos)?
Estuve recorriendo varios sitios y foros pero todos me dan error. Otra cosita que quiero aclarar... Soy nuevo en esto por eso doy los detalles de toda la base de datos para que por favor me ayuden y me den los ejemplos con los nombres de los campos que detalle anteriormente para entender mejor. Mil gracias a todos. Martin de Argentina.

1 Respuesta

Respuesta
1
Bien, entiendo que tienes un formulario Ventas y en él un Subformulario Desttales ventas, por eso la instrucción hace mención al formulario Ventas.
El no coincidir los tipos es porque en la tablla tendrás los campos Stock o Cantidad como texto. Cambialos a numero puesto que vas a operar con ellos y así no tendrás problemas.
Gracias por la respuesta rápida! Pero sabes que me sale lo siguiente: se ha producido el error '13' en tiempo de ejecución. No coinciden los tipos.
Ahora pregunto yo... y pido perdón por la ignorancia! Vos decís que ponga esto:
Dim valor1, valor2 as integer
hasta aca va todo bien. pero en la siguiente linea porque tengo q poner
="Forms!Ventas.stock? si el campo stock esta en la tabla Productos.  
valor1="Forms!Ventas.Stock.value
valor2="Forms![Detalle de Ventas].value <--- esta es la linea q se pinta de amarillo cuando sale el error.
y en la siguiente pasa lo mismo...
Forms!Ventas.Stock.value=valor1-valor2
otra pregunta tonta! Forms! significa Formulario no?
Capaz me exprese mal con los datos de mi base. Concreta mente... olvidemosno de el formulario Ventas.
Tengo un Formulario llamado Detalles de Venta, donde se ingresan los productos vendidos y estos se almacenan en la tabla Detalles de Venta. En la columna 1 del Formulario tengo el campo NombreProducto "Cuadro Combinado", 2 PrecioUnidad y en la 3 Cantidad y es en esta donde yo quiero que después de actualizar me reste de la tabla Productos el campo Stock!
Ojala me puedas ayudar Gracias!
Perdona detecté un error después de la aclaración, la instrucción es así:
Dim valor1, valor2 as integer
valor1="Forms!Ventas.Stock.value "
valor 2="Forms![Detalle de Ventas].Cantidad.value"
Forms!Ventas.Stock.value=valor1-valor2
Disculpa y espero que te funcione
Hola! Ya me fije y el tipo del capo esta igual (Numérico).
Lo que no entiendo bien... es porque en el código que me pasas en ningún lugar se nombra la tabla Productos en donde esta el campo estock al que yo quiero actualizar al hacer la venta. ¿Falta algo o no? Capaz sigo teniendo algún otro problema y no me doy cuenta.
Te hago otra pregunta si podes! Sino terminamos con esta primero así te califico, como quieras! Hice una consulta en donde le puse un criterio ¿Nombre de Cliente? Pero si no encuentra registros me abre igual el formulario vacío. ¿Hay alguna manera de cancelar la consulta al no encontrar registros? Mil gracias!
En el código se hace referencia al formulario ventas que es donde esta el campo Stock, se supone que el origen de datos del formulario ventas es la tabla productos.
Respecto a la otra pregunta se puede hacer de la siguiente forma:
Si abres el formulario con un commandbuton, en el evento click de este, crea un recorset que recorra la tabla que quieres consultar.
La Propiedad Recordcount de ese recorset te indica los registros que ha encontrado con el ¿Nombre de cliente?.
Con un MsgBox que te de el número de registros encontrados, si es mayor de 0 que habrá el formulario y si no que cancele la operación.
Espero haberte ayudado con la idea. Si tienes dificultades en la programación de lo indicado, dame alguna pista más (Nombre de tabla, campos que quieres incluir en la consulta, etc) y yo te hago un ejemplo.
Si no te importa, me dices si te ha funcionado la pregunta anterior y la calificas.
Bueno mira. Le voy a Cambiar los nombres a los formularios y subformularios porque me parece que te estoy explicando mal y confundiendo peor y te pido disculpas.
Mi base cuenta con 5 tablas.
Empleados (IdEmpleado, NombreEmpleado y Contraseña)
Productos (IdProducto, NombreProducto, PrecioUnitario y Stock)
Facturas (IdFactura, NombreVendedor y FechaFactura)
Detalles de Factura (IdDetalles de Factura, IdFactura, IdProducto, Cantidad)
Estas 2 ultimas como seguro ya te habrás dado cuenta están relacionada con el campo IdFactura
Bueno, después tengo 3 Formularios.
1 se llama Factura y dentro de este un subformulario llamado Detalles de Factura
Cuando abro el Formulario Factura y presiono ENTER paso al subf.. Detalles de Factura, y es en este donde pongo la cantidad vendida. Ahora... yo quiero que, por ejemplo, cuando ingreso 3 cantidades vendidas de POR producto, estas 3 se resten pero al campo Stock de la tabla Productos. "no a la tabla Facturas" porque ahí no tengo el campo Stock. Creo que ahora si me vas a entender y si no es así no te hagas drama. Vere que puedo hacer.
La aclaración de la otra pregunta sobre la consulta es:
Hice una consulta con el criterio ¿Ingrese la Contraseña? En donde el vendedor ingresa la suya por ej: 12345 y se habré 1 Formulario llamado Panel Principal donde Tengo un Botón que dice Vender y que al presionarlo abre el Formulario Factura. Pero si no ingreso nada no encuentra datos y el formulario me lo abre igual. De este mode cualquiera me puede Vender y no se quien fue.
La próxima te Califico te juro! Gracias! Y disculpas por hacerte perder tanto el tiempo.
Prueba esto en el evento después de actualizar del campo Cantidad adecuándolo un poco a tus nombres:
Private Sub Cantidad_AfterUpdate()
Dim sql As String
DoCmd.SetWarnings False
sql = "UPDATE Productos SET Productos.Stock - [Formularios]![Detalles de Facturas]![Cantidad]" & _
"WHERE (((Productos.IdProducto)=[Formularios]![Detalles de Facturas]![IdProducto)))"
DoCmd.RunSQL (sql)
DoCmd.SetWarnings True
End Sub
2º esa consulta que mencionas para abrir el formulario panel principal ¿Desde dónde se ejecuta?. Supongo que se ejecutará desde un commandbuton donde se ejecuta la consulta y después abre el formulario. Si es así en el evento click ponle un condicional de si la consulta no tiene datos que cancele la operación openform (Abrir formulario). Sobre esta segunda cuestión explicate un poco más.
Espero haberte ayudado por fin y perdona por la demora.
Hola! No por favor! No te hagas drama por la demora! Tengo todo el tiempo del mundo jaja!
La verdad es que ya no se como hacerlo. Me dice (Error de sintaxis en la instrucción UPDATE) Los nombres que me diste están tal cual los tengo yo, así que no se cual es el problema. Y ya me da vergüenza molestarte. Deja nomas, voy a ver como hago o desisto.
Lo de la consulta también es como decís. Se ejecuta desde un botón que tengo en otro formulario. Lo que si me gustaría saber es como seria ese condicional para que cancele la operación porque como ya te habrás dado cuenta no se mucho de esto. Lo ideal seria que al cancelarla salga un dialogo diciendo "contraseña incorrecta".
Gracias!
Disculpa porque la instrucción UPDATE no la escribí correctamente, es así:
Private Sub Cantidad_AfterUpdate()
Dim sql As String
DoCmd.SetWarnings False
sql = "UPDATE Productos SET Productos.Stock = [Formularios]![Detalles de Facturas]![Cantidad]" & _
"WHERE (((Productos.IdProducto)=[Formularios]![Detalles de Facturas]![IdProducto)))"
DoCmd.RunSQL (sql)
DoCmd.SetWarnings True
End Sub
Respecto a la otra pregunta, en el evento click del comandbuton que abre el formulario pon el siguiente código:
Dim propio As Object
Dim SQL As String
Dim form1 As String
form1="Nombre del formulario que quieres abrir"
SQL = "select * from [Nombre de Tabla] WHERE ((([Nombre de Tabla].[Nombre de Campo)=[¿Nombre de Cliente?]))";
Set propio = CurrentDb.OpenRecordset(SQL)
propio.MoveLast
If propio.RecordCount > 0 then
Docmd.openform form1
Else
MsgBox "Contraseña Incorrecta", vbOKOnly + vbCritical, "AVISO"
End if
propio.Close
Set propio=Nothing

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas