最近,在项目上我们遇到了一个需求是,用户想要在一张报表上,看到某一个仓库中批次物料和非批次物料的库存On Hand信息。
其实,系统也有一张原生的库存当前快照报表,但是由于批次物料会涉及太多的批次信息,因此我们想要看具体的某个数量时,所有的批次信息就会挤在一起,看起来非常不方便,所以我们想尝试用Saved Search能做出一个查询,便于用户查看库存信息。
具体搜索结果的页面信息如下所示:
上图为非批次物料的显示截图,下图为批次物料的显示截图。
我们看到,最终的结果界面一共显示有3列已被Group与Sum后的信息:
•Item,包含批次物料与非批次物料的名称信息;
•Lot Number:批次物料将显示批次号信息,非批次物料将显示为None,无批次信息;
•On Hand:当前在手库存数量累计总和,负数表示为负库存,不存在库存为0/为空的数值;
从以上结果中我们可以知道,Item A,Item B,Item C,Item D为非批次物料,Lot Number显示为None,对应有库存数量,其中Item D目前为负库存数量;Item F为批次物料,对应有Lot 1与Lot 2两个不同的批次,对应不同的库存数量。
具体的Search创建的Criteria与Results我们放在下面,供大家参考:
这里需要注意,紫色框着的部分是关于Location的设置,Inventory Location与Inventory Number/Bin on Hand:Location两个字段才能限定批次物料与非批次物料的Location为Location A,因为数据来源不相同,这一点大家可以自己尝试看看不同的结果;
橙色框住的Formula中,不为空且不为0的设置是为了使最后呈现的On Hand公式列的数值中,不包含0和空的数值,这两类数字对于用户来说并没有实际的参考意义;
在Results中,我们需要确保非批次物料的数据来源为Item信息;确保批次物料的数据来源为Item子表Inventory Number/Bin on Hand的信息;同样也要确保公式能够将非批次物料与批次物料的数值返回至同一列;
这里Formula涉及一个CASE WHEN的语句,CASE when {islotitem}='F' THEN {locationquantityonhand} else {inventorynumberbinonhand.quantityonhand} END
意思是说,非批次物料与非批次物料我们让他们找到各自应该返回的数值,然后在同一列中呈现。最终呈现的搜索界面是Group与Sum后的结果,具体的Detail我们可以参考下图:
如非批次物料Item A,我们看到Detail信息中包括Inventory Type,Is Lot Numbered Item,Item名称,物料的Location A,对应在Location A的总数量,这里后面的批次物料Lot Location、Lot Number与Lot Quantity都显示为空或者0,最后一列则是公式列,我们让非批次物料的On Hand数量返回至Location On Hand的数量(Results中紫色框),即Location Quantity157335,与Summary中的数字相同;
对于批次物料Item F的Detail来说,我们看到其中同样也包括Inventory Type,Is Lot Numbered Item,Item名称,物料的Location A,对应在Location A的物料总数量,后面的批次物料的Lot Location、不同的Lot Number、以及不同的Lot Quantity,最后一列则是公式列,我们让批次物料的On Hand数量返回至Inventory Number/Bin on Hand:On Hand的数量(Results中橙色框),即Lot QTY为50000与100000,与Summary中的数字保持一致;
而对于Filter来说,如果我们在Criteria的表达式中使用了Inventory Location与Inventory Number/Bin On Hand的Location字段,则这些字段是没有办法显示在Filter区域中的,因此这里只设置了Item的Name为Filter;
各位可以根据自己的需求尝试,可能会有更多的发现,也欢迎各位随时交流~