Navigation

    Odoo 中文社区

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Popular
    • Users
    • Groups

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

    由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

    本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

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

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

    【求助】如何实现添加采购明细时,采购员不能修改采购单价?

    Odoo 开发与实施交流
    5
    7
    6240
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      liu198619 last edited by

      采购员添加采购明细时,一旦选择了产品,相应的价格、计量单位等都由系统自动完成,采购员可以改变数量、单价、单位等。
      但现在要求采购人员不能改变单价。我把 price_unit这个field设置成readonly,但price_unit的值是在用户选择产品后,触发product_id_change这个方法才获得的,如果一开始在view里设置成readonly,那price_unit就永远是0,无法获得新值。
      在purchase.py源文件里,把price_unit改为'price_unit': fields.float('Unit Price', required=True, digits=(16, int(config['price_accuracy'])),read=['group_purchase_user']) 重启ERP系统后,不论是系统管理员还是采购员,如果打开包括采购明细内容的采购订单就报错,如果采购订单里没有采购订单明细可以正常打开订单。错误信息如下所示:
      Traceback (most recent call last):
        File "netsvc.pyo", line 245, in dispatch
        File "netsvc.pyo", line 74, in call
        File "service\web_services.pyo", line 576, in execute
        File "osv\osv.pyo", line 58, in wrapper
        File "osv\osv.pyo", line 119, in execute
        File "osv\osv.pyo", line 111, in execute_cr
        File "osv\orm.pyo", line 2225, in read
        File "osv\orm.pyo", line 2355, in _read_flat
        File "osv\fields.pyo", line 650, in get
        File "d:\OpenERP\Server\addons\purchase\purchase.py", line 446, in _amount_line
        File "osv\orm.pyo", line 240, in getattr
        File "osv\orm.pyo", line 189, in getitem
        File "osv\orm.pyo", line 2225, in read
        File "osv\orm.pyo", line 2379, in _read_flat
      IndexError: list index out of range


      如果想实现类似price_unit这样实时计算字段值的只读,换句话说,就是禁止用户自己编辑值。在系统里如何实现?

      1 Reply Last reply Reply Quote 0
      • O
        onetown last edited by

        我在想是不是可以用addon的方式,override一下purchase_order_line的create事件, 忽略修改的, 不过貌似界面是可以设置readonly的啊, 只要你给它一个默认值

        1 Reply Last reply Reply Quote 0
        • L
          liu198619 last edited by

          楼上说的方法,我试过了,不行。
          price的默认值是0,当用户选定产品后,根据产品中的价格设置而获得产品单价值。
          因此在views上设置field为readonly后,price_unit字段就一直会是0,不能获得新值。

          1 Reply Last reply Reply Quote 0
          • wjfonhand
            wjfonhand last edited by

            关注此帖,销售订单也有这个问题。既然有pricelist做了那么复杂的运算,这个结果就不应该让user改。但是记得听谁说过view上设置为readonly确实就连on_change都update不了这个值了。

            1 Reply Last reply Reply Quote 0
            • Joshua
              Joshua 管理员 last edited by

              可不可以不设成readonly,但是你写个onchange(),让他就算修改了,一保存也是用回原来的值?

              1 Reply Last reply Reply Quote 0
              • digitalsatori
                digitalsatori 管理员 last edited by

                这个readonly属性的确令人很迷惑,在官方论坛也有很多类似的问题。
                很多人理解readonly是对用户只读的,其实设有readonly属性的字段的数据改变都不会保存到数据库,也就是它是阻止数据更新的。

                我们可以用两个方法来实现楼主的要求:

                1、使用字段访问权限,就是添加字段级别的访问权限,就是你尝试过的方法,但是也许用的不太正确,应该设定write的访问组,比如:

                write=['group_purchase_manager']
                



                2. 使用ontown兄提到的方法,就是覆写 'reate', 'write', 方法。

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post