cancel
Showing results for 
Search instead for 
Did you mean: 

Analisis de Vencimiento de Cuentas por Pagar (hasta la fecha)

Former Member
0 Kudos

Tengo un query en la cual me traigo todas las facturas de proveedores pendientes por pagar con la informacion del proveedor, total de la factura, importe aplicado y monto pendiente por pagar, ademas muestro la cantidad de dias que tiene vencida la factura si es que esta vencida etc... Pero ahora es necesario mostrar en el mismo query subtotales del total de documento y subtotales de lo pendiente por pagar por proveedor, es decir que en el mismo query sume el total de documento y sume el total de pendiente por pagar pero agrupado por proveedor. aun no he podido mostrar subtotales de esa forma. hasta ahora tengo el siguiente query sin subtotales:

/SELECT FROM [dbo].[OPCH] T4/

Declare @Fecha1 as nvarchar(100)

/* WHERE */

set @Fecha1 = /* T4.CreateDate */ '[%0]'

SELECT T0.[CardCode] AS 'Codigo Proveedor', T0.[CardName] AS 'Nombre Proveedor', T0.[DocNum] AS 'Nro de Documento', T0.[DocDueDate] AS 'Fecha de Vencimiento', T0.[DocTotal] AS 'Total Documento', T0.[PaidToDate] as 'Importe', (T0.[DocTotal] - T0.[PaidToDate]) as 'Pendiente por Pagar', DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1 AS 'Dias', CASE WHEN DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1<0 THEN 'Vencido' WHEN DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1>=0 AND DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1<=30 THEN '30 Dias' WHEN DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1>30 AND DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1<=60 THEN '60 Dias' WHEN DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1>60 AND DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1<=90 THEN '90 Dias' WHEN DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))*-1>90 THEN 'Mayor 90 Dias' END AS 'Plazo de Vencimiento','Factura' as 'Tipo Docum'

FROM OPCH T0 WHERE T0.[CreateDate]<=@Fecha1 AND T0.[DocStatus]<>'C'

union all

SELECT T0.[CardCode] AS 'Codigo Proveedor', T0.[CardName] AS 'Nombre Proveedor', T0.[DocNum] AS 'Nro de Documento', T0.[DocDueDate] AS 'Fecha de Vencimiento', - T0.[DocTotal] AS 'Total Documento', T0.[PaidToDate] as 'Importe', (-T0.[DocTotal] - T0.[PaidToDate]) as 'Pendiente por Pagar', DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1 AS 'Dias', CASE WHEN DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1<0 THEN 'Vencido' WHEN DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1>=0 AND DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1<=30 THEN '30 Dias' WHEN DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1>30 AND DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1<=60 THEN '60 Dias' WHEN DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1>60 AND DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))-1<=90 THEN '90 Dias' WHEN DATEDIFF(DAY, LEFT(CONVERT(VARCHAR, T0.[DocDueDate], 102), 10), LEFT(CONVERT(VARCHAR, GETDATE() , 102), 10))*-1>90 THEN 'Mayor 90 Dias' END AS 'Plazo de Vencimiento','Nota de Credito' as 'Tipo Docum'

FROM ORPC T0 WHERE T0.[CreateDate]<=@Fecha1 AND T0.[DocStatus]<>'C'

order by 2,4,3

Accepted Solutions (0)

Answers (3)

Answers (3)

Former Member
0 Kudos

Hola David,

¿Porque no utilizas la consulta de Antigüedad de proveedor" del estándar indicando en el intervalo "Días" y "30"?

Un saludo,

Tere

Former Member
0 Kudos

Hola David,

¿Porqué no la llevas a un Crystal Report? ahí puedes hace rsubtotales y lo que necesites.

Un saludo,

Tere

Former Member
0 Kudos

Si queres te paso un reporte en Crystal que hace lo que necesitas.

Former Member
0 Kudos

Si me gustaria mucho y me serviria como guia para otros a realizar, ademas asi me veo obligado a aprender cristal report ya que nunca lo he usado... gracias

darwin_diaz2
Explorer
0 Kudos

Yo uso este Query

 
select OCRD.cardcode,OCRD.cardname,
SUM(BalDueDeb-BalDueCred) "Saldo",
SUM(ISNULL(CASE
when (DATEDIFF(dd,duedate,current_timestamp))< 0
then
case
when BalDueCred <> 0 then BalDueCred * - 1
else BalDueDeb
end
end,0)) "Futuro",
SUM(ISNULL(case when ((datediff(dd,duedate,current_timestamp)) > -1
and (datediff(dd,duedate,current_timestamp))< 31)
then
case
when BalDueCred <> 0 then BalDueCred * - 1
else BalDueDeb
end
end,0)) "0-30",
SUM(ISNULL(case when ((datediff(dd,duedate,current_timestamp)) > 30
and (datediff(dd,duedate,current_timestamp))< 61)
then
case
when BalDueCred <> 0 then BalDueCred * - 1
else BalDueDeb
end
end,0)) "31-60",
SUM(ISNULL(case when ((datediff(dd,duedate,current_timestamp)) > 60
and (datediff(dd,duedate,current_timestamp))< 91)
then
case
when BalDueCred <> 0 then BalDueCred * - 1
else BalDueDeb
end
end,0)) "61-90",
SUM(ISNULL(case when ((datediff(dd,duedate,current_timestamp)) > 90
and (datediff(dd,duedate,current_timestamp))< 121)
then
case
when BalDueCred <> 0 then BalDueCred * - 1
else BalDueDeb
end
end,0)) "91-120",
SUM(ISNULL(CASE
when (DATEDIFF(dd,duedate,current_timestamp)) >120
then
case
when BalDueCred <> 0 then BalDueCred * - 1
else BalDueDeb
end
end,0)) "121+"
from JDT1,OCRD where JDT1.shortname = OCRD.cardcode and cardtype = 'S' and intrnmatch = '0'  AND OCRD.Balance <> 0
GROUP BY OCRD.cardcode,OCRD.cardname
ORDER BY OCRD.cardname

Puedes Decargar el reporte que hice en Crystal de siguiente enlace

http://cid-c6439b024f8d2ba6.office.live.com/self.aspx/Public/rpt%5E_AntiguedadProveedores.rar

en el mismo archivo esta el query para que crees el StoreProcedure con el que trabaja el Reporte.

Saludos

Former Member
0 Kudos

Pequeña corrección a Darwin' ¡esfuerzo de s!

select OCRD.cardcode,OCRD.cardname,

SUM(BalDueDeb-BalDueCred) "Saldo",

SUM(ISNULL(CASE

when (DATEDIFF(dd,duedate,current_timestamp))< 0

then

case

when BalDueCred <> 0 then BalDueCred * - 1

else BalDueDeb

end

end,0)) "Futuro",

SUM(ISNULL(case when ((datediff(dd,duedate,current_timestamp)) > -1

and (datediff(dd,duedate,current_timestamp))< 31)

then

case

when BalDueCred <> 0 then BalDueCred * - 1

else BalDueDeb

end

end,0)) "0-30",

SUM(ISNULL(case when ((datediff(dd,duedate,current_timestamp)) > 30

and (datediff(dd,duedate,current_timestamp))< 61)

then

case

when BalDueCred <> 0 then BalDueCred * - 1

else BalDueDeb

end

end,0)) "31-60",

SUM(ISNULL(case when ((datediff(dd,duedate,current_timestamp)) > 60

and (datediff(dd,duedate,current_timestamp))< 91)

then

case

when BalDueCred <> 0 then BalDueCred * - 1

else BalDueDeb

end

end,0)) "61-90",

SUM(ISNULL(case when ((datediff(dd,duedate,current_timestamp)) > 90

and (datediff(dd,duedate,current_timestamp))< 121)

then

case

when BalDueCred <> 0 then BalDueCred * - 1

else BalDueDeb

end

end,0)) "91-120",

SUM(ISNULL(CASE

when (DATEDIFF(dd,duedate,current_timestamp)) >120

then

case

when BalDueCred <>0 then BalDueCred * - 1

else BalDueDeb

end

end,0)) "121+"

from JDT1,OCRD where JDT1.shortname = OCRD.cardcode and cardtype = 'S' and intrnmatch = '0' AND OCRD.Balance = 0

GROUP BY OCRD.cardcode,OCRD.cardname

ORDER BY OCRD.cardname

felipe_loyolarodriguez
Active Contributor
0 Kudos

Para empezar a mostrar por subtotales, te recomiendo eliminar campos que son de detalle, ejemplo si un proveedor te debe 5 facturas y quieres saber que facturas son, esa query te sirve. Pero si quiero saber cuanto me debe el proveedor, omito el campo de facturas para que solo me sume el saldo.

Creo que tendrias que hacer un query para cada caso, ese que tienes como detalle por porveedor. Sacale algunos campos muy detallistas para obtener sumas por proveedor y lo guardas como otro query. y asi suscesivamente.

Saludos

FLR

Former Member
0 Kudos

Para la consulta a generar es imprecindible que muestre todos los detalles incluidos en el query, ya que la informacion mostrada es totalmente relevante y de suma importancia para los usuarios, en el query agregue la sentencia:

compute sum (T0.[DocTotal] - T0.[PaidToDate]) by T0.[CardName], T0.CardCode

me sirve para ejecutarlo desde SQL, pero en el query manager solo me muestra informacion de un solo proveedor. Se que llevando el query a un layout podria resolver usando la opcion de grupos pero no se como usarlo

Former Member
0 Kudos

Porque no generas el reporte en PLD de la consulta que estas haciendo?

Eso de los subtotales ya es un reporte y no una simple consulta, sobre todo si lo que quieres es conservar los detalles.

slds.