none
Trigger para Actualizar Stock de Productos RRS feed

  • Pregunta

  • ola a todos, el problema que tengo es el siguiente: Tengo un trigger que me actualiza el stock de mi tabla producto una vez se graba el detalle de la factura, el problema empieza cuando en el detalle de la factura tengo mas de un producto. Ya que el trigger solo actualiza un producto y el resto me sale un error.

     

     

    alter TRIGGER [dbo].[TG_Actualiza_Stock_Inventario]
    ON [dbo].[DetalleF]
    AFTER INSERT
    AS
    BEGIN
    DECLARE
    @CodProduct nvarchar(30), /*obtengo el codigo del producto */
    @Cantidad smallint, /*obtengo el Cantidad vendida*/
    @CodUnidad int, /*Obtengo la Unidad de Medida Vendida*/
    @ProdConver int,/*Obtengo la aquivalencia de la unidad de medida eje: 12 prod de la unidad*/
    @Stock smallint, /*Obtengo el stock del producto*/
    @PreVta real,/*Obtengo el precio venta del producto segun la unidad de medida*/
    @TotDes int /*Obtengo la conversion segun Cantidad * ProductoConversion*/



    SELECT @CodProduct = ProductoCodigo FROM inserted /*obtengo el Codigo del Producto*/
    SELECT @CodUnidad = UnidadCodigo FROM inserted /*Obtengo el codigo de la unidad*/
    SELECT @Cantidad = Cantidad FROM inserted /*obtengo la cantidad*/


    SELECT @ProdConver = (select UnidadCantidad from UnidadMedida Where UnidadMCodigo = @CodUnidad)
    SELECT @PreVta = (select PrecioVenta FROM Producto_UnidadM_PrecVenta WHERE ProductoCodigo = @CodProduct)
    SELECT @Stock = (select Productostock from Producto where ProductoCodigo = @CodProduct)

    SELECT @TotDes = @Cantidad * @ProdConver /*aqui multiplico la cantidad vendida por la equivalencia del producto*/

    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Inserto aqui los parametros del trigger

    UPDATE Producto SET ProductoStock = ProductoStock - @TotDes WHERE ProductoCodigo = @CodProduct

    END
    Si me pueden orientar desde ya mil gracias.

     


    • Editado DJINVACION sábado, 10 de septiembre de 2011 7:28
    • Cambiado Enrique M. Montejo sábado, 10 de septiembre de 2011 8:39 consulta SQL Server (De:Lenguaje VB.NET)
    sábado, 10 de septiembre de 2011 7:27

Respuestas

  • Así es, ya no es necesario que declaras variables, cada vez que se realice una inserción en la tabla [dbo].[DetalleF], se disparará el trigger que actualizará el stock de los productos que se están insertando.

    Ahora bien también debes asegurar otros posibles eventos dependiendo de las reglas de negocio que manejes, por ejemplo  anulación de factura  u otros.

    Saludos

    Si te sirvió marcalo como respuesta

    • Marcado como respuesta DJINVACION martes, 13 de septiembre de 2011 0:04
    sábado, 10 de septiembre de 2011 16:07

Todas las respuestas

  • A ver que te parece el siguiente cambio

     

    
    
    
    alter TRIGGER [dbo].[TG_Actualiza_Stock_Inventario]   
    ON  [dbo].[DetalleF]   
    AFTER INSERT
    AS BEGIN
    
    
    		UPDATE Producto 
    		SET ProductoStock = ProductoStock - (I.Cantidad * U.UnidadCantidad)
    		FROM Producto P
    		Inner Join Inserted I On P.ProductoCodigo=I.ProductoCodigo
    		Inner Join UnidadMedida U On U.UnidadMCodigo=I.UnidadCodigo
    
    


     Espero te sirva

    sábado, 10 de septiembre de 2011 13:53
  • Lo pruebo y te aviso....
    sábado, 10 de septiembre de 2011 15:52

  • 		UPDATE Producto 
    		SET ProductoStock = ProductoStock - (I.Cantidad * U.UnidadCantidad)
    		FROM Producto P
    		Inner Join Inserted I On P.ProductoCodigo=I.ProductoCodigo
    		Inner Join UnidadMedida U On U.UnidadMCodigo=I.UnidadCodigo
    
    

     

    Cuando te refieres a esto entiendo que ya no declaro nada y me enfoco nada mas en actualizar... Bien si es correcto ahora esto deberia actualizar todos los productos que esten en el detalleFactura......Corrigeme si entendi mal
    sábado, 10 de septiembre de 2011 15:57
  • Así es, ya no es necesario que declaras variables, cada vez que se realice una inserción en la tabla [dbo].[DetalleF], se disparará el trigger que actualizará el stock de los productos que se están insertando.

    Ahora bien también debes asegurar otros posibles eventos dependiendo de las reglas de negocio que manejes, por ejemplo  anulación de factura  u otros.

    Saludos

    Si te sirvió marcalo como respuesta

    • Marcado como respuesta DJINVACION martes, 13 de septiembre de 2011 0:04
    sábado, 10 de septiembre de 2011 16:07
  • ALTER trigger [dbo].[StockProducto]
      on [dbo].[DetalleCompra]
      after insert 
     as
       update Producto set ExistenciaProducto= Producto.ExistenciaProducto + inserted.CantidadCompra
       from Producto
       join inserted
       on inserted.Id_Producto=Producto.Id_Producto;

    yo tengo este para que valla y me saque el stock al hacer una compra, pero al momento de modificar un dato de la misma compra no hace su funcion que necesito o que trigger para despues de actualizar...

    jueves, 15 de octubre de 2015 1:09