Foros del Web » Programando para Internet » PHP »

montar una variable compleja

Estas en el tema de montar una variable compleja en el foro de PHP en Foros del Web. Hola amigos! Necesito crearme una variable compleja pero no se cual ni como hacerlo. Resulto tener una tabla de dos columnas tipoIva IVA de la ...
  #1 (permalink)  
Antiguo 12/08/2009, 08:15
 
Fecha de Ingreso: marzo-2007
Mensajes: 538
Antigüedad: 17 años, 2 meses
Puntos: 0
montar una variable compleja

Hola amigos!
Necesito crearme una variable compleja pero no se cual ni como hacerlo.
Resulto tener una tabla de dos columnas tipoIva IVA de la siguiente forma:
tIVA - IVA
16 - 200
4 - 20
16 - 10
7 - 50
0 - 0
7 - 50

Segun la tabla anterior quisiera tener los total de cada tipo de Iva es decir, obtener una variable que contenga
16 - 210
7 - 100
4 - 20

Ordenado de mayor a menor el tipo de IVA


Gracias de nuevo
  #2 (permalink)  
Antiguo 12/08/2009, 08:22
Avatar de Ronin46  
Fecha de Ingreso: junio-2009
Mensajes: 398
Antigüedad: 14 años, 10 meses
Puntos: 8
Respuesta: montar una variable compleja

Haces tres variables:

$Iva16, $Iva7, $Iva4

¿Hay que cumplir algún requisito? Para sumar a una u otra variable preguntas por el Tipo de iva y en base a eso escoges la variable donde sumar.
__________________
http://www.controldegastos.com, acepto sugerencias para el sitio.
Repetir conmingo: "tengo que dedicar más tiempo a gozar de placer"
  #3 (permalink)  
Antiguo 12/08/2009, 08:24
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
Puntos: 1517
Respuesta: montar una variable compleja

Es bastante similar a lo que expusiste en este post
http://www.forosdelweb.com/f18/while...ordset-726629/

En vez de crear una condicion esta vez lo haces en el query
Código php:
Ver original
  1. $query = mysql_query("SELECT sum(IVA) as IVA, tIVA FROM tabla GROUP BY tIVA ORDER BY tIVA");
  2. while($row = mysql_fetch_assoc($query)){
  3.   echo $row["tIVA"] . " = " . $row["IVA"];
  4. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 12/08/2009, 08:38
 
Fecha de Ingreso: marzo-2007
Mensajes: 538
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: montar una variable compleja

hola de nuevo amigos!
Primero de todo gracias por vuestras respuestas tan rapidas.

voy a contestar a Ronin46
el requisito es que tengo que sumar todos los importes que sean del mismo tipo de iva. Y no puedo crear 3 variables ya que desconoceré cuantos tipos de iva.


ahora a abimaelrc
no puedo hacer otra consulta ya que entonces no tendré ninguna relacion con la fila que estoy recorriendo con el tipo de iva que tengo que sumar o calcular. Tengo que crearlo segun la tabla expuesta. Con lo que tengo que crear en mi nueva varible tantas filas como tipos de IVA tenga junto con sus totales.


Gracias de nuevo
  #5 (permalink)  
Antiguo 12/08/2009, 09:22
Avatar de Ronin46  
Fecha de Ingreso: junio-2009
Mensajes: 398
Antigüedad: 14 años, 10 meses
Puntos: 8
Respuesta: montar una variable compleja

Cita:
Iniciado por Laufwerk Ver Mensaje
ahora a abimaelrc
no puedo hacer otra consulta ya que entonces no tendré ninguna relacion con la fila que estoy recorriendo con el tipo de iva que tengo que sumar o calcular. Tengo que crearlo segun la tabla expuesta. Con lo que tengo que crear en mi nueva varible tantas filas como tipos de IVA tenga junto con sus totales.
Si lo mio no vale yo también tiraría por lo que dijo abimaelrc, ten en cuenta que si asumimos que la tabla de la base de datos contiene

Cita:
tIVA - IVA
16 - 200
4 - 20
16 - 10
7 - 50
0 - 0
7 - 50
al realizar el código de abimaelrc te quedará

echo $row["16"]; (Imprime 210)
echo $row["7"]; (Imprime 100)
echo $row["4"]; (Imprime 20)

que si no te entiendo mal es lo que quieres, en una misma variable todos los totales de cada tipo de IVA
__________________
http://www.controldegastos.com, acepto sugerencias para el sitio.
Repetir conmingo: "tengo que dedicar más tiempo a gozar de placer"
  #6 (permalink)  
Antiguo 12/08/2009, 09:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: montar una variable compleja

Porque no guardas los datos en un array simple, y luego los sumas usando array_sum()?

Saludos.
  #7 (permalink)  
Antiguo 13/08/2009, 02:09
 
Fecha de Ingreso: marzo-2007
Mensajes: 538
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: montar una variable compleja

Hola de nuevo chicos!
La verdad es que me trae trabajo esta funcion que quiero hacer.
Es verdad que el codigo que me plantea abimaelrc me devuelve lo que yo quiero PERO haciendo una nueva consulta a la bd, y no es mi prioridad lanzar consultas a saco a mi bd, ya que tendría que hacer lo mismo para los descuentos, totales, etc... es por ese motivo que como ya tengo un recordset donde saco los valores anteriores, quiero sacar también los del IVA.
He conseguido un codigo que casi me funciona, pero necesito que me aconsejeis como hasta ahora estais haciendo de maravilla.
Lo que estoy intentando con este codigo es crear una factura. Una factura puede tener asociados mas de un albarán y un albarán mas de un detalle.
Hasta aqui he conseguido hacer el bucle gracias también a otro post que puse y me ayudó abimaelrc de nuevo.
Los calculos que tengo que hacer siempre son dentro de los detalles del albarán, es decir, que el total de los descuentos es la suma de cada uno de los descuentos de cada uno de los detalles, y así con los demás. Pero el iva es el más complicado porque cada detalle puede tener varios IVAs aplicados a su detalle, es por eso que necesito crear algo que me contenga el tipo de IVA y sus totales.
Supongamos que ya estamos dentro del bucle que me recorre cada uno de los detalles de cada albarán que tiene la factura.
Este es el codigo que tengo:

Código PHP:
if ($contador==0){
    
$arrayIVA[0][0]=$resultDND->fields['percent_iva'];
    
$arrayIVA[0][1]=$resultDND->fields['amount_iva'];
}else{
    for (
$i=0;$i<count($arrayIVA);$i++){
        for(
$j=0;$j<count($arrayIVA[$i]&&$chivato);$j++){
            if (
$arrayIVA[$i][0] == $resultDND->fields['percent_iva']){
                
// Tenemos que insertar un nuevo valor
                
$arrayIVA[$i][] = $resultDND->fields['amount_iva'];
                
$chivato true;
            }
        }
    }
    
// si llegamos aqui y no lo hemos encontrado tenemos que insertar el nuevo tipo de iva y su cantidad en el array
    
if (!$chivato){
        
// Insertamos un nuevo 
        
$arrayIVA[][0] = $resultDND->fields['percent_iva'];
        
$arrayIVA[][1] = $resultDND->fields['amount_iva'];        
    }
}
$contador++;
$chivato=false
Los valores que tengo para esa factura son:
Albarán 2
__Detalle 1
____Precio = 70
____Cantidad = 1
____%Dto = 0
____dto = 0
____%IVA = 16
____IVA = 11
____Total = 81
Albarán 7
__Detalle 1
____Precio = 10000
____-Cantidad = 5
____%Dto = 0
____dto = 0
____%IVA = 16
____IVA = 8000
____Total = 58000
__Detalle 2
____Precio = 10000
____Cantidad = 5
____%Dto = 0
____dto = 0
____%IVA = 7
____IVA = 3500
____Total = 53500
__Detalle 3
____Precio = 70
____Cantidad = 1
____%Dto = 0
____dto = 0
____%IVA = 16
____IVA = 11
____Total = 81
__Detalle 4
____Precio = 200
____Cantidad = 1
____%Dto = 0
____dto = 0
____%IVA = 4
____IVA = 11
____Total = 208

El resultado que obtengo con mi código es el siguiente
Código:
Array
__[0][0] = 16
__[0][1] = 8000
__[0][2] = 11
__[0][3] = 11
Array
__[1][0] = 7
Array
__[2][0] =
Array
__[3][0] = 4
Array
__[4][0] =
No entiendo porqué en la posición [2][0] y [4][0] están vacías y porqué no está la [1][1] con su respectivo valor (3500 del detalle 2 del albarán 7) al igual que el [3][1] que su valor tendría que ser 11.


Perdón por el rollo, necesito deshaogarme con el codigo este.

Gracias de nuevo!
  #8 (permalink)  
Antiguo 13/08/2009, 02:37
 
Fecha de Ingreso: marzo-2007
Mensajes: 538
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: montar una variable compleja

Hola chicos!
encontré mi fallo!
es en la parte del if del chivato
Código PHP:
if (!$chivato){
    
// Insertamos un nuevo 
    
$pos count($arrayIVA);
    
$arrayIVA[$pos][0] = $resultDND->fields['percent_iva'];
    
$arrayIVA[$pos][1] = $resultDND->fields['amount_iva'];        

me faltava poner
Código PHP:
$pos count($arrayIVA); 
Ahora ya me devuelve mi primer array de la siguiente forma
Array
__[0][0] = 16
__[0][1] = 8000
__[0][2] = 11
__[0][3] = 11
Array
__[1][0] = 7
__[1][1] = 3500
Array
__[2][0] = 4
__[2][1] = 8

ahora solo tengo que sumar los valores para que me devuelva esto:
Array
__[0][0] = 16
__[0][1] = 8022
Array
__[1][0] = 7
__[1][1] = 3500
Array
__[2][0] = 4
__[2][1] = 8

y ya se donde tengo que ponerlo:
Código PHP:
            if ($contador==0){
                
$arrayIVA[0][0]=$resultDND->fields['percent_iva'];
                
$arrayIVA[0][1]=$resultDND->fields['amount_iva'];
            }else{
                for (
$i=0;$i<count($arrayIVA);$i++){
        
//            echo "<br>".$arrayIVA[$i];
                    
for($j=0;$j<count($arrayIVA[$i]&&$chivato);$j++){
        
//                echo "<br>".$arrayIVA[$i][$j];
                        
if ($arrayIVA[$i][0] == $resultDND->fields['percent_iva']){
                            
// Tenemos que insertar un nuevo valor
                            
$arrayIVA[$i][1] = $arrayIVA[$i][1] + $resultDND->fields['amount_iva'];
                            
$chivato true;
                        }
                    }
                }
                
// si llegamos aqui y no lo hemos encontrado tenemos que insertar el nuevo tipo de iva y su cantidad en el array
                
if (!$chivato){
                    
// Insertamos un nuevo 
                    
$pos count($arrayIVA);
                    
$arrayIVA[$pos][0] = $resultDND->fields['percent_iva'];
                    
$arrayIVA[$pos][1] = $resultDND->fields['amount_iva'];        
                }
            } 
es la siguente linea dentro del if que está dentro del segundo for
Código PHP:
$arrayIVA[$i][1] = $arrayIVA[$i][1] + $resultDND->fields['amount_iva']; 

Gracias a todos por vuestra ayuda y dedicación!!
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 04:08.