Foros del Web » Programando para Internet » PHP »

Cuando el año es diferente toma un nuevo saldo

Estas en el tema de Cuando el año es diferente toma un nuevo saldo en el foro de PHP en Foros del Web. Hola amigos, ya he tenido varios problemitas con esto, y cuando crei poder resolverlos pacata no, todavia me presenta un error y de verdad que ...
  #1 (permalink)  
Antiguo 23/04/2010, 10:06
 
Fecha de Ingreso: marzo-2010
Mensajes: 152
Antigüedad: 14 años, 7 meses
Puntos: 1
Cuando el año es diferente toma un nuevo saldo

Hola amigos, ya he tenido varios problemitas con esto, y cuando crei poder resolverlos pacata no, todavia me presenta un error y de verdad que por mi solita he buscado la manera de resolverlo y nada, coloque la consulta de mi base de datos en el foro de mysql para ver si alli se resuelve pero no, creo que ya esto es un problema que no se como resolverlo desde php, resulta que le hago una consulta a mi base de datos con php y me genera algo asi:


__________________________________________________ _________|
AÑO |MES |Nº DOC |DEBE |HABER |SALDO |
______|_____ |_______|_______|________|________|
2009 |11 | 2 | 6000| 6000| 0|
______|_____ |_______|_______|________|________|
2009 |12 | 1 | 8000| 0| 8000|
______|_____ |_______|_______|________|________|
2009 |TOTAL | 3 | 14000| 6000| 8000|
______|______|_______|_______|________|________|
2010 |1 | 2 | 11000| 0| 11000|
______|______|_______|_______|________|________|
2010 |TOTAL | 2 | 11000| 0| 11000|
______|______|_______|_______|________|________|

ahora bien coloque en rojo lo que esta malo, ya que enero debe tener el saldo que trae ese cliente del año anterior, y eso es lo que me a sacado canas verdesssssssssss porque no lo consigo hacerr hayyyyyyy voy a colocar el codigo a ver que me dicen ustedes que tengo malo


porrrfisssss ayudaaaaaaaaaaaaaaaa
Código PHP:
Ver original
  1. $cSql=mysql_query("SELECT YEAR(FECHA) AS ANO, MONTH(FECHA) AS MES, COUNT(*) AS MOVIMIENTOS, SUM(IF(CXC= 1,NETO,0))
  2. AS DEBE, SUM(IF(CXC=-1,NETO,0)) AS HABER, SUM(IF(CXC= 1,NETO,0))-SUM(IF(CXC=-1,NETO,0)) AS SALDO
  3. FROM CLIENTE WHERE CODIGO='0000000001' GROUP BY YEAR(FECHA),MONTH(FECHA)
  4. UNION ALL
  5. SELECT YEAR(FECHA) AS ANO, 'Total' AS MES, COUNT(*) AS MOVIMIENTOS, SUM(IF(CXC= 1,NETO,0))
  6. AS DEBE, SUM(IF(CXC=-1,NETO,0)) AS HABER, SUM(IF(CXC= 1,NETO,0))-SUM(IF(CXC=-1,NETO,0)) AS SALDO
  7. FROM CLIENTE WHERE CODIGO='0000000001' GROUP BY YEAR(FECHA) ORDER BY ANO, MES")
  8.  
  9. echo "<table width=150 border=1 align='center' bordercolor='#000000'>";
  10.      echo "<tr>";
  11.      echo "<td colspan=26 class=Estilo2>A&ntilde;o</td>";
  12.      echo "<td colspan=38 class=Estilo2>Mes</td>";
  13.      echo "<td colspan=30 class=Estilo2>Nº Docs</td>";
  14.      echo "<td colspan=40 class=Estilo2>Debe</td>";
  15.      echo "<td colspan=40 class=Estilo2>Haber</td>";
  16.      echo "<td colspan=40 class=Estilo2>Saldo</td>";
  17.      echo "</tr>";
  18.      
  19.     while ($row=mysql_fetch_array($cSql)) {
  20.     $mes=$row["MES"];
  21. if ($row["MES"]=='Total') {
  22.     echo "<tr  bgcolor=#cccccc>";
  23.     $debe+=$row["DEBE"];
  24.     $haber+=$row["HABER"];
  25.     $saldo+=$row["SALDO"];
  26.     $cuantos+=$row["CUANTOS"];
  27.     echo "<td colspan=26 class=Estilo2>".$row["ANO"]."</td>";
  28.     echo "<td colspan=38 class=Estilo2>".$mes."</td>";
  29.     echo "<td colspan=30 class=Estilo2 align='right'>".$row["CUANTOS"]."</td>";
  30.     echo "<td colspan=40 class=Estilo3 align='right'>".number_format($row["DEBE"], 2, ",", ".")."</td>";
  31.     echo "<td colspan=40 class=Estilo4 align='right'>".number_format($row["HABER"], 2, ",", ".")."</td>";
  32.     if ($row["SALDO"]==0){
  33.     echo "<td colspan=40 class=Estilo4 align='right'>".number_format($row["SALDO"], 2, ",", ".")."</td>";
  34.     }else {
  35.     echo "<td colspan=40 class=Estilo3 align='right'>".number_format($row["SALDO"], 2, ",", ".")."</td>";
  36.     }
  37.     echo "</tr>";
  38.     }//fin del if
  39.     else {
  40.     echo "<tr>";
  41.     echo "<td colspan=26 class=Estilo1>".$row["ANO"]."</td>";
  42.     echo "<td colspan=38 class=Estilo1>".$mes."</td>";
  43.     echo "<td colspan=30 class=Estilo1 align='right'>".$row["CUANTOS"]."</td>";
  44.     echo "<td colspan=40 class=Estilo3 align='right'>".number_format($row["DEBE"], 2, ",", ".")."</td>";
  45.     echo "<td colspan=40 class=Estilo4 align='right'>".number_format($row["HABER"], 2, ",", ".")."</td>";
  46.     if ($row["SALDO"]==0){
  47.     echo "<td colspan=40 class=Estilo4 align='right'>".number_format($row["SALDO"], 2, ",", ".")."</td>";
  48.     }else {
  49.     echo "<td colspan=40 class=Estilo3 align='right'>".number_format($row["SALDO"], 2, ",", ".")."</td>";
  50.     }
  51.     echo "</tr>";
  52.     }//fin del else
  53.     }//fin del while
  54.     echo "</table>";


ayudaaaaaaaaaaaaaaaaaaaaaaa
  #2 (permalink)  
Antiguo 23/04/2010, 10:11
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Cuando el año es diferente toma un nuevo saldo

Para que veas como las variables se están comportando dentro de un bucle, te recomiendo que las imprimas y veas como se están declarando. Hazle un var_dump a las variables y verifica el resultado que te van dando.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 23/04/2010, 10:23
 
Fecha de Ingreso: marzo-2010
Mensajes: 152
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Cuando el año es diferente toma un nuevo saldo

hay disculpa mi ignoracia pero soyyyyy muyyyyyyyyyyyyy novata en programacion y php, tal vez esto es muy facil pero algunos conceptos son desconocidos para mi, le hice el var_dump al $row["SALDO"] del ultimo ciclo, ese es el $row["SALDO"] que esta dentro del else y me arrojo esto:

string(4) "0.00"
string(8) "11550.00"
string(8) "10600.00"
string(8) "11550.00"
ahora bien espero no molestar, pero no entendi nada de eso
  #4 (permalink)  
Antiguo 23/04/2010, 10:25
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Cuando el año es diferente toma un nuevo saldo

La consulta como tal te funciona??

Osea, si ejecutas esa consulta en la consola mysql todo va bien?

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #5 (permalink)  
Antiguo 23/04/2010, 10:33
 
Fecha de Ingreso: marzo-2010
Mensajes: 152
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Cuando el año es diferente toma un nuevo saldo

Siiiii la consulta en mysql me funciona perfectamente, pero me hace lo mismo, cuando digo que hace lo mismo es que no me trae el saldo del año anterior

2009 |TOTAL | 3 | 14000| 6000| 8000|
____|______|__|_____|_____|_____|
2010|1..........| 2 |11000| .......0| 11000|

Enero tiene su saldo correspondiente, pero enero debe tener ese saldo mas el saldo del año anterior si es diferente a cero y eso es lo que no he conseguido hacerrrrr que cada vez que el año cambie le sume al saldo de enero el saldo del año anterior no se si me explico, pero la verdad ya no se me ocurre nada
  #6 (permalink)  
Antiguo 23/04/2010, 10:48
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Cuando el año es diferente toma un nuevo saldo

Pues debes hacer un condicional jen26.

Durante el año 2009 debes sumar todos sus valores, acumularlo, y cuando cambie de año (osea 2010) y sea el mes de enero, sumar ese "acumulado" al valor del enero, más o menos así

Código PHP:
Ver original
  1. $anio = 2009;
  2. while ($row=mysql_fetch_array($cSql)) {
  3.  
  4. if ($row['anio'] == $anio){
  5. $acumulador = $acumulador + $row['valor_a_sumar'];
  6. } else if ( $row['anio'] <> $anio and $row['mes'] == 1  ) {
  7. //entrará si es una año diferente al inicial
  8. // y si es enero, procedemos a sumarle el acumulador
  9. $nuevoValor = $acumulador + $row['valor_a_sumar'];
  10. //incializamos de nuevo el año a comparar y dejamos el valor inicial, al valor que tenga enero...
  11. $anio =  $row['anio'];
  12. $acumulador = $row['valor_a_sumar'];
  13. }
  14.  
  15. }

Algo así es la idea... espero la entiendas

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #7 (permalink)  
Antiguo 23/04/2010, 12:12
 
Fecha de Ingreso: marzo-2010
Mensajes: 152
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Cuando el año es diferente toma un nuevo saldo

Aqui lo voy intentando pero nose si es porq me duele la vista que hago esto malo, lo intente asi:
Código PHP:
Ver original
  1. while ($row=mysql_fetch_array($cSql)) {
  2.  
  3.     $mes=$row["MES"];
  4.     if ($mes==1)     {  $mes='Enero';}
  5.     if ($mes==2)     {  $mes='Febrero';}
  6.     if ($mes==3)     {  $mes='Marzo';}
  7.     if ($mes==4)     {  $mes='Abril';}
  8.     if ($mes==5)     {  $mes='Mayo';}
  9.     if ($mes==6)     {  $mes='Junio';}
  10.     if ($mes==7)     {  $mes='Julio';}
  11.     if ($mes==8)     {  $mes='Agosto';}
  12.     if ($mes==9)     {  $mes='Septiembre';}
  13.     if ($mes==10)    {  $mes='Octubre';}
  14.     if ($mes==11)    {  $mes='Noviembre';}
  15.     if ($mes==12)    {  $mes='Diciembre'; }
  16.  
  17.     $ano=0;
  18.     $acumulador=0;
  19.     $nuevoValor=0;
  20.  
  21.         $ano=2009;
  22.  
  23.         if ($row['ano']==$ano) {
  24.  
  25.         $acumulador=$acumulador+$row["SALDO"];
  26.         }
  27.  
  28.     else if ( $row['ano'] <> $ano and $row['mes'] == 1  ) {
  29.  
  30.         //entrará si es una año diferente al inicial
  31.  
  32.     echo "<td colspan=26 class=Estilo2>".$row["ANO"]."</td>";
  33.     echo "<td colspan=38 class=Estilo2>".$mes."</td>";
  34.     echo "<td colspan=30 class=Estilo2 align='right'>".$row["CUANTOS"]."</td>";
  35.     echo "<td colspan=40 class=Estilo3 align='right'>".number_format($row["DEBE"], 2, ",", ".")."</td>";
  36.     echo "<td colspan=40 class=Estilo4 align='right'>".number_format($row["HABER"], 2, ",", ".")."</td>";
  37.     if ($row["SALDO"]==0){
  38.     echo "<td colspan=40 class=Estilo4 align='right'>".number_format($row["SALDO"], 2, ",", ".")."</td>";
  39.     }else {
  40.     echo "<td colspan=40 class=Estilo3 align='right'>".number_format($row["SALDO"], 2, ",", ".")."</td>";
  41.     }
  42.     echo "</tr>";
  43.  
  44.     // y si es enero, procedemos a sumarle el acumulador
  45.  
  46.     $nuevoValor=$acumulador+$row["SALDO"];
  47.     //incializamos de nuevo el año a comparar y dejamos el valor inicial, al valor que tenga enero...
  48.  
  49.     $ano=$row['ano'];
  50.     $acumulador = $row["SALDO"];
  51.         }
  52.  
  53.     }//fin del while que realiza el mysql_fetch_array
  54.     echo "</table>"."<br>"."<br>"."<br>";

y me da los siguientes errores

Notice: Undefined index: ano in C:\wamp\www\saldo\saldo.php on line 122

Notice: Undefined index: ano in C:\wamp\www\saldo\saldo.php on line 127

Notice: Undefined index: mes in C:\wamp\www\saldo\saldo.php on line 127

Notice: Undefined index: ano in C:\wamp\www\saldo\saldo.php on line 122


Auxiliooooo
  #8 (permalink)  
Antiguo 23/04/2010, 12:29
 
Fecha de Ingreso: marzo-2010
Mensajes: 152
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Cuando el año es diferente toma un nuevo saldo

si vennnnnnnnnnnnnnn que estoy muyyy cansada, d emi vista el problema es que coloque:

$row['ano'] y es $row['ANO'] al igual que con el mes pero ahora se puso peor me sale asi


Año Mes Nº Docs Debe Haber Saldo
2010 Enero 1 10.600,00 0,00 10.600,00
  #9 (permalink)  
Antiguo 23/04/2010, 13:12
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Cuando el año es diferente toma un nuevo saldo

Jen26, varias cosas:

1. Estás inicializando mal las variables, debes sacar la inicilización del while:

Cita:
Iniciado por jen26 Ver Mensaje
Código PHP:
Ver original
  1. $ano=0;
  2.     $acumulador=0;
  3.     $nuevoValor=0;
  4.  
  5.         $ano=2009;
2.
Cita:
Iniciado por jen26 Ver Mensaje
y me da los siguientes errores

Notice: Undefined index: ano in C:\wamp\www\saldo\saldo.php on line 122

Notice: Undefined index: ano in C:\wamp\www\saldo\saldo.php on line 127

Notice: Undefined index: mes in C:\wamp\www\saldo\saldo.php on line 127

Notice: Undefined index: ano in C:\wamp\www\saldo\saldo.php on line 122
Los "errores" de lo que hablas no son errores, son notificaciones, y te quiere decir que no has inicializado esas variables que nombra ahí.

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #10 (permalink)  
Antiguo 26/04/2010, 09:34
 
Fecha de Ingreso: marzo-2010
Mensajes: 152
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Cuando el año es diferente toma un nuevo saldo

Gracias Carxl, pero igual al inicializar las variables fuera, me daba el mismo resultado al igual que no debo inicializar la variable $ano en 2009 ya que dejaria de ser variable, pero ya solucione mi problema, gracias por tu ayuda agarre la idea y ya me funciona perfecto.. Muchas gracias por su colaboracion
  #11 (permalink)  
Antiguo 26/04/2010, 10:59
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Cuando el año es diferente toma un nuevo saldo

Vale! Pa' eso estamos!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com

Etiquetas: año, cuando, diferente
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:39.