Autor Tema: Ayuda para llenar factura  (Leído 9088 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado pippin

  • Sv Member
  • ***
  • Mensajes: 301
Ayuda para llenar factura
« : febrero 01, 2011, 11:38:23 pm »
Esto es lo que tengo hecho:

Este es el codigo:

[PHP]

Si miran el ejemplo en el link que les pase, se daran cuenta que el primer producto lo agrega, pero para el segundo ya remplaza el primero.

Yo imprimo en un for los campos donde van los poductos, que estan ocultos con un estilo y sin borde.

Espero me entiendan y puedan ayudarme, gracias.
« Última Modificación: marzo 17, 2011, 04:27:20 pm por pippin »

Desconectado ELITE

  • The Communiter-
  • *
  • Mensajes: 6232
  • NEMO ME IMPUNE LACESSIT
Re: Ayuda para llenar factura
« Respuesta #1 : febrero 02, 2011, 12:01:57 am »
Tengo unas dudas:

Código: [Seleccionar]
<?php $indice 0 ?>   
Esa linea no te hace que todo se te valla a la primera linea ??

Código: [Seleccionar]
if(document.form.referencia.value != "" && document.form.cantidad.value != "" && document.form.descripcion.value != "" && document.form.valor.value != "" &&document.form.descuento.value != "")  
Esta linea dice que si la linea es != "" osea diferente de "" que meta todo y creo que deberia ser que sea igual a "" para que meta ahi el producto  osea en la linea nueva, porq ahi dice que si no esta limpia  la linea que ahi meta el producto y como la primera no esta limpia ("") pos ahi lo mete segun pienso :phew:

Otra cosa sin la basesita sql no lo puedo probar con los cambios que hixe  :wacko: lo que itente primero fue quitar lo de indice = 0

Pero dime tu si soy yo el que me ekivoco o no  :thumbsup:

Desconectado pippin

  • Sv Member
  • ***
  • Mensajes: 301
Re: Ayuda para llenar factura
« Respuesta #2 : febrero 02, 2011, 12:06:49 am »
Lo que hago con el $indice = 0 es al iniciar, por eso abajo esta el incremento $indice++, si no pongo ese $indice = 0 pues los nombre de los campos quedaran incompletos.

Lo segundo, con esa linea estoy verificando que los campos donde selecciono el producto para agregar a la factura no esten vacios.

Espero puedas seguir ayudandome.

Desconectado ELITE

  • The Communiter-
  • *
  • Mensajes: 6232
  • NEMO ME IMPUNE LACESSIT
Re: Ayuda para llenar factura
« Respuesta #3 : febrero 02, 2011, 12:36:44 am »
Lo que hago con el $indice = 0 es al iniciar, por eso abajo esta el incremento $indice++, si no pongo ese $indice = 0 pues los nombre de los campos quedaran incompletos.

Lo segundo, con esa linea estoy verificando que los campos donde selecciono el producto para agregar a la factura no esten vacios.

Espero puedas seguir ayudandome.

Si lei un poco rapido el code porq estoy haciendo otra cosa de redes y mil cosas mas y no me percate de que era validacion  :phew:

Mira y los productos mostrados los pones en una tabla temporal o no ??



Desconectado pippin

  • Sv Member
  • ***
  • Mensajes: 301
Re: Ayuda para llenar factura
« Respuesta #4 : febrero 02, 2011, 12:56:24 am »
Cuado dices tabla temporal te refieres a la base de datos? Pues no simplemente pongo esos valores en campos de textos que estan en la parte de abajo, que tienen nombre y se generan con un form

Código: [Seleccionar]
<?php for ($i 0$i $lineas$i++): ?>
      <tr align="center">
        <td><input name="cant<?php echo $i ?>" type="text" class="field_factura" id="cant<?php echo $i ?>" style="visibility:hidden" size="2" readonly="readonly" /></td>
        <td><input name="refeprod<?php echo $i ?>" type="text" class="field_factura" id="refeprod<?php echo $i ?>" style="visibility:hidden" readonly="readonly" /></td>
        <td><input name="desc<?php echo $i ?>" type="text" class="field_factura" id="desc<?php echo $i ?>" style="visibility:hidden" size="70" readonly="readonly" /></td>
        <td><input name="valor<?php echo $i ?>" type="text" class="field_factura" id="valor<?php echo $i ?>" style="visibility:hidden" size="20" readonly="readonly" /></td>
        <td><input name="valortotal<?php echo $i ?>" type="text" class="field_factura" id="valortotal<?php echo $i ?>" style="visibility:hidden" size="20" readonly="readonly" /></td>
      </tr>
    <?php endfor; ?>

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: Ayuda para llenar factura
« Respuesta #5 : febrero 02, 2011, 08:50:05 am »
Tengo unas dudas
Código: [Seleccionar]
<?php $indice 0 ?>   
Esa linea no te hace que todo se te valla a la primera linea ??

pues creo que OKO tiene razón.

es lógica tu respuesta al decir que tienes un contador, pero no sirve de nada, la variable siempre la seteas a 0, no importa cuanto le aumentes
<?php echo $indice++ ?>

si siempre antes de llegar ahí, le seteas el valor 0.... ese seteo debiera estar en el load de la página, si es que existe algo así, no dentro de la función AGREGAR... me explico ?¿

lo que tienes es algo parecido a esto

[pseudocodigo]
Código: [Seleccionar]
function agregar()
    {       
        SI(TODOS LOS CAMPOS ESTAN LLENOS){
           
        VARIABLE = 0

        FACTURA.CANTIDAD(VARIABLE)=CANTIDAD
        FACTURA.FECHA(VARIABLE)=FECHA
           
        VARIABLE SE INCREMENTA EN UNO

        }SINO{
            META TODOS LOS VALORES
        }
    }
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado pippin

  • Sv Member
  • ***
  • Mensajes: 301
Re: Ayuda para llenar factura
« Respuesta #6 : febrero 02, 2011, 09:13:33 am »
Gracias por la aclaracion, podrias ayudarme a solucionar este problema, por favor, gracias,

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: Ayuda para llenar factura
« Respuesta #7 : febrero 02, 2011, 11:20:28 am »
Gracias por la aclaracion, podrias ayudarme a solucionar este problema, por favor, gracias,
pues ya te lo había dicho, cambiarlo al load de la página, en tu código he visto algo así: window.onload = function()  sospecho que ahí sería un buen lugar.

Aunque aquí depende de como funciona el sistema. Si hay un botón con la filosofía de "Nueva factura", entonces ese lugar se vuelve el más indicado para poner la variable nuevamente en 0. Suerte




@ Francisco: ya viste que horrible es php vea, no lo tomes personal pipin, que mi "clavo" no es contigo, ni mucho menos con tu forma de programar
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado Francisco™

  • The Communiter-
  • *
  • Mensajes: 1373
  • Bitch you make me hurl...
Re: Ayuda para llenar factura
« Respuesta #8 : febrero 02, 2011, 08:11:00 pm »
pues creo que OKO tiene razón.

es lógica tu respuesta al decir que tienes un contador, pero no sirve de nada, la variable siempre la seteas a 0, no importa cuanto le aumentes
<?php echo $indice++ ?>

si siempre antes de llegar ahí, le seteas el valor 0.... ese seteo debiera estar en el load de la página, si es que existe algo así, no dentro de la función AGREGAR... me explico ?¿

lo que tienes es algo parecido a esto

[pseudocodigo]
Código: [Seleccionar]
function agregar()
    {       
        SI(TODOS LOS CAMPOS ESTAN LLENOS){
           
        VARIABLE = 0

        FACTURA.CANTIDAD(VARIABLE)=CANTIDAD
        FACTURA.FECHA(VARIABLE)=FECHA
           
        VARIABLE SE INCREMENTA EN UNO

        }SINO{
            META TODOS LOS VALORES
        }
    }

sí y no, sí porque debido a que el seteo a cero de la variable $indice esta en la misma página siempre que se ejecute el código php va volver a cero y no porque el código de la función es una mezcla de php con javascript por lo que cuando se llama a la función agregar() la parte que es php ya fue ejecutada

aunque fue poco tiempo el que trabaje con php siempre tuve presente algo que aquí podría estar olvidando el communiter, php se ejecuta del lado del servidor y javascript del lado del cliente, por lo que la variable $indice se ejecuta antes de que se invoque la función agregar(), que quiere decir esto? que por más que mandemos a llamar la función agregar() nuestro contador nunca va aumentar, para que esto suceda habría que volver a ejecutar el código (aka actualizar la página), debido a esto tampoco podría setearse a cero en ninguna parte de esa página, esto lo tendría que hacer en una página anterior que haga referencia a está

mis sugerencias:
1. manejar todo el proceso solo con javascript (aquí podes ver ejemplos de como hacerlo -> http://tinyurl.com/5t4v4la)
2. implementar ajax (aquí hay un ejemplo -> http://tinyurl.com/7rw8pt)

@ Francisco: ya viste que horrible es php vea, no lo tomes personal pipin, que mi "clavo" no es contigo, ni mucho menos con tu forma de programar

ni tanto tiene sus ventajas, pero si hay que dar un montón de vueltas para hacer algo que en .net se hace de 2 patadas :rofl:

Desconectado pippin

  • Sv Member
  • ***
  • Mensajes: 301
Re: Ayuda para llenar factura
« Respuesta #9 : febrero 02, 2011, 08:18:20 pm »
Francisco tiene razon, son lenguajes diferentes ahora lo hice todo con JavaScript pero nada que puedo incrementar la variable indice, despues que se haya ejecuta la funcion ejecutar()


function agregar()
    {
	
	
var 
indice 0;
	

        if(
document.form.referencia.value != "" && document.form.cantidad.value != "" && document.form.descripcion.value != "" && document.form.valor.value != "" &&document.form.descuento.value != ""){           
	
	

            
document.getElementById('cant'+indice).style.display 'inherit';
            
document.getElementById('refeprod'+indice).style.display 'inherit';
   
	
        
document.getElementById('desc'+indice).style.display 'inherit';
            
document.getElementById('valor'+indice).style.display 'inherit';
            
document.getElementById('valortotal'+indice).style.display 'inherit';
        
   
	
        
document.getElementById('cant'+indice).value document.form.cantidad.value;
            
document.getElementById('refeprod'+indice).value document.form.referencia.value;
   
	
        
document.getElementById('desc'+indice).value document.form.descripcion.value;
            
document.getElementById('valor'+indice).value document.form.valor.value;
            
	
	

	
	
	
cantidad document.form.cantidad.value;
	
	
	
descuento = (document.form.descuento.value/100);
	
	
	
valor document.form.valor.value;
	
	
	
porcentaje valor descuento;
	
	
	
valor_parcial valor porcentaje;
	
	
	
valor_final cantidad valor_parcial;
	
	

	
	
	
	

	
	
	
document.getElementById('valortotal'+indice).value valor_final;
            
document.form.cantidad.value "";
            
document.form.referencia.value "";
   
	
        
document.form.descripcion.value "";
            
document.form.valor.value "";
	
	
	
document.form.descuento.value defaultValue;
	
	
	

       
	
}else{
           
	
alert('Complete todos los campos antes de agregar el producto a la factura');
       
	
}
   
	
}


Al ejecutarse esa funcion necesito que la variable indice se incremente he hecho esto:


function incrementar() 
	
{
  
	
	
indice++;
	



En el boton tengo


onclick
="agregar();incrementar();"


Pero la variable indice no se icrementa, por favor solo falta eso para continuar con mi proyecto ¿Como lo hago?

Desconectado Francisco™

  • The Communiter-
  • *
  • Mensajes: 1373
  • Bitch you make me hurl...
Re: Ayuda para llenar factura
« Respuesta #10 : febrero 02, 2011, 08:51:33 pm »
ahora tenes 2 situaciones:

una es lo que mencionó tekun:
es lógica tu respuesta al decir que tienes un contador, pero no sirve de nada, la variable siempre la seteas a 0, no importa cuanto le aumentes

si siempre antes de llegar ahí, le seteas el valor 0.... ese seteo debiera estar en el load de la página, si es que existe algo así, no dentro de la función AGREGAR... me explico ?¿


lo que tienes es algo parecido a esto

[pseudocodigo]
Código: [Seleccionar]
function agregar()
    {       
        SI(TODOS LOS CAMPOS ESTAN LLENOS){
           
        VARIABLE = 0

        FACTURA.CANTIDAD(VARIABLE)=CANTIDAD
        FACTURA.FECHA(VARIABLE)=FECHA
           
        VARIABLE SE INCREMENTA EN UNO

        }SINO{
            META TODOS LOS VALORES
        }
    }


y la otra es que noto que tu variable indice es una variable local en la función agregar(), por lo tanto la función incrementar() no incrementa (valga la redundancia) la variable que estas declarando en agregar()

proba declarando la variable como global, ya que con eso la sacas de la función agregar() y la podrás utilizar en las 2 funciones (acá podes leer al respecto -> http://tinyurl.com/6l4a7ny), aunque el incremento lo podrías dejar al final de la función agregar() y te evitas la otra función
« Última Modificación: febrero 02, 2011, 09:02:09 pm por Francisco™ »

Desconectado pippin

  • Sv Member
  • ***
  • Mensajes: 301
Re: Ayuda para llenar factura
« Respuesta #11 : febrero 02, 2011, 09:08:25 pm »
Bueno declare la varible indice como global, pero ahora la funcion agregar no la reconoce, y de nada me sirve declararla de nuveo (haria lo mismo).

Gracias por su ayuda, y les pido el favor de seguirme ayudando.

Desconectado Francisco™

  • The Communiter-
  • *
  • Mensajes: 1373
  • Bitch you make me hurl...
Re: Ayuda para llenar factura
« Respuesta #12 : febrero 02, 2011, 09:41:06 pm »
Bueno declare la varible indice como global, pero ahora la funcion agregar no la reconoce, y de nada me sirve declararla de nuveo (haria lo mismo).

Gracias por su ayuda, y les pido el favor de seguirme ayudando.

según lo que comentas me da la impresión que no has declarado bien la variable, deberías de revisar si esta bien ubicada la variable, ahorita acabo de hacer esta prueba con esto:

Código: [Seleccionar]
<script>
var indice=0;

function aumentar(){
  indice++;
  alert(indice);
}

function disminuir(){
  indice--;
  alert(indice);
}
</script>

luego en el body puse dos botones en el llamaba a cada función y no tuve problemas

pd: vía mp te mande el ejemplo completo de la prueba que hice para que veas como funciona

Desconectado pippin

  • Sv Member
  • ***
  • Mensajes: 301
Re: Ayuda para llenar factura
« Respuesta #13 : febrero 02, 2011, 10:08:08 pm »
Bueno parece que hay un avance, la funcion de incrementar si funciona solo si pongo, el evento


onclick 
"incrementar();agregar()"


Si as pongo en orden iverson no funciona, ya casi esta funcionado, gracias :yahoo:

Desconectado JaiMe

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 1485
  • λ | h+
Re: Ayuda para llenar factura
« Respuesta #14 : febrero 02, 2011, 10:18:47 pm »
Unas sugerencias

Te recomiendo separar la lógica con las views, es decir no mesclar PHP y HTML o JS, por que el código se vuelve ofensivo a la vista y difícil de mantener.

Bajate el firebug para debug tu codigo.

Aca hay una solucion que no necesita PHP para agregar elementos a la factura, es un quick fix de cinco minutos, generalmente una combinacion de JSON y microtemplates es necesaria.

Codigo

Code: https://gist.github.com/809036

El Resultado



edit: se me olvido mencionar que este codigo iria en la funcion agregar y ejecutado luego de validar el form

Un par de consejos
* Nunca ocupes variables globales en Javascript
* Si usas una libreria como jQuery, aprovechala para manipular el DOM
« Última Modificación: febrero 02, 2011, 10:24:59 pm por JaiMe »
"Unless you try to do something beyond what you have already mastered, you will never grow."
― Ralph Waldo Emerson