Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Facturas a 30,45,60,90 y 120 dias. como hacerlo?

Hola compañeros, necesito que me den un empujoncito con algo al que no tengo idea de como entrarle, sucede que el cliente me ha pedido una especie de historico de facturas que estan en los 30, 45...dias, ejemplo:

Cita:
Factura ------30 dias------45 dias------60 dias------90 dias------120+

0311 ------3,000.00------------------------------------------------
0312 -------------------4,500.00-----------------------------------
0313 -------------------8,750.00-----------------------------------
0314 ------------------------------11,700.00-----------------------
las facturas ya estan registradas, no se si eso se hace con una consulta sql o alguna especie if anidados, de veras no se, si se hace partir de la fecha de la factura o se hace de otra manera, realmente no se como entrarle, espero que me puedan dar una idea un pequeño empujoncito.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #2  
Antiguo 16-10-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
En SQL Server harías algo como:
Código SQL [-]
Select F.Factura,
case when datediff(dd, F.FechaFactura, GetDate()) <30 then F.Monto else 0 end dias30,
case when datediff(dd, F.FechaFactura, getdate()) between 31 and 45 then F.Monto else 0 end dias45
case when datediff(dd, F.FechaFactura, getdate()) between 46 and 60 then F.Monto else 0 end dias60
...
...
From Facturas F
where ...
__________________


Última edición por ContraVeneno fecha: 16-10-2007 a las 01:13:16.
Responder Con Cita
  #3  
Antiguo 16-10-2007
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.083
Poder: 18
juanelo Va por buen camino
Hola,
Lo que no terminas de explicar es que si tu intencion es obtener esta informacion mediante una sentencia SQL, ademas de esto hay un concepto bien importante que es el de fecha de vencimiento (o de corte para algunos) y que es desde donde se empieza a contar para los dias que han transcurrido y que no se ha efectuado el pago.

En mi caso yo he tenido la necesidad de elaborar un reporte de este tipo, y dada la definicion de la base de datos que ya existia (es un programa comercial de terceros) pues me di a la tarea de hacer y acumular los datos en un ClientDataSet, y me funciona de maravilla, eso si, hay que seleccionar todas las facturas de un periodo dado y recorrerlas a "mano" e ir acumulando como se requiera en un CDS con sus campos correspondientes a 30,60,90 ... etc dias de vencimiento (tomando como fecha de referencia la fecha de vencimiento de la factura).
Saludos
Responder Con Cita
  #4  
Antiguo 16-10-2007
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.083
Poder: 18
juanelo Va por buen camino
Cita:
Empezado por ContraVeneno Ver Mensaje
En SQL Server harías algo como:
Código SQL [-]Select F.Factura,
case when datediff(dd, F.FechaFactura, GetDate()) <30 then F.Monto else 0 end 30dias,
case when datediff(dd, F.FechaFactura, getdate()) between 31 and 45 then F.Monto else 0 end 45dias
case when datediff(dd, F.FechaFactura, getdate()) between 46 and 60 then F.Monto else 0 end 60dias
...
...
From Facturas F
where ...
El problema es que lo que supongo que quiere hacer es ACUMULAR las facturas que caigan en este rango, para un analisis de cobranza. Con este query no se acumulan estas cantidades.
Responder Con Cita
  #5  
Antiguo 16-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola Contraveneno ese codigo me serviria con bases de datos en mysql? como lo tengo que implementarlo? por codigo o a traves de un Tquery normalmente?

Cita:
El problema es que lo que supongo que quiere hacer es ACUMULAR las facturas que caigan en este rango, para un analisis de cobranza. Con este query no se acumulan estas cantidades.
lo que quiero hacer es un reporte de las facturas que caigan en los rangos de dias mencionados mas arriba, como dices tu juanelo, para un analisis de cobranza y llevar un control del tiempo que tiene cada fatura desde la fecha facturada.

Saludos
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #6  
Antiguo 16-10-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
para MySQL me declaro ignorante en el tema...

la clave sería que pudieras utilizar algo como el CASE de SQL Server para definir el rango de días y obviamente, alguna función que te diga la diferencia de días, que es lo que hace la función "DateDiff" en SQL Server...

Pero yo desconozco que funciones te ayudarían a hacer esto en MySQL
__________________

Responder Con Cita
  #7  
Antiguo 16-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola ContraVeneno, hice una busqueda en google y encontre esto:

Cita:
DATEDIFF(). Esta función obtiene la diferencia, en días, entre dos fechas. Ejemplo : SELECT DATEDIFF(‘2005-4-1’,’2004-5-30’);
Este query produce 306, lo que significa que del 30/5/2004 al 1/4/2005 van 306 días.
y este ejemplo donde usan case y end:

Código SQL [-]
SELECT
             CASE DAYOFWEEK(CURDATE())
                  WHEN 1 THEN 'Domingo'
                  WHEN 2 THEN 'Lunes'
                  WHEN 3 THEN 'Martes'
                  WHEN 4 THEN  CONCAT('Mi',CHAR(130),'rcoles')
                  WHEN 5 THEN 'Jueves'
                  WHEN 6 THEN 'Viernes'
                  WHEN 7 THEN  CONCAT('S',CHAR(160),'bado')
             END AS Dia_de_la_Semana;

al parecer usan la mismas funciones, entonces eso indica que puedo usarlo con TQuery?

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #8  
Antiguo 16-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola, al parecer he logrado hacer el objetivo, basandome en el ejemplo de ContraVeneno, lo he adaptado en una consulta en mysql, ahi les va, lo probe en el servidor y me arrojo resultados:

Código SQL [-]
SELECT CASACOMERCIAL, FACTURA, 
(SELECT DATEDIFF(CURDATE(),FECHAFACTURA) < 30)  AS MES1, 
(SELECT DATEDIFF(CURDATE(),FECHAFACTURA) BETWEEN 31 AND 45) AS MES2, 
(SELECT DATEDIFF(CURDATE(),FECHAFACTURA) BETWEEN 46 AND 60) AS MES3, 
(SELECT DATEDIFF(CURDATE(),FECHAFACTURA) BETWEEN 61 AND 90) AS MES4, 
(SELECT DATEDIFF(CURDATE(),FECHAFACTURA) BETWEEN 91 AND 120) AS MES5,
(SELECT DATEDIFF(CURDATE(),FECHAFACTURA) > 120) AS MES6 FROM TABLA2

Espero criticas .

Saludos.

PD. Gracias a ContraVeneno sin su ejemplo no hubiera conocido la funcion DATEDIFF.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #9  
Antiguo 16-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hombre, que va, la consulta funciona pero no como me lo esperaba porque me arroja puros unos, y a mi me gustaria que el valor de la factura cayera en el rango, ejemplo del resultado:





Saludos
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #10  
Antiguo 16-10-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Código SQL [-]
Select F.CasaComercial, F.Factura,
case when datediff(F.FechaFactura, CurDate()) <30 then F.Monto else 0 end as dias30,
case when datediff(F.FechaFactura, Curdate()) between 31 and 45 then F.Monto else 0 end as dias45,
case when datediff(F.FechaFactura, Curdate()) between 46 and 60 then F.Monto else 0 end as dias60,
case when datediff(F.FechaFactura, CurDate()) >60 then F.Monto else 0 end as masdias60
From Tabla2 F

Pruébalo así en MySQL a ver si mis suposiciones son ciertas... El campo F.Monto deberá ser el campo donde guardas la cantidad que quieres ver.
__________________


Última edición por ContraVeneno fecha: 16-10-2007 a las 15:40:40.
Responder Con Cita
  #11  
Antiguo 16-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola ContraVeneno, Mira lo que me sale:

Cita:
Error

consulta SQL:
SELECT CASACOMERCIAL, FACTURA,
CASE WHEN datediff( FECHAFACTURA, CurDate( ) ) <30
THEN VALOR
ELSE 0
END AS dias30,
CASE WHEN datediff( FECHAFACTURA, Curdate( ) )
BETWEEN 31
AND 45
THEN VALOR
ELSE 0
END AS dias45,
CASE WHEN datediff( FECHAFACTURA, Curdate( ) )
BETWEEN 46
AND 60
THEN VALOR
ELSE 0
END AS dias60,
CASE WHEN datediff( FECHAFACTURA, CurDate( ) ) >60
THEN VALOR
ELSE 0
END AS masdias60,
FROM TABLA2
LIMIT 0 , 30
MySQL ha dicho:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'From TABLA2
LIMIT 0, 30' at line 1
Saludos
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #12  
Antiguo 16-10-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
me sobra la coma después del nombre del campo "masdias60".

No debería existir ninguna coma antes del "FRom"
__________________

Responder Con Cita
  #13  
Antiguo 16-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hombre me funciono perfecto, no se como agradecerle solo tengo por el momento un GRACIAS grandote.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #14  
Antiguo 16-10-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
que bueno que funcionó, ahora me queda una duda:
En el primer case, revisamos todas las que sean menores a 30 (aquí tal vez debería ser "<="), en el segundo case revisamos las que sean de 31 a 45 días, me queda la duda de que si en el primer case, no colocamos un "menor o igual", aquellas facturas que sean exactamente de 30 días, no sean consideradas.

En pocas palabras, debería ser algo como:

Código SQL [-]
case when datediff(F.FechaFactura, CurDate()) <=30 then F.Monto else 0 end as dias30,
case when datediff(F.FechaFactura, Curdate()) between 31 and 45 then F.Monto else 0 end as dias45,
__________________

Responder Con Cita
  #15  
Antiguo 16-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Otra vez te agradezco ContraVeneno ahora mismo la aplico, cualquier cosa te comento. de nuevo gracias

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #16  
Antiguo 16-10-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Borrado por responder tarde
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)

Última edición por Ivanzinho fecha: 16-10-2007 a las 15:58:34.
Responder Con Cita
  #17  
Antiguo 16-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Cita:
Empezado por Ivanzinho Ver Mensaje
Borrado por responder tarde
Gracias Ivanzinho, de todos modos te lo agradezco, lo que vale es la intencion.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #18  
Antiguo 16-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Primer Problema: todas las facturas me caen en el rango de 30 dias sin importar que la factura tenga mas de 45 dias o 60 que existen en la base de datos:

Código SQL [-]
SELECT CASACOMERCIAL, FACTURA,
CASE WHEN datediff( FECHAFACTURA, CurDate( ) ) < 30
THEN VALOR
ELSE 0
END AS dias30,
CASE WHEN datediff( FECHAFACTURA, Curdate( ) )
BETWEEN 31
AND 45
THEN VALOR
ELSE 0
END AS dias45,
CASE WHEN datediff( FECHAFACTURA, Curdate( ) )
BETWEEN 46
AND 60
THEN VALOR
ELSE 0
END AS dias60,
CASE WHEN datediff( FECHAFACTURA, CurDate( ) )
BETWEEN 61
AND 90
THEN VALOR
ELSE 0
END AS dias90,
CASE WHEN datediff( FECHAFACTURA, CurDate( ) )
BETWEEN 91
AND 120
THEN VALOR
ELSE 0
END AS dias120,
CASE WHEN datediff( FECHAFACTURA, CurDate( ) )  > 120
THEN VALOR
ELSE 0
END AS mas120
FROM tabla2



Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #19  
Antiguo 16-10-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Agrega un campo que te diga cuantos días te devuelve la función datediff para que verifiques el cálculo. A mi me funciona perfectamente.

Código SQL [-]
SELECT CASACOMERCIAL, FACTURA, datediff(fechafactura, curdate()), 
case when....
.....
__________________

Responder Con Cita
  #20  
Antiguo 16-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
mira los resultados:

http://img524.imageshack.us/img524/2...nsulta3fp1.jpg

__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Tabla de Facturas vs Detalles de Facturas magnu9 Conexión con bases de datos 9 27-07-2007 17:27:37
como hacerlo?¿ tiagor64 Conexión con bases de datos 4 09-02-2005 15:55:04
Cómo hacerlo ... Jordy Conexión con bases de datos 2 19-08-2004 10:21:39
Campos calculados, facturas y detalles de facturas. Letty Conexión con bases de datos 7 07-11-2003 11:19:44
No se como hacerlo apolo18 Impresión 4 19-05-2003 23:13:27


La franja horaria es GMT +2. Ahora son las 23:43:11.


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
Copyright 1996-2007 Club Delphi