Odoo开发之自动编号创建 - Ethan

应用场景

在创建单据的时候,我们很容易遇到单据的编号是按照一定规则创建的,那么在新建单据的时候能够自动生成编号无疑可以减少用户的工作量,
本文为该流程的操作示例。

解决办法

通过在data文件夹插入一条ir.sequence数据,在模型里调用该数据,完成自动生成编号流程。

代码示例

预制数据

模块目录下新建data文件夹,创建xx_data.xml文件:
data
在__manifest__.py中找到data,添加文件路径:

1
2
3
'data': [
'data/ir_sequence_data.xml',
],

建立一条记录,各字段要求如下:

  • id不能重复,
  • model为ir.sequence,
  • name填写与该编号相关的内容,
  • code为模型_name,
  • prefix为编号默认前缀,
  • number_next为编号开始数字,默认为1,
  • number_increment为编号递增间隔,默认为1,
  • padding为编号后数字位数,
  • company_id默认为当前公司
    例如模型training.book.copy中,reference字段起始编号为FBBH#01;
    编码如下,部分字段未展示:
1
2
3
4
5
6
7
8
9
<?xml version="1.1" encoding="UTF-8"?>
<odoo>
<record id="seq_book_copy" model="ir.sequence">
<field name="name">Book Copy Sequence</field>
<field name="code">training.book.copy</field>
大专栏  Odoo开发之自动编号创建 - Ethan <field name="prefix">FBBH#</field>
<field name="padding">2</field>
</record>
</odoo>

模型文件

给需要创建编号的字段增加属性default

1
reference = fields.Char(string="副本编号", default=lambda self: _('New'), readonly=True, required=True)
1
2
3
4
5
6


def (self, vals):
if vals.get('reference', 'New') == 'New':
vals['reference'] = self.env['ir.sequence'].next_by_code('training.book.copy') or _('New')
return super(BookCopy, self).create(vals)

最后生成需要的编号:
sequence





猜你喜欢

转载自www.cnblogs.com/liuzhongrong/p/12345962.html