Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

cursor para obtener cartera de credito

Estas en el tema de cursor para obtener cartera de credito en el foro de SQL Server en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 19/04/2011, 16:02
 
Fecha de Ingreso: marzo-2011
Ubicación: colombia
Mensajes: 10
Antigüedad: 13 años, 7 meses
Puntos: 0
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
  #2 (permalink)  
Antiguo 20/04/2011, 10:09
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: cursor para obtener cartera de credito

Código SQL:
Ver original
  1. SELECT SUM(t1.valor factura rango], t1.entidad
  2. FROM
  3.  
  4. (
  5. SELECT C.strNombre_CLIE [ENTIDAD],SUM(D.dcmBruto_DETA) [VALOR FACTURA RANGO],(@TotalFactura)[TOTAL CARTERA],
  6. 'RANGO DE FECHAS' = CASE
  7. 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'
  8. 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 '
  9. 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'
  10. 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'
  11. 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'
  12. 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
  13.  
  14. FROM tblFACTura F INNER JOIN tblCLIEnte C ON F.intCodigo_CLIE=C.intCodigo_CLIE INNER JOIN tblDetalle D ON
  15. F.intCodigo_FACT=D.intCodigo_FACT
  16. WHERE F.strNitEmpresa=@Nit_EMPR
  17. GROUP BY C.strNombre_CLIE,dtmFechaVenc_FACT
  18. DECLARE TOTALCARTERA CURSOR FOR
  19. SELECT C.strNombre_CLIE [ENTIDAD],SUM(D.dcmBruto_DETA) [VALOR FACTURA],(@TotalFactura)[TOTAL CARTERA]
  20. FROM tblFACTura F INNER JOIN tblCLIEnte C ON F.intCodigo_CLIE=C.intCodigo_CLIE INNER JOIN tblDetalle D ON
  21. F.intCodigo_FACT=D.intCodigo_FACT
  22. WHERE F.strNitEmpresa=@Nit_EMPR
  23. GROUP BY C.strNombre_CLIE,dtmFechaVenc_FACT
  24.  
  25. ) AS t1 GROUP BY t1.nombre


Seria algo asi :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 20/04/2011, 12:17
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: cursor para obtener cartera de credito

Libras

Me sorprende de forma agradable, su experiencia en el manejo del T-SQL.

Saludos
__________________
MCTS Isaias Islas
  #4 (permalink)  
Antiguo 20/04/2011, 14:14
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: cursor para obtener cartera de credito

Cita:
Iniciado por iislas Ver Mensaje
Libras

Me sorprende de forma agradable, su experiencia en el manejo del T-SQL.

Saludos
Muchas gracias por su comentario Maestro iislas :)

Saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 20/04/2011, 15:46
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: cursor para obtener cartera de credito

¿maestro?, No amigo, lo que me sobra es ignorancia y lucho todos los dias contra ella, aprendiendo de todos ustedes.....saludos
__________________
MCTS Isaias Islas

Etiquetas: credito, cursor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:54.