1.前言
在3.11中,销售订单审核后自动生成了销售出库单。但出库单只是单据,真正发货前还要确认仓库里是否有足够的货。如果库存不足还允许出库,会造成超卖,后面无法交付。
理想的做法是:点击"出库"按钮时,先检查对应仓库的库存数量,库存小于出库数量就报错阻止出库;库存充足才正常出库。而库存数量存放在库存表中,不在出库单自身的数据里,业务公式要获取这些服务器端的数据,需要通过数据接口来查询。在业务公式中,调用数据接口的方式就是"子数据源"。
本教程讲解如何设计库存数据接口,并在出库单中新建一个库存校验业务公式,通过子数据源调用数据接口,实现出库前的库存校验。
2.操作步骤
(1) 设计库存数据接口
目标:在库存表中设计一个按商品和仓库查询库存数量的数据接口。
① 打开"库存表"模板,在设计页面中创建数据接口。

② 添加数据源,选择库存表,添加数据列:商品编号、商品名称、仓库编号、库存数量。

③ 设置参数:添加两个参数——"商品编号"和"仓库编号"。

④ 设置过滤条件:库存表的"商品编号"等于参数"商品编号",并且库存表的"仓库编号"等于参数"仓库编号"。因为同一个商品可能存放在多个仓库,库存数量必须按仓库分别查询,所以两个条件缺一不可。

(2) 新建库存校验业务公式
目标:在审核事件下新建一个库存校验业务公式。
原理:库存校验公式挂在销售出库单自身的"审核"状态改变事件下。点击"审核"时,公式先查询库存做判断,当库存不足时通过报错操作中断审核流程——云表中一个业务公式报错,本次触发的所有公式都会回滚,审核不会生效。
① 打开"销售出库单"模板,单击【业务公式】,选中"审核"状态改变事件。

② 单击【添加公式】,目标模板选择本模板——"销售出库单"。库存校验只是判断和报错,不需要操作其他模板的数据,目标模板选本表单即可。

③ 将公式命名为"库存校验"。

④ 设置数据源为"本表单.明细"。校验需要逐行检查出库单的每一个商品,数据源选明细表后,公式按明细行数逐行执行,子数据源参数才能按行取到每个商品的商品编号。

(3) 调用数据接口
目标:通过子数据源调用库存数据接口,获取对应仓库的商品库存数量。
① 展开"子数据源设置"区域,单击"+"添加子数据源。

② 选择上一步设计的库存数据接口。

③ 在数据源查询条件中,给两个参数赋值:
- 参数"商品编号":
本表单.明细.商品编号 - 参数"仓库编号":
本表单.仓库编号
表示按出库单的商品编号和出库仓库去查询对应仓库的库存数量。

(4) 设置满足条件与报错信息
目标:库存小于出库数量时停止审核并提示错误。
原理:审核是否被拦截,取决于"满足条件"是否成立。这里只需要校验"小于"这一种情况——当库存数量小于出库数量时,满足条件成立,执行报错,审核被阻止;当库存数量大于或等于出库数量时,满足条件不成立,不会报错,审核正常进行。
① 设置满足条件:
子数据源.库存数量 < 本表单.明细.数量。当对应仓库的库存数量小于出库数量时,条件成立,向下执行报错。
② 操作类型选择"报错",报错信息输入"库存数量不足,无法审核出库!"。

使用效果:点击"审核"时先查询对应仓库的库存数量,库存小于出库数量时弹出报错并阻止审核;库存充足时不报错,正常审核出库。

3.核心要点回顾
(1)业务公式中通过子数据源调用数据接口,可以获取服务器端其他模板的数据。
(2)数据接口要在数据源所在的模板中创建,并设置好参数与过滤条件。
(3)库存按仓库区分,校验时需同时传入商品编号和仓库编号两个参数,才能查到对应仓库的库存。
(4)库存校验公式挂在销售出库单自身的"审核"事件下,满足条件设为"库存小于出库数量"时报错,库存充足时不满足条件、正常审核出库。
(5)子数据源的作用:
- 业务公式中,除了本表单的数据外,还可以通过子数据源调用数据接口,获取服务器端其他模板的数据
- 子数据源查询出的数据可以作为判断条件,用于校验、扩展等场景
- 数据接口要在数据源所在的模板中创建,比如查询库存要在库存表中设计数据接口