本文详细梳理了K/3 Cloud多单位方案及其业务逻辑,包括计量单位组、物料单位换算、固定与浮动换算的区别及应用场景。文章还探讨了物料编码中的批号管理、换算率在单据中的处理、换算率修改对历史数据的影响等问题,并通过单据分析展示了单位及数量的换算关系。最后,作者提出了基于BOS配置的服务规则和值更新事件来处理数量换算。
多单位和换算率的问题,近期处理问题时梳理了相关的业务逻辑,记录一下自己的理解
一、【相关概念】
K/3 Cloud多单位方案实现介绍说明: https://vip.kingdee.com/article/15637
跨组的多计量单位
单位、基本单位、辅单位
库存单位、销售单位、采购单位
计量单位组
物料单位换算
换算类型:固定、浮动
新增物料时,销售单位、库存单位、采购单位可以不一致,但是要在同一计量单位组内。维护自定义换算率时要以【基本计量单位】为准,若一个物料需要存在不同计量单位组中的单位需要换算,那么需要使用【物料换算单位】
计量单位组与物料换算单位的区别:
计量单位组是实现:同一计量单位组内的不同单位以【基本计量单位】换算;
物料换算单位是实现:位于不同计量单位组的两个无关联的单位,建立直接换算关系;
二、【问题整理】
问题1:一个物料编码,启用批次管理。在同一个物料中,有不同的批号,每个批号的换算率都不一样。在单据中怎么处理
物料启用了辅单位,且物料单位换算配置了换算类型为“浮动”,单据上是可以自由输入数量,从而变相实现了每个批号的物料是不同的换算率了
问题2:如何把换算率携带到单据,是为了实现在某张单据的一个物料的换算率的修改
物料启用了辅单位,且物料单位换算配置了换算类型为“浮动”,单据上是可以自由输入各单位数量,根据换算关系自动换算出其余单位数量,这已经变相的实现了自由换算率了,至于换算率字段,可以自己扩展,配置值更新事件,计算赋值,这应该算是变相实现了吧
问题3:计量单位什么时候固定换算,什么时候是浮动换算
一个计量单位组内只能是固定换算,且每个组有唯一的基准计量单位,相关单位的换算都以该单位作为基准的换算关系, 跨计量单位组才可以是浮动换算,而且浮动换算针对具体的物料,在物料单位换算里设置。当物料浮动换算时,入库的实际数量与换算得到的数量是可以取不同值的。
问题4:换算率修改了以后,对历史数据有没有影响?
之前计算好保存下来的就没影响,比如单据上的数量,基本单位数量,即时库存里的基本单位数量等;
查询的时候先算的就有影响,比如即时库存的库存单位数量,报表里的常用单位数量等
问题5:计量单位列表 和 物料单位换算列表 的换算有什么区别
计量单位按计量单位组进行分组,每个组有唯一的基准计量单位,单据分录根据物料对应的单位,结合计量单位的换算分子分母,进行组内数量换算,若物料设置有辅助单位,且"物料单位换算列表"中针对该物料设置有换算关系,则形成"跨组的多计量单位"换算关系,辅助单位取换算列表中的换算比例进行换算
问题6:物料单位换算 中 固定和浮动 换算有什么区别,如何使用
启用辅单位,配置物料单位换算关系,浮动换算: 单据加载辅单位信息,自由输入辅单位数量,数量、基本单位数量,不做变化
启用辅单位,配置物料单位换算关系,固定换算: 单据加载辅单位信息,自由输入辅单位数量,数量、基本单位数量,根据换算率变化
在计量单位组里面设置时,换算关系的设置范围局限在一个计量组内,只能用基本单位与同一计量组的其他单位进行换算。 在设置物料时,先设置该物料对应的基本单位是哪一个(同时也指定了该物料的单位组,因为基本单位与单位组是一一对应的,每个单位组都有唯一的一个基本单位),然后再选择库存单位时,就只能选择与基本单位在同一单位组的其他单位。
跨计量组的设置,星空也支持,但是是在物料单位那个地方设置,按每个物料一种跨单位组的对应方式。
计量单位组规范用法:按照不同的计量场景,分别对多个计量单位进行分组,每个单位组存在一个基本单位,其他非基本单位都与基本单位存在换算关系,系统就能够根据换算关系去计算同一单位组的任两个单位的换算了。常见的如按数量(如个支把件套台卷筒副片盘),按体积(毫升,升),按长度(厘米,米,千米,光年),按重量(吨,千克,公斤,市斤)等
辅单位与基本单位为固定换算
如1kg=1000g
同一个计量单位组内只能是固定换算。
辅单位与基本单位为浮动换算
如1pcs=1kg,1pcs=2kg,1pcs=0.5kg,......
跨计量单位组才可以是浮动换算,如pcs在数量组,kg在重量组。
浮动换算针对具体的物料,在物料单位换算里设置。
根据物料设置的换算方向,首次录入数量或辅单位数量触发计算对方数量,修改对方数量时不自动换算。
三、【单据分析】
以其他入库单为例,单据中有 "单位、实收数量、基本单位、实收数量(基本单位)、辅单位、实收数量(辅单位)", 分析各单位及数量的换算关系
1、未启用辅单位: 单据无法加载辅单位信息,不存在辅单位数量换算
2、启用辅单位,未配置物料单位换算关系: 单据无法加载辅单位信息,不存在辅单位数量换算
3、启用辅单位,配置物料单位换算关系,浮动换算: 单据加载辅单位信息,自由输入辅单位数量,数量、基本单位数量,不做变化
4、启用辅单位,配置物料单位换算关系,固定换算: 单据加载辅单位信息,自由输入辅单位数量,数量、基本单位数量,根据换算率变化
根据BOS上对应配置的实体服务规则和值更新事件, 更改相关值时,断点触发系统服务函数QTYConversion{params}
单位(值更新事件) QTYConversion{FQty,FBASEQTY,FMATERIALID|}
1、FBaseQty,FQty,FMaterialId;FExtAuxUnitQty,FBaseQty,FMaterialId;FSecQty,FExtAuxUnitQty,FMaterialId|
2、FQty,FBASEQTY,FMATERIALID|
实收数量(值更新事件) QTYConversion{FBASEQTY,FQty,FMATERIALID;FSNQty,FBASEQTY,FMATERIALID|}
1、FBaseQty,FQty,FMaterialId;FExtAuxUnitQty,FBaseQty,FMaterialId;FSecQty,FExtAuxUnitQty,FMaterialId|
2、FBASEQTY,FQty,FMATERIALID;FSNQty,FBASEQTY,FMATERIALID|
基本单位
1、FBaseQty,FQty,FMaterialId;FExtAuxUnitQty,FBaseQty,FMaterialId;FSecQty,FExtAuxUnitQty,FMaterialId|
2、FBASEQTY,FExtAuxUnitQty,FMATERIALID;FQty,FBASEQTY,FMATERIALID|
3、FBASEQTY,FQty,FMATERIALID;FSNQty,FBASEQTY,FMATERIALID|
辅单位
1、FBASEQTY,FExtAuxUnitQty,FMATERIALID;FQty,FBASEQTY,FMATERIALID|
2、FBASEQTY,FQty,FMATERIALID;FSNQty,FBASEQTY,FMATERIALID|
3、FSecQty,FExtAuxUnitQty,FMaterialId|
实收数量(辅单位)
1、FBASEQTY,FExtAuxUnitQty,FMATERIALID;FQty,FBASEQTY,FMATERIALID|
2、FBASEQTY,FQty,FMATERIALID;FSNQty,FBASEQTY,FMATERIALID|
3、FBaseQty,FQty,FMaterialId;FExtAuxUnitQty,FBaseQty,FMaterialId;FSecQty,FExtAuxUnitQty,FMaterialId|
4、FSecQty,FExtAuxUnitQty,FMaterialId|
参考
以上分析及处理方案是根据社区上相关帖子整理和一些个人的理解,如有不对之处,还请指正。
推荐阅读