CodeCharge Studio
search Register Login  

Web Reports

Visually create Web Reports in PHP, ASP, .NET, Java, Perl and ColdFusion.
CodeCharge.com

YesSoftware Forums -> CodeCharge Studio -> Español

 Evitar ingresar 2 o mas veces el mismo registro en el ejemplo Order Entry

Print topic Send  topic

Author Message
ivan_rsl

Posts: 2
Posted: 03/11/2009, 6:27 PM

Hola a todos, soy nuevo en el foro y apenas estoy aprendiendo sobre la herramienrta. Quisiera que pudieran echarme una mano con el siguiente inconveniente: Estoy realizando un sistema q controla le emisión de ordenes de compra y me estoy basando en este ejemplo http://examples.codecharge.com/ExamplePack/OrderEntry/OrderEntry.php , el cual es exactamente lo que necesito con un pequeño inconveniente, y se trata de que puedes ingresar cuantas veces quieras un mismo registro, además cuando acabo de ingresar una orden de compra, al presionar el botón "Atrás" en el navegador puedo ver la página con los datos que acabo de guardar en la base de datos y si vuelvo a dar Submit, se vuelven a guardar los datos y los registros se guardan duplicados en la BD. Cualquier idea que tengan para resolver este inconveniente es bienvenida, y muchas gracias por su atención prestada. Saludos cordiales.
View profile  Send private message
lvalverdeb

Posts: 299
Posted: 03/18/2009, 2:18 PM

Según lo que explicas entiendo que el formulario siempre debe estar en modo de adición y no en modo de edición, aun si presionas el botón de retroceso, cierto?

El código siguiente (evento AfterInitialize), y usando el caso de orderentry, hace que el formulario se ponga en modo de Adición en caso de que se presione el boton back:

  
if (CCGetFromGet("order_id",0)) {  
     //formulario está en modo de edición lo cual NO se permite;  
     global $FileName,$Redirect;  
     $params = CCGetQueryString("QueryString",array("order_id")); // salvar otros parámetros en el url excepto order_id.  
     $Redirect = $FileName."?".$params;  
}  

para evitar agregar dos veces el mismo artículo, la solución es un poco compleja debido a que debes implementarla en Javascript puesto que el formulario no se le hace Submit hasta que se termina el pedido. La estrategia sería utilizar el evento OnChange del listbox para verificar contra un array definido globalmente al iniciar la página si el articulo que vas a agregar ya existe. El siguiente código NO lo he probado pero te puede dar una idea (agregarlo en la etiqueta head):
  
<script language="Javascript">  
var agregados = new Array();  
  
function agregarArticuloAlPedido(id_articulo) {  
   var existe = false;   
   for(i=0;i<agregados.length;i++) {  
        if (agregados(i) == id_articulo) {  
           alert("articulo ya esta el pedido");  
           existe = true;  
         }   
     }  
    if (!existe) {  
         agregados.push(id_articulo);  
    }  
    return !existe;  
}  
</script>  
Crea un evento OnChange (lado del cliente) al listbox y agrega el siguiente código:
  
result = agregarArticuloAlPedido(this.value);  

Nota este foro no me permite agregar parentesis cuadrados (o al menos no se como) por lo que la sentencia de comparacion en el javascript debe decir if (agregados(i) == id_articulo) sustituir los parentesis regulares en agregados por parentesis cuadrados.

Nos cuentas como te fue.











_________________
lvalverdeb
CR, GMT-6
XAMPP/Ubuntu/CCS3.2/4
View profile  Send private message
ivan_rsl

Posts: 2
Posted: 03/27/2009, 5:06 PM

Hola lvalverdeb, gracias por tu respuesta. Me han funcionado muy bien tus ideas, en verdad gracias... sólo que me han surgido otras dudas respecto al mismo ejemplo. Lo que pasa es que ahora, si presiono de nueva cuenta el botón <Atrás> del navegador después de insertar los artículos en la orden de compra vuelven a aparecer los artículos recién insertados y si vuelvo a presionar el botón <Submit> se vuelven a insertar y se duplican en la BD ya que ahora no se permite la edición de la misma. Otro detalle que he intentado agregar es la validación de los artículos que se piden en la orden de compra, pues éstos para poder ser pedidos, deben tener una existencia menor o igual a 20 piezas en el almacén, de otra forma debe enviar un mensaje de error diciendo que no se puede agregar dicho artículo al pedido pues todavía no alcanza la cantidad mínima requerida en el almacén. He leído el manual y con base en ello hice el siguiente código que agregué en el evento OnValidate pero no me funciona :

  
$db = new clsDBConnection1();  
global $store_orders_items;  
  
$Existencia = CCDLookUp("Existencia","articulos","Id_articulo=".$store_orders_items->product_id->GetValue(), $db);  
  
if($Existencia > 20)  
      $store_orders_items->Errors->addError("No puede agregar éste artículo a la orden, pues aún existen más de 20 artículos en almacén. La cantidad actuál es de ".$Existencia." pzas.");  
$db->close;  

Que podría estarme fallando?.... mil gracias por adelantado!... saludos ;-)
View profile  Send private message
lvalverdeb

Posts: 299
Posted: 03/31/2009, 8:31 AM

Francamente cualquier solución relacionada con el Back button es una solución a medias. Algo que puedes probar es agregando el siguiente código en el event AfterExecuteInsert:

  
global $FileName;  
header("Location: ".$FileName, true);  
exit();  

Esto forza a php a hacerle un flush a los encabezados. Como te digo puede que funcione.

El evento para verificar la existencia debes ubicarlo en el BeforeBuildInsert y cambias tu codigo a:
  
$db = new clsDBConnection1();    
global $store_orders_items;    
    
$Existencia = CCDLookUp("Existencia","articulos","Id_articulo=".$store_orders_items->DataSource->product_id->GetValue(), $db);    
    
if($Existencia > 20)    
      $store_orders_items->Errors->addError("No puede agregar éste artículo a la orden, pues aún existen más de 20 artículos en almacén. La cantidad actuál es de ".$Existencia." pzas.");    
$db->close;  

Saludos


_________________
lvalverdeb
CR, GMT-6
XAMPP/Ubuntu/CCS3.2/4
View profile  Send private message

Add new topic Subscribe to topic   


These are Community Forums for users to exchange information.
If you would like to obtain technical product help please visit http://support.yessoftware.com.

MS Access to Web

Convert MS Access to Web.
Join thousands of Web developers who build Web applications with minimal coding.

CodeCharge.com

Home   |    Search   |    Members   |    Register   |    Login


Powered by UltraApps Forum created with CodeCharge Studio
Copyright © 2003-2004 by UltraApps.com  and YesSoftware, Inc.