Crear fichas en memoria con formulario


([N4] acano) #1

Hola foro:

Tengo el siguiente problema:

Desde un formulario de alta, muestro otro en modal para que el usuario pueda marcar las altas que desea realizar, una vez marcadas, las envio a una cesta, la proceso y quisiera mostrar una a una cada ficha seleccionada para realizar el alta con su correspondiente formulario, hasta ahí bien, pero no consigo que el formulario de alta muestre los datos que elegio el usuario y que traspaso al manejador de objetos creado para el proceso, es decir el formulario se muestra vacio y necesito que se muestre con los datos ya elegidos para que el usuario les de el visto bueno o rectifique lo que quiera.

¿que puedo hacer para mostrar el formulario de alta con los datos ya seleccionados por el usuario?

Muchas gracias de antemano.

un saludo.

A.Cano.


([N1] Pepeto) #2

Si como dices en el titulo, estas creando las fichas con “Crear ficha en memoria”, lo único que debes hacer es, “Modificar los campos” antes de mostrar el formulario.

un saludo

José Luis


([N4] acano) #3

Hola Jose Luis:

Lo primero que hago es:

Crear manejador de objetos

Crear nueva ficha en memoria

Procesoar ficha en memoria: donde hago: Modificar campos:…

y ahora es donde me empieza el problema…

Disparar Objeto.

me muestra el formulario, pero vacio…

lo he intentado con alta directa, pero nada, sigue saliendo vacio…

¿que estoy haciendo mal?

muchas gracias por responder…

Un saludo.

A.Cano.


([N3] blavan) #4

Por lo que escribiste te falta Alta de ficha

 

Creas ficha, modificas campos Alta de ficha

 

 


([N1] Pepeto) #5
  1. Cuando “Creas ficha en memoria” ya puedes modificar los campos directamente, no tiene mucho sentido volver a “Procesar la ficha en memoria” inmediatamente despues.

  2. En cualquier caso, tras crear la ficha y modificar los campos, necesitas un “Añadir ficha al objeto” antes de dispararlo, que es por lo que no te aparecen los datos en el formulario.

un saludo

José Luis

 


([N4] acano) #6

Efectivamente, era el añadir ficha al objeto, lo que me faltaba.

Muchas gracias y un saludo.

A.Cano.


([N4] acano) #7

Hola de nuevo al foro:

Pensé que lo había solucionado con la última aportación de Pepeto, pero una vez hecha, sigue haciendo lo mismo, me muestra el formulario vacio, sin actualizar los datos que le he pasado, esta es la secuencia:

  • set variables locales, con los datos del registro de la tabla actual.

  • crear manejador de objeto (formulario)

  • crear nueva ficha en memoria (new)

  • procesar nueva ficha en memoria (new)

  • modificar campos con los valores de la V.L.

  • añadir ficha al objeto (formulario)

  • disparar objeto (formulario)

 

la v.l. están tienen los datos, los campos tambien los tienen…comprobado…, pero el formulario lo muestra vacio…

que estoy haciendo mal???

gracias y un saludo.

A.Cano.


([N1] aztecmexico) #8

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:

  1. En el formulario de alta de la tabla destino creo variables locales, una por cada campo que pueda ser alimentado por algún objeto.

  2. 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.


([N4] acano) #9

Muchas Gracias, Martin:

por tu extensa y detallada explicación, la cual creo haber ententido perfectamente, lo que pasa es que creo que debe de haber otro modo más sencillo de hacerlo, ya que yo una vez creado el manejador de objeto (formulario), y creado la ficha en memoria(ficha), actualizo los campos de la ficha con la V.L., y eso lo hace bien, solo que al mostrar el formulario -disparar objeto(formulario), éste sale vacio, pero todo el proceso previo está Ok, creo que voy a hacer un soporte a velneo para que me aclare cual es la mejor manera de hacerlo, una vez resuelto lo pongo en el foro, para compartirlo.

Muchas gracias de nuevo y un saludo.

A.Cano.


([N4] acano) #10

Como lo prometido es deuda, ahí va la respuesta de Velneo, que además funciona perfectamente:

 

Según se indica en la documentación sobre el comando “añadir ficha al objeto” (http://velneo.es/info_v7_712_es/velneo_vdevelop_v7/proyectos_objetos_y_editores/proceso/comandos/interfaz/objeto_grupo_de_comandos/anadir_ficha_al_objeto):
“Este comando lee el contenido que tiene la ficha en disco y sustituye lo que se tenga en memoria en el objeto al que se añada la ficha.
Por lo tanto, si queremos añadir una ficha creada en el mismo proceso, habría que guardarla en disco previamente antes de añadirla al objeto.”
Por lo tanto, lo que has de hacer es dar de alta la ficha antes de editarla para que el usuario pueda modificar su contenido.
Otra posibilidad, no usar comandos de objeto y usar el comando “pedir formulario” en el subproceso del comando “procesar nueva ficha en memoria”.
Un saludo y gracias a todos los que habéis contestado.
A.Cano.


([N1] Spicer) #11

Yeah!
Me sucedió lo mismo, y la forma más fácil de arreglarlo fue hacer lo que decía acano: la instrucción “pedir formulario”.

La ventaja de esto es que no requiere dar el alta de ficha, pues si el usuario cancela el proceso, debemos ocuparnos de eliminarla, lo cual además de implicar mayor trabajo por nuestra parte, signífica más actividad de base de datos y de disco.

En consecuencia, la alternativa es usar la instrucción “pedir formulario”