跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. 【求助】如何实现添加采购明细时,采购员不能修改采购单价?

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

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
7 帖子 5 发布者 6.9k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • L 离线
    L 离线
    liu198619
    写于 最后由 编辑
    #1

    采购员添加采购明细时,一旦选择了产品,相应的价格、计量单位等都由系统自动完成,采购员可以改变数量、单价、单位等。
    但现在要求采购人员不能改变单价。我把 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 条回复 最后回复
    0
    • O 离线
      O 离线
      onetown
      写于 最后由 编辑
      #2

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

      1 条回复 最后回复
      0
      • L 离线
        L 离线
        liu198619
        写于 最后由 编辑
        #3

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

        1 条回复 最后回复
        0
        • wjfonhandW 离线
          wjfonhandW 离线
          wjfonhand
          写于 最后由 编辑
          #4

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

          GoodERP -- Odoo China fork

          1 条回复 最后回复
          0
          • JoshuaJ 离线
            JoshuaJ 离线
            Joshua 管理员
            写于 最后由 编辑
            #5

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

            【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

            1 条回复 最后回复
            0
            • digitalsatoriD 离线
              digitalsatoriD 离线
              digitalsatori 管理员
              写于 最后由 编辑
              #6

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

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

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

              write=['group_purchase_manager']
              



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

              【上海先安科技】(tony AT openerp.cn)

              1 条回复 最后回复
              0

              • 登录

              • 没有帐号? 注册

              • 登录或注册以进行搜索。
              • 第一个帖子
                最后一个帖子
              0
              • 版块
              • 标签
              • 热门
              • 用户
              • 群组