[SOLUCIONADO] Popup

Alguien me puede ayudar por favor a configurar un popup?

La verdad me está dejando loco, configuré todo algo me falta nose…

Problema:

Tengo un alta de operaciones, en el alta uno de los campos requeridos es el id del proveedor, el cual en la base de datos se llama cod_prove, entonces quisiera configurar un popup para que el usuario pueda ir a buscar el proveedor y me traiga el cod_prove del mismo.

lo que hice fue:
1 crear una operacion que contiene un ci con 1 filtro y un cuadro, cuando selecciono el registro en el cuadro me lleva el proveedor al formulario que lo llamo!!. Hasta ahi todo bien pero cuando quiero guardar me dice que la clave foránea no existe. luego de hacer un ei_arbol me di cuenta que me trae el id de la fila que tiene en memoria, el cual no es igual a el cod_prove.

Ayudaaaaaaaaaaaaaaaa!!!

desde ya muchas gracias… Adjunto pdf con problema, la configuracion y codigo php (el cual no estoy seguro que funcione correctamente porque intente adaptar el php del proyecto de referencia del toba)

Espero me ayuden gracias…


Hola Jorge,

supongo que estas utilizando la version 2.1 de Toba, en dicha version los cuadros ya no envian claves significativas al cliente, por lo tanto al utilizar un popup se tienen 3 alternativas:

  • Se desactiva manualmente el manejo actual de claves, de esa forma se revierte al comportamiento anterior. Mediante el metodo desactivar_modo_clave_segura del cuadro.
  • Se dispara el evento de seleccion normalmente (en lugar de ser una respuesta popup), en el evt__cuadro__seleccion te llega la clave real que se selecciono, en ese caso se envia codigo JS asociado para que se setee correctamente el codigo y luego se cierre la ventana (vale decir, se hace la respuesta popup a mano).
  • Se toma en cuenta que dicho dato proviene de un popup cuyo cuadro puede estar usando claves no significativas y se hace el mapeo manualmente recuperando el id original con el metodo recuperar_clave_fila.

Desgraciadamente se nos paso por alto el detalle del popup y nos quedo pendiente de implementacion, osea que por ahora es un bug conocido, la idea es corregirlo para que en la proxima version recupere el dato original automaticamente sin intervencion de ustedes. De todas maneras, esta bueno que vean como se deberia hacer, ya que en alguna situacion puede ser que lo necesiten.

Saludos

hola pude solucionar la cuestion de la siguiente manera…

  1. La configuracion quedo tal cual en el cuadro y en el elemento popup del formulario que hago la llamada quedo igual. lo unico que cambió fue que en el datos relacion padre, (dr_operacion) el cual tenia una tabla llamada “operacion” le puse otra llamada “proveedor”. (adjunto imagen)

  2. antes de guardar tomo los $datos y remplazo el $id que me trae el popup por el cod_prove que esta en la ba de datos llamando al metodo
    traer_proveedores que está en mi cn
    $nuevo_cod_pro = $this->cn()->traer_proveedores($datos[‘cod_prove’]);
    $datos[‘cod_prove’] = $nuevo_cod_pro[‘cod_prove’];

function traer_proveedores($id_memoria){
$id = $this->dep(‘dr_operaciones’)->tabla(‘proveedor’)->get_clave_valor($id_memoria);
return $id;
}

muchisimas gracias richard por la ayuda.-


Jorge,

el metodo que utilizaste no te va a recuperar siempre el proveedor correcto!, los ids que envia el cuadro al cliente son internos, no tienen relacion alguna con los que existen dentro de un datos_tabla. Incluso aunque hubieras marcado el cuadro del popup para utilizar directamente la clave interna del datos_tabla, nada te asegura que el registro sea el mismo.

Ya que te tomaste la molestia de buscar a mano el proveedor, te diria que el metodo del cn haga uso de la API y mediante recuperar_clave_fila obtenga correctamente el identificador original para esa fila.

Saludos

richard, no encuentro el metodo: “recuperar_clave_fila” en la wiki!!!
[b]
get_clave_valor [línea 338]

array get_clave_valor( mixed $id_fila )

Retorna el valor de la clave para un fila dada
Parámetros:
mixed $id_fila: Id. interno de la fila

Return: Valores de las claves para esta fila, en formato RecordSet[/b]

estaba muy confiado que este me devuelve el cod_prove que tengo en la tabla… yo paso como parametro el id_interno del cuadro. Está mal???

pude comprender lo que me dijiste richard, al filtrar en el popup , me trae otro proveedor que no es el que elegí.-

La wiki sufrio una mutilacion momentanea debido al reemplazo de un servidor, hasta que lo tengamos online nuevamente… podes consultar la ayuda local.
De todas formas aca te pego la definicion de la funcion a la que hacia referencia.

<?php
             /**
	 * Recupera de la sesion el mapeo original de las claves del cuadro
	 * @param integer $cuadro Id del componente
	 * @param integer $clave Id de la fila a recuperar
	 * @return mixed 
	 */
	static function recuperar_clave_fila($cuadro, $clave); 
?>

Cualquier cosa consultame.
Saludos

Hola Al final me decidi por usar el metodo desactivar_modo_clave_segura en el conf_cuadro.

  • Se desactiva manualmente el manejo actual de claves, de esa forma se revierte al comportamiento anterior. Mediante el metodo desactivar_modo_clave_segura del cuadro.

$this->dep(‘nombre_cuadro’)->desactivar_modo_clave_segura();

me lleva el cod_prove que necesito aunque filtre o no, lleva siempre el codigo correcto.-

Gracias por la ayuda.-

Hola Jorge,

por el momento me parece bien la opcion elegida, sin embargo a futuro cuando funcione correctamente la integracion con el ef_popup seria bueno reveer el caso.

Saludos