General

¡Bienvenido a los foros Aeodoo!

Somos la comunidad de Odoo internacional hispanohablante.
Estos foros son para compartir y debatir dudas técnicas, funcionales y mejores prácticas para Odoo. Recuerda que no están permitidos los insultos, descalificaciones o spam, cualquier conducta reprobable supondrá el baneo del usuario.

1

Problema con el campo BARCODE (EAN13) al intentar crear productos desde la api en odoo 14

Avatar
David

Buenos días a todos,


me gustaría saber si alguien ha enfrentado el siguiente problema o si sabe de algún tipo de solución sin tener que tocar el código de odoo 14.

Estoy realizando una migración de datos desde odoo 8 a odoo 14, en odoo 8 los barcode/EAN14 (códigos de barras) pueden duplicarse, es decir, que no son únicos, en cambio en odoo 14 no es posible esto, ya que estoy intentando crear los productos desde la API y me arroja el error de que el BARCODE debe ser único y que ya existe, es por esto, que no puedo crear productos con el mismo BARCODE, esto se debe a que pueden ser productos en diferentes colores y el vendedor utiliza el mismo código de barras.

ERROR:
xmlrpc.client.Fault: <Fault 2: 'product_product_barcode_uniq'>

Espero que alguien pueda echarme una mano.

Muchas gracias por la ayuda que puedan prestarme.
Avatar
Descartar
4 Respuestas
3
Avatar
Pedro M. Baeza
Mejor respuesta

Hola, David,

Uf, veo muchos puntos laterales derivados de tu pregunta, pero primero yendo a ella, el tema es que Odoo va refinando cada vez más la integridad de los datos versión a versión, y que haya la limitación de un solo código de barras es por una buena razón. Es un identificador único, y tener más de uno hace que pierda su razón de ser, ya que cuando se busque por él y aparezcan varias coincidencias, ¿qué se hace entonces?

Razones para tener el mismo más de una vez en la BD:

- Productos antiguos. En los mismos se debería vaciar el código de barras, y solo dejarlo en el actual vigente.

- Mismo producto y código de barras en múltiples compañías. Se debería tener un único producto, compartido por todas las compañías.

Entonces, la solución debe pasar por limpiar esos datos en lugar de intentar desfigurar la nueva versión para seguir manteniendo esa inconsistencia.


Luego, al margen de la pregunta, hablas de migrar de v8 a v14, pero en realidad eso no es una migración, si no una importación de datos (y presumo que solo los datos maestros), y el tema es que hacer eso en lugar de realmente migrar la base de datos con por ejemplo OpenUpgrade es perder mucha cantidad de información valiosa que va a quedar en la versión 8, y que obliga a mantenerla como consulta y que sea también un lastre tecnológico.

Por otro lado, ¿por qué v14 cuando ya está la v16 fuera? Es empezar con una versión con más de 2 años en la espalda.

1 Comentario
Avatar
Descartar
Avatar
David
-

Buenos días Pedro, disculpa la tardanza en contestar.

Respondiendo a lo del código de barras, es correcto lo que comentas, lo tenemos duplicado sobre todo en productos antiguos que con el paso del tiempo se han ido amontonando por así decirlo en la base de datos y que tenemos que seguir moviendo a nuevas versiones, ya que estos productos han sido vendidos en algún momento y constan en facturas o pedidos de venta.

Por otra parte, el mantener el barcode de los productos lo haciamos principalmente porque de 43 mil productos que tenemos actualmente, sería menos costoso desactivar este constraint, pero entiendo que con el tiempo es posible que surjan muchos problema.

Lo de ser de diferentes compañias y que tenga el mismo barcode eso no podemos controlarlo nosotros mismos.

Por último, si, se trata de una importación de datos, si fuera migrar tendría que pasar de versión a versión y sinceramente al tener tal cantidad de datos en la bbdd, no se si con el uso de OpenUpgrade lo haria todo correctamente, sobre todo teniendo en cuenta que en odoo 8 los NIF no los valida como en odoo 14, el tema de los barcode, etc. Entiendo que tendría que validar y arreglar toda esta información mucho antes.

Por otra parte, he hecho un script en python para poder realizar todo el traspaso de datos y mover los datos que realmente estemos interesados de una manera más "limpia", es decir, recopilando solo los datos importantes para nosotros.

Y el uso de la v14, es simplemente donde se empezó en un momento a hacer las pruebas, aunque el cambio a la v16 con la API no es muy drástico, lo importante era el cambio de la v8 a la v14.

Aún así muchas gracias por la ayuda y matizar algunos puntos en cuestión que siempre ayudar a tener más cosas en cuenta.

1
Avatar
Carlos - Domatix
Mejor respuesta

Buenos días,

No sé si con "sin tener que tocar el código de odoo 14" te refieres también a no añadir nada de código, si es así, diría que es imposible.

Tienes que crear un módulo en el que heredes product.product y modifiques la restricción añadiendo:

_sql_constraints = [

('barcode_uniq', 'CHECK(1=1)', "A barcode can only be assigned to one product !"),

]

Avatar
Descartar
1
Mejor respuesta

Independientemente de la tipología de migración, lo cual sería bueno analizar, Coincido en no eliminar esa constraint. Más, teniendo en cuenta que comentas que nos estás familiarizado con la parte técnica.

No tiene sentido que haya 2 productos con mismo EAN si no es por las casuísticas que comenta Pedro, o por alguna similar (al fin y al cabo errores de procesos). Hay que optar por aprovechar la migración (o traspaso de datos maestros) para hacer limpieza y replantear aquello que no merece la pena mantener. Digamos que, a nivel de código, "todo se puede hacer". ¿Es recomendable hacerlo y tiene sentido? Es lo que deberíais valorar antes.

Si quitas la limitación ahora, tendrás que mantener esa customización en las nuevas versiones y sucesivamente. Si empiezas a utilizar códigos de barras, etiquetas, etc. tendrás incompatibilidades, etc.

Saludos.

1 Comentario
Avatar
Descartar
Avatar
David
-

Lo primero de todo darte las gracias Harald por la ayuda. Y si, como comentas, lo que he hecho es realizar una importación sin los barcode y guardar la relación del producto antiguo con el producto nuevo creado en la v14 y guardar a su vez el barcode en una variable dentro de un json así por lo menos, poder seguir haciendo pruebas y en un futuro tal vez realicemos la limpieza de los productos con el barcode duplicado y simplemente actualicemos el barcode en los productos deseados.

Como le comentaba a Pedro, estuve valorando el uso de OpenUpgrade, pero no veía mucha fiabilidad en poder pasar los datos de la v8 a la v14 en este caso, yendo versión por versión, porque todos estos problemas que están surgiendo tendría que arreglarlos en la v8 para no acarrear esos problemas en versiones superiores, o así lo entiendo yo.

0
Avatar
David
Mejor respuesta

Buenos días Carlos,

me imaginaba que tenía que optar al final por crear un módulo, tendré que mirar como se hace porque no tengo ni idea sobre este tema...

Aún así darte las gracias por la respuesta e intentare hacerlo de esa forma, que aun siendo complicado para mí, parece ser la "única y sencilla" forma de hacerlo.

Un saludo y gracias de nuevo.

Avatar
Descartar

Su respuesta

Intente dar una respuesta sustancial. Si desea hacer un comentario sobre la pregunta o la respuesta, utilice la herramienta de comentarios. Recuerde que siempre puede revisar sus respuestas , no es necesario responder dos veces a la misma pregunta. No olvide votar , ayuda a seleccionar las mejores preguntas y respuestas