Buenas a todos, tengo un problema con la consulta de VBA quiero filtrar dos fechas que están en tablas diferentes

Tengo un problema con la consulta de VBA si hay alguien que puede echarme una mano. Bueno, os comento, tengo tres tablas de PRODUCTOS, FACTURAS Y DEVOLUCIONES. El problemas que tengo es, Por ejemplo, si he vendido 10 unidades del Producto 1 en 2017 y no se volvieron nada y en 2018 se devolvieron 5 unidades 30 vendidas pero a la hora de hacer el inventario del año 2017 juntando las tres tablas y utilizando FECHA_FACTURA Y FECHA_DEVOLCION me muestra los productos devueltos de 2017

Os dejo el código aquí

Private Sub BuscarRegistro_Click()

Me.Form.RecordSource = " SELECT Productos.Cod_Productos, Productos.Nombre, Productos.Precio_de_Venta, Sum(Detalle_Salida_Factura.Cantidad) AS Total_Vendido, Sum(Detalle_Devoluciones.Cantidad) AS Total_Devuelto, (([Total_Vendido])-([Total_Devuelto])) AS Total_Venta, [Productos].[Precio_de_Venta]*[Total_Venta] AS Precio_Total, Productos.Entrada_Stock, [Entrada_Stock]-[Total_Venta] AS Salida_Stock FROM Salidas_Factura INNER JOIN ((Productos INNER JOIN (Devoluciones INNER JOIN Detalle_Devoluciones ON Devoluciones.Cod_Devolución = Detalle_Devoluciones.Cod_Devoluciones) ON Productos.Cod_Productos = Detalle_Devoluciones.Cod_Producto) INNER JOIN Detalle_Salida_Factura ON Productos.Cod_Productos = Detalle_Salida_Factura.Cod_Productos) ON Salidas_Factura.Cod_Salidas_Factura = Detalle_Salida_Factura.Cod_Salida_Factura WHERE Fecha_Devolucion BETWEEN #" _
& Format(Me.Fecha_Inicio, "mm/dd/yyyy") & "# AND #" & Format(Me.Fecha_Final, "mm/dd/yyyy hh:mm:ss") & "# OR Fecha_Factura BETWEEN #" _
& Format(Me.Fecha_Inicio, "mm/dd/yyyy") & "# AND #" & Format(Me.Fecha_Final, "mm/dd/yyyy hh:mm:ss") & "# GROUP BY Productos.Cod_Productos, Productos.Nombre, Productos.Precio_de_Venta, Productos.Entrada_Stock "

End Sub

1 Respuesta

Respuesta

Honestamente, no he comprobado la instrucción. Creo que es más sencillo mantener el inventario actualizado en todo momento. Por ejemplo, su pongamos que tienes una tabla Productos donde reflejas las existencias iniciales de productos, con los campos Idproducto, Producto,..., Existencias.

Vamos a suponer que tienes un formulario Facturas con IdFactura(ó Numfactura, clave), FechaFactura, Cliente,..., TotalFactura y otra tabla DetalleFactura con Idfactura(ó Numfactura no clave), Idproducto, Precio, Cantidad, Subtotal. Con ellas creas un formulario y subformulario. En este último cambias el cuadro de texto Idproducto por un combiando donde te muestre el nombre pero guarde el IdProducto. En sus propiedades-Eventos-Después de actualizar creas un procedimiento de evento y pones

Precio=dlookup("precio","productos","idproducto=" & me.idproducto & "")

Cantidad. Setfocus

Y en el evento Después de actualizar del cuadro de texto Cantidad, creas otro procedimiento de evento y pones

Subtotal=precio*cantidad

docmd.runcommand accmdsaverecord

me!parent!totalfactura=dsum("subtotal","detallefactura","idfactura=" & me.idfactura & "")

docmd.runsql"update productos set existencias=existencias-cantidad where idproducto=" & me.idproducto & ""

Así, cuando pones la cantidad y pulsas Enter, automáticamente, en Subtotal te pone su importe, en el control Total factura del formulario te pone la suma acumulada de los diferentes productos y te resta la cantidad vendida de las existencias que había. Con lo que en el mismo momento de hacer una "venta", sabes el inventario de productos. Como no sé el "diseño" de las devoluciones, te diría que lo mismo, una vez que pones la cantidad devuelta, en el evento Despues de actualizar pones

docmd.runsql"update productos set existencias=existencias+cantidad where idproducto=" & me.idproducto & ""

Con lo que tienes actualizado en todo momento el inventario. Que llega fin de año y quieres verlo, basta con imprimir la tabla Productos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas