Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

如何实现sale.order.line中的sequence字段自增?



  • OpenERP 7.0<br />sale.order.line中的sequence字段默认值为10,通过widget="handle"显示在界面上,而不是直接的数字<br />[code]<br />                                <tree string="Sales Order Lines" editable="bottom"><br />                                    <field name="sequence" widget="handle"/><br />[/code]<br /><br />现在想要将sequence再次显示在订单行中,<br />视图部分简单:<br />[code]<br />          <xpath expr="//tree/field[@name='product_id']" position="before"><br />              <field name="sequence" string="序号"/><br />          </xpath><br />[/code]<br />但希望每个订单中,sequence字段从1开始自动增号,并且添加一个订单明细时,如果取消当前添加项目后,再添加新项目时不跳号,如何实现呢?<br /><br />试了shelly神的改代码打法, [url=http://shine-it.net/index.php?topic=2089.0]http://shine-it.net/index.php?topic=2089.0[/url]<br />'sequence': lambda self, cr, uid, context=None: self.pool.get('ir.sequence').get(cr, uid, 'sale.order.line'),<br />失败了....<br /><br />期待大神们现身说法...<br />



  • OpenERP 7.0<br />sale.order.line中的sequence字段默认值为10,通过widget="handle"显示在界面上,而不是直接的数字<br />[code]<br />                                <tree string="Sales Order Lines" editable="bottom"><br />                                    <field name="sequence" widget="handle"/><br />[/code]<br /><br />现在想要将sequence再次显示在订单行中,<br />视图部分简单:<br />[code]<br />          <xpath expr="//tree/field[@name='product_id']" position="before"><br />              <field name="sequence" string="序号"/><br />          </xpath><br />[/code]<br />但希望每个订单中,sequence字段从1开始自动增号,并且添加一个订单明细时,如果取消当前添加项目后,再添加新项目时不跳号,如何实现呢?<br /><br />试了shelly神的改代码打法, [url=http://shine-it.net/index.php?topic=2089.0]http://shine-it.net/index.php?topic=2089.0[/url]<br />'sequence': lambda self, cr, uid, context=None: self.pool.get('ir.sequence').get(cr, uid, 'sale.order.line'),<br />失败了....<br /><br />期待大神们现身说法...<br />



  • 在创建时给予赋值,意味着你的ir.sequence在你点击添加项目的时候就已经生存了一个sequence,你取消订单行,并不能改变ir.sequence表中的值<br />你可以在保存的时候在给sequence赋值,做法就是参照saler.order中的name的写法,改写create的方法(点击保存的时候才调用create,也就只是你想保存的时候才生存sequence)<br />[code]<br />    _defaults = {<br />        'sequence': '/',<br />        }<br /><br />    def create(self, cr, uid, vals, context=None):<br />        if vals.get('sequence','/')=='/':<br />            vals['sequence'] = self.pool.get('ir.sequence').get(cr, uid, 'sale.order.line') or '/'<br />        return super(sale_order_line, self).create(cr, uid, vals, context=context)<br />[/code]



  • [code]ValueError: invalid literal for int() with base 10: '/'<br />[/code]<br />鉴于sequence是整数,默认值改为: 1<br /><br />sale.py<br />[code]# -- coding: utf-8 --<br /><br />from openerp.osv import osv, fields<br /><br />class sale_order_line(osv.osv):<br /><br />    _inherit = "sale.order.line"<br /><br />    _defaults = {<br />        'sequence': '1',<br />        }<br /><br />    def create(self, cr, uid, vals, context=None):<br />        if vals.get('sequence','1')=='1':<br />            vals['sequence'] = self.pool.get('ir.sequence').get(cr, uid, 'sale.order.line') or '1'<br />        return super(sale_order_line, self).create(cr, uid, vals, context=context)    [/code]<br /><br />sale_view.xml<br />[code]<?xml version="1.0"?><br /><openerp><br />    <data><br /><br />      <record model="ir.ui.view" id="sale_order_form_add_line_seq"><br />        <field name="name">sale.odrer.form.add.line.seq</field><br />        <field name="model">sale.order</field><br />        <field name="inherit_id" ref="sale.view_order_form"/><br />        <field name="arch" type="xml"><br />          <br />          <xpath expr="//tree/field[@name='product_id']" position="before"><br />              <field name="sequence" string="序"/><br />          </xpath><br /><br />        </field><br />      </record><br /><br />    </data><br /></openerp><br />[/code]<br />sale_sequence.xml<br />[code]<?xml version="1.0" encoding="utf-8"?><br /><openerp><br />    <!-- <data noupdate="1"> --><br />    <data noupdate="1"><br /><br />        <!-- Sequences for sale.order.line --><br />        <record id="seq_type_sale_order_line" model="ir.sequence.type"><br />            <field name="name">Sales Order Line</field><br />            <field name="code">sale.order.line</field><br />        </record><br /><br />        <record id="seq_sale_order" model="ir.sequence"><br />            <field name="name">Sales Order Line</field><br />            <field name="code">sale.order.line</field><br />            <field name="prefix"></field><br />            <field name="padding">2</field><br />        </record><br /><br />    </data><br /></openerp>[/code]<br /><br />以上实现了自增,但另外新建一个订单的时候,序号没法重置为1;<br /><br />buke的ir_sequence_autoreset模块貌似只能按时间重置,不知道怎么按新订单重置line的序号...



  • 其实, 没有必要自增... 可以制完单后, 手工调整一下顺序即可.<br /><br /><br />参见  ir.ui.menu  对象的手动调整顺序后的序号自编相关代码.<br /><br />



  • 自增主要是为了方便统计个数,对于经常5个以上的产品输入就很有必要了。<br />最好是这个字段能实时显示,存不存储在数据库中到无所谓...就像rml报表中的seq标签 [url=http://www.osbzr.com/651]http://www.osbzr.com/651[/url]



  • 你这个直接写个模块. 使用JS 部分就可以搞定的...<br /><br />有预算直接用RMB 砸向 @广州-步科


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待