odoo 生成单据编号

在Odoo里面,默认提供了ir.sequence这样一个序号生成模块

单据编号格式

创建编号

打开xml文件,加入如下代码:

1
2
3
4
5
<record id="business_order_number" model="ir.sequence">
    <field name="name">Order Number</field>
    <field name="code">business.order</field>
<!-- 4 位年份 -->
<field name="prefix">PO-%(year)s%(month)s%(day)s</field>
<!-- 2 位年份 --> <field name="prefix">PO-%(y)s%(month)s%(day)s</field>
<field name="suffix"></field> <field name="padding">3</field> </record>

参数说明

  • name - 名字,随便叫什么都行
  • code - 调用生成编码的 Key,需保证唯一性
  • prefix - 前缀,可以是固定的字面量也可以是组合参数
  • suffix - 后缀
  • padding - 序列递增的位数1位1、2位01、3位001

调用

1
class Example(models.Model):
    ''' Example '''
    _name = "Example.example"

    number = fields.Char(string='Number', required=True, copy=False, readonly=True, index=True, default=lambda self: _('New'))  # 订单号

    @api.model
    def create(self, vals):
        '''保存方法重写'''
        if not vals.get('number', False) or vals['number'] == _('New'):
            vals['number'] = self.env['ir.sequence'].next_by_code('business.order') or '/'
            print vals['number']

        return super(SaleOrder, self).create(vals)

单据格式

PO- + 年月日 + 自定义位数的顺序编号
PO-20180621001
PO-180621001

参考