Registros duplicados

Hola a todos,

se me está repitiendo con cierta frecuencia la aparición de registros duplicados con la misma id.

El escenario es el siguiente:

Tengo una tabla que recoge partes de trabajo (PAR_TRA). Esa tabla tiene un campo del tipo maestro apuntando a una tabla que acumula los partes por dia (PAR_DIA) y es actualizada mediante las actualizaciones de Velneo.

En el proceso anterior a un alta de ficha de PAR_TRA, compruebo si existe la el registro de la tabla PAR_DIA, y si no existo lo creo.

Cargar lista ( PAR_DIA@MEFASAV7_DAT, ID, PAR_DIA, , ,  )
	If ( sysListSize = 0 )
		Crear nueva ficha en memoria ( PAR_DIA, PAR_DIA@MEFASAV7_DAT )

Esta técnica la utilizo en muchos otros sitios, sin que se me dé este problema.

No falla siempre, me ocurre 3 ó 4 veces al año ( sobre unos 50000 registros ).

Pero es un problema muy grave, ya que no se puede borrar el registro duplicado porque ambos registros tienen exactamente los mismos históricos asociados.

El campo ID tiene por contenido inicial la fórmula “”+rightJustified( #TRA, 4, “0” )+“/”+#FEC:formatValue(“yyyy/MM/dd”)

Para intentar impedir que eso pase, en el proceso previo al alta de la tabla PAR_DIA, vuelvo a comprobar que no exista, y si existe cancelo el alta.

¿Os ha pasado algo parecido?

¿Se os ocurre alguna forma de controlar que no se produzca o de porqué se produce esta incidencia?

Gracias y un saludo,

Alejandro Rojas
MEFASA

Hola Alejandro.

No tengo una explicación al problema que reportas, pero mi recomendación sería dejar que velneo asigne automáticamente el campo ID (con una tabla tipo maestra) y usar otro campo donde le asignes un código con la fórmula de contenido inicial que has creado. De esta forma, en caso que se diera el duplicado en el código, aun tendrás un ID único para cada registro, que te permitirá eliminar uno de los registros.
En todo caso, sospecho que el error se da en la fórmula de contenido inicial en el campo ID, o el momento en que se crea un nuevo registro.
Saludos.

1 me gusta

Ya valoré usar un campo Id automático, pero es un cambio que afecta a más tablas y prefería no hacerlo.
Yo no creo que el problema esté en la fórmula, yo creo que está en un fallo que ya había en la v6 y es que desde un proceso te permitía grabar registros con id igual.
Seguiré probando e iré publicando mis descubrimientos.

Un saludo

También pensé lo que comenta @aguevara. Entendemos que el contenido del campo ID por esa formula se puede repetir.
La pregunta es, el índice ID es de clave única o se puede repetir?
Tu en el proceso si no existe el registro lo creas, por lo tanto si existe no se crea. Se puede crear el registro desde otro sitio que no sea el proceso?
(Esto es de memoria, sin comprobar) Yo tengo un proceso que a veces intenta crear un registro duplicado por id de clave única y no me genera el duplicado. No da error, pero no genera dos registros con el mismo id.

Es el campo ID, con el indice ID, de clave única.

Compruebo en 2 sitios que la clave no exista. Antes de intentar crearlo en la tabla PAR_PLA y en el propio proceso previo al alta de la tabla PAR_DIA.

Velneo me dice que no existe en ambos casos y me crea un segundo registro con la misma clave.
Ese registro nuevo no se indexa por el indice ID, pero si por el resto de índices de la tabla.

Tambien en su momento me ha llegado a pasar exactamente lo mismo, dos registros con el mismo ID controlado “manualmente” en su momento levanté el caso con Velneo directamente, no hubo solución, también me ocurría muy poco frecuente, pero cuando ocurría, se hacía un caos con la integridad, como bien lo señalas… y ahora que lo mencionas ya tiene mucho tiempo que no me ocurre.
Lo que te puedo sugerir, no sé si eso sea lo que ha funcionado, el reindexar y el regenerar área de datos (sea lo que eso haga, que es otra duda que hasta el momento conservo) de manera frecuente, incluso y ahora aprovechar las nuevas funciones de compactar. No se pierde nada.