Calculo de valores ingresados en php

Tengo una tabla de ingreso de datos y calculo de valores.. Pero hay un pequeño detalle. Si ingreso el tipo de cambio y el importe en dolares me hace el calculo correcto. Adicionalmente tengo otro campo que es de moneda en soles(Perú) y quiero que haga el calculo sin tomar en cuenta el tipo de cambio y el monto en soles.
Les paso el código php que hice, ¿tengo algún error de omisión?
Estaré atento a una respuesta suya.
Saludos cordiales,
----------------------Todo esto esta en una tabla
<td height="24">
<div align="right"><span class="Estilo1">Tipo de cambio</span></div>
</td>
<td><input name="cambio" type="text" id="cambio" size="10" maxlength="5" /></td>
<td>
<div align="right"><span class="Estilo13">Importe $</span></div>
</td>
<td><input name="imported" type="text" id="imported" size="20" maxlength="20" /></td>
</tr>
<tr>
<td height="24"> </td>
<td> </td>
<td>
<div align="right" class="Estilo1">Importe S/. </div>
</td>
<td><input name="importes" type="text" id="importes" size="20" maxlength="11" /></td>
 --------------------------------------------
if($imported!='')
 {
  $precio = $cambio * $imported;
  $valor = $precio/'1.19';
  $igv = $valor * '0.19';
 }
 else
  {
   $precio = $cambio * $importes;
   $valor = $precio/'1.19';
   $igv = $valor * '0.19';
  }

1 respuesta

Respuesta
1
Sin dudas el problema es que no entra al "else" del if. Ya que cuando pones dolares (imported) funciona bien.
Podrías probar cosas simples como la siguiente:
if($imported == "") 
 { 
  $precio = $cambio * $importes; 
  $valor = $precio/'1.19'; 
  $igv = $valor * '0.19'; 
 } 
 else { 
   $precio = $cambio * $imported; 
   $valor = $precio/'1.19'; 
   $igv = $valor * '0.19'; 
  }
La idea es la misma, pero nunca se sabe, muchas veces son cosas muy pequeñas las que hacen que no funcione.
Espero te sirva, avisame de igual modo para buscar otra solución a tu problema.
Buenas tardes..
fue tan simple como quitar el $cambio al else...
Un fatal error de omisión.
Gracias por la ayuda de todas maneras...
Adicionalmente, algo que si me esta causando problemas es como actualizar y/o eliminar registros de una tabla desde php.
¿Algo qué me pueda guiar?.
Saludos cordiales,
Supongo que cuando hablas de tabla, debe ser una tabla en mysql o en alguna base de datos.
¿Qué problema te esta causando? ¿Algún error? ¿O simplemente no sabes como realizarlo?
Te paso un código muy sencillo para ejecutar una sentencia de eliminación y otra de modificación de datos a una base de datos.
include("conectar.inc");
$Codigo=$_REQUEST["Codigo"];
$ELIMINAR=mysql_query("DELETE from tabla WHERE Codigo='$Codigo'");
include("desconectar.inc");
Eso seria algo muy sencillo, donde en conectar. Inc tengo la sentencia de conexión y en desconectar. Inc la de desconexión. En este caso $_REQUEST["Codigo"] es el valor que traigo de una página anterior para saber cual registro borrar.
Ahora uno de modificar:
include("conectar.inc");
$MODIFICAR="UPDATE usuarios SET clave= '$ClaveNueva' where usuario='$Usuario'";
mysql_query($MODIFICAR);
include("desconectar.inc");
En este caso cambio la contraseña de un usuario donde $ClaveNueva tiene el valor de la nueva contraseña y $Usuario es el id del usuario.
Buen aporte. Me sirvió de gran ayuda.
Ahora la cosa se me complica... necesito ingresar registros a una tabla, pero a la vez cuente cuantas veces se envío el formulario de acuerdo a un determinado código.
Me explico: tengo una tabla envío que registra un articulo enviado para una determinada obra. Cada articulo tiene un código y el usuario puede solicitar en un mes por ejemplo 7 envíos de ese articulo. Entonces, debo obtener como resultado de un query cuantos envíos se tuvo por ese articulo.
Articulo también es una tabla, la cual debe descontar cada vez que se hace el envío del total que se tiene para ese articulo.
Si podrías darme un apoyo con este tema, cualquier aporte que me brindes sera muy bien recibido.
Saludos cordiales,
Por lo que me decís, esa tabla artículos lleva el stock de cada articulo. Y si no entiendo mal vos necesitas saber cuantas veces fue solicitado un articulo por un cliente.
Lo que deberías realizar es una tabla de envíos, en la cual registres el articulo solicitado, el cliente que lo hizo, la cantidad que solicito y la fecha en la que lo solicito. Vos teniendo esos datos una query muy sencilla seria algo así:
Select articulo, sum(cantidad), cliente from envios where fecha between '01/01/01' and '31/12/01' group by articulo, cliente
Esa query te devolvería el código del articulo, la cantidad solicitada, y el cliente que lo realizo. Todo esto en un periodo entre el 01/01/01 al 31/12/01 (las fechas son de modo ejemplificativo)
¿Me explico bien?
O sea que lo que necesitarías seria: Primero que todo crear la tabla "envios" en la cual registrar esos datos, segundo en la página donde hacen el pedido no solo realizar el pedido sino insertar el registro en la tabla "envios"
insert into envios values('codigodelartiuclo','codigodecliente',cantidad,CURDATE())
CURDATE() = fecha del momento (si es que usas mysql)
Y por ultimo puedes ejecutar la consulta que te dije al comienzo para que te tire la cantidad de un articulo pedido en determinado tiempo por cada cliente.
Buenos días... como siempre acertado con tu aporte.
Te paso parte de mi código de envíos.. hay algo que no me cuadra bien, me gustaría una opinión tuya.
<?php
if(isset($_POST['enviar']))
  {
$conexion = mysql_connect("localhost", "root", "");
mysql_select_db("nepal_logistica", $conexion);
$costo = round(($cantidad*$precio)*100)/100;
$cons=mysql_query("(insert into envios(d_unidad, v_monto) select d_unidad, v_subtotal from item where c_item=$item and c_obra=$obra",$conexion);
$result=mysql_query("insert into envios values('$obra','','$item','$cantidad','$precio','$costo','$fecha','$responsable','','','','','','','','',now())",$conexion);
/*mysql_close($conexion);
}
?>
<?php
if(isset($_POST['enviar']))
  {
$conexion = mysql_connect("localhost", "root", "");
mysql_select_db("nepal_logistica", $conexion);
*/
$queCom = "select c_obra, c_item, q_envio, v_precio_unitario, v_precio_total, f_envio, d_responsable, q_enviado, q_saldo_item, d_unidad, v_monto, v_enviado, v_saldo_obra from envios where c_obra='$obra' and c_item='$item' order by 'f_envio'";  
$resCom = mysql_query($queCom, $conexion) or die(mysql_error());
$envio=mysql_num_rows($resCom);
echo "
<table border=1>
";
echo "
<tr>
<td><B> OBRA </td>
</B>
<td><B> ITEM </td>
</B>
<td><B> CANTIDAD </B>
<td><B> PRECIO UNIT. </td>
</B>
<td><B> PRECIO TOTAL </td>
</B>
<td><B> FECHA </td>
</B>
<td><B> RESPONSABLE </td>
</B>
<td><B> CANT. ENVIADA </td>
</B>
<td><B> SALDO DE ITEM </td>
</B>
<td><B> UNIDAD </td>
</B>
<td><B> MONTO DE EXPEDIENTE </td>
</B>
<td><B> MONTO ENVIADO </td>
</B>
<td><B> SALDO DE OBRA </td>
</B></B>";
while($fila=mysql_fetch_array($resCom))
 echo "
<tr>
<td>$fila[0]</td>
<td>$fila[1]</td>
<td>$fila[2]</td>
<td>$fila[3]</td>
<td>$fila[4]</td>
<td>$fila[5]</td>
<td>$fila[6]</td>
<td>$fila[7]</td>
<td>$fila[8]</td>
<td>$fila[9]</td>
<td>$fila[10]</td>
<td>$fila[11]</td>
<td>$fila[12]</td>
</tr>
";
 echo "
</table>
";
echo '<B>El número de envios  del item '.$item. ' es: ' .$envio.'</B>';
 mysql_close($conexion);
 }
?>
Mi consulta es la siguiente: el insert de obra, item,.., responsable, etc... lo jalo de un formulario. Pero hay dos registros que debo obtener de otra tabla que son la unidad y el monto para cada item.
Ejecuto el formulario pero salen 0 filas afectadas y no me muestra nada en pantalla.
Reviso en mi base de datos mysql y ahí figura los dos campos que hago en el insert(unidad, monto) y lo demás del otro insert figura con valores 0.
¿Algún aporte a mi problema?
Estaré atento como siempre a un dato tuyo.
Saludos cordiales,
Buenos días...
Logre resolver mi problema y ya voy en la ultima fase.. que es obtener un reporte.
Pues debo hacer lo siguiente:
Primero ingreso mis envíos por cada item. Y estos a su vez generan un numero de envío.
Lo que necesito en mi reporte es que me muestre el ultimo envío que hice por cada item.
Hice un query pero no controla la salida y me muestra el total.
¿Hay algún query que me ayude a controlar ese resultado?.
Estaré atento a tu comentario.
Explicame un poco más detallado por favor.
Si no me equivoco lo que tienes que hacer es conseguir el ultimo numero de envío por cada item.
Para lograr eso tienes que hacer lo siguiente:
Select max(envio), articulo from envios group by articulo
Esa consulta te devolvería el numero más alto de Envío (seria como el indice de tu tabla, no te olvides de cargar ese dato cada vez que hacen un pedido) y el articulo. No olvides el group by articulo. Si deseas agregar mas datos como el cliente deberias tmb agregarlo al Group by ( Select max(envio), articulo, cliente from envios group by articulo, cliente )
Espero te sirva =)
Ya había probado ese query... me da un resultado a medias...
Pues me muestra el máximo envío por item, pero este como sabes, tiene un valor máximo de dinero enviado por cada item..
Quiero sumar ese valor máximo por cada item y llevarlo a un 'echo', pero no me da resultado:
Mi query es el sigte:
$queCom = "select envios.c_obra, envios.c_item, item.d_insu_materiales, item.q_item, item.v_precio_unitario, item.v_subtotal, item.v_igv, item.v_precio_total, max(envios.q_enviado), max(envios.f_envio), envios.d_responsable, min(envios.q_saldo_item), envios.d_unidad, envios.v_monto, max(envios.v_enviado), min(envios.v_saldo_obra)   from envios , item  where envios.c_obra='$obra'  and envios.c_item=item.c_item and envios.c_periodo between '$periodo1' and '$periodo2' group by envios.c_item";
:Esto me da como resultado lo que te comentaba... me muestra el máximo envío por item
Pero para el caso de max(envíos.v_enviado) quiero sumar todos esos valores de esa columna y almacenarlo en un 'echo'.. Esto me esta dando dolor de cabeza...
Atento a tus comentarios,
saludos cordiales.
Para operaciones aritméticas de SUMA debes utilizar la función SUM()
Te muestro un ejemplo:
Select NroFactura, Articulo, SUM(Cantidad) from DetalleFactura Group By NroFactura, Articulo
Esa sentencia te trae el Numero de Factura (NroFactura), el articulo y la suma de la cantidad vendida de ese articulo. Para utilizar funciones como SUM debes utilizar el Group By de todos los paremtros no comprendidos en la operación SUM.
Buenas tardes.
Hago esto:
$sql=mysql_query("select sum(envios.v_enviado) from envios, item where envios.c_obra='$obra' and envios.c_item=item.c_item and c_periodo between '$periodo1' and '$periodo2' group by envios.c_item, max(envios.q_enviado)",$conexion);
$valora=mysql_fetch_array($sql);
$monenviado=$valora['sum(envios.v_enviado)'];
Pero en mi ventana me da este error: Warning: Supplied argument is not a valid MySQL result resource in ...
$monenviado=$valora['sum(envios.v_enviado)']; 
Eso esta mal.
A SUM(envios. V_enviado) debes ponerle un ALIAS del siguiente modo:
$sql=mysql_query("select sum(envios.v_enviado) as SUMA from envios ....
y en $monenviado debes poner lo siguiente:
$monenviado=$valora['SUMA'];
Prueba eso.
Buenas tardes. Gracias por tu pronta respuesta.
Me da el mismo resultado.. tener en cuenta que cada v_enviado corresponde al máximo enviado por cada item que agrupe.
crees que la falla este en mi WHERE?,
Hagamos lo siguiente porque me cuesta entender la estructura de las tablas.
Detállame el detalle de las tablas que están involucradas en esto y detállame cual es el resultado a obtener.
Buenos días.
Utilizo las tablas item y envíos.
item(c_obra, c_item, d_insu_material, d_unid, cantidad_item, precio_unitario, subtotal, igv, precio_total)
envios(c_obra, c_envio, c_item, cant_envio, precio_unit, subtotal, igv, precio_total, fecha_envio, cant_enviada, saldo_item, monto_asignado_al_item_segun_tablaitem, monto_enviado, monto_saldo_de_obra)
Entonces, empiezo a hacer mis envíos... por ejemplo, enviare 3 veces el item 1, 4 veces el item 2 y 7 veces el item 3. Entonces, el ultimo envío de cada item, me dice cuanto he enviado hasta ahora, cuanto gaste y cuanto me queda..
Lo que hago es un query que me diga eso. Que me filtre por el ultimo envío de cada item según el código de item mediante un group by,
hasta ahí todo bien.
Pero el problema viene cuando quiero sumar la columna monto_enviado del resultado de ese query.. lo que quiere decir que debería sumar solo el ultimo dato que tengo para ese campo en cada ultimo item enviado.
Ojala estos datos te puedan servir para darme una mano con lo que quiero lograr.
Estaré atento a tus comentarios,
saludos cordiales.
Buenas tardes...
Al final no me quedo más remedio que crear una tabla temporal y almacenar ahí los max de cada item y de esa tabla hacer el sum().
Menudo problema me causo ese reporte.
Gracias por el aporte que me brindaste.
Saludos cordiales,

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas