1. 业务场景

当入库单新增一条数据,需要去查询库存是否有该添加的商品信息,如果有实现库存数量的更新,如果没有实现新增商品信息库存。

2. 操作步骤

【菜单路径】单据中心—>辅助工具—>表间公式—>新建一个表间公式

首先要绑定好准备实现的业务模型,在此案例中,因为是使用“采购入库”这个表单而希望去触发库存数量的更新,所以选用“采购入库”【业务模型】。

点击配置后,再点击【添加】并搜索需要映射的表,在此案例中需要更新库存,所以我们选择库存明细这个表。

即可进入设置映射界面

2.1 更新库存

当库存里有新添加的商品信息,则为更新库存。
首先我们需要配置映射的执行条件,在此案例中,我们需要判断入库单里指向的仓库中是否有新添加的商品信息,所以我们就要同时比较及匹配两个信息,分别是所属仓库信息以及商品信息。

  1. import com.alibaba.fastjson.JSONObject;
  2. JSONObject json=JSONObject.parseObject(cur.cpmcc);
  3. String sql="select * from w_warehousedetail where F_CPMC = '"+json.label+"' AND F_SSCK='"+mainCur.rhck+"' " ;
  4. return com.redxun.form.core.listener.FormulaUtil.isExistBySql(sql)

因为产品名称为编辑型按钮控件,所以在储存时分为产品名称和产品名称ID,返回的时候是一个JSON数据,我们需要引入解析JSON的脚本,并转化为String字符串来进行比较。
F_CPMC = '"+json.label+"'这里是比较产品名称,此时的json已经转化完成了。
F_SSCK='"+mainCur.rhck+"' "这里是比较仓库信息,需要匹配到相同的仓库。
如果上述的SQL成立,则表示有匹配到相同仓库的相同产品的信息,此时我们就可实现库存数量的更新,操作类型需要选择【更新】

选择更新后会出现过滤语句,过滤语句即是匹配对应的值,在构建SQL语句中,他代表了where后面的值,在此案例,我们需要匹配相同的产品名称和所属仓库。
F_CPMC_NAME='${cur.cpmz}' AND F_SSCK = '${mainCur.rhck}'

最后,我们只需要修改库存明细的剩余数量。在【目标表映射】中找到剩余可用数量,并设置从脚本函数计算获取值,并配写脚本函数,新的库存数量=当前库存数量+新入库数量。
return "F_SYKYSL +" + cur.drksl;

至此,我们即可实现更新商品库存的效果。

2.2 新增库存

当库存里有新添加的商品信息,则为新增该商品的库存。
我们在设置映射的界面中再次选择【添加】,使用相同的表“库存明细”
执行条件和上面更新的情况是相反的,如果匹配不到相同的仓库和产品信息,证明此产品不存在或此产品在此仓库不存在。只需要在return时加个感叹号使得搜索条件为空时执行即可。

  1. import com.alibaba.fastjson.JSONObject;
  2. JSONObject json=JSONObject.parseObject(cur.cpmcc);
  3. String sql="select * from w_warehousedetail where F_CPMC = '"+json.label+"' AND F_SSCK='"+mainCur.rhck+"' " ;
  4. return !com.redxun.form.core.listener.FormulaUtil.isExistBySql(sql)

在【目标表映射】中选择新增数据时添加的信息,我们需要可以从【采购入库】这张表单中获取仓库名,产品名,以及此次入库的数量,即可添加一条新的产品信息。注意因为ID_为主键且不为空, 所以我们需要给予他生成的值,采用“由系统产生的主键字段值即可”

至此,我们即可实现新增商品库存的效果。

2.3 表单方案绑定表间公式

【菜单路径】表单方案中选择刚才所采用的“采购入库”表单,选择【编辑】,在【表间公式】那一栏中选择刚才配置的公式名字,点击确定即可。

2.4 实际效果

更新前,“维他奶”在“太古仓”的库存为“49”

使用“采购入库表单”,将“维他奶”入库“太古仓”,数量为“30”

数据库得到更新,更新后库存为“79”

文档更新时间: 2020-10-07 21:24   作者:zhuyunyun