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

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

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

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

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



  • 采购相关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})



  • 采购相关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})



  • 先支持再详看下。


  • 管理员

    [quote author=NewZN link=topic=4568.msg12703#msg12703 date=1355816831]
    1)采购数量有小数点时候的采购入库时候系统报错问题
    [/quote]
    老肖可能没有更新代码,这个问题在8月21日提交的rev:6961中已经做了处理,处理的方式如下:
      [code]if float_compare(qty_in_line_uom, wizard_line.quantity, precision_rounding=line_uom.rounding) != 0:[/code]
    刚才做了一下测试,不会出错,但是仍会因为舍入误差产生back order, 那基本上又变成了另外一个bug了



  • 好多坑,谢谢分享


登录后回复
 

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