跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 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. OpenERP V6.1中采购及库存管理相关的几个Bug修正

OpenERP V6.1中采购及库存管理相关的几个Bug修正

已定时 已固定 已锁定 已移动 Odoo 新手求助
5 帖子 4 发布者 4.1k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • N 离线
    N 离线
    NewZN
    写于 最后由 编辑
    #1

    采购相关Bug修正:
    1)采购数量有小数点时候的采购入库时候系统报错问题
    采购入库时候,如果入库数量有小数点,实际入库数量明明和待入库数量一样多,系统却报错,不让入库。
    原因是,带小数点的待入库数量和实际入库数量,表面上看是一样多,但计算机内部浮点数表示方法的原因,可能会差异0.00000001。OpenERP系统误判为待入库数量和实际入库数量不一致,不让入库。修改方法是,待入库数量和实际入库数量是否一致的判断,不可严格判断,而应该允许一定的“误差”。修改代码是:文件 addons\stock\wizard\stock_partial_picking.py,方法 do_partial中,两个判断语句不正确,修改如下:
    if qty_in_line_uom <> wizard_line.quantity:  =>  if abs(qty_in_line_uom - wizard_line.quantity) >= line_uom.rounding:

    if qty_in_initial_uom <> without_rounding_qty:  => if abs(qty_in_initial_uom - without_rounding_qty) >= line_uom.rounding:


    2)当采购单位不同于采购产品的默认单位时候,系统生成的入库会计凭证金额错误问题
    原因在于,当采购入库系统自动生成入库会计凭证时候,系统计算入库金额时候有错误。本来应该用入库数量 * 入库单位对应的单价。
    但系统却用入库单位对应的单价 * 转换成产品默认单位后的数量。修改方法为:文件 addons\stock\stock.py 的方法 _get_reference_accounting_values_for_valuation 中:
    reference_amount = qty * move.price_unit  =>  reference_amount = move.product_qty * move.price_unit


    3)以含税价(增值税)采购时候,系统生成的入库会计凭证的金额中未扣除税额
    原因在于,以含税价(增值税)采购时候,采购订单上显示的是含税单价,但采购入库时候,入库金额应以不含税价计算。但系统在采购订单确认时候,传递给采购入库的单价却未扣除税,导致问题。修改办法是:文件 addons\purchase\purchase.py的方法_prepare_order_line_move中:
    'price_unit': order_line.price_unit  => 'price_unit': self.pool.get('account.tax').compute_all(cr, uid, order_line.taxes_id, order_line.price_unit, 1, order.partner_address_id.id, order_line.product_id.id, order.partner_id)['total']

    此外,系统自动生成的入库会计凭证,及加权移动平均成本法计算库存成本价格时候,应采用入库单上的未含税单价,不应该取采购订单上的单价。修改办法是,addons\purchase\stock.py的方法_product_cost_for_average_update中:
    'cost': move.purchase_line_id.price_unit,  =>  'cost': move.price_unit,


    4)以含税价(增值税)采购,并基于入库单开Invoice时候,系统自动生成的Invoice的单价未从采购订单上取,而是取的入库单上的未税单价。
    修改办法是,addons\purchase\stock.py的方法_get_price_unit_invoice中:
    return move_line.price_unit  =>  return move_line.purchase_line_id.price_unit


    5)系统自动生成的PO,PO上的Warehouse总是取该公司的第一个Warehouse
    当公司有多个Shop,每个Shop有不同的Warehouse的时候,系统根据SO生成Procument,Procument上的Location是SO上的Shop的Warehouse对应的Location,这些都没有问题。但是,当根据该Procument自动生成PO时候,系统却总是取公司的第一个Warehouse作为PO的Warehouse,而不是取Procument上的Location对应的Warehouse作为PO的Warehouse。修改方法是,文件addons\purchase\purchase.py的方法 make_po中:
    warehouse_id = warehouse_obj.search(cr, uid, [('company_id', '=', procurement.company_id.id or company.id)], context=context)  =>  warehouse_id = warehouse_obj.search(cr, uid, [('lot_stock_id', '=', procurement.location_id.id)], context=context)


    6)PO上的Warehouse的Input Location不同于Stock Location时候,采购入库以后,对应的发货单立即变为可用,这是不对的。应等待手动从Input Location调拨进该Warehouse的Stock Location之后,对应出货单才能可用。
    原因在于,系统总是将PO上的入库Location(Destination)作为对应的销售出库单的源Location,当入库Warehouse的Input Location不同于Stock Location时候,这不对。修改方法是,文件addons\purchase\purchase.py的方法 _create_pickings中:
    order_line.move_dest_id.write({'location_id': order.location_id.id})  => 
    if order.warehouse_id:
        order_line.move_dest_id.write({'location_id': order.warehouse_id.lot_stock_id.id})
    else:
        order_line.move_dest_id.write({'location_id': order.location_id.id})

    1 条回复 最后回复
    0
    • K 离线
      K 离线
      kevinsf21
      写于 最后由 编辑
      #2

      先支持再详看下。

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

        [quote author=NewZN link=topic=4568.msg12703#msg12703 date=1355816831]
        1)采购数量有小数点时候的采购入库时候系统报错问题
        [/quote]
        老肖可能没有更新代码,这个问题在8月21日提交的rev:6961中已经做了处理,处理的方式如下:
         

        if float_compare(qty_in_line_uom, wizard_line.quantity, precision_rounding=line_uom.rounding) != 0:
        


        刚才做了一下测试,不会出错,但是仍会因为舍入误差产生back order, 那基本上又变成了另外一个bug了

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

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

          好多坑,谢谢分享

          GoodERP -- Odoo China fork

          1 条回复 最后回复
          0

          • 登录

          • 没有帐号? 注册

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