第七章 序列
序列是odoo中用来获取单据序号的对象,技术模型为ir.sequence。序列的使用在odoo中是非常广泛的,典型的使用场景各个单据的单号。
新建序列
因为序列也是odoo中的对象,因此新建的方法同普通的odoo模型创建的方法一致。通常一个序列包含如下的关键项:
- name: 序列名称
- code: 序列代码,通常为实现的模型名称
- implemetiton: 实现方式。序列有两种实现方式,一种为标准方式(Strandard),另外一种为非间断式(No gap)。两者的区别在于,标准方式允许中间断层(1,2,4,6),而非间断式即不允许断层(1,2,3,4)。非间断式的性能开销要大于标准方式。
- prefix: 前缀,即生成的序列号的前缀。
- suffix: 后缀,即生成的序列号的后缀。
- padding: 序列不包含前缀和后缀的长度。
- step: 步长,即序列号增长的长度,默认值为1。
- number_next_actual: 下一序列号数字。
其中,prefix和suffix中可以使用如下的时间变量:
Current Year with Century: %(year)s
Current Year without Century: %(y)s
Month: %(month)s
Day: %(day)s
Day of the Year: %(doy)s
Week of the Year: %(woy)s
Day of the Week (0:Monday): %(weekday)s
Hour 00->24: %(h24)s
Hour 00->12: %(h12)s
Minute: %(min)s
Second: %(sec)s
获取序列
ir.sequence对象提供了获取下一个序列号的方法: next_by_code.
@api.model
def next_by_code(self, sequence_code, sequence_date=None):
pass
next_by_code方法接收两个参数:
- sequence_code: 序列代码
- sequence_date: 序列日期。使用指定日期内的序列。
默认情况下, 序列是支持跨天递增的, 即假如今天生成的序列号是S0001,那么第二天生成的序列号是S0002而不是S0001. 如果想要序列号每天都重新计数, 那么需要在设置中选择中每天使用不同的序号