跳至内容

详解 Odoo 19 序列号创建:从代码开发到界面配置完整教程

如何在 Odoo 19 中创建序列号

在 Odoo 19 中,序列号对于为各模型的记录提供唯一标识符至关重要。这些标识符可遵循自定义格式(如前缀或填充位数),便于有条理的跟踪记录。序列号在 Odoo 应用中应用广泛,例如发票、订单、产品等场景。

本文将介绍两种创建自定义序列号的方法:一种是通过代码为特定模型定义序列号,另一种是使用 Odoo 内置的设置界面创建。为便于演示,我们将创建一个新的 “图书馆管理” 模块,为图书馆中的每本书分配唯一的参考编号。

一、为什么使用序列号?

使用序列号可确保每条记录都有唯一的标识符,这对于在业务流程中保持清晰性、一致性和可追溯性至关重要。通过为发票、订单或产品分配序列号,企业能够简化记录管理、减少重复项,并加强对交易的管控。这种做法有助于准确跟踪和检索信息、提高报表精度,并实现与其他系统的无缝集成,确保跨平台数据完整性。此外,序列号还能通过提供清晰的审计轨迹支持合规性,预防错误,并便于发现差异或欺诈行为。

二、使用序列号的好处

  • 唯一性:确保每条记录都能被明确识别。
  • 可追溯性:便于在记录的整个生命周期内对其进行跟踪。
  • 可定制性:允许企业定义符合自身品牌和运营需求的格式。

三、方法一:通过代码创建序列号

步骤 1:定义模型

首先,创建需要应用序列号的模型。此处我们将创建一个 library.book 模型(代表图书馆中的书籍),并配置序列号以生成唯一的参考编号。

from odoo import fields, models, api, _

class LibraryBook(models.Model):
    _name = 'library.book'  # 模型名称
    _description = 'Library Book'  # 模型描述

    name = fields.Char(string="书名", required=True, help="书名")
    author = fields.Char(string="作者", required=True, help='书的作者')
    isbn = fields.Char(string="ISBN", required=True, help="书的ISBN")
    reference_number = fields.Char(string="参考编号", default=lambda self: _('New'), readonly=True, copy=False, help="书的参考编号")

    @api.model_create_multi
    def create(self, vals_list):
        """批量创建书籍时,为每条记录自动生成参考编号"""
        # 遍历vals_list(列表),处理每条记录的vals(字典)
        for vals in vals_list:
            # 若reference_number字段值为默认的“New”,则生成序列号
            if vals.get('reference_number', _('New')) == _('New'):
                vals['reference_number'] = self.env['ir.sequence'].next_by_code('library.book') or _('New')
                # 调用父类的create方法完成记录创建
        return super().create(vals_list)

代码解释

  • reference_number:字符类型字段,默认值为 “New”,用于存储每本书的唯一标识符。
  • create:重写模型的创建(create)方法,在每次创建新记录时,为 reference_number 字段分配由序列号生成的标识符。

步骤 2:在 XML 中定义序列

模型配置完成后,需为 library.book 模型定义序列号。可在模块的 data 目录下创建一个 XML 文件来实现。

创建名为 ir_sequence_data.xml 的 XML 文件。

<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
    <data noupdate="1">  <!-- noupdate="1"表示该记录创建后不被模块更新覆盖 -->
        <record id="ir_sequence_library_book" model="ir.sequence">
            <field name="name">图书馆书籍参考编号</field>  <!-- 序列号的描述性名称 -->
            <field name="code">library.book</field>  <!-- 与模型关联的标识代码 -->
            <field name="prefix">LIB</field>  <!-- 参考编号的前缀(如“LIB”代表“图书馆”) -->
            <field name="padding">5</field>  <!-- 序列号的数字部分填充位数(如5位则显示为00001) -->
            <field name="number_next">1</field>  <!-- 序列号的起始编号 -->
            <field name="number_increment">1</field>  <!-- 序列号的递增步长 -->
            <field name="company_id" eval="False"/>  <!-- 不绑定特定公司(全公司通用) -->
        </record>
    </data>
</odoo>

XML 字段说明

  • id:序列号记录的唯一标识。
  • name:序列号的描述性名称(如 “图书馆书籍参考编号”)。
  • code:将序列号与 library.book 模型关联的关键代码。
  • prefix:参考编号的前缀(如 “LIB”)。
  • padding:序列号数字部分的填充位数(如 5 位则生成 “00001”,“00002” 等)。
  • number_next:序列号的起始数字。
  • number_increment:序列号每次递增的步长(通常为 1)。
  • company_id:设置为 False 表示该序列号适用于所有公司,若需绑定特定公司,可指定公司 ID。

步骤 3:测试序列生成

完成模型和序列号的定义后,导航至 library.book 模型(可能需要在模块中为该模型创建菜单)。创建新书籍记录时,填写标题、作者和 ISBN 字段,提交后会发现 “参考编号” 字段已自动填充为唯一标识符,格式如 LIB00001、LIB00002 等。

四、方法二:通过 Odoo 设置菜单创建序列号

若不希望直接编写代码,也可通过 Odoo 界面创建序列号。这种方法适合非技术用户,便于为不同模型管理或创建序列号。

步骤 1:访问序列菜单

进入 Odoo 后台的"设置"。在"技术"下,找到"序列Sequences",然后选择"序列"。

步骤 2:创建新序列

点击"创建"打开一个新的序列号表单,填写以下字段:

  • 名称(Name):序列号的描述性名称,如 “图书馆书籍参考编号”。
  • 代码(Code):设置为与模型对应的代码,例如 library.book。
  • 前缀(Prefix):添加前缀(如 “LIB” 代表图书馆)。
  • 填充位数(Padding):输入数字部分的位数(如 5)。
  • 下一个编号(Number Next):设置序列号的起始数字。
  • 编号增量(Number Increment):定义序列号的递增步长(通常为 1)。

步骤 3:保存并应用

填写完必填字段后,保存序列号配置。此后,每当在 library.book 模型中创建新记录时,Odoo 都会自动应用该序列号,生成唯一标识符。

五、序列号的额外自定义选项

Odoo 序列号提供多种自定义选项,可根据具体需求调整。

1. 为序列号添加日期范围

可将序列号配置为特定日期范围(如每年或每月重置),该功能特别适用于需要按周期跟踪记录的模型(如发票、合同)。

配置方法:在序列号表单中勾选 “按日期范围使用子序列”(Use subsequences per date range)选项,然后在 “日期范围”(Date Range)字段中设置所需周期(如 “月度” 或 “年度”)。

2. 标准模式与无间隔模式(Standard vs. No Gap)

Odoo 允许序列号使用 “标准模式”(Standard)或 “无间隔模式”(No Gap):

  • 标准模式(Standard):若序列号被跳过或记录被删除,编号会继续向下一个可用数字递增,可能存在间隔。此模式通常用于会计场景(每个编号对应唯一凭证)。
  • 无间隔模式(No Gap):会自动填补缺失的编号,确保序列连续。此模式常用于运营跟踪(缺失标识符可能导致混淆)。

六、总结

在 Odoo 19 中,创建自定义序列号可显著提升各模块的记录管理效率。无论您是倾向于通过代码定义序列号的开发者,还是需要通过设置快速配置的管理员,Odoo 都能提供灵活的解决方案。遵循本文,您可以为任意模型设置序列号,轻松实现记录的有序化和可追溯性。

详解 Odoo 19 序列号创建:从代码开发到界面配置完整教程
中国 Odoo, 苏州远鼎 2026年1月15日
标签
存档