Skip to Content

Odoo 19: números de documento con prefixo, ano e contador – o módulo document_number_prefix_year e a trampa da creación simultánea

3 de novembro de 2026 | Odoo 19 Community | Desenvolvemento propio
3 de novembro de 2026 by
Odoo 19: números de documento con prefixo, ano e contador – o módulo document_number_prefix_year e a trampa da creación simultánea

Módulo document_number_prefix_year para Odoo 19: números de documento con prefixo, ano e contador

“AN26000001” di máis que “S00001”: é un orzamento, procede de 2026 e é o primeiro. Moitas empresas, sobre todo as que migran dun sistema máis antigo a Odoo, queren conservar os seus números de documento exactamente así. Odoo numera por si mesmo orzamentos, pedidos e albarás con secuencias propias (S00001, WH/OUT/00001, P00001) e as facturas co prefixo do diario e o ano (INV/2026/00001).

Para iso escribimos o módulo Document Numbering by Prefix and Year (document_number_prefix_year) para Odoo 19. Está dispoñible como software libre baixo a licenza LGPL-3 en GitHub:

github.com/Alex0176/odoo-document-number-prefix-year

Unha clasificación honesta de entrada: en Biricon IT Services non usamos o módulo. Publicámolo porque está rematado, documentado e dotado de probas e pode aforrar traballo a outros. Quen o use debería ler os apartados sobre Límites e Probas .

O esquema de numeración

Cada número consta de tres partes: un prefixo por tipo de documento, o ano e un contador cun número fixo de díxitos. O prefixo, o formato do ano (26 ou 2026) e o número de díxitos axústanse por empresa en Axustes → Numeración de documentos.

Estrutura do número de documento AN26000001 con prefixo, ano e contador, con táboa dos tipos de documento

Trátanse orzamentos, pedidos de clientes, facturas e abonos de clientes, albarás, entradas de mercadoría e pedidos de compra. Os prefixos da ilustración son só exemplos: AN, AU, RE, GU, LI, WE, BE. Quen deixe un prefixo baleiro conserva para ese tipo de documento a numeración estándar de Odoo. Así, o módulo non fai nada ata que o configure.

Como se comportan os números

  • Novo cada ano. O contador volve comezar en 1 co cambio de ano.
  • Continuar despois dos números importados. O módulo busca o número máis alto existente co mesmo prefixo e ano, sen importar a súa lonxitude. Se na base de datos hai AN26119 do sistema antigo, o seguinte orzamento será AN26000120. Esta é a razón pola que o módulo serve para migracións: os documentos antigos impórtanse cos seus números orixinais e os novos enlazan sen costuras.
  • Novo número de pedido ao confirmar. Un orzamento confirmado recibe, se se desexa, un número da secuencia de pedidos. O número do orzamento consérvase no campo Número de orzamento do pedido e é visible no formulario, na lista e na busca.
  • Facturas ao asentar. As facturas e os abonos de clientes reciben o seu número só ao asentalos, non ao crealos. Por iso os bosquexos borrados non deixan ningún oco. O ano procede da data da factura: unha factura do 30.12.2025 que se asenta o 2.1.2026 chámase RE25….
  • O resto queda igual. As facturas de provedores, os pagamentos, os asentos contables e as ordes de produción conservan as secuencias estándar de Odoo. Os nomes existentes nunca se reescriben, nin sequera se volve desactivar o módulo.

A parte delicada: dous usuarios á vez

Unha asignación de números propia parece sinxela: buscar o número máis alto e sumarlle un. Non o é en canto dous usuarios crean un orzamento no mesmo instante. Os dous len “número máis alto = 0” e os dous asignan AN26000001. Odoo ten para iso secuencias de base de datos nas súas propias series. Nun número feito a man isto falta e, ademais, para orzamentos e pedidos de compra Odoo non ten ningunha comprobación de unicidade sobre o nome: dous documentos co mesmo número gárdanse sen máis.

A protección máis evidente é un bloqueo. O módulo toma, por empresa, prefixo e ano, un bloqueo da base de datos (PostgreSQL Advisory Lock) que dura ata o fin da transacción. O segundo usuario agarda ata que o primeiro remate. Pero isto non abonda, e demos con iso mediante unha proba nunha copia da base de datos produtiva:

Cronoloxía de dous usuarios: sen segunda lectura os dous asignan o mesmo número, con segunda lectura o segundo recibe o seguinte número

Odoo traballa co nivel de illamento REPEATABLE READ. O estado da base de datos que ve unha transacción conxélase na súa primeira consulta. O usuario B xa ten ese estado antes de que A remate. Se despois B agarda polo bloqueo e o obtén, le co seu estado antigo “número máis alto = 0” e asigna o número por segunda vez. O bloqueo regulou a orde, pero non actualizou o coñecemento.

A solución é unha segunda lectura mediante un acceso propio e de curta duración á base de datos, que ve todas as filas xa confirmadas. Gaña o maior dos dous valores. A primeira lectura segue sendo necesaria, porque só ela coñece os números que a mesma transacción xa asignou pero aínda non confirmou, por exemplo ao importar varios documentos dunha vez.

Comprobámolo con dúas transacións nas que a segunda tomou o seu estado, de maneira demostrable, antes do commit da primeira e despois agardou polo bloqueo. Sen a segunda lectura, os dous pedidos recibiron o mesmo número; con ela, os números 1 e 2.

Importante para a valoración: esta proba é unha comprobación manual. Non forma parte das probas automáticas, porque require dúas conexións reais á base de datos que o contorno de probas de Odoo (unha única transacción por proba) non ofrece.

Implementación técnica

DocumentoPunto de enganche
Orzamentosale.order.create, se o nome está baleiro, é / ou New
Pedido de clientesale.order.action_confirm, antes da confirmación estándar
Factura, abonoaccount.move._set_next_sequence, chámase ao asentar
Albará, entrada de mercadoríastock.picking.create segundo o tipo de operación
Pedido de comprapurchase.order.create
  • Contador. O número máis alto atópao unha expresión regular (^<Stamm>([0-9]{1,15})$, a raíz escápase) por empresa, incluídos os nomes sen empresa.
  • Facturas. _set_next_sequence escribe o nome e chama a _compute_split_sequence para que a lóxica de secuencias de Odoo (prefixo, número, recoñecemento do ano para a seguinte factura do diario) siga sendo coherente.
  • Axustes. Os campos da empresa document_number_* reflíctense en res.config.settings. Os axustes rexeitan prefixos con espazos ou cun díxito ao final.
  • Tradución. Inclúese a tradución ao alemán.

Instalación e configuración

  1. Colocar o cartafol document_number_prefix_year na ruta de addons.
  2. Actualizar a lista de aplicacións e instalar o módulo. Requírense Vendas, Compras, Inventario e Contabilidade.
  3. En Axustes → Numeración de documentos introducir prefixos, formato do ano e número de díxitos.
  4. Probar primeiro nunha copia. O número dun documento non se pode desfacer despois de maneira automática, e nas facturas o número leva consigo a obriga de conservación e de revisión.

Límites

Seis límites do módulo: carros da compra, formato do ano, unha serie por empresa, regras de prefixo, poucas probas, só os documentos citados

  • Os orzamentos numéranse ao crealos. Os orzamentos borrados ou cancelados deixan ocos. O mesmo vale para todo pedido de cliente que cree outro módulo: os carros da compra da tenda web (website_sale) son pedidos en estado Orzamento e consomen un número cada un. Só as facturas e os abonos non teñen ocos, porque se numeran ao asentalos.
  • Non cambiar o formato do ano en pleno funcionamento. Coa raíz AN26 o módulo le un AN2026000001 existente como contador 26000001. Fixe o formato antes do primeiro documento.
  • Contador de 15 díxitos como máximo. As secuencias de díxitos máis longas despois da raíz ignóranse na busca do número máis alto.
  • Sen series separadas por diario ou almacén. O contador vale por empresa, prefixo e ano. Varios diarios de vendas comparten o contador de facturas.
  • Os prefixos non poden conter espazos nin rematar nun díxito; se non, xa non se poden separar o prefixo, o ano e o contador.
  • Só se tratan os tipos de documento citados.

Probas

O módulo inclúe dez probas automáticas. Comproban:

  • Orzamento e confirmación: número de orzamento e de pedido, conservación do número de orzamento
  • Continuar a contar despois dun número importado (AN26119 → AN26000120)
  • ningunha renumeración posterior dos documentos existentes
  • Factura, abono e cambio de ano segundo a data da factura
  • Pedido de compra e albarás
  • prefixo baleiro: consérvase o número estándar de Odoo
  • ano de catro díxitos
  • Prefixo con caracteres especiais
  • varios números nunha transacción
  • ignóranse as secuencias de díxitos moi longas

Chamada:

odoo-bin -d <Testdatenbank> -i document_number_prefix_year --test-enable --test-tags=/document_number_prefix_year --stop-after-init

As probas execútanse con transacións ordinarias. O comportamento ante a creación simultánea por dous usuarios non forma parte delas; comprobouse a man nunha copia da base de datos, como se describiu máis arriba. Quen use o módulo nun sistema con moitos usuarios simultáneos debería repetir esta proba na súa propia base de datos.

Aviso legal sobre o número de factura

Segundo o § 11 UStG, as facturas deben levar un número correlativo que se asigna unha soa vez para identificar a factura. O módulo numera as facturas ao asentalas e cun contador propio por prefixo e ano, o que encaixa con isto. Se a súa configuración concreta (varios diarios, abonos con prefixo propio, cambio de ano) cumpre os requisitos da súa asesoría fiscal, debe aclaralo con ela. Esta publicación non é asesoramento xurídico.

Preguntas frecuentes

Por que non simplemente adaptar as secuencias de Odoo?

Para as facturas, iso é posible mediante o prefixo do diario. Pero para orzamentos, pedidos, albarás e pedidos de compra non hai un esquema común de prefixo, ano e contador con cambio de ano, e o contador non coñece números antigos importados. Aí é onde actúa o módulo.

Sobrescríbese a numeración existente?

Non. O módulo só asigna números novos. Os nomes xa gardados quedan sen cambios, tamén ao desactivalo.

Como o desactivo de novo?

Baleire o prefixo do tipo de documento. Entón Odoo volve numeralo por si mesmo. Tampouco a desinstalación cambia os números xa asignados.

Úsano vostedes mesmos?

Non. Connosco funcionan os números estándar de Odoo. Comprobamos o módulo coas probas automáticas e coa proba manual descrita, pero non nunha explotación en funcionamento con moitos usuarios.

Funciona con Odoo 17 ou 18?

Só o probamos con Odoo 19.0 Community. Para outras versións pode valer ou non; non o comprobamos.

Baixo que licenza está?

Baixo a LGPL-3. Os erros e as melloras son benvidos como issue no repositorio de GitHub .

Apoio de Biricon IT Services

Atendemos instalacións de Odoo para pequenas e medianas empresas: desde a implantación, pasando por adaptacións e migracións, ata a operación continua. Se quere conservar os seus números de documento ao migrar, facer revisar a asignación de números baixo carga ou levar con seguridade un módulo coma este á súa instancia produtiva, axudarémolo con gusto. Máis desenvolvementos propios: Firmenbuch e verificación de enderezos para clientes austríacos, Conxuntos de produtos no orzamento como sección e Web RBL, a lista de bloqueo para o tráfico de ataque.

Póñase en contacto connosco

Data: 3 de novembro de 2026. Versión do módulo 19.0.1.0.0. Todos os números dos exemplos e das ilustracións están elixidos libremente.