Buenos días gente, tengo algunas dudas sobre como hacer un formulario con una relación 1 a 1.
Les comento un poco, tengo una tabla personas y una tabla datos_censales , la cual tiene como pk y fk la pk de personas (relación 1:1).
Quiero hacer un ABM de dichas tablas usando dos pestañas , en una un formulario con campos de ambas tablas (personas y tabla datos_censales), y en otra pestaña un formulario con datos de datos_censales.
Perdón si mi pregunta es muy básica, recién comienzo con Toba y hay mil cosas que no se bien como hacer.
Gracias!
Lo mejor que puedes hacer es clonar del toba editor, el ejemplo de componentes ABM personas, y trabajar sobre el mismo.
De otro lado pienso que los datos de la persona se registran una sola vez y los datos censales N veces, por lo tanto son de 1 a N, en el primer formulario llenas los datos de la persona, y en otro tab un formulario con los N datos sensales, que pueden ser un ML,
El ejemplo que te digo, es clave para estos casos, pues basta con cambiar donde se requiera com el DR que estaría conformado por los datos de la persona y los datos censales y relacionarlos.
Espero te sirva
Gracias Jorozco por tu respuesta, ya pude resolver el tema de la relación 1 a 1, simplemente hice la relación entre persona y datos_censales y relacione ambas con sus pk, ya que la de datos_censales tiene como pk la fk de persona.
-----Lo que no logro hacer todavía, y quería saber si es posible, es dividir los campos de una misma tabla en dos pestañas (dos formularios) -----
Como se ve en la imagen que adjunte, tengo 2 pestañas y en la de “Datos Personales” tengo campos de la tabla persona y de datos_censales (marcados en amarillo), el problema es que al momento de guardar , me tira un error. ADJUNTO IMAGEN DE LOG
Naty, la lógica es la siguiente
Primero debe existir la persona, para poderles adicionar datos censales (amarillo),
por lo tanto si debes hacer lo que dices:
- en el primer tab, irían los datos de la persona (pk, identificacion, nombres, apellidos…)
- en el segundo tab, los datos censales (amarillo), aúnque si no son N datos censales que dices, sino una sola vez por persona deberían ir en la misma tabla persona (por normalización estos dependen directamente de la persona); a no ser que tenga diferentes datos de ubicación como los de casa, oficina, sucursales, etc. Aunque si los pasas a otro formulario diferente en otro tab, NO tendrás problemas si el DR lo tienes bien definido.
- contrario a lo que sucedería con los parientes que si pueden ser N filas x persona (tios - padres —)
- toba el SINCRONIZAR guarda en el mismo orden del DR, por lo tanto primero crea la persona y luego le adjunto el resto
Lo anterior son recomendaciones por experiencia, pero lo que muestra el LOG es que en la base de datos tienes definidos campos con la restricción NOT NULL, por lo tanto si estan en la interfaz se deben llenar (toba los valida y avisa) y sino estan en la interfaz le puedes colocar por default un valor en la misma definición de la BD.
Claro, el tema es que necesito hacerlos asi, es decir, que en un mismo formulario me aparezcan campos de 2 tablas.
Como vos me decis :
1. en el primer tab, irían los datos de la persona (pk, identificacion, nombres, apellidos...) 2. en el segundo tab, los datos censales (amarillo), aúnque si no son N datos censales que dices, sino una sola vez por persona deberían ir en la misma tabla persona (por normalización estos dependen directamente de la persona); a no ser que tenga diferentes datos de ubicación como los de casa, oficina, sucursales, etc. Aunque si los pasas a otro formulario diferente en otro tab, NO tendrás problemas si el DR lo tienes bien definido.
funciona perfecto, ya lo probé y anda bien, el tema es que necesito poner datos de la tabla datos_censales en el formulario de donde están los campos de la tabla persona.
-
Podrías colocar un formulario debajo de otro, con la opción Layout-Template, de los tabas de la PANTALLA,
-
cuando me ha tocado unir dos tablas en el mismo formulario, se pierde la sincronización de toba, por lo tanto, tocaría meter mano al código y hacer los INSERT-UPDATE, manulamente, al momento del evento GUARDAR
Creo que ya tengo una solución de como hacerlo, sin necesidad de hacer manual los INSERT y UPDATE.
Ahora necesito saber si se puede poner un alias en las columnas de una DT.
No puedes colocar el mismo nombre de la columna, para los alias puedes crearlos en el datos tabla, los adicionas y tildas la opción de EXT, que corresponde a campos externos que NO viajan al servidor ni son tenidas en cuenta para ser almacenadas en la BD, hay te las ingenias para hacerlas llegar, puede ser por el tab de CARGA EXTERNA
Hola Naty,
si tenes dos tablas con una relacion 1:1… lo que podrias hacer es lo siguiente:
-
Generas el DR/DT normalmente para la primera tabla… osea la de personas.
-
Luego editas el DT de personas en el editor y cambias el tipo de persistencia a “DB-Multitabla”, eso te va a habilitar un par de campos extra para que especifiques un schema y otra tabla que extendera a la que estas modificando, en este caso… seria la de datos_censales. De alli pasas a la pestaña de columnas y si no te actualizo la lista, le das al “leer Metadatos” que te deberia dejar el DT con las columnas de ambas tablas, permitiendote manejarlo como si fuera un solo registro. Abajo tenes un ML donde tenes que especificar que columna es la FK.
Te adjunto dos imagenes sobre como te deberia quedar. Yo lo hice con un ejemplo de toba_referencia por eso los nombres estan medio ‘raritos’ jejeje
Con respecto a dividirlo en dos formularios, podes hacerlo sin problemas. El metodo evt que escucha la modificacion de cada formulario, deberia setear los datos correspondientes, otra opcion es tenerlo en una variable de clase (tipo array) y hacer el merge, para luego al presionar Guardar impactarlo sobre la tabla y sincronizarlo… eso va en gusto tuyo.
Saludos
Gracias Richard, efectivamente lo había hecho así, pero quería terminar bien el ABM para estar segura que de esa forma funcionaba correctamente antes de escribir la solución en el foro, pero con tu respuesta me quedo tranquila que estaba yendo por la solución adecuada.
Muchas gracias!
Hola Richard, te hago una consulta, se puede agregar otra tabla, es decir, yo tengo 2 relaciones 1 a 1 (persona-Legajo y persona-datos_censales), hasta el momento tengo solo la relación de persona con los datos censales, pero ahora quiero agregar también la del legajo, esto es posible ?
Hola Naty,
la idea es tener una tabla extra que extiende de la original (de manera de no tener que tocarla) y por eso esta restringido a una tabla unicamente, de todas maneras eso no quiere decir que no la puedas poner en una relacion, sino que la vas a tener que manejar de otra manera.
Hasta ahora, lo que tenias era una unica tabla logica que se dividia en dos a nivel bd, si agregas legajo… deberias hacerlo como una tabla extra dentro de la relacion, que tiene como clave la misma clave que la tabla persona… pero ya son 2 tablas logicas dentro de una relacion, por tanto vas a empezar a trabajarla como una relacion 1 a N… .con N = 1.
Otra cuestion seria, si los datos_censales no son parte del legajo… en cuyo caso quizas tiene sentido que este todo junto en una misma tabla. Pero bueno, eso ya forma parte del diseño de bd que tienen ustedes.
Saludos
Otra cuestion seria, si los datos_censales no son parte del legajo.. en cuyo caso quizas tiene sentido que este todo junto en una misma tabla. Pero bueno, eso ya forma parte del diseño de bd que tienen ustedes.Ese es el tema, que la tabla legajo solo tiene relación con la tabla persona. Es decir, 1 persona tiene 1 dato_censal, y una persona tiene 1 legajo .