Odoo 10 中的扫码功能简析

本文适用于odoo 10.0 企业版

库存扫码模块的使用和问题

企业版与社区版的区别就在于企业版多了很多官方写好的模块,比如我们下面说到的扫码模块。
扫码模块提供了很便捷的操作界面,点击菜单中的扫码模块就可以进入到扫码的界面:

扫码界面

这里有三种操作:

  1. 点击Operation进入到操作视图看板
  2. 点击iventory进入到库存管理界面
  3. 用扫描枪扫码进入

其中第三步又分为几种情况:

  1. 扫描的barcode为分拣类型,将打开分拣界面
  2. 扫描的barcode为库位,将自动创建一个从该库位到该库位的分拣

你没有看错,确实是从自身库位到自身库位的分拣!(一脸懵逼中,一直没有想明白官方这么写的目的为何)

所以问题来了,如何能够创建目标库位为不同库位的分拣呢?
这里给出一种思路:

  • 如果用户扫面的是库位,则要求用户再次扫描库位,第一次作为源库位,第二次作为目的库位,其他照旧。

odoo 扫码模块的介绍

可以肯定的是,odoo在10.0版本中已经对扫码功能进行了优化,以方便用户的在不同的界面通过扫码的方式录入数据。其中odoo提供了一个底层的模块barcodes,这个模块是可以在社区版中安装的,但不会有任何可见的菜单及操作,这个模块只是一个扫码的抽象模块,如果需要具化到某个具体的业务中就需要自行继承开发,比如企业版提供的stock_barcode 模块。

barcodes模块封装了对扫码事件的支持,用户可以自行开发自定义模块以根据自己需求进行调整,barcodes模块支持在form视图上对扫码事件的响应,具体的支持方法如下:

  1. 在from视图中加入 <field name="_barcode_scanned" widget="barcode_handler"/>
  2. 在model中添加on_barcode_scanned事件的处理。(熟悉odoo的朋友可以想象是type=”object” 的button的类似)

文章开头展示的扫码界面便是stock_barcode提供的,另外,在picking界面,用户也可以进行扫码,具体的扫码逻辑如下:

  1. 如果当前的picking_type是由扫码策略的(扫码策略可以在picking_type的定义中找到),则按照策略规定的方式解析barcode,将解析出来的条码类型分别进行处理,可以处理的条码类型有:重量、产品、包裹、库位。
  2. 如果当前的picking_type没有扫码策略,则按照如下顺序进行解析尝试:
    • 是否为产品条码
    • 是否为当前库位下的包装条码
    • 是否为目的库位下的包装条码
    • 是否为库位条码

类似地处理在 操作中也有,只不过操作中的barcode变成了序列号(批次号)。