odoo14中生成序列号

发布时间 2023-06-27 17:08:07作者: *感悟人生*

# 大货类型的制造订单,序列号格式为“MO 年份后两位 四位顺序码”,例:MO230001
# PPS样类型的制造订单,序列号格式为“MO 年份后两位 四位顺序码-Sample“,例:MO230001-Sample

 

在Odoo中,您可以使用XML来定义一个ir.sequence数据,以生成满足特定格式的序列号。以下是按照您提供的格式创建两种类型(大货和PPS样)序列号的XML定义:

<record id="seq_br_production_order_large" model="ir.sequence">
    <field name="name">大货制造订单序列</field>
    <field name="code">br.production.order.large</field>
    <field name="prefix">MO%(range_year)s</field>
    <field name="suffix"></field>
    <field name="padding">4</field>
    <field name="number_increment">1</field>
    <field name="use_date_range">true</field>
</record>

<record id="seq_br_production_order_pps" model="ir.sequence">
    <field name="name">PPS样制造订单序列</field>
    <field name="code">br.production.order.pps</field>
    <field name="prefix">MO%(range_year)s</field>
    <field name="suffix">-Sample</field>
    <field name="padding">4</field>
    <field name="number_increment">1</field>
    <field name="use_date_range">true</field>
</record>

这两段XML代码定义了两个ir.sequence,它们会生成不同类型的制造订单序列号。其中:

  • id是该记录在Odoo系统中的唯一标识符
  • model指定了此记录应用于ir.sequence模型
  • name是序列的描述性名称
  • code是在Python代码中引用此序列的代码
  • prefix是在生成的序列号前加的前缀。这里我们使用了内置的%(range_year)s变量,它会被替换为当前年份的后两位
  • suffix是在生成的序列号后加的后缀。在PPS样制造订单序列中,我们加上了"-Sample"后缀
  • padding定义了序列号的数字部分应有多少位数。这里我们设置为4,表示数字部分会有4位,如0001、0002、...、9999
  • number_increment定义了每次生成新序列号时数字部分应增加多少。这里我们设置为1,表示每次生成新的序列号时数字部分会加1
  • use_date_range设置为true,表示序列号中会包含年份信息

这样设置后,当我们在Python代码中调用

self.env['ir.sequence'].next_by_code('br.production.order.large')

 

self.env['ir.sequence'].next_by_code('br.production.order.pps')

 

,就会得到符合要求的序列号。

需要注意的是,上述XML代码应该放在一个名为data的目录中的XML文件中,并且这个XML文件应该在模块的__manifest__.py文件中被引用,以便在安装或更新模块时被加载。