Richie

Sometimes at night when I look up at the stars, and see the whole sky just laid out there, don't you think I ain't remembering it all. I still got dreams like anybody else, and ever so often, I am thinking about how things might of been. And then, all of a sudden, I'm forty, fifty, sixty years old, you know?

分析模式 - 库存系统设计示例

一个中型ERP系统中库存交易部分的设计裁剪

库房设计:
   
BPML中关于这一块有详细的规范可以用来参考,这个设计示例并不符合
是否资产库房: 与成本计算相关的参数
是否属于供应商库房、供应商ID: 对类似寄售管理模式的考虑
这些额外的字段只是用来表示基于库房的一些其它逻辑相关的设置

交易:
   
库存期间: 月结、周期性盘点结转作业的期间设置(对应Martin在账务模式中提到的有效期间)
库存期间代码: 唯一标识这个库存期间,例如200801、200803等形式
期间类型: 对期间进行灵活设置的各种方法进行分类,例如指定区间段方式Period、周期性方式Cycle等
期间编号: 示例情况中期间编号基于每个年份从1开始自增
期间状态: 对应到库存期间开帐、月结、关帐等业务操作
总账期间: 与成本相关的设置,该库存期间内的成本计入哪个总账期间
成本期间状态、在制期间状态: 库存期间、成本期间、在制期间合用同一个设置,用不同的状态字段表示
说明: 可以更灵活点设值,例如期间类型为Cycle方式时,可以使用"间隔时间"+"间隔时间单位"这样两个字段表示,例如每3周、每月、每季等等
交易来源类型: 移库操作时物料从来源库转储到目标库;采购收货入库的来源类型则为采购单、收料单之类
交易类型: 库房之间的转储、采购收料入库、车间工单派料、销售出库等各种交易类型
库存交易: 库存交易主表
交易编号: 系统自动生成,提供给用户(所以不是使用交易ID)用来唯一标记本次交易。例如TR2008030001、TR2008030002
交易时间、提交时间: 即Martin提到的交易发生时间与生效时间这个概念
交易来源单号: 例如来源类型为采购收料入库时它存放具体的收料单号
转换率: 例如气态、液态物料在转储等操作过程中可能存在损挥发、耗率之类的情况
交易明细: 某次库存交易中具体的各个物料交易状况
来源库房、来源储位、目标库房、目标储位: 对应不同的交易类型他们可能为空
来源单号、来源ID、来源项目号: 例如来源类型为采购收料入库时,这几个字段存放收料单号、收料单ID、收料单明细项目号
预留数量: 例如为销售订单开立出库单时先预留冻结一定数量的产品库存,以保证出库单出库发货时(即交易转为完成状态,中间可能间隔时间比较长)至少存在这个数量的产品(当然不一定得这样设计)
交易单价、交易币别、交易成本: 成本计算相关的设置(有意的冗余设计)

这是比较简单、实用的一种设计方式。库存交易、交易明细是核心表;库存期间所表现的业务模式基本是行业通用的操作标准;交易来源类型、交易类型是为了跟踪交易,对交易进行运算的规则设置,他们可以设计的更复杂、灵活;针对交易类型,SAP采用移动类型来解决,基本效果也类似于此,只是规则设置更复杂,运用起来更灵活而以
一些小的方面:
1. 两种方案: a.) 交易明细里面的数量允许负数,例如入库用正数表示,出库用负数表示。b.) 交易明细的数量全部用正数表示,出、入库的逻辑(即正、负数关系)包含在交易类型中。方案a应当更灵活一些,因为方案b将这个逻辑进行了隐式的捆绑;方案a也会导致针对交易的汇总运算算法比较一致(即统一采用加法运算),SQL汇总报表也会比较灵活(例如简单的使用SUM函数),不过可以做更多的规则设置来显式的表示这种逻辑
2. 财务中的交易原理上与这里基本相同,不过有个比较明显的区别: 财务的交易必须通过科目配置,严格的保证账目的平衡,库存交易则不是必须的,只需严格的记录物料这一资产的流动,以表明它不是平白无故的出现或消失了就可以。对于成本运算,与财务类似
3. 示例中主要数据都以工厂作为数据的范围,这是不够灵活的,不要被误导,应当遵循BPML、B2MML规范,做更灵活的设计;其它也都如此,例如成本、总帐相关的设置等
4. 理论上当前库存值以及其他一些数据,应当根据交易动态运算出结果,不过大部分情况为了改善性能都会设计冗余表,或者由Application Server在内存中缓存,下面给出其中一个比较重要的设计

库存损益:
   
库存期间损益: 损益状况都以库存期间为统计单位
库存期间损益明细: 损益的明细清单,出入库类型同样可以使用数量的正负关系表示
这个设计可以用于快速获得当前库存结余量、每个历史库存期间的结余量。另外单从设计上看用法也可以存在多意性,a.) 可以用作对每个库存期间内任何一天的当前库存的冗余设计,这样库存期间损益明细没有太多必要,因为基本对应到交易明细,另外每个交易发生时必须同步更新该数据。b.) 可以用作每次库房盘点时的损益记录,这样损益明细是必须的,并且与每次库存交易没有关系,它表达的信息只是上期结余量、本期初始量,所以对于期间内的任何一天的当前库存量,仍需要另外的冗余表或者Application Server的缓存来处理

附注:
1. 上面示例的表结构虽然简单,但同样能够设计出多变的业务操作流程,以适应不同的作业环境,这缘自于针对这个业务问题,数据模型、对象模型、概念模型之间的差异很大,数据模型基本无法反映出概念模型的状况
例如为了配合做QC,SAP可以将库房配置为GR冻结库存、非限制使用库存和质量检验库存等类型,对于需要进行质检的物料,采购收料先通过移动类型103入GR冻结库,表示这些物料还无法领用,因为没有完成质检;质检通过后使用移动类型105将物料从GR冻结库转储到非限制使用库存,这样就可以领用了;对于免检物料,使用移动类型101直接收货入库到非限制使用库存。这个业务流程设计同样可以针对示例的设计做稍许调整而实现。库存交易、交易明细是抽象层次比较高的一种对象,如何用它来实现具体的业务流程是灵活多变的
2. SAP其它一些移动类型
104用于对103的冲销;106用于对105的冲销等等,这个类似于Martin在分析模式中的反向冲销、差异冲销等模式,具体使用反向冲销还是差异冲销由用户决定
124供应商退货,125用于对124的冲销,122(123)、161(162)等都属各种类型的退货
从SAP这个设计来看,移动类型也是一种比较高的抽象概念,灵活的用于解决概念模型中的各种问题

posted on 2008-04-13 23:42  riccc  阅读(7325)  评论(5编辑  收藏  举报

导航