Foros del Web » Programando para Internet » PHP »

problema con fechas y totales

Estas en el tema de problema con fechas y totales en el foro de PHP en Foros del Web. hola a todos: tengo un pequeño gran problema(talvez para ustedes sea de lo mas sencillo cosa q para mi poca experiencia no) estoy realizando una ...
  #1 (permalink)  
Antiguo 12/07/2010, 07:14
 
Fecha de Ingreso: junio-2010
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 0
problema con fechas y totales

hola a todos:
tengo un pequeño gran problema(talvez para ustedes sea de lo mas sencillo cosa q para mi poca experiencia no) estoy realizando una aplicacion para inventarios con php y postgres, pues bueno tengo dos tablas una "movimiento" (id, cantidad_solicitada, cantidad_aprobada, importe, motivo, etc) y "egresos" (id, fecha_despacho, importe_total, etc), en la tabla de movimiento (cantidad_aprobada) se almacena la cantidad q sale del almacen por cada solicitud aprobada y en la tabla de egresos (fecha_despacho) la fecha el la que salio dicho material, ahora tengo que tener las salidas de los ultimos 12 meses por ejemplo: si aplico el modelo en abril tengo q tener las salidas desde abril del 2009 hasta marzo del 2010 y si lo hago en junio entonces desde junio de 2009 hasta mayo de 2010, y que estos esten un array para q pueda sacar su media y varianza, porfavor si alguien me prodría ayudar o dar una pauta o un script similar se los agradecería mucho
  #2 (permalink)  
Antiguo 12/07/2010, 11:27
Avatar de roxhp  
Fecha de Ingreso: mayo-2010
Ubicación: Veracruz
Mensajes: 39
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: problema con fechas y totales

Hola;

Mira lo que puedes hacer es obtener el mes (inicio)y el año(final) en el que estas, de ahi al año le restas 1 y lo guardas como tu variable de año inicio y al mes actual le restas uno y lo guardas como tu variable de mes final ya despues tu consulta la realizaras consultando las salidas que tienes desde el año y mes anterior hasta el año y mes final.

Código PHP:

$mes_inicio
=date(m);
$anio_final=date(Y);

$mes_final=$mes_inicio-1;
$anio_inicio=$anio_final-1;

//aqui el mes debes de justificarlo a 2 digitos
if($mes_inicio<10)
   
$mes_inicio="0$mes_inicio";

$sql="select cantidad_aprobada from movimiento where id in ( select id from egresos where (mont(fecha_despacho)>=$mes_inicio and mont(fecha_despacho)<=$mes_final) and (year(fecha_despacho)>=$anio_inicio and year(fecha_despacho)<=anio_final) );";

$respg_query($tu_conexion,$sql);
$i=0;
while(
$r=pg_fetch_assoc($res))
{  
$cant_apro[$i]=$r["cantidad_aprobada"];
    
$i++;


Espero y eso te sirva, tiene algo de tiempo que no uso postgres pero me parece que asi esta bien

Alguna duda o ayuda en otra cosa o si no te sirve esto espero poder ayudarte.

Saludos y suerte!!!
  #3 (permalink)  
Antiguo 13/07/2010, 11:52
 
Fecha de Ingreso: junio-2010
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: problema con fechas y totales

me agrada tu lógica y mil gracias, pero en que momento se supone q se realiza la sumatoria mensual y el almacenamiento de cada una de estas en un array? por q en el "if" solo hasta 10??? cuenta tanto mes_inicio como mes_final??? y por q lo de "0$mes_inicio" el 0 no esta mal?ahh y me olvidaba la fecha es de tipo timestamp y segun m salio el error de q no existe la función mont seguramente fue month (por lo de mes en ingles y eso) pero ni aun asi

if($mes_inicio<10)
$mes_inicio="0$mes_inicio";

disculparas mi ignorancia en este tema es q recien voy empezando y otra vez gracias, ojala me puedas responder

Última edición por Claribel_ev; 13/07/2010 a las 13:17
  #4 (permalink)  
Antiguo 13/07/2010, 13:09
Avatar de roxhp  
Fecha de Ingreso: mayo-2010
Ubicación: Veracruz
Mensajes: 39
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: problema con fechas y totales

Hola:

Perdon esa linea no la tomes el atributo month toma el mes como numerico y ya no hace falta justificar el mes a 2 digitos, si se hiciera la comparacion con like o con una comparacion de cadenas se necesitaria justificar el mes a 2 digitos.

por ejemplo si tienes el mes de abril y kisieras armar tu fecha de inicio y tu fecha final quedaria asi.

mes_inicio="04" (es el mes actual)
mes_final=3 (es el mes actual -1) al restarle uno al mes actual te da un resultado entero de 1 solo digito si es menor de 10
anio_final=2010 (año actual)
anio_inicio=2009 (año actual -1)

asi que la fecha final seria '2010-3-%' y la fecha de inicio '2009-04-%' lo cual en ciertos casos marca error dependiendo del tipo de campo en que tienes almacenada tu fecha o el tipo de comparacion, eso es solo para prevenir, hay casos en que las fechas no las guardan precisamente en campos de tipo date sino en campos varchar, de ahi que el valor se maneje como una cadena.


Código PHP:

//aqui para obtener la sumatoria debes de modificar la consulta para facilitar la obtencion de estos datos
$sql="select mont(fecha_despacho) as mes, year(fecha_despacho) as anio, cantidad_aprobada from movimiento, egresos where id in ( select id from egresos where (mont(fecha_despacho)>=$mes_inicio and mont(fecha_despacho)<=$mes_final) and (year(fecha_despacho)>=$anio_inicio and year(fecha_despacho)<=anio_final) ) and movimiento.id=egresos.id order by anio, mes;";

...
$fecha[$i]="";
while(
$r=pg_fetch_assoc($res)) 
{
     
$f=$r["anio"]."-".$r["mes"];

// se crea un arreglo de fechas que contendra el dato año-mes que servira de indice a el arreglo de las cantidades este paso te lo puedes saltar obteniendo el valor del indice con un foreach a la hora de usar los datos
     
if($fecha[$i]=""
        
$fecha[$i]=$f;

     if(
$fecha[$i]!=$f)
    {   
$i++;
         
$fecha[$i]=$f;
    }

// aqui se van sumando las cantidades aprobadas del mismo mes y año y se meten en un array con esa fecha como indice.
    
$cant_apro[$f]=$cant_apro[$f]+$r["cantidad_aprobada"]; 


Espero y esto te sea de utilidad no habia entendido muy bien que querias con el array. :P

Suerte ya de ahi es cuestion de que te pongas a jugar con el array
  #5 (permalink)  
Antiguo 13/07/2010, 13:52
 
Fecha de Ingreso: junio-2010
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: problema con fechas y totales

Mil gracias eso de las fechas inicio y fin lo entendi super bien, pero aun sigo con algo de dudas, mejor lo pruebo y a ver como m va espero si puedas aclararme otras dudas que tenga despues de probarlo. gracias
  #6 (permalink)  
Antiguo 13/07/2010, 15:43
Avatar de roxhp  
Fecha de Ingreso: mayo-2010
Ubicación: Veracruz
Mensajes: 39
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: problema con fechas y totales

Si pruebalo y por aki andare para cualquier duda espero poder ayudarte a resolverla... La mejor manera de aprender y sacar las dudas es probando y preguntando.

Cuando lo pruebes me avisas que paso.

Suerte!!!
  #7 (permalink)  
Antiguo 14/07/2010, 09:38
 
Fecha de Ingreso: junio-2010
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: problema con fechas y totales

hola:
pues ya lo probe y pues para la primera y sacar solo el mes utilize DATE_PART('MONTH',fecha_despacho) (la verdad es la unica q encontre y q funcionaba, no se si estare en lo correcto), y bien m saco algunos errores q tratando tratando y cambiando pues logre que no haya ningun error pero el detalle es q ahora no muestra nada
Código PHP:
$mes_inicio=date(m); 
        
$anio_final=date(Y); 

        
$mes_final=$mes_inicio-1
        
$anio_inicio=$anio_final-1

        if(
$mes_inicio<10
           
$mes_inicio="0$mes_inicio";
$sql="SELECT cantidad_aprobada from almacenes.movimiento WHERE id in ( SELECT id FROM almacenes.egresos WHERE(DATE_PART('MONTH',fecha_despacho)>=$mes_inicio AND DATE_PART('MONTH',fecha_despacho)<=$mes_final) AND(DATE_PART('YEAR',fecha_despacho)>=$anio_inicio AND DATE_PART('YEAR',fecha_despacho)<=$anio_final) );"

        
$respg_query($sql); 
        
$i=0
        while(
$r=pg_fetch_array($res)) 
        {  
        
$cant_apro[$i]=$r["cantidad_aprobada"]; 
            
$i++; 
        echo 
"<td>",$cant_apro[$i],"</td>";
        echo 
"$cant_apro[$i]";
        } 
no se que estoy haciendo mal, ahora con la otra consulta hice lo mismo modificar y cambiar algunas cosas de esta manera

Código PHP:
$sql="select DATE_PART('MONTH',fecha_despacho) as mes, DATE_PART('YEAR',fecha_despacho) as anio, cantidad_aprobada from almacenes.movimiento m, almacenes.egresos e where e.id in ( select e.id from almacenes.egresos e where (DATE_PART('MONTH',fecha_despacho)>=$mes_inicio and DATE_PART('MONTH',fecha_despacho)<=$mes_final) and (DATE_PART('YEAR',fecha_despacho)>=$anio_inicio and DATE_PART('MONTH',fecha_despacho)<=$anio_final)) and movimiento.id=egresos.id order by anio, mes"
$respg_query($sql); 
$fecha[$i]=""
while(
$r=pg_fetch_assoc($res))  

     
$f=$r["anio"]."-".$r["mes"]; 

     if(
$fecha[$i]="")  
        
$fecha[$i]=$f

     if(
$fecha[$i]!=$f
    {   
$i++; 
         
$fecha[$i]=$f
    } 

    
$cant_apro[$f]=$cant_apro[$f]+$r["cantidad_aprobada"];  
    echo 
"$cant_apro[$f]";


y me saca lo siguiente
Código HTML:
Warning: pg_query() [function.pg-query]: Query failed: ERROR: falta una entrada para la tabla «movimiento» en la cláusula FROM LINE 1: ... and DATE_PART('MONTH',fecha_despacho)<=2010) and movimiento... ^ in C:\wamp\www\Almacen\prueba.php on line 48

Warning: pg_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\Almacen\prueba.php on line 50
y no pillo cual es el error revise muchas veses la consulta pero no tengo idea de que sea ojala me puedas ayudar plisss, gracias
  #8 (permalink)  
Antiguo 14/07/2010, 10:18
Avatar de roxhp  
Fecha de Ingreso: mayo-2010
Ubicación: Veracruz
Mensajes: 39
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: problema con fechas y totales

ya probaste esta consulta en tu base de datos???

Intenta correrla en tu consola o linea de comandos, o el programa que utilizes para checar tus consultas.

Si no te corre prueba asi a ver si asi te corre bien.
Código PHP:


$sql
="select DATE_PART('MONTH',e.fecha_despacho) as mes, DATE_PART('YEAR',e.fecha_despacho) as anio, m.cantidad_aprobada from movimiento as m, egresos as e where m.id in ( select e.id from egresos as e where (DATE_PART('MONTH',e.fecha_despacho)>=$mes_inicio and DATE_PART('MONTH',e.fecha_despacho)<=$mes_final) and (DATE_PART('YEAR',e.fecha_despacho)>=$anio_inicio and DATE_PART('YEAR',e.fecha_despacho)<=$anio_final)) and movimiento.id=egresos.id order by anio, mes"
Perdon es que como ahorita estoy usando mysql y tiene un buen ke no uso postgres te revolvi las cosas :P, nuevamente perdon el month() se usa en mysql.

Espero que esto te sirva. si no ya veremos como resolverlo.
  #9 (permalink)  
Antiguo 14/07/2010, 10:58
 
Fecha de Ingreso: junio-2010
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: problema con fechas y totales

no t preocupes gracias a ti por la ayuda, pues bien utilizo pgAdmin3 y pues la consulta la realise de esta manera:
Código PHP:
select DATE_PART('MONTH',e.fecha_despacho) as mesDATE_PART('YEAR',e.fecha_despacho) as aniom.cantidad_aprobada 
from almacenes
.movimiento as malmacenes.egresos as 
where m
.id in select e.id from almacenes.egresos as ealmacenes.movimiento as m where (DATE_PART('MONTH',e.fecha_despacho)>=and DATE_PART('MONTH',e.fecha_despacho)<=12) and (DATE_PART('YEAR',e.fecha_despacho)>=2009and DATE_PART('YEAR',e.fecha_despacho)<=2010)) and m.id=e.id order by aniomes 
en las condiciones tube q colocar numeros por q m daba error con variables, tal vez se pueda colocar pero con mi tan poca experiencia la verdad no lo se y me salio filas con "mes, año, y cantidad_aprobada" y sus respectivas columnas, averiguando pues encontre q en sql hay una funcion la cual suma un campo integer "sum" pero añaddo al campo sum(m.cantidad_aprobada) y m sale error de que se debe adicionar GROUP BY, gracias por responder

Última edición por Claribel_ev; 15/07/2010 a las 07:40

Etiquetas: fechas, totales
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:04.