在V10中,如何控制自动序列号的生成?例如,如果我们采用员工ID。当我们创建员工ID时,会生成类似EMP-0001的序列。假设我们丢弃了它而没有保存。下次我们创建一个新的员工ID时,我们得到的序列是EMP-0002。怎么预防这个?请在odoo 10中给出答案
答案 0 :(得分:0)
您不应该在默认参数中使用序列。当您单击“创建”按钮时,其他方式系统将采用序列。
您应该在create方法中编写序列逻辑。
例如:
@api.model
def create(self, vals):
if vals.get('name', 'New') == 'New':
vals['name'] = self.env['ir.sequence'].next_by_code('sale.order') or 'New'
return super(sale_order,self).create(vals)
在上面的示例中,系统将在您销售时读取序列。
您可以在销售订单基本模块中找到相同的参考。
这可能会对你有帮助。
答案 1 :(得分:0)
首先,您必须为员工ID插入一个字段。如下所示!
name = fields.Char(string="Employee ID", Index= True, default=lambda self:('New'), readonly=True)
之后你必须在views文件夹中创建一个名为ir_sequence.xml的文件。编写如下代码。
<odoo>
<data>
<record id="seq_bi_ticket" model="ir.sequence">
<field name="name"> [NAME] </field>
<field name="code">[class_name]</field>
<field name="prefix"> EMP </field>
<field name="padding"> 5 </field>
<!-- The length of the number you need is 5 -->
<field name="company_id" eval="False"/>
</record>
</data>
</odoo>
还必须在主类中写入函数以及我上面说过的那个字段。函数代码如下:
@api.model
def create(self, vals):
if vals.get('name', _('New')) == _('New'):
if 'company_id' in vals:
vals['name'] = self.env['ir.sequence'].with_context(force_company=vals['company_id']).next_by_code('[CLASS_NAME]') or _('New')
else:
vals['name'] = self.env['ir.sequence'].next_by_code('[CLASS_NAME]') or _('New')
result = super([CLASS_NAME], self).create(vals)
return result
结束了。你去吧!!!