GeneXus - control duplicidad

   
Vista:

control duplicidad

Publicado por benjamin (12 intervenciones) el 01/02/2011 00:33:04
Hola amigos del foro he estado buscando informacion sobre validaciones en el foro pero no he podido dar con la solucion para mi problema, les cuento necesito hacer un control de duplicidad para el atributo patente para que obviamente no se repitan las patentes en los registros, esto cambiaria solo cuando cambie la fecha de insercion de registros, me explico necesito lanzar un mensaje de patente duplicada solo cuando la fecha de ingreso es la misma para todos los registros si cambia la fecha se pordrian repetir las patentes.(Trate de establecer el atributo patente como unique pero no me servia ya que cuando cambia la fecha necesito ingresar las mismas patentes anteriores).
Estoy trabajando con genexus 9.0 y desarrollando en .net (gui win).
Desde ya muchas gracias soy nuevo en genexus asi que disculpen la ignorancia.
Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:control duplicidad

Publicado por Julio (301 intervenciones) el 01/02/2011 01:07:59
Deberías crear un índice unique que asocie la fecha y la patente, de esta forma podrá existir un solo registro con una misma fecha y una misma patente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por benjamin (12 intervenciones) el 01/02/2011 01:20:21
Ok: pero al momento q cambie la fecha necesito ingresar las mismas patentes, me podrias explicar un poco mas sobre los indices unique?.
Gracias por responder.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por Julio (301 intervenciones) el 01/02/2011 03:36:37
Bueno, cuando vas a crear un índice en una tabla debes poner un nombre a éste y si miras hacia el lado derecho del nombre hay una columna rotulada "Order" que de manera predeterminada está en "Duplicate", solo deberas hacer click sobre este y se mostrará un ComBox mostrándote las dos opciones Duplicate y Unique, cuando escoges Unique le estas diciendo a GX que en esta tabla no podrán haber dos registros cuyos atributos indicados tengan valores iguales, y de esta manera estarías controlando la no duplicación respecto a los atributos indicados.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por benjamin (12 intervenciones) el 01/02/2011 04:04:02
Ok, esa parte la entiendo pero lo que pasa es que necesito duplicarlos cuando cambie la fecha, si lo dejo como unique la patente despues cuando haga el ingreso otro dia no me va a dejar hacer la inserción ya que va existir dicha patente.
Muchas gracias Julio.
Tendre que ver la forma de hacer una regla yo creo que me permita controlar esto.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por benjamin (12 intervenciones) el 01/02/2011 04:07:06
Ok, esa parte la entiendo pero lo que pasa es que necesito duplicarlos cuando cambie la fecha, si lo dejo como unique la patente despues cuando haga el ingreso otro dia no me va a dejar hacer la inserción ya que va existir dicha patente.
Muchas gracias Julio.
Tendre que ver la forma de hacer una regla yo creo que me permita controlar esto.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por Pedro (58 intervenciones) el 01/02/2011 13:09:43
Y has probado con algun trigger ?? un before que revise la fecha actual y luego se vaya a revisar todas las patentes evitando duplicarla ?? todo esto antes de la insercion?

saludoss
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por Pedro (58 intervenciones) el 01/02/2011 13:12:10
pero la idea yo creo que seria revisar la duplicacion por fecha actual solamente puesto como tu dices se permiten duplicaciones pero en diferentes fechas...

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por benjamin (12 intervenciones) el 01/02/2011 17:55:28
Claro eso seria la solucion pero no estoy muy al tanto del uso de triger me podrias explicar, dar un ejemplo o enviar informacion, algun link para esa solucion por favor.
Saludos y gracias por responder
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por Pedro (58 intervenciones) el 01/02/2011 21:51:51
dale te puedo guiar, yo he trabajado en web y llevo poco tiempo metiendo mano en una aplicacion, pero en web se trabajan con transacciones, webpanel etc, en que estas trabajando tu ??? que no cacho win xD

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por Julio (301 intervenciones) el 02/02/2011 02:03:29
Hola Benjamín, como dices que recién estás conociendo como funciona GX creo que el inconveniente puede estar en la forma cómo estas creando un nuevo registro, creo que estás ingresando a la Trn accesando un registro ya existente y en base a este quieres crear uno nuevo pero en la misma Trn y sesión!, a mi parecer deberías trabajar en un Wkp como base de partida y desde este llamar la Trn en modo ins, Upd o Del y para tu caso en particular sería mejor si en este Wkp tuvieras un botón que se llame por ejemplo "Duplicar" que lo que haría es llamar otro Wkp en el que te pida la fecha con la que quieres duplicar el registro, la valide para ver si esta ficha y patente no existe y luego llamar a un Prc el cual haga el trabajo de crear el registro mediante un New - EndNew.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por benjamin (12 intervenciones) el 02/02/2011 03:56:54
Gracias por responder estimados, estoy trabajando en una aplicación win Cliente/servidor desarrollando con .net y gx 9.0. Y bueno para Julio el metodo de acceso, al ingresar un nuevo registro mediante una Trn que tiene un Id que lo genera solo y solo ingreso datos de patente la agrego cada vez y otros atributos , despues esos datos se muestran en un wkp de consultas donde filtro datos por diferentes atributos contenidos en la trn de insercion, tengo registros guardados en la base de datos por que pertenecen a datos de clientes que los ocupo mediante combo box en la trn de insercion lo unico que necesito es q cuando ingreso patentes duplicadas en la misma fecha que arroje un mensaje de patente duplicada, pero cuando ingrese otro dia en otra fecha no me digan que estan duplicadas solo en la misma fecha. Ojala se halla entendido.
Saludos Cordiales.Julio tiene algun correo donde hacerte algunas consultas para la posible solución.
Desde ya muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por Ricardo Figueroa Olarte (1 intervención) el 02/02/2011 21:24:27
Deja la transacción con llave la patente y la fecha. Usa un WorkPanel para que se digite la patente y la fecha, un botón de inserción , busca la llave en el evento que asocies a este botón, si no la encuentra llama a la transacción de modo 'INS' (insertar) y llenar la información adicional; si existe, usa un mensaje como 'Patente ya ingresada en esta fecha' y como para más información, después del msg puedes llamar la transacción en modo 'DSP' (display) .

Event 'Insertar' // del workPanel
if not null(&Patente) and not null(&FechaPatente)
for each
whete Patente = &patente
where FechaPatente = &FechaPatente
// Ya existe
msg('Patente ya ingresada en esta fecha')
call(TPatentes, &patente, &FechaPatente , 'DSP')
when none
// No existe
call(TPatentes, &patente, &FechaPatente , 'INS'
endfor
EndEvent

La Transacción TPatentes debe tener el Rules; parm(Patente, FechaPatente, &mode)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por benjamin (12 intervenciones) el 03/02/2011 04:01:47
Ricardo:
Intentare lo que dices mañana y te cuento como me fue muchas gracias por responder.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por benjamin (12 intervenciones) el 03/02/2011 16:39:19
Ricardo:
Lo que pasa es que no tengo una transaccion llamada patentes, tengo una llamada ficha en donde van distintos atributos como un Id(como llave),fecha,patente,cliente,buque,tipo de carga,etc, con esta transaccion hago todos los ingresos ,las patentes las ingreso por cada registro, otros atributos como clientes los tengo con dynamic combobox asociados a tabla clientes en esta transaccion Ficha.
Tengo un workpanel donde hago busquedas filtrando los diferentes atributos y un boton asociado al ingreso en donde llamo la transaccion ficha, intente hacer algo con lo que tu propones pero no me resulto.
La idea seria que cuando ingreso una patente duplicada en el mismo dia me tirara un error de patente duplicada,para otro dia no importa si ingreso la patente ingresada con fecha anterior.
Estoy tratando de buscar mas informacion haver si llego a la solucion muchas gracias.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por Luis (47 intervenciones) el 04/02/2011 16:32:39
Buenas! Podrias utilizar una regla que dispare un procedimiento.

Suponiendo que tengas la tabla
Id (*)
Patente
Fecha

Entonces haces un regla que sea algo asi

//&Error es variable Character (1)
&Error = Udp(PBuscaError,Patente,Fecha) If After(Fecha);
Error('Error: No puede ingresar dos patentes igual el mismo dia') If &Error = 'S' .And. After(Fecha)

//El att usado en la condicion After() deberia ser el ultimo en ser cargado. Si ya cargaste fecha y luego patente, utiliza patente.

y en el procedure BuscaError haces algo asi

&Error = 'N'
For Each Patente Fecha
Where Patente = &Patente
Where Fecha = &Fecha
&Error = 'S'
EndFor

Con eso deberia dispara un error en la Trn y no dejarte hacer el commit. Espero te sirva!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por Gabriel (75 intervenciones) el 08/02/2011 13:44:57
benjamin, me parece por lo que he leido que una solucion posible, como te comentaron anteriormente crear un indice " UNIQUE ", pero que tenga los 2 atributos de la table " FICHA "

En diseño, creas el INDICE, le pones el nombre y a la derecha el combo te habilita a poner " UNIQUE ", debajo pones los dos atributos " PATENTE" y " FECHA"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por benjamin (12 intervenciones) el 08/02/2011 22:44:54
Gracias por responder, Luis trate de hacer lo que escribiste pero no me resulta me sale este error en la transaccion Ficha:
spc0025 Too many parameters in udp/udf referencing PBUSCAERROR.
Y para Gabriel, claro seria una buena solucion pero si los dejo como unique solo sirviria para una fecha ya que en fechas posteriores igual tengo que ingresar las mismas patentes ocupadas en fechas anteriores.
Saludosss y aun no consigo arreglar este problema estoy buscando la forma de crear una regla q me permita dar con la solucion.
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por luis (47 intervenciones) el 09/02/2011 13:51:24
El problema es que no estas recibiendo los parametros en el procedure. Si vos haces un UDP, se hace de la siguiente forma:

Parm2 = Udp(PProcedimiento,Parm1)

En este caso, al llamarlo, le mandamos 1 solo parametro, pero el procedimiento necesita recibir los dos, el que mandamos primero, y el que va a devolver, en este caso Parm2. Por lo tanto, en la rules del procedimiento de declararia lo siguiente:

Parm(&var1,&var2);

siendo &var2 el valor que va a tomar Parm2 en la transaccion. Espero haber sido claro. Saludos! Luis.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por luis (47 intervenciones) el 09/02/2011 13:57:26
Una cosa mas, la solucion de los indices unique seria correcta tambien. Al declarar patente y fecha como unique, te va a hacer el control de que nunca se duplice la combinacion de registros fecha / patente. Es decir que vas a poder ingresar todas las patentes que quieras para una determinada fecha, pero no vas a poder ingresar dos patentes iguales en el mismo dia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por benjamin (12 intervenciones) el 09/02/2011 17:52:51
Gracias Luis voy a probar con los indices unique como dices y avizo.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por benjamin (12 intervenciones) el 09/02/2011 22:41:24
Funciona perfecto muchas gracias a todos por sus sugerencas.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:control duplicidad

Publicado por Anibal xianiformatica@gmail.com (4 intervenciones) el 26/08/2015 20:46:59
Hola Luis aplique tu ejemplo en uno de mis casos pero me sigue dando error. Quizas porque no lo aplique bien.
Te cuento tengo una aplicacion donde los clientes mes a mes van pagado las cuotas, cada una respectiva a cada mes.
Lo que necesito yo es que si pagaron enero, el mes siguiente que no pase por error del cobrador que le vuelva a poner enero, y que directamente sea febrero.
Pense que este ejmplo me podia resultar pero me tira error.
Mi estructura es asi. (va adjunta).
Siendo CuotasId un Dynamic combo box, basado en Cuotas que son los nombres de los mes.
Tabla Recibo Cuotas
ReciboCuotaId

fchReciboCuota

IdClientes

dirClientes

telClienteFijo
CobradoNoCobrado

FCobradoNoCobrado

Tabla Recibo Cuotas Detalle Cuotas
DetalleCuotas
CuotasId

Cuotas
Precio
Cuota
ValCuota


TotalRecibo

Cuota
Saldo
Recibo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

control duplicidad

Publicado por alejandra (1 intervención) el 08/03/2013 17:37:10
hola me podrias ayudar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar