Hola.
Mientras arreglan el bug (que hubiera justificado, junto con otros bugs, una release 7.16.01) podemos usar la función setRegister() de la clase VDataCatcherEdit del API.
Os pongo un ejemplo que uso para los formularios maestro-detalle en los que quiero seleccionar el maestro de forma dinámica.
- El formulario maestro-detalle tiene como origen la tabla TAB_MAESTROS.
- El control DataCatcherEdit CBO_MAESTROS tiene como contenido la variable local NID_MAESTRO y como Lista apuntada la tabla TAB_MAESTROS o cualquier otra mediante la cual podamos obtener el valor del maestro, esta es la gran ventaja de usar el DataCatcherEdit.
- Creamos una conexión de evento EVT_CAMBIO_MAESTRO que se dispara con CBO_MAESTROS.(Value Changed) y ejecuta el manejador CAMBIO_MAESTRO.
- En el evento Post-inicializado del formulario fijamos el valor inicial de NID_MAESTRO (que será el valor #ID de la ficha u otro que obtengamos de la tabla TAB_MAESTROS en el caso de que #ID sea 0) y llamamos al manejador CAMBIO_MAESTRO.
El manejador CAMBIO_MAESTRO contiene lo siguiente:
Rem (Cambiar el registro Maestro del formulario mediante el API)
Interfaz: Ejecutar manejador de evento(CAMBIO_MAESTRO_JS)
Rem (Mostrar en la Rejilla los plurales del Mestro seleccionado)
…
El código JS del manejador CAMBIO_MAESTRO_JS será el siguiente:
var oForm = theRoot.dataView()
// Construimos un objeto Lista de Maestros
var oListaMaestros = new VRegisterList(theRoot)
oListaMaestros.setTable("Alias/TAB_MAESTROS")
// Obtenemos el ID del Maestro
var nIDMaestro = theRoot.varToInt("NID_MAESTRO")
if (nIDMaestro > 0 && oListaMaestros.load("ID",[nIDMaestro])) {
// Obtenemos la Ficha del Maestro seleccionado
var oMaestro = oListaMaestros.readAt(0)
// Cambiamos el Registro asociado al Formulario
oForm.setRegister(oMaestro)
// Cambiamos el valor mostrado en el DataCatcherEdit
var oCboMaestros = oForm.control("CBO_MAESTROS")
oCboMaestros.setRegister(oMaestro)
}
Como vemos, la línea oCboMaestros.setRegister(oMaestro) fijará el maestro que queremos mostrar en el DataCatcherEdit.
El formulario cambia dinámicamente de maestro mediante la línea oForm.setRegister(oMaestro).
Saludos
Paco Satué