第七章 序列

序列是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. 如果想要序列号每天都重新计数, 那么需要在设置中选择中每天使用不同的序号

results matching ""

    No results matching ""