Ves al contingut

Odoo 19: números de document amb prefix, any i comptador – el mòdul document_number_prefix_year i el problema de la creació simultània

3 de novembre de 2026 | Odoo 19 Community | Desenvolupament propi
3 de novembre de 2026 per
Odoo 19: números de document amb prefix, any i comptador – el mòdul document_number_prefix_year i el problema de la creació simultània

Mòdul document_number_prefix_year per a Odoo 19: números de document amb prefix, any i comptador

«AN26000001» diu més que «S00001»: és un pressupost, és de l'any 2026 i és el primer. Moltes empreses, sobretot les que migren d'un sistema antic a Odoo, volen conservar exactament aquest format de numeració dels documents. Odoo numera els pressupostos, les comandes i els albarans amb seqüències pròpies (S00001, WH/OUT/00001, P00001), i les factures amb el prefix del diari i l'any (INV/2026/00001).

Per això hem desenvolupat el mòdul Document Numbering by Prefix and Year (document_number_prefix_year) per a Odoo 19. Està disponible a GitHub com a programari lliure amb la llicència LGPL-3:

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

Un aclariment sincer abans de començar: A Biricon IT Services no fem servir aquest mòdul. El publiquem perquè està acabat, documentat i disposa de proves, i pot estalviar feina a altres persones. Si el voleu utilitzar, convé llegir els apartats de Limitacions i Proves .

L'esquema de numeració

Cada número consta de tres parts: un prefix per a cada tipus de document, l'any i un comptador amb un nombre fix de dígits. Podeu configurar el prefix, el format de l'any (26 o 2026) i el nombre de dígits per a cada empresa a Configuració → Numeració de documents.

Estructura del número de document AN26000001 amb prefix, any i comptador, i taula dels tipus de document

S'aplica als pressupostos, les comandes de venda, les factures de client i els abonaments, els albarans de lliurament, les recepcions de mercaderies i les comandes de compra. Els prefixos de la imatge són només exemples: AN, AU, RE, GU, LI, WE, BE. Si deixeu un prefix en blanc, es manté la numeració estàndard d'Odoo per a aquell tipus de document. Per tant, el mòdul no fa res fins que el configureu.

Com funciona la numeració

  • Un nou començament cada any. El comptador torna a començar per l'1 amb el canvi d'any.
  • Continuïtat després dels números importats. El mòdul cerca el número més alt existent amb el mateix prefix i any, independentment de la longitud. Si a la base de dades hi ha el número AN26119 procedent del sistema antic, el pressupost següent serà AN26000120. Per això el mòdul és útil per a les migracions: els documents antics s'importen amb els números originals i els nous en continuen la numeració sense interrupcions.
  • Un número de comanda nou en confirmar. Si ho voleu, en confirmar un pressupost se li assigna un número de la seqüència de comandes. El número del pressupost es conserva al camp Número de pressupost de la comanda i es pot veure al formulari, a la llista i a la cerca.
  • Les factures es numeren en comptabilitzar-les. Les factures de client i els abonaments reben el número en comptabilitzar-los, no en crear-los. Per tant, els esborranys eliminats no deixen buits en la numeració. L'any es pren de la Data de factura: una factura del 30.12.2025 comptabilitzada el 2.1.2026 tindrà el número RE25….
  • La resta es manté igual. Les factures de proveïdor, els pagaments, els assentaments comptables i les ordres de fabricació conserven les seqüències estàndard d'Odoo. Els noms existents no es modifiquen mai, ni tan sols si torneu a desactivar el mòdul.

El punt delicat: dos usuaris alhora

Assignar números amb un sistema propi sembla senzill: cercar el número més alt i sumar-hi un. Però deixa de ser-ho quan dos usuaris creen un pressupost al mateix moment. Tots dos llegeixen «número més alt = 0» i tots dos assignen AN26000001. Per evitar-ho, Odoo fa servir seqüències de base de dades per a les seves pròpies numeracions. Una numeració feta a mida no disposa d'aquest mecanisme i, a més, Odoo no comprova que el nom sigui únic en els pressupostos ni en les comandes de compra: dos documents amb el mateix número es desen sense més.

La protecció més evident és un bloqueig. El mòdul adquireix un bloqueig de base de dades (PostgreSQL Advisory Lock) per empresa, prefix i any, que es manté fins al final de la transacció. El segon usuari espera fins que el primer acaba. Però això no és suficient, tal com vam descobrir amb una prova en una còpia de la base de dades de producció:

Seqüència temporal de dos usuaris: sense una segona lectura, tots dos assignen el mateix número; amb una segona lectura, el segon rep el número següent

Odoo treballa amb el nivell d'aïllament REPEATABLE READ. L'estat de la base de dades que veu una transacció queda fixat en la primera consulta. L'usuari B ja té aquest estat abans que A acabi. Si després B espera el bloqueig i l'obté, continua llegint «número més alt = 0» a partir de l'estat antic i assigna el mateix número per segona vegada. El bloqueig ha regulat l'ordre, però no ha actualitzat la informació.

La solució és una segona lectura mitjançant una connexió independent i de curta durada a la base de dades, que veu totes les files ja confirmades. Es pren el més gran dels dos valors. La primera lectura continua sent necessària, perquè és l'única que coneix els números que la mateixa transacció ja ha assignat però encara no ha confirmat, per exemple quan s'importen diversos documents de cop.

Ho vam comprovar amb dues transaccions: vam verificar que la segona havia obtingut la seva instantània abans de la confirmació de la primera i que després havia esperat el bloqueig. Sense la segona lectura, totes dues comandes rebien el mateix número; amb la segona lectura, rebien els números 1 i 2.

Cal tenir present el context: Aquesta comprovació és una prova manual. No forma part de les proves automàtiques, perquè requereix dues connexions reals a la base de dades que l'entorn de proves d'Odoo, amb una única transacció per prova, no proporciona.

Implementació tècnica

DocumentPunt d'integració
Pressupostsale.order.create, quan el nom és buit, / o New
Comanda de vendasale.order.action_confirm, abans de la confirmació estàndard
Factura, abonamentaccount.move._set_next_sequence, es crida en comptabilitzar
Albarà de lliurament, recepció de mercaderiesstock.picking.create segons el tipus d'operació
Comanda de comprapurchase.order.create
  • Comptador. Una expressió regular (^<Stamm>([0-9]{1,15})$, amb els caràcters especials de la part fixa escapats) troba el número més alt per empresa, incloent-hi els noms sense empresa assignada.
  • Factures. _set_next_sequence escriu el nom i crida _compute_split_sequence perquè la lògica de seqüències d'Odoo continuï sent coherent: prefix, número i detecció de l'any per a la factura següent del diari.
  • Configuració. Els camps d'empresa document_number_* es reflecteixen a res.config.settings. La configuració rebutja els prefixos que contenen espais o acaben en un dígit.
  • Traducció. S'hi inclou la traducció a l'alemany.

Instal·lació i configuració

  1. Col·loqueu la carpeta document_number_prefix_year al camí dels complements.
  2. Actualitzeu la llista d'aplicacions i instal·leu el mòdul. Cal tenir instal·lats Vendes, Compres, Inventari i Comptabilitat.
  3. Introduïu els prefixos, el format de l'any i el nombre de dígits a Configuració → Numeració de documents.
  4. Proveu-ho primer en una còpia. El número d'un document no es pot revertir automàticament més endavant i, en el cas de les factures, està vinculat a les obligacions de conservació i verificació.

Limitacions

Sis limitacions del mòdul: cistelles de compra, format de l'any, una sèrie per empresa, regles dels prefixos, poques proves i només els documents indicats

  • Els pressupostos es numeren en crear-los. Els pressupostos eliminats o cancel·lats deixen buits en la numeració. El mateix passa amb qualsevol comanda de venda creada per un altre mòdul: les cistelles de la botiga en línia (website_sale) són comandes en estat Pressupost i consumeixen un número cadascuna. Només les factures i els abonaments tenen una numeració sense buits, perquè es numeren en comptabilitzar-los.
  • No canvieu el format de l'any amb el sistema en funcionament. Amb la part fixa AN26, el mòdul interpreta un número existent AN2026000001 com si el comptador fos 26000001. Fixeu el format abans de crear el primer document.
  • Comptador de 15 dígits com a màxim. Les seqüències de dígits més llargues situades després de la part fixa s'ignoren quan es cerca el número més alt.
  • No hi ha sèries independents per diari o magatzem. El comptador s'aplica per empresa, prefix i any. Si hi ha diversos diaris de vendes, comparteixen el comptador de factures.
  • Els prefixos no poden contenir espais ni acabar en un dígit; altrament, no es poden separar el prefix, l'any i el comptador.
  • Només es tracten els tipus de document indicats.

Proves

El mòdul inclou deu proves automàtiques. Comproven:

  • Pressupost i confirmació: números de pressupost i de comanda, conservació del número de pressupost
  • Continuació de la numeració després d'un número importat (AN26119 → AN26000120)
  • Absència de renumeració posterior dels documents existents
  • Factura, abonament i canvi d'any segons la data de factura
  • Comanda de compra i albarans de lliurament
  • Prefix buit: es manté la numeració estàndard d'Odoo
  • Any de quatre dígits
  • Prefix amb caràcters especials
  • Diversos números en una mateixa transacció
  • Les seqüències de dígits molt llargues s'ignoren

Ordre d'execució:

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

Les proves s'executen amb transaccions ordinàries. No inclouen el comportament quan dos usuaris creen documents alhora, que es va comprovar manualment en una còpia de la base de dades, tal com s'ha descrit més amunt. Si feu servir el mòdul en un sistema amb molts usuaris simultanis, convé repetir aquesta prova amb la vostra base de dades.

Avís legal sobre la numeració de les factures

Segons l'article 11 de la UStG, les factures han de portar un número correlatiu assignat una sola vegada per identificar la factura. El mòdul numera les factures en comptabilitzar-les i utilitza un comptador propi per prefix i any, cosa que s'ajusta a aquest principi. Heu de consultar amb el vostre assessor fiscal si la configuració concreta que feu servir —diversos diaris, abonaments amb prefix propi o canvi d'any— compleix els requisits que us demana. Aquest article no constitueix assessorament jurídic.

Preguntes freqüents

Per què no adaptar simplement les seqüències d'Odoo?

En el cas de les factures, es pot fer mitjançant el prefix del diari. Però els pressupostos, les comandes de venda, els albarans i les comandes de compra no disposen d'un esquema comú amb prefix, any i comptador que es reiniciï amb el canvi d'any, i el comptador no té en compte els números antics importats. És aquí on intervé el mòdul.

Se sobreescriu la numeració existent?

No. El mòdul només assigna números nous. Els noms ja desats es mantenen intactes, també quan es desactiva.

Com el puc tornar a desactivar?

Deixeu en blanc el prefix del tipus de document. Odoo tornarà a numerar-lo amb el seu sistema. Desinstal·lar el mòdul tampoc no modifica els números ja assignats.

Vosaltres mateixos el feu servir?

No. Nosaltres fem servir la numeració estàndard d'Odoo. Hem comprovat el mòdul amb les proves automàtiques i la prova manual descrita, però no en un entorn de producció amb molts usuaris.

Funciona amb Odoo 17 o 18?

Només l'hem provat amb Odoo 19.0 Community. Pot ser compatible amb altres versions o no; no ho hem comprovat.

Quina llicència té?

La LGPL-3. Podeu comunicar errors i proposar millores obrint una incidència al repositori de GitHub són benvinguts.

Suport de Biricon IT Services

Ens ocupem d'instal·lacions d'Odoo per a petites i mitjanes empreses: des de la implantació fins al funcionament diari, passant per les adaptacions i les migracions. Si voleu conservar els números dels documents en migrar, fer comprovar l'assignació de números sota càrrega o incorporar amb seguretat un mòdul com aquest al vostre entorn de producció, us hi podem ajudar. Altres desenvolupaments propis: Registre Mercantil i verificació d'adreces per a clients austríacs, Conjunts de productes com a secció del pressupost i Web RBL, la llista de bloqueig del trànsit d'atac.

Contacteu amb nosaltres ara

Actualitzat el 3 de novembre de 2026. Versió del mòdul: 19.0.1.0.0. Tots els números dels exemples i les imatges són ficticis.