Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-01-2013
pjacob80 pjacob80 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 23
Poder: 0
pjacob80 Va por buen camino
consulta sql para resumen de cuenta corriente

Hola amigos, estoy desarrollando un soft para control de clientes, y me encargaron que tenga un resumen del tipo, "concepto, debe, haber, saldo", o sea, una tabla en donde muestre los trabajos realizados y los pagos que fue haciendo el cliente. Mi problema es que uso un qreport en delphi para hacerlo con consulta sql, pero no se me ocurre como comenzar. tengo la tabla de clientes con su codigo, nombre, etc. una tabla de pagos, donde esta el codigo del cliente, fecha. y una tabla de trabajos en donde esta la fecha, valor del trabajo, etc.
La consulta deberia ir ordenando esto por fecha, pero el problema es que los trabajos deberan ir en el "debe" y los pagos en el "haber" en las columnas del reporte. y en la columna saldo debera ir restando o sumando.
no se si se entiende mas o menos.
el reporte seria algo asi:


| fecha | concepto | debe | haber | saldo |
|xx/xx/xx | trabajo x | 100 | | 100 |
|xx/xx/xx | pago x | | 100 | 0 |
|xx/xx/xx | trabajo x | 100 | | 100 |
|xx/xx/xx | trabajo x | 100 | | 200 |

algo asi deberia tirar el reporte para imprimir.

alguien me puede tirar una idea? se puede hacer directamente con un select?

Desde ya muchas gracias.
Responder Con Cita
  #2  
Antiguo 24-01-2013
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Cita:
Mi problema es que uso un qreport en delphi para hacerlo con consulta sql, pero no se me ocurre como comenzar
¿Cual es el problema?

¿Empezar hacer que?, ¿el diseño de QuickReport?, ¿la consulta SQL?, ¿ambas cosas?

¿La fecha cual es?, ¿la del pago, la del trabajo o ambas?, para eso debes de hacer una UNION en la SQL

¿La tabla trabajos también está relacionada con el cliente?, como lo has puesto, me imagino que si.

En la tabla Pagos y Trabajos, ¿cómo se llama el campo donde guardas los valores?, ¿Se llama IMPORTE, VALOR, PAGO, DEBE, HABER?

Haz saber los campos que están relacionado unos con otros, esto ayuda a realizar la SQL que te pueda ayudar.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #3  
Antiguo 24-01-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola,

Qué motor de bbdd estás usando?

Cliente
Trabajos
Pagos

Código SQL [-]
select cliente.nombre, trabajo.nombre, sum(trabajo.importe) as debe,sum( pago.importe) as haber, sum(trabajo.importe- pago.importe) as saldo
from trabajo
inner join cliente on cliente.id= trabajo.id
left join pago on pago.id=trabajo.id
group by cliente.nombre, trabajo.nombre

se aproxima a lo que necesitas ?

qué pasa si añades la fecha del trabajo y agrupas por esa fecha ? Podrías quitar la tabla de clientes ... tiene sentido ?

Cuéntano cómo te va.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #4  
Antiguo 24-01-2013
pjacob80 pjacob80 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 23
Poder: 0
pjacob80 Va por buen camino
Cita:
Empezado por olbeup Ver Mensaje
¿Cual es el problema?

¿Empezar hacer que?, ¿el diseño de QuickReport?, ¿la consulta SQL?, ¿ambas cosas?

¿La fecha cual es?, ¿la del pago, la del trabajo o ambas?, para eso debes de hacer una UNION en la SQL

¿La tabla trabajos también está relacionada con el cliente?, como lo has puesto, me imagino que si.

En la tabla Pagos y Trabajos, ¿cómo se llama el campo donde guardas los valores?, ¿Se llama IMPORTE, VALOR, PAGO, DEBE, HABER?

Haz saber los campos que están relacionado unos con otros, esto ayuda a realizar la SQL que te pueda ayudar.

Un saludo.

En principio me interesaria la consulta SQL, el diseño del quick creo que lo podre armar. de ultima lo vemos mas adelante.
Las fechas son correlativas, o sea, irian una a una. por ej, el cliente quiere saber entre 2 fechas que movimientos hubo. Ahi se deberia poner si existe un saldo anterior, y luego detallar una a una las actividades, ya sea, de trabajos realizados, o pagos realizados, ambos tienen fecha distinta.
la tabla trabajos si esta relacionada, cada trabajo tiene un cliente asignado para saber a quien se lo hizo. el campo que se usa para eso es codcliente.
en ambas tablas, Pagos y Trabajos, el campo se llama MONTO, se guarda el valor de lo que se refiere, en la tabla pagos de los pagos y en la tabla trabajos de los trabajos realizados, quiero aclarar, que los pagos no siempre pueden ser iguales a los montos de los trabajos, o sea, el cliente puede dar un adelanto y luego pagar el resto. por eso me encargaron hacer este listado, para ver como ha ido la operacion con el cliente.
Responder Con Cita
  #5  
Antiguo 24-01-2013
pjacob80 pjacob80 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 23
Poder: 0
pjacob80 Va por buen camino
Cita:
Empezado por fjcg02 Ver Mensaje
Hola,

Qué motor de bbdd estás usando?

Saludos
Perdon por no aclarar, estoy usando firebird.


En cuanto al codigo que me pasas, no estoy seguro que sea asi, en realidad mi nivel de sql es basico, pero la tabla pagos la relacionas con la de trabajo? no necesariamente, como aclare antes, los pagos pueden ser distintos y se pueden hacer en varias veces.
todas las tablas serian relacionadas con el cliente, o sea, los trabajos que se le realizaron al cliente, y los pagos que realizo el mismo.
mi problema fundamentalmente es como poner en el qreport que me muestre en la columna del debe los trabajos y en el haber los pagos. y si muestro un pago por ejemplo, en la columna del debe tendria que estar vacia. no se si se entiende.

Última edición por pjacob80 fecha: 24-01-2013 a las 12:03:30.
Responder Con Cita
  #6  
Antiguo 24-01-2013
pjacob80 pjacob80 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 23
Poder: 0
pjacob80 Va por buen camino
creo que deberia tener un "order by fecha", tanto de la tabla trabajos como la de pagos (ya que apareceran mezclados en el listado), y que se puede elegir un rango entre x fechas.
Responder Con Cita
  #7  
Antiguo 24-01-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Bueno,

supongo que los pagos se corresponderán a un trabajo realizado o futuro, no?

Depende de cómo tengas la información distribuida por las tablas, deberás utilizar una consulta o un procedimiento almacenado.

Si quieres saber el acumulado anterior, ya vas dando más pistas, lo que parece que nos lleva a un p.almacenado.

Confirmanos si es así para que te podamos orientar.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #8  
Antiguo 24-01-2013
pjacob80 pjacob80 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 23
Poder: 0
pjacob80 Va por buen camino
los pagos son pagos de trabajos, pero supongamos que un trabajo valio 100, el cliente puede pagar 50, mas adelante pagar 20, y mas adelante 30. en la tabla que quiero deberia mostrarse asi:


fecha | descripcion | debe | haber | saldo
| saldo anterior | | | 0
1/1/13 | trabajo realizado | 100 | | 100
2/1/13 | pago cuota 1 | | 50 | 50
3/1/13 | pago cuota 2 | | 20 | 30
4/1/13 | pago cuota 3 | | 30 | 20
Responder Con Cita
  #9  
Antiguo 24-01-2013
pjacob80 pjacob80 is offline
Miembro
NULL
 
Registrado: ene 2013
Posts: 23
Poder: 0
pjacob80 Va por buen camino
aqui un ejemplo de un reporte impreso de un veterinario. lo subo para que se vea la idea.


Última edición por pjacob80 fecha: 24-01-2013 a las 14:43:24.
Responder Con Cita
  #10  
Antiguo 24-01-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Aprovechando que no está la jefa, aunque tengo mucho trabajo ....

prueba con esto, no está probado ni depurado pero creo que te puede poner en la pista. Para los puristas, es pseudocódigo sin probar !!
1. Calculamos el saldo hasta la fecha
2. Seleccionamos los trabajos y los pagos, por cada registro calculamos el saldo y lo sacamos.

Notas:
for select ... into variables;
suspend;
hace una select, por cada regsitro obtenido asigna las columnas a las variables, y suspend las presenta.

Por cada registro calculamos el saldo.
Sacamos los resultados

Espero que te sirva.

Código SQL [-]
CREATE OR ALTER PROCEDURE SP_PRUEBA (
    fechaDesde, FechaHasta date,
  idcliente integer)
  returns(
  fecha date,
  articulo varchar(50),
  debe numeric(10,2),
  haber numeric(10,2)
  saldo numeric(10,2)
  )
as
declare variable 
montante numeric(10,2);

begin
  /* Procedure Text */
/* inicializacmos las variables de salida */
  fecha = null;
  articulo='';
  debe= 0;
  haber= 0;
  saldo= 0;

  /* Calculamos los trabajos */
  SELECT SUM(TRABAJO.IMPORTE) FROM TRABAJO
  WHERE IDCLIENTE=:IDCLIENTE AND FECHA < :FechaDesde
  INTO montante;
  saldo= montante;
  /* Calculamos los pagos */
  SELECT SUM(PAGO.IMPORTE) FROM PAGO
  WHERE IDCLIENTE=:IDCLIENTE AND FECHA < :FechaDesde
  INTO montante;
  saldo= saldo - montante;
  /* ya tenemos la primera linea, es decir el saldo hasta la fecha desde, la sacamos */
  suspend;
  
  for select fecha, articulo, debe, haber 
  from (
    /* importes de los trabajos del cliente entre las fechas */
    select fecha, trabajo, importe, 0 
    from trabajo
    where 
      fecha >= :FechaDesde and fecha <= :FechaHasta
      and idcliente=:idCliente
    group by fecha
    UNION
    /* importes de los pagos del cliente entre las fechas */
    select  fecha, articulo, 0, importe
    from pago
    where 
      fecha >= :FechaDesde and fecha <= :FechaHasta 
      and idcliente=:idCliente
    group by fecha
      )
  order by fecha
  into fecha, articulo, debe, haber;
  saldo=saldo +debe-haber;
  /* sacamos los datos por cada registro */
  suspend;  
   
end^
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
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
consulta para resumen mensual PacoPepe SQL 30 25-03-2011 09:37:26
Error en cuenta/Login/cuenta robada coso___ La Taberna 17 24-02-2009 17:30:14
Configuración cuenta para envio de correo yomismo24 Internet 2 01-07-2008 17:27:26
Verificación de Cuenta Corriente y Nif albcastro Trucos 2 16-12-2007 21:18:27
Consulta resumen con subconsulta(ayuda) cmena SQL 5 01-07-2004 00:18:21


La franja horaria es GMT +2. Ahora son las 03:08:44.


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