Foros del Web » Programando para Internet » Javascript »

Funciones que calculan al principio pero luego dan resultados errados

Estas en el tema de Funciones que calculan al principio pero luego dan resultados errados en el foro de Javascript en Foros del Web. Buenos días: Tengo unos calculos con varias funciones y al introducir los datos ordenadamente los realiza perfectamente, pero si después cambio algunos ya no da ...
  #1 (permalink)  
Antiguo 23/01/2012, 08:14
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Pregunta Funciones que calculan al principio pero luego dan resultados errados

Buenos días:

Tengo unos calculos con varias funciones y al introducir los datos ordenadamente los realiza perfectamente, pero si después cambio algunos ya no da los resultados adecuados. Cómo puedo evitar esto????.

Este es el código:

Código PHP:
Ver original
  1. <script type="text/javascript">
  2. // dias es el total de días trabajados
  3. // sueldo es el sueldo básico del empleado
  4. // indice corresponde al input text que se debe actualizar
  5. var sq;
  6. var dd;
  7. var dv;
  8.  
  9. function calcula(dias, sueldo_diario, indice) {
  10.        sq = document.getElementById('sueldo_quinc' + indice).value = (parseFloat(dias) * parseFloat(sueldo_diario)).toFixed(2);
  11. }
  12.  
  13. function deducciones(otros_desc, ivss, paro_for, lph, indice2) {
  14.     dd= document.getElementById('total_deducc' + indice2).value = (parseFloat(otros_desc) + parseFloat(ivss) + parseFloat(paro_for) + parseFloat(lph)).toFixed(2);
  15. }
  16.  
  17. function total_dev(otros_ing, sq, dd, indice3) {
  18.     dv = document.getElementById('total_deveng' + indice3).value = ((parseFloat(otros_ing) + parseFloat(sq)) - parseFloat(dd)).toFixed(2);
  19.    
  20. }
  21.  
  22. function Mostrar()
  23.  
  24. {
  25.  
  26. msg="Opcion 1:"+sq+"\n";
  27.  
  28. msg+="Opcion 2:"+dd+"\n";
  29.  
  30. alert(msg);
  31.  
  32. }
  33.  
  34. function totalizar(){
  35.     var chks = document.getElementsByName('total_deveng[]');
  36.     var totales = 0;
  37.     for(var i = 0; i < chks.length; i++) {
  38.         var valor = parseFloat(chks[i].value);
  39.         if(isNaN(valor) == false) {
  40.             totales += parseFloat(chks[i].value);
  41.         }
  42.     }
  43.     document.getElementById("total").value = totales;
  44.      
  45. }
  46.  
  47. </script>
  48.     <br />
  49.     <?php if($_SESSION['user']==true){ ?>
  50.     <form action="nomina_reg.php" method="post" name="form1" >
  51.       <table width="750" border="0" class="tabla2">
  52.         <tr>
  53.           <td colspan="5" class="td2" bgcolor="#95bce2">UNIDAD EDUCATIVA EL MILAGRO DE LA PERLA</td>
  54.           </tr>
  55.         <tr>
  56.           <td colspan="5">NOMINA PARA EL PAGO DE SUELDOS EMPLEADOS</td>
  57.           </tr>
  58.       <tr>
  59.       <td width="26%">
  60.       <div class="demo">
  61.       <p>Fecha Desde: <input type="text" id="datepicker_1" name="desde" class="fechador"></p>
  62.       </div>
  63.       </td>
  64.       <td width="26%">
  65.       <div class="demo">
  66.       <p>Fecha Hasta: <input type="text" id="datepicker_2" name="hasta" class="fechador"></p>
  67.       </div>
  68.       </td>
  69.       </tr>
  70.       </table>
  71.       <br />
  72.       <table width="750" border="1"  bordercolor="#95bce2"  class="tabla3">
  73.   <tr bgcolor="#95bce2 ">
  74.     <td width="3%" class="td3">Nº</td>
  75.     <td width="3%" class="td3">CI</td>
  76.     <td width="10%" class="td3">APELLIDOS</td>
  77.     <td width="11%" class="td3">NOMBRES</td>
  78.     <td width="4%" class="td3">DIAS</td>
  79.     <td width="8%" class="td3">SUELDO BÁSICO</td>
  80.     <td width="8%" class="td3">SUELDO DIARIO</td>    
  81.     <td width="8%" class="td3">SUELDO B. QUINCENA</td>
  82.     <td width="8%" class="td3">IVSS</td>
  83.     <td width="8%" class="td3">PARO FORSOZO</td>
  84.     <td width="8%" class="td3">LPH</td>
  85.     <td width="8%" class="td3">OTROS DESCUENT</td>
  86.     <td width="8%" class="td3">OTROS INGRESOS</td>
  87.     <td width="8%" class="td3">TOTAL DEDUCCIONES</td>
  88.     <td width="8%" class="td3">TOTAL DEVENGADO</td>
  89.   </tr>
  90.  
  91.   <?php
  92. $indice = 1;
  93. $indice2 = 1;
  94. $indice3 = 1;
  95.  
  96. $rs = mysql_query("SELECT * FROM empleados ORDER BY id_empleado ASC");
  97. while($result = mysql_fetch_array($rs)) {
  98. }
  99.     $ivss = number_format(($result['sueldo_basico']*4/100),2,'.','');
  100.     $paro_for = number_format(($result['sueldo_basico']*0.5/100),2,'.','');
  101.     $lph = number_format(($result['sueldo_basico']*1/100),2,'.','');
  102.     $sueldo_diario = number_format(($result['sueldo_basico']/30),2,'.','');
  103.  
  104. ?>
  105.     <tr>
  106.         <td><?php echo $result['id_empleado']; ?><input type="hidden" name="id_empleado[]" value="<?php echo $result['id_empleado']; ?>" /></td>
  107.         <td><?php echo $result['ci']; ?><input type="hidden" name="ci[]" value="<?php echo $result['ci']; ?>" /></td>
  108.         <td><?php echo "{$result['papellido']} {$result['sapellido']}"; ?><input type="hidden" name="papellido[]" value="<?php echo $result['papellido']; ?>" /></td>
  109.         <td><?php echo "{$result['pnombre']} {$result['snombre']}"; ?><input type="hidden" name="pnombre[]" value="<?php echo $result['pnombre']; ?>" /></td>
  110.        
  111.         <td><input name="dias[]" type="text" id="dias<?php echo $indice; ?>" size="2" value="" onBlur="calcula(this.value, '<?php echo $sueldo_diario; ?>', <?php echo $indice; ?>);" /></td>
  112.         <td><label name="sueldo_basico" id="sueldo_basico" size="2" readonly="readonly" value="" ><?php echo $result['sueldo_basico']; ?><input type="hidden" name="sueldo_basico[]" value="<?php echo $result['sueldo_basico']; ?>" /></label></td>
  113.         <td><input type="text" name="sueldo_diario[]" id="sueldo_diario" size="5" readonly="readonly" value="<?php echo $sueldo_diario; ?>" ></td>
  114.         <td><input name="sueldo_quinc[]" type="text" id="sueldo_quinc<?php echo $indice; ?>" size="5" value="" readonly="readonly" /></td>
  115.  
  116.         <td><input type="text" name="ivss[]" id="ivss" size="3" readonly="readonly" value="<?php echo $ivss; ?>"  /></td>
  117.         <td><input type="text" name="paro_for[]" id="paro_for" size="3" readonly="readonly" value="<?php echo $paro_for; ?>" ></td>
  118.         <td><input type="text" name="lph[]" id="lph" size="3" readonly="readonly" value="<?php echo $lph; ?>" ></td>
  119.        
  120.         <td><input name="otros_desc[]" type="text" id="otros_desc<?php echo $indice2; ?>" size="5" value="" onBlur="deducciones(this.value, '<?php echo $ivss; ?>', '<?php echo $paro_for; ?>', '<?php echo $lph; ?>', <?php echo $indice2; ?>);" /></td>
  121.         <td><input name="otros_ing[]" type="text" id="otros_ing<?php echo $indice3; ?>" size="5" value="" onChange="total_dev(this.value, sq, dd, <?php echo $indice3; ?>);" /></td>
  122.  
  123.         <td><input name="total_deducc[]" type="text" id="total_deducc<?php echo $indice2; ?>" size="5" value="" readonly="readonly" /></td>
  124.        <td><input name="total_deveng[]" type="text" id="total_deveng<?php echo $indice3; ?>" size="5" value="" readonly="readonly"  /></td>
  125.     </tr>
  126. <?php
  127.     $indice ++;
  128.     $indice2 ++;
  129.     $indice3 ++;
  130. } // fin de while
  131. ?>  <tr>
  132.       <td>&nbsp;</td>
  133.  
  134.     <td>&nbsp;</td>
  135.     <td>&nbsp;</td>
  136.     <td>&nbsp;</td>
  137.     <td>&nbsp;</td>
  138.     <td>&nbsp;</td>
  139.     <td>&nbsp;</td>
  140.     <td>&nbsp;</td>
  141.     <td>&nbsp;</td>
  142.     <td>&nbsp;</td>
  143.     <td>&nbsp;</td>
  144.     <td>&nbsp;</td>
  145.     <td>&nbsp;</td>
  146.     <td class="td3">TOTAL</td>
  147.     <td><input type="text" id="total" name="total"  size="5" value="" readonly="readonly" onMouseOver="javascript:totalizar();" /></td>
  148.   </tr>
  149. </table>
  150.   <tr>
  151.   <th colspan="2"><input type="submit" name="button" id="button" value="Guardar" /> - <input type="reset" name="Reset" id="button" value="Borrar" />
  152.   </th>
  153.   </tr>
  154. </form>

Cómo puedo evitar esto???? Gracias
__________________
Caminando con el corazón partío
  #2 (permalink)  
Antiguo 23/01/2012, 09:32
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Funciones que calculan al principio pero luego dan resultados errados

Por favor, de verdad que necesito ayuda. Alguien tendrá alguna idea...
__________________
Caminando con el corazón partío
  #3 (permalink)  
Antiguo 23/01/2012, 09:54
Avatar de madhatterdef  
Fecha de Ingreso: diciembre-2011
Ubicación: argentina
Mensajes: 213
Antigüedad: 12 años, 3 meses
Puntos: 59
Respuesta: Funciones que calculan al principio pero luego dan resultados errados

podrías explicarte mejor.
si me dices cuales son los cálculos que quieres hacer y que falla tratare de ayudarte.
PD es mi mensaje número 100
  #4 (permalink)  
Antiguo 23/01/2012, 10:05
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Funciones que calculan al principio pero luego dan resultados errados

Te adjunto una imagen:



la primera funcion (llamada calcula) calcula el sueldo quincenal multiplicando el sueldo diario * dias trabajados. En ella se colocan los dias que el empleado trabajo y se realiza el calculo.

Luego hay 2 campos para agregar otros ingresos y otros descuentos

La funcion deducciones nos dara el total deducciones y tomara los campos de ivss, paro forzoso, lph y otros descuentos. Los suma y los coloca en el campo total deducciones.

La funcion total_dev se encarga de sumar el sueldo quincenal (sueldo_quinc) con otros ingresos y luego restar el total deducciones.

gracias
__________________
Caminando con el corazón partío
  #5 (permalink)  
Antiguo 23/01/2012, 14:40
Avatar de madhatterdef  
Fecha de Ingreso: diciembre-2011
Ubicación: argentina
Mensajes: 213
Antigüedad: 12 años, 3 meses
Puntos: 59
Respuesta: Funciones que calculan al principio pero luego dan resultados errados

Perdón por la tardanza si entendí bien es así

Código:
<!DOCTYPE HTML>
<html>
<head><script>
function calcula(){
sueldo_diario = document.getElementById("sueldo_diario").value;
dias = document.getElementById("dias").value;
r = parseFloat(sueldo_diario)*parseFloat(dias)
document.getElementById("sueldo_quincenal").value = r;

}
function deducciones(){
ivss = document.getElementById("ivss").value;
paro_forzoso = document.getElementById("paro_forzoso").value;
lph = document.getElementById("lph").value;
otros_descuentos = document.getElementById("otros_descuentos").value;

r2= parseFloat(ivss) + parseFloat(paro_forzoso) + parseFloat(lph) + parseFloat(otros_descuentos)

document.getElementById("total_deducciones").value = r2;

}

function totaldev(){
sueldo_quincenal = document.getElementById("sueldo_quincenal").value;
otros_ingresos = document.getElementById("otros_ingresos").value;
total_deducciones = document.getElementById("total_deducciones").value;

r3= parseFloat(sueldo_quincenal) + parseFloat(otros_ingresos) - parseFloat(total_deducciones)
document.getElementById("total_devengado").value = r3;

}
 
}

</script>
</head>
<body>
<form>  
<input type="text" id="dias" value=0 onchange="calcula()">
<input type="text" id="sueldo_diario" value=1548.21 readonly="readonly">
<input type="text" id="sueldo_quincenal" readonly="readonly">
<input type="text" id="ivss" value=61.93 readonly="readonly">
<input type="text" id="paro_forzoso" value=7.74 readonly="readonly">
<input type="text" id="lph" value=15.48 readonly="readonly">
<input type="text" id="otros_ingresos" value=0 onKeyup="totaldev()">
<input type="text" id="otros_descuentos" value=0 onchange="deducciones()">
<input type="text" id="total_deducciones" readonly="readonly">
<input type="text" id="total_devengado"readonly="readonly">
</form>
</body>
</html>
__________________
PD gracias por el karma

Última edición por madhatterdef; 23/01/2012 a las 14:53
  #6 (permalink)  
Antiguo 23/01/2012, 15:08
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Funciones que calculan al principio pero luego dan resultados errados

Muchas gracias madhatterdef, me parece que tu código está excelente. Lo probé y funciona, pero el problema es que yo tengo unos datos que vienen de la base de datos y se cargan en la tabla que son el nombre, el apellido, la ci, el sueldo basico, etc y los otros campos son para llenar dinamicamente para realizar las operaciones a cada empleado por eso uso los input como array.

Traté de adaptar el código a esto pero no me salió.

No se como hacerlo.
__________________
Caminando con el corazón partío
  #7 (permalink)  
Antiguo 23/01/2012, 19:30
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Funciones que calculan al principio pero luego dan resultados errados

En este casó se complica porque según recuerdo no estas usando Id's en los campos, confirmalo si es así, ahora, los cálculos supongo yo deben de hacerse uno por uno o quieres hacerlo todos de un solo golpe?, muestra de nuevo el código del formulario...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #8 (permalink)  
Antiguo 23/01/2012, 20:03
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Funciones que calculan al principio pero luego dan resultados errados

Mi codigo es el de arriba, este:

Código PHP:
Ver original
  1. <script type="text/javascript">
  2.     // dias es el total de días trabajados
  3.     // sueldo es el sueldo básico del empleado
  4.     // indice corresponde al input text que se debe actualizar
  5.     var sq;
  6.     var dd;
  7.     var dv;
  8.      
  9.     function calcula(dias, sueldo_diario, indice) {
  10.            sq = document.getElementById('sueldo_quinc' + indice).value = (parseFloat(dias) * parseFloat(sueldo_diario)).toFixed(2);
  11.     }
  12.      
  13.     function deducciones(otros_desc, ivss, paro_for, lph, indice2) {
  14.         dd= document.getElementById('total_deducc' + indice2).value = (parseFloat(otros_desc) + parseFloat(ivss) + parseFloat(paro_for) + parseFloat(lph)).toFixed(2);
  15.     }
  16.      
  17.     function total_dev(otros_ing, sq, dd, indice3) {
  18.         dv = document.getElementById('total_deveng' + indice3).value = ((parseFloat(otros_ing) + parseFloat(sq)) - parseFloat(dd)).toFixed(2);
  19.        
  20.     }
  21.      
  22.     function Mostrar()
  23.      
  24.     {
  25.      
  26.     msg="Opcion 1:"+sq+"\n";
  27.      
  28.     msg+="Opcion 2:"+dd+"\n";
  29.      
  30.     alert(msg);
  31.      
  32.     }
  33.      
  34.     function totalizar(){
  35.         var chks = document.getElementsByName('total_deveng[]');
  36.         var totales = 0;
  37.         for(var i = 0; i < chks.length; i++) {
  38.             var valor = parseFloat(chks[i].value);
  39.             if(isNaN(valor) == false) {
  40.                 totales += parseFloat(chks[i].value);
  41.             }
  42.         }
  43.         document.getElementById("total").value = totales;
  44.          
  45.     }
  46.      
  47.     </script>
  48.         <br />
  49.         <?php if($_SESSION['user']==true){ ?>
  50.         <form action="nomina_reg.php" method="post" name="form1" >
  51.           <table width="750" border="0" class="tabla2">
  52.             <tr>
  53.               <td colspan="5" class="td2" bgcolor="#95bce2">UNIDAD EDUCATIVA EL MILAGRO DE LA PERLA</td>
  54.               </tr>
  55.             <tr>
  56.               <td colspan="5">NOMINA PARA EL PAGO DE SUELDOS EMPLEADOS</td>
  57.               </tr>
  58.           <tr>
  59.           <td width="26%">
  60.           <div class="demo">
  61.           <p>Fecha Desde: <input type="text" id="datepicker_1" name="desde" class="fechador"></p>
  62.           </div>
  63.           </td>
  64.           <td width="26%">
  65.           <div class="demo">
  66.           <p>Fecha Hasta: <input type="text" id="datepicker_2" name="hasta" class="fechador"></p>
  67.           </div>
  68.           </td>
  69.           </tr>
  70.           </table>
  71.           <br />
  72.           <table width="750" border="1"  bordercolor="#95bce2"  class="tabla3">
  73.       <tr bgcolor="#95bce2 ">
  74.         <td width="3%" class="td3">Nº</td>
  75.         <td width="3%" class="td3">CI</td>
  76.         <td width="10%" class="td3">APELLIDOS</td>
  77.         <td width="11%" class="td3">NOMBRES</td>
  78.         <td width="4%" class="td3">DIAS</td>
  79.         <td width="8%" class="td3">SUELDO BÁSICO</td>
  80.         <td width="8%" class="td3">SUELDO DIARIO</td>    
  81.         <td width="8%" class="td3">SUELDO B. QUINCENA</td>
  82.         <td width="8%" class="td3">IVSS</td>
  83.         <td width="8%" class="td3">PARO FORSOZO</td>
  84.         <td width="8%" class="td3">LPH</td>
  85.         <td width="8%" class="td3">OTROS DESCUENT</td>
  86.         <td width="8%" class="td3">OTROS INGRESOS</td>
  87.         <td width="8%" class="td3">TOTAL DEDUCCIONES</td>
  88.         <td width="8%" class="td3">TOTAL DEVENGADO</td>
  89.       </tr>
  90.      
  91.       <?php
  92.     $indice = 1;
  93.     $indice2 = 1;
  94.     $indice3 = 1;
  95.      
  96.     $rs = mysql_query("SELECT * FROM empleados ORDER BY id_empleado ASC");
  97.     while($result = mysql_fetch_array($rs)) {
  98.     }
  99.         $ivss = number_format(($result['sueldo_basico']*4/100),2,'.','');
  100.         $paro_for = number_format(($result['sueldo_basico']*0.5/100),2,'.','');
  101.         $lph = number_format(($result['sueldo_basico']*1/100),2,'.','');
  102.         $sueldo_diario = number_format(($result['sueldo_basico']/30),2,'.','');
  103.      
  104.     ?>
  105.         <tr>
  106.             <td><?php echo $result['id_empleado']; ?><input type="hidden" name="id_empleado[]" value="<?php echo $result['id_empleado']; ?>" /></td>
  107.             <td><?php echo $result['ci']; ?><input type="hidden" name="ci[]" value="<?php echo $result['ci']; ?>" /></td>
  108.             <td><?php echo "{$result['papellido']} {$result['sapellido']}"; ?><input type="hidden" name="papellido[]" value="<?php echo $result['papellido']; ?>" /></td>
  109.             <td><?php echo "{$result['pnombre']} {$result['snombre']}"; ?><input type="hidden" name="pnombre[]" value="<?php echo $result['pnombre']; ?>" /></td>
  110.            
  111.             <td><input name="dias[]" type="text" id="dias<?php echo $indice; ?>" size="2" value="" onBlur="calcula(this.value, '<?php echo $sueldo_diario; ?>', <?php echo $indice; ?>);" /></td>
  112.             <td><label name="sueldo_basico" id="sueldo_basico" size="2" readonly="readonly" value="" ><?php echo $result['sueldo_basico']; ?><input type="hidden" name="sueldo_basico[]" value="<?php echo $result['sueldo_basico']; ?>" /></label></td>
  113.             <td><input type="text" name="sueldo_diario[]" id="sueldo_diario" size="5" readonly="readonly" value="<?php echo $sueldo_diario; ?>" ></td>
  114.             <td><input name="sueldo_quinc[]" type="text" id="sueldo_quinc<?php echo $indice; ?>" size="5" value="" readonly="readonly" /></td>
  115.      
  116.             <td><input type="text" name="ivss[]" id="ivss" size="3" readonly="readonly" value="<?php echo $ivss; ?>"  /></td>
  117.             <td><input type="text" name="paro_for[]" id="paro_for" size="3" readonly="readonly" value="<?php echo $paro_for; ?>" ></td>
  118.             <td><input type="text" name="lph[]" id="lph" size="3" readonly="readonly" value="<?php echo $lph; ?>" ></td>
  119.            
  120.             <td><input name="otros_desc[]" type="text" id="otros_desc<?php echo $indice2; ?>" size="5" value="" onBlur="deducciones(this.value, '<?php echo $ivss; ?>', '<?php echo $paro_for; ?>', '<?php echo $lph; ?>', <?php echo $indice2; ?>);" /></td>
  121.             <td><input name="otros_ing[]" type="text" id="otros_ing<?php echo $indice3; ?>" size="5" value="" onChange="total_dev(this.value, sq, dd, <?php echo $indice3; ?>);" /></td>
  122.      
  123.             <td><input name="total_deducc[]" type="text" id="total_deducc<?php echo $indice2; ?>" size="5" value="" readonly="readonly" /></td>
  124.            <td><input name="total_deveng[]" type="text" id="total_deveng<?php echo $indice3; ?>" size="5" value="" readonly="readonly"  /></td>
  125.         </tr>
  126.     <?php
  127.         $indice ++;
  128.         $indice2 ++;
  129.         $indice3 ++;
  130.     } // fin de while
  131.     ?>  <tr>
  132.           <td>&nbsp;</td>
  133.      
  134.         <td>&nbsp;</td>
  135.         <td>&nbsp;</td>
  136.         <td>&nbsp;</td>
  137.         <td>&nbsp;</td>
  138.         <td>&nbsp;</td>
  139.         <td>&nbsp;</td>
  140.         <td>&nbsp;</td>
  141.         <td>&nbsp;</td>
  142.         <td>&nbsp;</td>
  143.         <td>&nbsp;</td>
  144.         <td>&nbsp;</td>
  145.         <td>&nbsp;</td>
  146.         <td class="td3">TOTAL</td>
  147.         <td><input type="text" id="total" name="total"  size="5" value="" readonly="readonly" onMouseOver="javascript:totalizar();" /></td>
  148.       </tr>
  149.     </table>
  150.       <tr>
  151.       <th colspan="2"><input type="submit" name="button" id="button" value="Guardar" /> - <input type="reset" name="Reset" id="button" value="Borrar" />
  152.       </th>
  153.       </tr>
  154.     </form>

y tengo los id

gracias
__________________
Caminando con el corazón partío
  #9 (permalink)  
Antiguo 23/01/2012, 20:08
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Funciones que calculan al principio pero luego dan resultados errados

si puedes, mejor publica el formulario ya procesado, para ver como lo esta interpretando el navegador...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #10 (permalink)  
Antiguo 23/01/2012, 20:55
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Funciones que calculan al principio pero luego dan resultados errados

Hola, te envio el enlace para probarlo:

http://prowexven.com/preescolar/nomi...rar_nomina.php

gracias
__________________
Caminando con el corazón partío
  #11 (permalink)  
Antiguo 23/01/2012, 21:42
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Funciones que calculan al principio pero luego dan resultados errados

Bueno, primero, tendrás que agregar un "indice" a todos los id's de los campos (ojo, esto no afecta al PHP que lo va a procesar, php lee el name no el id), el "indice" será compartido por todos los campos de una sola fila, para la siguiente se sumara 1 al indice para obtener el siguiente numero, el javascript es muy sencillo, prueba y me cuentas

Código PHP:
Ver original
  1. <html>
  2.     <head>
  3.         <title>Hola mundo</title>
  4.         <script type="text/javascript">
  5.            
  6.             function ingresos(fila) {
  7.                 var dias = document.getElementById('dias' + fila).value;
  8.                 var sueldo = document.getElementById('sueldo' + fila).value;
  9.                 dias = parseInt(dias);
  10.                 sueldo = parseFloat(sueldo).toFixed(2);
  11.                 var total = dias + sueldo;
  12.                 return total;
  13.             }
  14.            
  15.             function descuentos(fila) {
  16.                 var desc = document.getElementById('descuentos' + fila).value;
  17.                 var ivvs = document.getElementById('ivvs' + fila).value;
  18.                 var paro = document.getElementById('paro' + fila).value;
  19.                 var lph = document.getElementById('lph' + fila).value;
  20.                
  21.                 desc = parseFloat(desc);
  22.                 desc = parseFloat(ivvs);
  23.                 desc = parseFloat(paro);
  24.                 desc = parseFloat(lph);
  25.                
  26.                 var total = desc + ivvs + paro + lph;
  27.                
  28.                 return total;
  29.             }
  30.            
  31.             function sumar(fila) {
  32.                 var ing = ingresos(fila);
  33.                 var des = descuentos(fila);
  34.                
  35.                 ing = parseFloat(ing).toFixed(2);
  36.                 des = parseFloat(des).toFixed(2);
  37.                
  38.                 var total = ing - des;
  39.                 total = parseFloat(total).toFixed(2);
  40.                
  41.                 document.getElementById('total' + fila).value = total;
  42.             }
  43.            
  44.             function todo() {
  45.                 var campos = document.getElementById('campos').value;
  46.                 for(var i=0; i<campos; i++) {
  47.                     sumar(i);
  48.                 }
  49.             }
  50.         </script>
  51.     </head>
  52.     <body>
  53.         <form id="miform" method="post">
  54.             <table>
  55.                 <tr>
  56.                     <td>dias</td>
  57.                     <td>sueldo dia</td>
  58.                     <td>ivvs</td>
  59.                     <td>paro</td>
  60.                     <td>lph</td>
  61.                     <td>descuento</td>
  62.                     <td>ingresos</td>
  63.                 </tr>
  64.                 <?php
  65.                 for($i=0; $i<10; $i++) {
  66.                     echo '<tr>'.PHP_EOL;
  67.                     echo '<td><input type="text" id="dias'.$i.'" name="dias[]" value="'.rand(1,99).'" /></td>';
  68.                     echo '<td><input type="text" id="sueldo'.$i.'" name="sueldo[]" value="'.rand(1,99).'.'.rand(1,99).'" /></td>';
  69.                     echo '<td><input type="text" id="ivvs'.$i.'" name="ivvs" value="'.rand(1,99).'.'.rand(1,99).'" /></td>';
  70.                     echo '<td><input type="text" id="paro'.$i.'" name="paro" value="'.rand(1,99).'.'.rand(1,99).'" /></td>';
  71.                     echo '<td><input type="text" id="lph'.$i.'" name="lph" value="'.rand(1,99).'.'.rand(1,99).'" /></td>';
  72.                     echo '<td><input type="text" id="descuentos'.$i.'" name="descuentos" value="'.rand(1,99).'.'.rand(1,99).'" /></td>';
  73.                     echo '<td><input type="text" id="ingresos'.$i.'" name="ingresos" value="'.rand(1,99).'.'.rand(1,99).'" /></td>';
  74.                     echo '<td><input type="text" id="total'.$i.'" name="total[]" /></td>';
  75.                     echo '<td><input type="button" value="calcular" onclick="sumar(\''.$i.'\')" /></td>';
  76.                     echo '</tr>';
  77.                 }
  78.                 ?>
  79.             </table>
  80.             <input type="hidden" id="campos" value="<?php echo $i; ?>" />
  81.             <p><input type="button" value="calcular todo" onclick="todo()" /></p>;
  82.         </form>
  83.     </body>
  84. </html>
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #12 (permalink)  
Antiguo 23/01/2012, 21:46
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Funciones que calculan al principio pero luego dan resultados errados

Muchas Gracias Nemutagk, voy a adaptarlo a lo que tengo y te aviso cualquier duda. ;)
__________________
Caminando con el corazón partío
  #13 (permalink)  
Antiguo 23/01/2012, 21:48
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Funciones que calculan al principio pero luego dan resultados errados

El código creo es muy sencillo, y fácil de comprender, cualquier cosa comenta...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Etiquetas: funcion, funciones, input, php, principio, resultados
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 05:45.