none
Cómo Restar de la Tabla Productos para Facturación RRS feed

  • Pregunta

  • Buen día a todos los que me puedan ayudar, tengo una tabla llamada Productos que tiene los siguientes campos:

    El asunto es que necesito un procedimiento almacenado para que me reste de la tabla productos la cantidad de productos que se deben facturar, estoy trabajando en sql server... NECESITO AYUDA

    miércoles, 1 de noviembre de 2017 20:59

Respuestas

Todas las respuestas

  • hola ramiro mas que un SP Es mejor usar un Trigger al momento al momento de adicionar o crear o dar de alta una factura

    CREATE TRIGGER RestarProductos AFTER INSERT ON PRODUCTOS
    FOR EACH
    ROW
    BEGIN
        UPDATE Productos 
        SET Cantidad = cantidad - facturadetalle.cantidad
        WHERE id_detalle = id_detalle;
    END

     también puedes poner restricción de que no sobre pase la cantidad_min de la tabla productos

    ejemplo ilustrativo

    miércoles, 1 de noviembre de 2017 21:37
  • hola

    pero la ejecucion de la operacion la realizaras por medio de c# ?

    porque en principio el procedure deberia recibir dos parametros, el codigo o id del producto y la cantidad que necesites restar, despues el resto seria

    UPDATE Productos 
        SET Cantidad = cantidad - @cantidad
        WHERE id_prodcto = @id;

    como veras son dos parametros y desde c# al invocar por ado.net al procesure con un codigo como ser

    using (SqlConnection conn = new SqlConnection("connectionstring")) 
    { 
        SqlCommand cmd = new SqlCommand("<storedprocedure>", conn); 
        cmd.CommandType = SqlCommandType.StoredProcedure; 
    
        cmd.Parameters.AddWithValue("@param1", valor); 
        
        cmd.ExecuteNonQuery();
    } 

    la idea es que desde codigo ingreses el valor de la factura y ademas invoques al procedure para actualizar el stock del poducto todo dentro de una transaccion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 1 de noviembre de 2017 23:01
  • Está excelente tu respuesta y si estoy trabajando en C#, pero me gustaría agregar directamente en el procedimiento almacenado que me inserte en Detalle_Factura los datos y ue me actualice a la vez en la tabla Producto... Tengo algo así:

    @IdProducto Int,
    @IdFactura Int,
    @Cantidad Int,
    @Monto float,
    @Descuento float

    As Begin
    Declare @Stock As Int, @Id as int
    Set @Stock=(Select Cantidad From Producto Where Id_Producto=@IdProducto)
    Begin
    INSERT INTO Detalle_Factura VALUES (@IdFactura,@IdProducto,@Cantidad,@Monto,@Descuento)
    select @Id = MAX(Id_Factura) from Detalle_Factura

    End
    Update Producto Set Cantidad=@Stock-@Cantidad Where Id_Producto=@IdProducto
    End

    ////////////////////////////////////PERO ME ESTÁ GENERANDO UN ERROR AL EJECUTARLO:::::

    Instrucción INSERT en conflicto con la restricción FOREIGN KEY "RefFACTURA101". El conflicto ha aparecido en la base de datos "???", tabla "dbo.FACTURA", column 'Id_Factura'.


    jueves, 2 de noviembre de 2017 0:39
  • YA LO TENGO:

    @IdFactura Int,
    @IdProducto Int,
    @Cantidad Int,
    @Monto float,
    @Descuento float
    As Begin
    Declare @Stock As Int, @Id as int
    Set @Stock=(Select Cantidad From Producto Where Id_Producto=@IdProducto)
    Begin
    Insert into Detalle_Factura Values(@IdFactura,@IdProducto,@Cantidad,@Monto,@Descuento)
    select @Id = MAX(Id_Factura) from Detalle_Factura
    End
    Update Producto Set Cantidad=@Stock-@Cantidad Where Id_Producto=@IdProducto
    End

    /*************************

    EL PROBLEMA YA LO RESOLVÍ Y ERA CREAR EL COMANDO ExecuteNonQuery()

    GRACIAS A TODOS POR SU AYUDA...


    ExecuteNonQuery()
    jueves, 2 de noviembre de 2017 1:12
  • hola

    >>EL PROBLEMA YA LO RESOLVÍ Y ERA CREAR EL COMANDO ExecuteNonQuery()

    exacto con el ExecuteNonQuery() de ado.net puede ejecutar el procedure desde codigo c#

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 2 de noviembre de 2017 7:43