[SOLUCIONADO] Guardar genera un Insert en lugar de Update

Hola Juan,

No hay problema, la idea es ver la logica del codigo… no son necesarias las SQLs, ademas la interaccion del problema se hace via objetos de persistencia.

Le comento, estoy usando el mismo archivo php "ci_navegacion" tanto para el Ci ABM Expedientes como para el Ci bandejas, ahora que me dice es posible que esto este causando algunos problemas, no estoy seguro si el problema del update también pero. El Ci editor tiene su propio php "ci_edicion".
Te cuento lo que vi y vos despues me diras si hay algun motivo particular por el que este asi.

Veo que en lugar de invocar los objetos via el metodo $this->dep($rol) o $this->dependencia($rol) se esta haciendo una llamada a toba::componente_por_id($id), esto puede ser causa del problema que estas viendo.

El metodo que estan usando genera una nueva instancia para el componente cada vez que se invoca, esto implica que el estado interno de esa instancia no es el mismo… lo mismo para el resto de los objetos, sea DR, DT, CI, etc.

El CI guarda internamente (ademas de realizar alguna inicializacion) la instancia de sus dependencias la primera vez que se invocan, con lo cual cada llamada via el metodo dep() accede al mismo objeto cacheado, esto hace que los estados internos se mantengan.

En el caso del DR/DT, eso implica que internamente tiene cargado lo que vos le solicitaste via la seleccion del cuadro… si en lugar de usar el metodo set() (que sirve tanto para insertar como modificar) hubieras ido por el metodo modificar_fila(), te hubiera informado un error al intentar modificar una fila inexistente. Se dio una combinacion de varios factores, lo que derivo en que se realizaran inserciones cuando querias modificar.

Otro beneficio de usar el metodo dep() en lugar de accederlo por ID, es que podes reutilizar el codigo… mientras las dependencias tengan el mismo rol en la operacion (por rol me refiero al ID que le asignas cuando se agregan al CI), podes utilizar distintos objetos. La invocacion por ID directa te restringe mucho en ese sentido, ya que unicamente podes usar un Ci interno especifico con ese Ci navegacion.

Un ultimo detalle, los formularios y filtros tambien reciben los datos via el metodo set_datos() el retorno de los mismos se sigue aceptando por compatibilidad hacia atras… pero no es una buena practica porque genera un acoplamiento innecesario cuando se realizan extensiones.

Creo que reemplazando las llamadas a componente_por_id(id) x $this->dep(rol) en ambos Cis, el problema con la modificacion se deberia solucionar.

Si existe algun motivo por el que este asi el codigo o cualquier inquietud que tengas, decime y vemos como lo vamos solucionando.

La carga del DT la estoy haciendo al seleccionar una de las filas de alguno de los listados en el archivo ci_navegacion linea 72.
La logica de la carga esta bien, solo miraria lo que te comente arriba.

Saludos