11 Oct Traspasar registros entre dos tablas visualmente
Con este artículo de hoy estreno una nueva sección denominada «Peticiones del oyente«. En este sección intentaré resolver las dudas que me llegan a través del e-mail, del formulario de contacto de este blog o que vea en el foro de Velneo V7.
En este primer artículo de la sección voy a explicar como poder traspasar registros entre dos tablas de velneo V7 dentro del proyecto de aplicación. Espero que a RamonD le sirva para su desarrollo….
3..2..1… comenzamos!!
¿Qué queremos conseguir?
En el ejemplo que desarrollaré a continuación, dadas dos listas de registros de tablas distintas quiero conseguir los siguientes objetivos:
- Cargar los registros de las dos listas
- Traspasar un registro de una tabla a otra
- Eliminar de la tabla origen el registro traspasado
- Editar mediante un formulario el registro generado en la tabla destino
- Actualizar ambas listas.
1.- Cargar los registros de las dos listas
Para este ejemplo voy a realizar el típico proceso de pasar un pedido a albarán… pero los conceptos se aplican de la misma forma en cualquier escenario.
1.1- Objetos necesarios para las listas
- Obviamente las rejillas de ambas tablas. Las vamos a llamar PEDIDOS y ALBARANES
- Un proceso VACIO sin tabla asociada con la propiedad «Tabla Destino» la tabla de PEDIDOS y con la propiedad «Destino«: LISTA. A este proceso le vamos a llamar CARGAR_PEDIDOS
- Un proceso VACIO sin tabla asociada con la propiedad «Tabla Destino» la tabla de ALBARANES y con la propiedad «Destino«: LISTA. A este proceso le vamos a llamar CARGAR_ALBARANES
- Un formulario sin origen es decir con la propiedad «Tabla Asociada vacia. En este formulario insertaremos los dos objetos vista de datos para mostrar los registros de ambas tablas. A este formulario le voy a llamar PEDIDOS
- Un objeto «Vista de datos» para mostrar la LISTA de PEDIDOS. Como soy un tío original le voy a llamar MOSTRAR_PEDIDOS. Esta vista de datos tendrá como propiedad «Objeto 1» el proceso CARGAR_PEDIDOS y como propiedad «Objeto 2» la rejilla PEDIDOS
- Un objeto «Vista de datos» para mostrar la LISTA de ALBARANES. Siguiendo con la originalidad le voy a llamar MOSTRAR_ALBARANES. Esta vista de datos tendrá como propiedad «Objeto 1» el proceso CARGAR_ALBARANES y como propiedad «Objeto 2» la rejilla ALBARANES
- Una acción cuya propiedad «Comando» = DISPARAR OBJETOS y cuya propiedad «Objeto» sea el formulario PEDIDOS para lanzar nuestro ejemplo desde un menú de opciones
- Un objeto «Búsqueda» al que vamos a llamar «BUSCAR_PEDIDOS» con un índice por ID
Hasta aquí sólo hemos creado los objetos necesarios para poder operar con las listas… Vamos con el siguiente paso.
1.2- Cargando los registros en las vistas de datos
La teoría está muy bien… Si hemos seguido los pasos indicados hasta ahora, tendremos algo parecido a esto:
Vamos un formulario con dos listas vacías. Recuerda que los procesos que utilizamos en las vistas de datos para cargar los registros… estaban vacíos.
¿Cómo cargamos los registros?… mediante el subojeto «MANEJADOR DE EVENTO» del formulario. Vamos a ver los objetos necesarios que tenemos que crear en el formulario
- Una Variable local del mismo tipo que el ID de la tabla de pedidos. A esta variable la vamos a llamar REG_SELEC. Esta variable servirá para guardar el ID del pedido en el que estamos posicionados.
- Un «Manejador de evento» al que vamos a llamar «CAMBIAR_REGISTRO«. En este evento le asignaremos a la variable local REG_SELEC el id del registro sobre el que estamos posicionados
- Una «Conexión de evento» al que vamos a llamar «CAMBIAR_REGISTRO» para lanzar el evento de cambio de registro
- Un «Manejador de evento» al que vamos a llamar «REFRESCAR«. Con este evento lograremos, como su nombre indica, «Refrescar» las vistas de datos del formulario.
– Como podéis ver en el evento, se crea una cesta local de la tabla de «PEDIDOS» que será donde guardaremos los registros encontrados en la búsqueda «BUSCAR_PEDIDOS»
– crearemos un «Manejador de objeto» para lanzar el proceso (en tercer plano) que lance la búsqueda «BUSCAR_PEDIDOS» mediante otro «Manejador de objeto» (** Recuerda que si lanzamos directamente desde el evento la búsqueda en tercer plano… no funcionará. Siempre se lanza en primer plano).
– Dispararemos el objeto creado y añadiremos los registros encontrados a la cesta.
– Con la instrucción «Interfaz: procesar», procesaremos la lista «Mostrar pedidos»
– Cortaremos la lista (para no dejar ningún registro)
– Con la instrucción «Cesta: Agregar a la lista en curso», añadiremos los registros devueltos por el manejador de objeto a la lista de pedidos.
– El resto de instrucciones sirven para comprobar si tenemos registros en la lista (puede que la búsqueda no devuelva ningún registro). En caso de tener registros, seleccionamos ficha por posición, leemos el registro y nos quedamos con el ID del primer registro.
- Un «Manejador de evento» al que vamos a llamar «ON_INIT«. Este manejador tendrá la instrucción «Interfaz: Ejecutar manejador de evento»… en el que lanzaremos el manejador «REFRESCAR«
- Una «Conexión de evento» a la que vamos a llamar «ON_INIT«. Esta conexión la dispararemos con la señal «POST-INICIALIZADO«. Como manejador de evento de este disparador pondremos el llamado «ON_INIT«
Ya tenemos todo lo necesario para comenzar a traspasar datos de una tabla a otra…. ¿o no?. Si te has fijado en el «Manejador de evento «REFRESCAR» hemos cargado los registros de la tabla PEDIDOS pero ¿y los registros de la tabla ALBARANES? ¿Te atreves a cargarlos tu? así vamos practicando.
2.- Traspasar registros mediante Drag & Drop
La idea es que arrastrando un elemento desde la rejilla de pedidos y soltándolo en la de albaranes, nos lo quite de la primera y nos lo añada en la segunda.
Ya que estamos en el formulario sin origen, vamos a crear primero los objetos necesarios para el DROP.
2.1 – Creando el Drop
Para crear el «drop» en la lista de albaranes necesitamos crear dos subobjetos en el formulario:
- Un «Manejador de objeto» al que vamos a llamar «RECALCULAR_ALBARANES«. Este manejador tendrá la instrucción «Interfaz: Recalcular» y pondremos el control a recalcular… en este caso la lista de ALBARANES y la instrucción «Interfaz: Recalcular» y pondremos el control a recalcular… en este caso la lista de PEDIDOS
- Una «Conexión de evento» sobre el control que carga la lista de albaranes. Como señal pondremos «Drop finalizado» y como manejador de evento el evento «RECALCULAR_ALBARANES» que acabamos de crear.
Además de los objetos en el formulario, debemos indicarle a la rejilla de «Albaranes» que puede ejecutar un drop. Vamos a ver los objetos necesarios para esta acción:
- Un proceso con origen LISTA de la tabla de PEDIDOS y con destino una FICHA (ya que queremos mostrar la ficha generada) de la tabla de ALBARANES. En este proceso leeremos los registros seleccionados en el DRAG (es decir los que arrastraremos desde la lista de pedidos) ya que puede ser uno o varios (dependiendo de si en la lista de pedidos tenemos activa la opción de multiselección). Recorreremos la lista cargando en variables locales al proceso los campos que nos interesen y daremos de alta un registro en la tabla de albaranes (por cada uno de los pedidos leídos) modificando los campos necesarios con las variables leídas anteriormente. En el proceso eliminaremos el PEDIDO traspasado y editaremos el ALBARÁN generado. Una imagen vale mas que mil palabras
– Como veis en el ejemplo, primero creo la cabecera del albarán y posteriormente cargo los plurales de las líneas de pedidos y creo también las líneas de los albaranes creados.
- En la rejilla «ALBARANES» vamos a crear un subobjeto «Drop» en el que como propiedad «Tabla origen» le pondremos la tabla de PEDIDOS y como propiedad «Proceso» le indicaremos el proceso creado en el paso anterior.
2.2 – Creando el Drag
Para crear el drag (es decir permitir «arrastrar» registros desde una rejilla) simplemente tendremos que marcar en la propiedad «Estilos» de la rejilla «PEDIDOS» el check «Arrastrable para mover»
Con esto, ya tenemos listo nuestro drag & drop… simplemente tendremos que añadir la acción que lanza el formulario en un menú y probar.
¿Te ha resultado útil? Si quieres desarrolle un post con un ejemplo, indícame en el formulario de contacto tu problema y lo resolveremos «en directo»
Rodolfo Carrión
Posted at 21:28h, 02 agostoHola Francisco
vieras que a mi me ha llamado la atención los maestros con clave arbolada, ese tipo de tablas
me parecen de mucha utilidad, pero no he conseguido mucha información al respecto, por ejemplo, yo quisiera crear un plan de contabilidad, solo numérico y con formato
por ejemplo con formato 0-00-000-00-00 o con formato 0-000-00-000-000 , lo guiones son muy importantes, y yo quisiera tener la posibilidad que acumule obviamente los niveles mayores por ejemplo, 1 Activo, 1-01 Activo Circulante 1-02 Activo corriente, y que el activo me acumule las otras dos.
También algo que generaría mucho valor, es que con un simple «arrastrar» yo pueda cambiar los niveles y que los movimiento de la misma cuenta que muevo se traspase automáticamente
Muchas gracias de antemano