Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

SOLUCION: Crea un Stored Procedure usando un cursor para hallar el valor total de la facturación para un determinado mes y año.

Tips: Declara tres variables: Una que recibe la cantidad, otra el precio y otra que va a acumular la facturación; Haz un loop en el cursor e ve sumando el valor de facturación en cada factura; Exhibe el valor total del límite; Recuerda que la consulta quiere obtener la facturación de un mes y año. El comando a continuación muestra todas las facturas generadas en enero de 2017: SELECT IFa.CANTIDAD, IFa.PRECIO FROM items_facturas IFa INNER JOIN facturas F ON F.NUMERO = IFa.NUMERO WHERE MONTH(F.FECHA_VENTA) = 1 AND YEAR(F.FECHA_VENTA) = 2017; Llamaremos este Stored Procedure como: campo_adicional.


DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `total_facturacion`()
BEGIN
DECLARE fin_c INT DEFAULT 0;
DECLARE vcantidad INT;
DECLARE vprecio, vacumular FLOAT;
DECLARE c CURSOR FOR SELECT IFa.CANTIDAD, IFa.PRECIO FROM items_facturas IFa
INNER JOIN facturas  F ON F.NUMERO = IFa.NUMERO
WHERE MONTH(F.FECHA_VENTA) = 1 AND YEAR(F.FECHA_VENTA) = 2017;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fin_c = 1;
SET fin_c = 0;
SET vcantidad = 0;
SET vprecio = 0;
SET vacumular = 0;
OPEN c;
WHILE fin_c = 0
DO
FETCH c INTO vcantidad, vprecio;
IF fin_c = 0 
THEN SET vacumular = vprecio * vcantidad;
END IF;
END WHILE;
SELECT vacumular AS Total_2017;
CLOSE c;
END$$
DELIMITER ;

CALL total_facturacion;
1 respuesta

Hola Hazel,

Parece que estás trabajando en un procedimiento almacenado para calcular el total de facturación para un mes y año específicos usando un cursor. Por lo que veo en tu código, hay un pequeño detalle que podrías ajustar para que funcione correctamente.

En tu procedimiento, estás calculando vacumular dentro del bucle, pero parece que no estás acumulando el valor total de todas las facturas. Actualmente, estás sobrescribiendo vacumular en cada iteración del bucle. Para solucionar esto, necesitas sumar el valor calculado en cada iteración al acumulador. Aquí tienes una posible corrección:

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `total_facturacion`()
BEGIN
    DECLARE fin_c INT DEFAULT 0;
    DECLARE vcantidad INT;
    DECLARE vprecio, vacumular FLOAT;
    DECLARE c CURSOR FOR SELECT IFa.CANTIDAD, IFa.PRECIO FROM items_facturas IFa
    INNER JOIN facturas  F ON F.NUMERO = IFa.NUMERO
    WHERE MONTH(F.FECHA_VENTA) = 1 AND YEAR(F.FECHA_VENTA) = 2017;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET fin_c = 1;

    SET fin_c = 0;
    SET vcantidad = 0;
    SET vprecio = 0;
    SET vacumular = 0;

    OPEN c;
    WHILE fin_c = 0 DO
        FETCH c INTO vcantidad, vprecio;
        IF fin_c = 0 THEN
            SET vacumular = vacumular + (vprecio * vcantidad);
        END IF;
    END WHILE;
    SELECT vacumular AS Total_2017;
    CLOSE c;
END$$
DELIMITER ;

CALL total_facturacion;

Con este ajuste, vacumular ahora acumula el valor total de todas las facturas en el mes y año especificados. Espero que esto te ayude a resolver el problema.

Espero haber ayudado y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!