2017-04-24 113 views
2

在V10中,如何控制自动序列号的生成?例如,如果我们采用员工标识。当我们创建员工ID时,会生成一个类似EMP-0001的序列。假设我们没有保存就丢弃它。下次当我们创建一个新的员工ID时,我们得到的顺序是EMP-0002。如何防止这一点?请给出答案在odoo 10Odoo python编程语言

+3

您的标题不能反映您的问题。请[编辑]并使其更具描述性。 – Chris

回答

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) 

在上面的例子中系统会读取序列,当你出售它。

您可以在销售订单基本模块中找到相同的参考。

这可能对你有帮助。

+0

此方法返回错误。创建方法只需要两个参数即可在字段中调用方法。 – BHANUPRATAPSINGH

+0

你能在这里写你的代码吗? –

+0

@ api.model def create(self,vals): if vals.get('barcode','New')=='New': vals ['barcode'] = self.env ['ir.sequence '] .next_by_code('emp.code')或'New' return super(HrEmployee,self).create(vals) – BHANUPRATAPSINGH

0

首先,您必须为员工ID插入一个字段,如下所示!

name = fields.Char(string="Employee ID", Index= True, default=lambda self:('New'), readonly=True) 

之后,你必须创建一个名为ir_sequence.xml在意见文件folder.Write代码像下面。

<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> 

也有与那场,我说above.The功能代码是在这里沿下方写主类的内部功能:

@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 

一切都结束了。因此你走!