Precisamente anoche tuve que hacer algo similar, desde un histórico dar de alta un maestro, disparando el comando de “Alta de ficha de maestro”, que es lo normal que viene en las opciones de las acciones para el botón “Alta” en el campo enlazado me abre el formulario de alta del maestro, pero vacio.
Lo que yo quería era que como ya conozco algunos de los datos que irán en el maestro (forman parte de los que tengo editados en el formulario del histórico que lanza el alta) pasarselos al formulario de maestro y que cuando abriera el formulario, ya estuvieran alimentados dichos valores y solo completar los faltantes, y concretar el alta, no antes.
Explico el procedimiento que seguí para lograr esto:
-
En el formulario de alta de la tabla destino creo variables locales, una por cada campo que pueda ser alimentado por algún objeto.
-
Creo un evento en el formulario que disparará el alta que quede de la siguiente forma:
Set ( ID_EMP, $EMP_ID@Entidades.dat )
Set ( ID_FOR, #FOR_PAG )
Crear manejador de objeto ( Alta de cuenta, Formulario CTA_ALT@NEOFACTURA )
Set variable local de objeto ( Alta de cuenta, ID_EMP, ID_EMP )
Set variable local de objeto ( Alta de cuenta, ID_FOR, ID_FOR )
Disparar objeto ( Alta de cuenta, 1º plano: Local (síncrono), )
Si observar, en este evento tambien defino las mismas variables locales (les pongo el mismo nombre para evitar confusiones) que las que definí en el formulario de alta destino, y previo a crear el manejador de objeto las inicializo con los valores que deseo pasar al formulario.
Creo el manejador de objeto tipo formulario.
Asigno a las variables locales del objeto formulario (las que creaste en el formulario destino) los valores inicializados en las variables locales del “evento” disparador.
Disparo el objeto en primer plano para que me muestre el formulario.
Lo siguiente es MUY importante, en el formulario destino (donde se va a dar el alta), creas un evento que se ejecute con señal post-inicializado. En dicho evento lo que vas a hacer es :
Modificar campo (Emp, ID_EMP)
Modificar campo (For, ID_FOR)
Esto se hace para que los campos que le pasamos desde el manejador de objeto se inicialicen en el formulario de alta.
Con esto me abre el formulario de alta y ahí, hasta que yo no presione el botón aceptar es cuando se graba el registro, no antes.
Creo que lo que te falta a tu procedimiento anterior es precisamente lo último que mencioné, en el on-init asignar los valores que pasaste a cada campo del formulario, porque pues si, ya le pasaste los datos al objeto, pero no los asignas en ningún momento a cada subobjeto del formulario.
Una última cosa, como vas a meter un on-init para inicializar los campos que pasas por el manejador de objetos, te sugiero que copies y generes un form exclusivamente para ser utilizado en este proceso, porque si posteriormente intentas editar dichos registros desde una opción normal de editar te los va a mostrar vacios (me paso a mi), entonces usa dos formularios, uno para uso “normal” y otro para ser usado exclusivamente en este proceso, me refiero al formulario destino.
Espero te sirva y no haberte enbolado más.
Saludos.
Martin Ibarra.