找回密码
 立即注册

QQ登录

只需一步,快速开始

Timothy.Xu 讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2020-11-30 11:39  /   查看:4147  /  回复:0
本帖最后由 Tracy.Liu 于 2020-12-4 12:01 编辑

最近有格友反馈,我们的库存管理系统似乎出现了一些小小的“毛病”:
关于系统提供的库存管理存在一定的问题,销售出库没有减少库存,反而库存多了
(出处: 葡萄城产品技术社区)

这位大佬 @362851611@qq.co 提出,我们的库存管理系统,在库存管理员点击出库后,库存反而会变多,具体情况如下:
我们首先使用销售员创建一个100箱苹果的订单,此时可以看到苹果库存为449箱:

image.png915616760.png

然后使用销售总管审核订单后,使用库存管理员流转此销售单,此时却发现,本应变为349的库存,变成了549!

image.png445239867.png
image.png147859191.png

这特么到底从哪儿冒出来200箱苹果!? image.png767032165.png
经过活字格团队的一一致努力,发现了问题所在:在[服务端命令]-[修改物品库存]-[数据表操作:更新 物品表]中,Excel 公式无法正确判断,导致出错。

image.png428200072.png

这里需要我们首先明确一下背景逻辑:此处的参数"出入库"是从哪里来的呢?为什么需要等于5?答案是在[出入库-销售单流转出库]页面的保存按钮中,我们调用了服务端命令[新建出入库单],在此服务端命令中,参数“出入库”被赋值为5。而这个参数“出入库”又会在上图的服务端命令中与5在 IF 函数中对比判断,如果相同则为库存减少,否则为库存增多:

image.png939031372.png

那么如此看来,好像没什么毛病啊?为什么会出错呢? image.png567902221.png

这里就牵扯到程序设计一个重要的概念——数据类型。我们在平时设计数据表,或是写代码的时候,都了解文本和整数类型的区别吧?例如数据无法正确计算时,往往是因为数字没有正确设置为整数/小数类型。此处也是一样,实际上参数“出入库”的数据类型为文本,而 IF 函数中的数字5为整数类型,因此二者永远无法匹配,IF 函数也恒进入 false 分支,自然也就总是判断为出库了。
接下来是重点:那么为什么参数“出入库”就被赋值为文本类型呢?
我们来聚焦一下服务端命令[新建出入库单]的赋值框:

image.png953623962.png

内容为“5”。这里就是问题所在!由于赋值框和单元格一样,可以填入任何值,此时默认是文本类型的,当我们需要它为整数/日期等类型的时候,我们需要加上等于号“=”,此时值会被判断为一个 Excel 函数,那么就会正确识别为整数类型了。

因此,此处可以有两种修改方式:
1、将服务端命令[新建出入库单]的赋值框改为 =5,将参数统一为整数类型;
2、将服务端命令[修改物品库存]中 IF 函数的 5 改为 "5",将参数统一为文本类型。

更严谨的做法是,将服务端命令[修改物品库存]中 IF 函数改为
  1. =if(OR(出入库=5,出入库="5"),-1,1)
复制代码
这样无论传进来的是文本5还是数字5,都可以正确地进行判断了~
当然还有细心的小伙伴发现,服务端命令[修改物品库存]中的条件命令里,出入库依然为整数类型的 =5 ,为什么可以正确地与文本类型的参数“出入库”进行比较呢?这是因为:
条件命令是我们用活字格自己实现的命令,我们会进行预判,尝试进行类型转换,再进行判断。比如在这里的参数“出入库”是文本类型的“5”,后面值是数字类型的5,逻辑中会先尝试进行日期转换判断,发现不对然后又会都转成数字进行判断,发现可以转换,而且是相等的。假如转换成数字也不行,就会变成文本类型进行比较,这样就省去了我们许多的数据类型转换时间;而在 Excel 函数中,我们不会这样进行转换,因为公式有自己很复杂的处理逻辑,是什么值就给它什么值,公式内部进行处理。


在学习库存管理系统的小伙伴们,可以注意一下这个要点哦~目前是6.0.3.0-6.0.102.0,也就是支持服务端命令的版本都会出现本帖的情况,我们会尽快在后续的 Hotfix 中修正这个小毛病,也希望各路眼尖的大神发现活字格的问题之后及时向我们反馈,我们会用诚意满满的金币答谢各位~

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部