Que es lo que me dejo?


([N4] Ramon Denuc) #1

Hola,

Mi intención es que desde una ventana(A) con su tabla(A), pulsando un botón se abre una rejilla con los valores de la Tabla(B), esta rejilla incluye dos botones de Aceptar y Cancelar.

Cuando el usuario selecciona de la rejilla el registro que necesita copio los valores del registro de la Tabla(B) que el usuario a seleccionado con el comando SET, a continuación, creo una nueva ficha en memoria, modifico los campos y para finalizar realizo un Alta de Ficha y añadir ficha a la salida.

Con todo esto lo que pasa cuando el usuario pulsa el botón Aceptar es lo siguiente:

(Correcto)
Los valores se cargan correctamente con el comando SET.
La nueva ficha en memoria se crea bien.
Los campos se actualizan.
La Alta de Ficha se realiza.

(Incorrecto)
Pero no se cierra la ventana de la rejilla.
Y cuando cierro manualmente la rejilla los valores no se muestran automáticamente.
Cuando vuelvo abrir la ventana(A) resulta que el nuevo registro en la Tabla(A) sí existe y están los valores pasados.

¿Que es lo que NO hago bien para que se cierre la ventana de la rejilla y a continuación se muestre el nuevo registro en la ventana(A) con los nuevos valores.?

Muchas gracias.
Ramon



([N1] alamillos) #2

Buenos dias
Creo que tienes que recalcular el control rejilla, con el comando Interfaz recalcular control.
saludos
Juan Diaz


([N4] Ramon Denuc) #3

Esto no rula, llevo no se cuantas horas para hacer algo que seguro es muy sencillo, pero no lo pillo, si alguna alma caritativa puede echarme una mano…

O mostrarme donde puedo encontrar algún ejemplo…

Cuando le pongo el comando Interfaz recalcular control, solo me sale para poder escoger “STATUS_BAR”

Muchas gracias.
Ramon


([N1] alamillos) #4

Buenas tardes Ramon, no entiendo lo que quieres hacer, desde donde ejecutas el alta de la ficha, desde un formaulario sin origen? lo realizas desde un proceso o desde un maejador de evento?

existe un monton de comandos por ejemplo cerrar ventana, deberias explicar mejor que es lo que quieres conseguir.
un saludo
Juan Díaz.


([N4] Ramon Denuc) #5

Intentare explicarme mejor.

Tengo una ventana con una tabla llamada VEHÍCULOS, y otra ventana con una tabla llamada ENTRADA_VO

Desde la ventana de VEHÍCULOS pulsando un botón se abre una rejilla donde están los registros de ENTRADA_VO.

La idea es que pulsando sobre un registro de la rejilla de ENTRADAS_VO se pasen todos los valores de sus campos a la VENTANA y TABLA de VEHÍCULOS de esta forma el usuario se libra de introducir como el 50% de datos.

Yo lo hago a través de una rejilla pero si tenéis otra idea me adapto.

Dejo imagen del proceso que se activa al seleccionar el registro desde la rejilla de ENTRADAS_VO, ya que he puesto un botón para que el usuario acepte el registro que selecciona.

El problema que me encuentro cuando se pulsa el botón “Aceptar Selección” es que la rejilla no se cierra y los datos que se han seleccionado no aparecen en la ventana de VEHÍCULOS.

Pero si yo cierro manualmente la rejilla y la ventana de VEHÍCULOS y la vuelvo abrir si que sale el nuevo registro en VEHÍCULOS con los campos rellenados de los datos de la TABLA de ENTRADA_VO

Espero haberme explicado mejor.




([N1] sergi.esteve) #6

Hola Ramón.

¿Que hace el botón Aceptar Selección?

“El problema que me encuentro cuando se pulsa el botón “Aceptar Selección” es que la rejilla no se cierra y los datos que se han seleccionado no aparecen en la ventana de VEHÍCULOS.”

Si el botón lo que hace es Ejecutar Proceso, es normal que ni se cierre la rejilla ni se abra el formulario, ya que en ningún sitio estás diciendo que lo haga.


([N4] Ramon Denuc) #7

Lo que hace el botón “Aceptar Selección” es ejecutar el proceso que adjunto como imagen.

Es que no encuentro el comando para poder hacer estas acciones.

¿?


([N1] wikan) #8

Buenas,
por lo que veo, cuando dices ventana hablas de “localizador”

Lo que necesitas es crear VEHICULOS y para agilizar tienes una tabla ENTRADAS_VO con datos predefinidos.

Corrígeme

Una forma de hacerlo si es así

Un formulario para altas de VEHÍCULOS
Un botón “Cargar predefinidos”: Evento abres localizador, te quedas con el registro de la tabla ENTRADAS_VO, lees y asignas al nuevo registro de la tabla de VEHICULOS.

Saludos


([N1] alamillos) #9

Ramon buenos dias
si lo que dice Wikan , quieres decir loclaizador, cuando dices ventana, entonces la opcion de Wikan es la correcta.
un sludo.


([N1] sergi.esteve) #10

Yo pienso que quiere copiar valores de un registro de origen y crear una nueva ficha con estos valores.

Pero como decís, el tema de que sea la rejilla de un localizador me descoloca.

A ver.

Sin tener en cuenta de que es un localizador, si lo que quieres es que de una rejilla seleccionar un registro, copiar con tu proceso a una nueva ficha, y abrirla en su formulario lo puedes hacer así:

1 - La acción “Aceptar selección” que tienes en la toolbar de la rejilla, tiene que hacer “Disparar señal”

2 - En la rejilla pones una conexión de evento de tipo “Acción disparada” con dicha acción, que ejecuta un manejador de evento.

3 - El manejador de evento será algo como el que te muestro en la captura.



([N4] Ramon Denuc) #11

Efectivamente, lo que quiero es copiar un registro de una tabla de Origen, llamada por ejemplo (A) y copiar los datos de un registro seleccionado por el usuario a la tabla llamada (B)

Para ello me da igual si se hace por una rejilla, o por un formulario que contenga una rejilla o una lista, lo que quiero es que el usuario seleccione de la lista que tenga un registro y que este pase de la tabla (A) a la tabla (B) cuando pulse un botón para confirmar la selección.

Muchas gracias por vuestros comentarios
Ramon


([N3] pacosatu) #12

Hola Ramón.

Espero que ya hayas solucionado el problema.
Yo también estoy en proceso de aprendizaje de Velneo y precisamente estaba preparando un ejercicio sobre el tema de cómo pasar una ficha de un formulario a otro.

Existen muchas formas de hacerlo, algunas comentadas en este hilo.

Para tu caso, inicializar campos de una Ficha (A) a partir de otra Ficha (M) seleccionada de una tabla Auxiliar, he usado una característica nativa de Velneo que evita usar código.

Haz lo siguiente:

  • Declara la Tabla M como Maestra de la Tabla A
  • Define los Contenidos Iniciales de los campos de la Tabla A como los valores de los campos de la Tabla M
  • De esta forma a través del Puntero al Maestro M tendrás inicialización automática de los campos de la tabla A que te interesen
  • Solo tienes que definir un Localizador de la tabla M que actualiza el campo Puntero a Maestro y como consecuencia los valores iniciales de la Tabla A cambian automáticamente.
  • Este Puntero a Maestro solo se usa por programa en el alta de la Ficha A y no se muestra al Usuario.

Si no lo ves claro, te envío un ejemplo

Saludos
Paco Satué


([N4] Ramon Denuc) #13

Lo que pasa es que cuando se pasa un registro de la Tabla (B) a la Tabla(A) el registro de la Tabla(B) se tiene que eliminar cuando el proceso de traspaso a terminado.

De todos modos como bien se dice… “Vale más una imagen que mil palabras” si puedes pasarme un ejemplo para poderlo estudiar mejor.

Sobre el tema que nos lleva este hilo, ayer conseguí con vuestra ayuda poder seleccionar desde una rejilla un registro, cargar sus valores y pasarlos a una ventana, pero resulta que en vez de dejar el nuevo registro en la ventana que ya esta abierta me abre otra ventana con el nuevo registro.

¿Es posible que el nuevo registro me lo ponga en la ventana que ya esta abierta?

Me sabe mal dar tantos problemas, gracias chicos.


([N3] pacosatu) #14

Hola Ramón.

He preparado una pequeña práctica y un documento relacionado con el tema de este hilo. Es muy básico, ya que yo también estoy aprendiendo Velneo.
Espero te oriente en algo y a los que están empezando les aclare algunos conceptos.

Descarga de los documentos en:
https://www.dropbox.com/sh/n764w237saxj3aa/i_GfnrTVCD

Saludos
Paco Satué


([N4] Ramon Denuc) #15

Hola Paco,

Con mucha atención voy a revisar tu practica y leerme todo el documento.

Ya te diré.

Ramon


([N4] Ramon Denuc) #16

Hola Paco,

Muchísimas gracias con tu practica ha funcionado correctamente.

Hay cosas en Velneo que yo creo que se complican algo más que con el otro lenguaje de programación que utilizaba que era mucho más fácil, por ejemplo el copiar registros de una tabla a otra, tan fácil como hacer lo siguiente:

COPY RECORD TO tabla WITH CAMPO1, CAMPO2, CAMPO3 FOR ID = 1

Y se copiaba el registro activo de la tabla A a la tabla B tan simple como eso.

Como son nuevos conceptos la forma de utilizar Velneo me queda otra duda.

Como se enlaza o se relaciona los datos de un campo que esta enlazado a una tabla maestra, por ejemplo:

Tengo un campo llamado DESTINO que esta enlazado a su tabla maestra de Destinos y al copiar el registro de la forma que tu me has enseñado solo consigo pasar de una tabla a otra todos aquellos CAMPOS que NO están enlazados a ninguna tabla maestra.

El campo Destino esta configurado así: #DESTINO.NAME

Este tema me cuesta entender la forma que actúa Velneo.



([N2] AyudaVelneo) #17

Hola RamonD:

Tendrás que copiar simplemente #DESTINO de esta forma copiarás el ID del registro.

Un saludo


([N4] Ramon Denuc) #18

Disculpa y no quiero ser impertinente, pero decir “simplemente” en una contestación cuando uno esta en fase de aprendizaje y después de venir de un lenguaje de programación que no tiene nada que ver con la plataforma de Velneo puede ser una palabra MUY GRANDE.

Hacer una contestación sin adjuntar un breve ejemplo donde se pueda ver claramente que simple es hacer #DESTINO puede ser costoso de aprender.

Me explico, si pongo


leer ficha seleccionada(1)
SET(DESTINO, DESTINO)
Get variable local de objeto(ventana, DESTINO, DESTINO)
Modificar campo(DESTINO, #DESTINO)

Se da que no funciona, pues el campo #DESTINO.NAME esta enlazado a una tabla maestra y no muestra el valor del campo.

Sinceramente espero no haberte molestado.
Ramon


([N3] pacosatu) #19

Hola Ramón.

Olvídate completamente de tu anterior lenguaje de programación (que debe ser Visualfoxpro) e intenta entender muy bien la arquitectura de Velneo.

En Velneo todo son objetos (algunos con interfaz) totalmente aislados entre sí. Cada objeto solo ve sus variables locales y el marco autoexec. Algunos objetos tienen un origen por donde le entra una Ficha (registro grabado en disco) o una Lista (conjunto de registros en disco). Algunos objetos también pueden devolver una Ficha o Lista (siempre que exista físicamente en disco).

Así que en Velneo NO podemos trabajar con cursores en memoria, simplemente no existe en la arquitectura de Velneo (¿La Cesta puede ser?). No hay un modelo de objetos en Velneo, solo es accesible a través de la API y con otros lenguajes externos como JS y QML.

Pero en Velneo existe “LA GRAN HERRAMIENTA” que es el Objeto Proceso (increíblemente no se habla de él en los cursos de iniciación). Una vez que aprendes a usarlo como un objeto, es decir:

  • lo instancias,
  • le preparas la Ficha o Lista de Entrada,
  • lo configuras mediante Variables Locales,
  • lo disparas (¡¡ incluso en 3º plano !!)
  • y recoges los resultados en la Variables Locales y en la Ficha o Lista de Salida

… descubrirás la gran potencia de Velneo.

A partir de ahora, plantea todo en base a Procesos (pequeñas piezas de código como cajas negras) y verás pronto la luz.

Volviendo a tu problema, quizás es que no has comprendido el concepto de Puntero en Velneo. En este caso cuando en una tabla tenemos un Puntero a Maestro, en tu caso #DESTINO, estamos estableciendo una relación permanente (como hacíamos en foxpro con SET RELATION) con la tabla DESTINOS. Es decir, #DESTINO es una clave externa. Como en Velneo esta relación es permanente, siempre podremos referirnos a cualquier campo de la tabla Maestra con la nomenclatura #DESTINO.<campo_del_maestro>.
Realmente en el campo puntero #DESTINO sólo se guarda el #ID del maestro como en cualquier base de datos relacional.

En resumen, si quieres copiar campos del maestro de una Ficha cualquiera, tendrás que referirte a ellos como #MAESTRO.<campo_del_maestro>, siendo #MAESTRO el identificador del puntero a Maestro. Referirte en código a #MAESTRO es coger únicamente el campo #ID del maestro, NO TODA LA FICHA DEL MAESTRO.

Mientras estaba terminando este rollo, he visto tu contestación a José Vila, quizás motivada por tu frustración con el nuevo entorno. Te puedo asegurar que José Vila ha sido una de las principales personas que me ha ayudado a ver la luz. Pásate por su página …

Los que venimos de Foxpro sufrimos un shock con Velneo, pero se pasa. Olvídate del potente y versátil lenguaje XBASE y entra en la arquitectura de los Procesos en entornos cliente-servidor.

Mi consejo final es que no te dejes deslumbrar por los objetos Visuales de Velneo, muy impactantes al principio, y te centres en comprender muy a fondo la arquitectura de Velneo. No, no busques documentación de calidad al respecto, no existe. Tendrás que rebuscar en los blog’s y en el foro.

Saludos de otro aprendiz de Velneo
Paco Satué


([N4] Ramon Denuc) #20

Gracias de nuevo Paco, por tu gran golpe de sabiduría, supongo que después de estar tantos años en mi entorno anterior y llegar a casi a la perfección, me refiero a que lo dominaba de tal forma que ahora con la plataforma de Velneo se me hace una cuesta muy grande hacerme con los conceptos y la arquitectura.

Ya se que trabajando y estando en ello conseguiré pasar el muro inicial que tiene Velneo que es de dejar atrás los viejos conceptos de programación al nuevo sistema por Objetos tal y como me indicas en tu mensaje.

Ante todo en ningún momento he querido ofender a Jose Vila, sino que como he dicho antes me esta costando conseguir pasar el muro inicial y quizás no he contestado correctamente su mensaje.

¿Por cierto donde puedo encontrar información de esa “LA GRAN HERRAMIENTA” que es el Objeto Proceso.?

Muchas gracias
Ramon