“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.
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
AN26119do 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:
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
| Documento | Punto de enganche |
|---|---|
| Orzamento | sale.order.create, se o nome está baleiro, é / ou New |
| Pedido de cliente | sale.order.action_confirm, antes da confirmación estándar |
| Factura, abono | account.move._set_next_sequence, chámase ao asentar |
| Albará, entrada de mercadoría | stock.picking.create segundo o tipo de operación |
| Pedido de compra | purchase.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_sequenceescribe o nome e chama a_compute_split_sequencepara 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 enres.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
- Colocar o cartafol
document_number_prefix_yearna ruta de addons. - Actualizar a lista de aplicacións e instalar o módulo. Requírense Vendas, Compras, Inventario e Contabilidade.
- En Axustes → Numeración de documentos introducir prefixos, formato do ano e número de díxitos.
- 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
- 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
AN26o módulo le unAN2026000001existente como contador26000001. 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.
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.