Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Aporte, como sacar antigüedad de saldos (https://www.clubdelphi.com/foros/showthread.php?t=84266)

AzidRain 28-09-2013 23:10:07

Aporte, como sacar antigüedad de saldos
 
En los programas contables y administrativos es muy común que se requiera sacar un resumen de saldos agrupados según su antigüedad.

Les dejo este código sencillo pero efectivo:

Partimos de una tabla FACTURAS con la siguiente estructura:
SUCURSAL: cHAR(3)
PROGRAMADO: DATE
PAGADO:INTEGER
IMPORTE: NUMERIC(10,2)
.
.
CAMPOS ADICIONALES
.
.

EL campo sucursal puede ser cualquier tipo que les sirva para diferenciar en este caso las facturas por sucursal, pero puede ser por cualquier otro o bien quitarlo sin problemas. El campo "programado" es la fecha programada de pago de la factura. EL campo "pagado" indica si la factura ya fue pagada o está pendiente (1 o 0).

EL Query queda así:


Código SQL [-]
SELECT SUCURSAL,
               SUM( IF( ISNULL(PROGRAMADO) OR ( DATEDIFF( CURDATE(), PROGRAMADO )<=0  AND  PROGRAMADO<>'0000-00-00')  ,  IMPORTE, 0 )) AS FINANCIADO,
               SUM(IMPORTE) AS TOTAL,
               SUM( IF( DATEDIFF( CURDATE(), PROGRAMADO )>=1 AND DATEDIFF( CURDATE(), PROGRAMADO)<=8  ,IMPORTE,0)) AS TOT_8dias,
               SUM( IF( DATEDIFF( CURDATE(), PROGRAMADO )>=9 AND DATEDIFF( CURDATE(), PROGRAMADO)<=15 ,IMPORTE,0)) AS TOT_15dias,
               SUM( IF( DATEDIFF( CURDATE(), PROGRAMADO )>=16 AND DATEDIFF( CURDATE(), PROGRAMADO)<=30 ,IMPORTE,0)) AS TOT_30dias, 
               SUM( IF( DATEDIFF( CURDATE(), PROGRAMADO )>=31 AND DATEDIFF( CURDATE(), PROGRAMADO)<=60  ,IMPORTE,0)) AS TOT_60dias, 
               SUM( IF( DATEDIFF( CURDATE(), PROGRAMADO )>=61 AND DATEDIFF( CURDATE(), PROGRAMADO)<=90  ,IMPORTE,0)) AS TOT_90dias,
               SUM( IF( DATEDIFF( CURDATE(), PROGRAMADO )>=91 ,IMPORTE,0)) AS TOT_mas90dias,
                       
            FROM FACTURAS
            WHERE PAGADO<>1    
         GROUP BY SUCURSAL

Se puede adecuar a lo que necesiten inclusive modificar los rangos como requieran ya que la lógica es la misma.
Combinado con su reporteador de preferencia se obtiene algo asi:





O ya más sofisticado:




Ojalá y les sirva

ecfisa 29-09-2013 00:09:41

Hola AzidRain.

Muchas gracias por el aporte, sin dudas es de mucha utilidad. ;)

Saludos :)

ElKurgan 29-09-2013 12:50:20

Gracias por el aporte

^\||/


La franja horaria es GMT +2. Ahora son las 03:31:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi