Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/11/2009, 03:13
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Sumar o restar campos generados

Primero de todo creo que te falta una tabla, deberias tener

ordenes
idOrden
fecha
...
//Cabecera de la orden, datos generales, fecha cliente... etc



DetalleOrden
idDetalle
idOrden
idProducto
cantidad
precio
IVA


//Lineas de la orden producto cantidad y precio aplicado

Productos
idProducto
Nombre
Precio
IVA%

//Catalogo de productos con el nombre y el precio actual



Pagos

idPago
idOrden
Fecha
importe

//Pagos, identificador de la orden a la que corresponde, fecha y importe

Con esa estructura podriamos funcionar.

Sobre lo que nos pasas NO entiendo esta operación

Código sql:
Ver original
  1. ...
  2. ( SUM( productos.valor ) - productos.iva_total ) AS total
  3. ...

si el campo iva_total esta en productos luego deberia ser

Código sql:
Ver original
  1. ...
  2.  SUM( productos.valor - productos.iva_total ) AS total
  3. ...

Si tienes el IVA includo en valor, luego no tines que sacarlo para comparar con pagos puesto que los pagos seran tambien con iva incluido... no?

Luego para ver la ordenes con saldo pendiente, divide y venceras...


Código sql:
Ver original
  1. SELECT ordenes_id, SUM(pagos.importe_total)
  2. FROM pagos
  3. GROUP BY ordenes_id

Esto nos da lo pagado de cada orden...

Código sql:
Ver original
  1. SELECT productos.ordenes_id,
  2.          SUM( productos.valor - productos.iva_total ) AS totalSinIva,
  3.          SUM( productos.valor ) AS totalConIva
  4. FROM productos
  5. GROUP BY productos.ordenes_id

Esto nos da el total de la orden (con o sin IVA, tu sabras)

Ahora solo falta mezclarlas...



Código SQL:
Ver original
  1. SELECT ValorOrden.Orden,
  2.             (ValorOrden.totalConIva-IFNULL(PagosOrden.Pagado,0)) AS Pendiente
  3. FROM (SELECT productos.ordenes_id AS Orden,
  4.                   SUM( productos.valor - productos.iva_total ) AS totalSinIva,
  5.                   SUM( productos.valor ) AS totalConIva
  6.                FROM productos
  7.                GROUP BY productos.ordenes_id) AS ValorOrden
  8.            LEFT JOIN
  9.                 (SELECT ordenes_id AS Orden, SUM(pagos.importe_total) AS Pagado
  10.                   FROM pagos
  11.                 GROUP BY ordenes_id) AS PagosOrden
  12.            ON ValorOrden.Orden=PagosOrden.Orden
  13. WHERE (ValorOrden.totalConIva-IFNULL(PagosOrden.Pagado,0))>0;


No lo he probado pero seria lago así.

Quim