PHP - Problemas para generar reporte con union

   
Vista:

Problemas para generar reporte con union

Publicado por jose jofeav@hotmail.com (10 intervenciones) el 13/08/2015 00:48:32
que tal
tengo un problema para generar un reporte con la suma cantidad de ventas de productos de boletas y facturas (facturas_detalle y boletas_detalle)
bueno que se sumen las cantidades de ventas de los productos pude resolverlo con union
1
2
3
4
5
6
7
8
$uni= mysql_query("select articulos.codarticulo,articulos.datos_producto,consolidado.codigo,sum(consolidado.cantidad) as total
from
(
select codigo,cantidad from eefactulinea
union all
select codigo,cantidad from factulinea
) as consolidado,articulos where articulos.codarticulo=consolidado.codigo
group by codigo") ;

pero mi problema es al hacer el reporte, es decir necesito que desde otra ventana se ingrese las fechas de consulta (inicio y fin) para que en el reporte me muestre solo la suma de ventas entre esas dos fechas porque con el código anterior hace la suma total de los registros, al tratar de hacer ese anillado para que filtre por fechas me varia la cantidad de ventas
las fechas salen de las tablas facturas_cabezera y boletas_cabezera
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Problemas para generar reporte con union

Publicado por xve (5520 intervenciones) el 13/08/2015 17:25:18
Hola Jose, la solución pasaria por comparar entre las fechas que comentas, no? algo así:
1
2
3
4
5
6
7
8
9
$uni= mysql_query("select articulos.codarticulo,articulos.datos_producto,consolidado.codigo,sum(consolidado.cantidad) as total
from
(
select codigo,cantidad from eefactulinea
union all
select codigo,cantidad from factulinea
) as consolidado,articulos where articulos.codarticulo=consolidado.codigo
AND fecha BETWEEN ".$facturas_cabezera." AND ".$boletas_cabezera."
group by codigo") ;

No se como se llama el campo fecha de la base de datos...

Coméntanos si te sirve, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas para generar reporte con union

Publicado por jose (10 intervenciones) el 13/08/2015 19:17:13
hola
bueno creo que no puse bien los datos
Inicialmente mi código es este
1
2
3
4
5
6
7
8
$uni= mysql_query("select consolidado.codfactura,articulos.codarticulo,articulos.datos_producto,consolidado.codigo,sum(consolidado.cantidad) as total
from
(
select codfactura,codigo,cantidad from eefactulinea
union all
select codfactura,codigo,cantidad from factulinea
) as consolidado,articulos where articulos.codarticulo=consolidado.codigo
group by codigo") ;

hasta ahí todo bien con los resultados

como estaba tratando de hacer el filtro de fechas
1
2
3
4
5
6
7
8
$uni= mysql_query("select facturas.fecha,eefacturas.fecha,eefacturas.id_distri,facturas.id_distri,distribuidores.nombres,distribuidores.id_distri,facturas.codfactura,eefacturas.codfactura,consolidado.codfactura,articulos.codarticulo,articulos.datos_producto,consolidado.codigo,sum(consolidado.cantidad) as total
from
(
select codfactura,codigo,cantidad from eefactulinea
union all
select codfactura,codigo,cantidad from factulinea
) as consolidado,articulos,eefacturas,facturas,distribuidores  where articulos.codarticulo=consolidado.codigo and eefacturas.id_distri=distribuidores.id_distri and facturas.id_distri=distribuidores.id_distri and eefacturas.codfactura=consolidado.codigo and facturas.codfactura=consolidado.codigo and eefacturas.fecha >= '$textfield' and eefacturas.fecha <= '$textfield2' and facturas.fecha >= '$textfield' and facturas.fecha <= '$textfield2' 
group by consolidado.codigo") ;

donde:
eefacturas = boletas_cabezera
facturas = facturas_Detalle
eefactulinea = boletas_detalle
factulinea = facturas_detalle

bueno el problema con ese código es que solo funciona si pongo rangos extremos es decir la primera fecha de registro hasta la ultima fecha de registro, si es que ingreso fechas dentro de esas, ahí el reporte falla con las cantidades

estuve probando con between con una fecha especifica
1
2
3
4
5
6
7
8
$uni= mysql_query("select facturas.fecha,eefacturas.fecha,eefacturas.id_distri,facturas.id_distri,distribuidores.nombres,distribuidores.id_distri,facturas.codfactura,eefacturas.codfactura,consolidado.codfactura,articulos.codarticulo,articulos.datos_producto,consolidado.codigo,sum(consolidado.cantidad) as total
from
(
select codfactura,codigo,cantidad from eefactulinea
union all
select codfactura,codigo,cantidad from factulinea
) as consolidado,articulos,eefacturas,facturas,distribuidores  where articulos.codarticulo=consolidado.codigo and eefacturas.id_distri=distribuidores.id_distri and facturas.id_distri=distribuidores.id_distri and eefacturas.codfactura=consolidado.codigo and facturas.codfactura=consolidado.codigo and (facturas.fecha BETWEEN '2015-08-08' AND '2015-08-08') and (eefacturas.fecha BETWEEN '2015-08-08' AND '2015-08-08')
group by consolidado.codigo") ;

el problema que tengo ahí es que solo me sale un producto, cuando en realidad tengo registrado dos productos vendidos y la cantidad es errónea
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar