cursor para obtener cartera de credito Buenas tardes Amigos del foro.
tengo una pequeña dificulta con esta consulta.
resulta que tengo que sacar un reporte de cartera, el cual me vinculan las siguientes tablas.
tblfactura,tbldetalle,tblcliente.
este reporte lo tengo que sacar por clientes el total de la deuda osea sumando todas las facturas.
lo que tengo es que identificar los clientes que tienen facturas en rango de fechas de vencimientos:
fechavencimiento>0 and fechavencimiento<=30,
fechavencimiento>31 and fechavencimiento<=60,
fechavencimiento>61 and fechavencimiento<=90,
fechavencimiento>91 and fechavencimiento<=180,
fechavencimiento>181 and fechavencimiento<=360,
fechavencimiento>361
entoces estoy tratando de hace un cursor para hacer esto, el me trae todo, pero lo que no he logrado resolver es que como hago para sumar todas las facturas de un cliente,
este es el cursor
ALTER PROCEDURE [dbo].[rpt_Informe_TotalizadoxCooperativa]
@Nit_EMPR varchar(20)
AS
DECLARE @TotalFactura decimal(14,1)
DECLARE @TotalFacturaxRango decimal(14,1)
DECLARE @Nombre_Cliente varchar(20)
DECLARE @Valor_Bruto decimal(14,1)
DECLARE @Fecha_Vence varchar(14)
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SET @TotalFactura=(SELECT SUM(D.dcmBruto_DETA) FROM tblFACTura F INNER JOIN tblDetalle D ON F.intCodigo_FACT=D.intCodigo_FACT
WHERE F.strNitEmpresa=@Nit_EMPR )
SELECT C.strNombre_CLIE [ENTIDAD],SUM(D.dcmBruto_DETA) [VALOR FACTURA RANGO],(@TotalFactura)[TOTAL CARTERA],
'RANGO DE FECHAS' = CASE
WHEN (DATEDIFF(DAY,CONVERT(varchar,dtmFechaVenc_FACT,10 3),CAST(GETDATE() AS DATETIME))>0 AND DATEDIFF(DAY,CONVERT(varchar,dtmFechaVenc_FACT,103 ),CAST(GETDATE() AS DATETIME))<=30) THEN 'FACTURAS VENCIDAS ENTRE 0 Y 30 DIAS'
WHEN DATEDIFF(DAY,CONVERT(varchar,dtmFechaVenc_FACT,103 ),CAST(GETDATE() AS DATETIME))>31 AND DATEDIFF(DAY,CONVERT(varchar,dtmFechaVenc_FACT,103 ),CAST(GETDATE() AS DATETIME))<=60 THEN 'FACTURAS VENCIDAS ENTRE 31 Y 60 DIAS '
WHEN DATEDIFF(DAY,CONVERT(varchar,dtmFechaVenc_FACT,103 ),CAST(GETDATE() AS DATETIME))>61 AND DATEDIFF(DAY,CONVERT(varchar,dtmFechaVenc_FACT,103 ),CAST(GETDATE() AS DATETIME))<=90 THEN 'FACTURAS VENCIDAS ENTRE 61 Y 90 DIAS'
WHEN DATEDIFF(DAY,CONVERT(Varchar,dtmFechaVenc_FACT,103 ),CAST(GETDATE()AS DATETIME))>91 AND DATEDIFF(DAY,CONVERT(varchar,dtmFechaVenc_FACT,103 ),CAST(GETDATE() AS DATETIME))<=180 THEN 'FACTURAS VENCIDAS ENTRE 91 Y 180 DIAS'
WHEN DATEDIFF(DAY,CONVERT(varchar,dtmFechaVenc_FACT,103 ),CAST(GETDATE() AS DATETIME))>181 AND DATEDIFF(DAY,CONVERT(varchar,dtmFechaVenc_FACT,103 ),CAST(GETDATE() AS DATETIME))<=360 THEN 'FACTURAS VENCIDAS ENTRE 181 Y 360 DIAS'
WHEN DATEDIFF(DAY,CONVERT(varchar,dtmFechaVenc_FACT,103 ),CAST(GETDATE() AS DATETIME))>361 THEN 'FACTURAS VENCIDAS MAYORES DE 360 DIAS' ELSE 'FACTURAS PROXIMAS A VENCER' END
FROM tblFACTura F INNER JOIN tblCLIEnte C ON F.intCodigo_CLIE=C.intCodigo_CLIE INNER JOIN tblDetalle D ON
F.intCodigo_FACT=D.intCodigo_FACT
WHERE F.strNitEmpresa=@Nit_EMPR
GROUP BY C.strNombre_CLIE,dtmFechaVenc_FACT
DECLARE TOTALCARTERA CURSOR FOR
SELECT C.strNombre_CLIE [ENTIDAD],SUM(D.dcmBruto_DETA) [VALOR FACTURA],(@TotalFactura)[TOTAL CARTERA]
FROM tblFACTura F INNER JOIN tblCLIEnte C ON F.intCodigo_CLIE=C.intCodigo_CLIE INNER JOIN tblDetalle D ON
F.intCodigo_FACT=D.intCodigo_FACT
WHERE F.strNitEmpresa=@Nit_EMPR
GROUP BY C.strNombre_CLIE,dtmFechaVenc_FACT
OPEN TOTALCARTERA
FETCH TOTALCARTERA INTO @Nombre_Cliente,@Valor_Bruto,@TotalFactura
WHILE (@@FETCH_STATUS=0)
BEGIN
FETCH TOTALCARTERA INTO @Nombre_Cliente,@Valor_Bruto,@TotalFactura
END
CLOSE TOTALCARTERA
DEALLOCATE TOTALCARTERA
END
y me arroja los siguientes resultados
ENTIDAD VALOR FACTURA RANGO TOTAL CARTERA RANGO DE FECHAS
CLIENTE1 2000000 450000000 FACTURAS PROXIMA EN VENCER
CLIENTE1 140000 450000000 FACTURAS PROXIMAS EN VENCER
CLIENTE2 450000 450000000 FACTURAS PROXIMAS EN VENCER
SOLO POR CITAR UN EJEMPLO, LO QUE YO PRETENDO ES QUE SOLO ME MUESTRE UN REGISTRO POR CADA CLIENTE CON LA SUMA TOTAL DE LAS FACTURAS
ESPERO ME PUEDAN AYUDAR MUCHAS GRACIAS |