系统自动根据当天已审核的“销售订单”生成“生产计划”,一个“销售订单”对应一个“生产计划”;
根据“库存表”中已有的库存分配“生产计划”的“分配库存”;
“库存表”中的库存被“分配”减少库存,锁定分配库存的数量;
当库存不足时创建“采购订单”;
上述功能如何实现呢?

《销售订单》

《生产计划》

《库存表》

《采购订单》
★利用计划任务每天自动执行无人值守操作,当计划任务保存表单时,触发业务公式的保存表单后事件,在该事件中调用子数据源对“销售订单”、“生产计划”、“库存表”、“采购订单”做操作。
详细实现步骤如下:
1)新建计划任务,并配置计划任务执行的模板“计划任务测试”。
①在云表浏览器的左侧导航栏中依次打开“系统管理”-“系统服务”-“计划任务服务”文件夹,找到“计划任务”,新建计划任务,设置计划任务的“开始”时间,间隔周期,并勾选“启用”,选择执行计划任务的模板“计划任务测试”;
如下图配置后,从9月13日开始,每天23:59:59分自动新建以后一张“计划任务测试”表单。

②给“计划任务测试”设置数据项“ID”,通过自动编号给该数据项自动赋值;
该数据项的作用,主要用于标注本次操作将对哪些“销售订单”,“生产计划”执行操作,便于数据接口的快速精准过滤;

2)标记当天审核的销售订单。在《计划任务测试》模板的保存表单后事件中,添加对《销售订单》的操作,给当天审核的销售订单赋值“任务ID”。

3)在《计划任务测试》模板的保存表单后事件中,根据当天审核的“销售订单”生成“生产计划”,一个“销售订单”对应一个“生产计划”。
①针对《生产计划》的基本信息操作时,调用子数据源
销售订单.销售订单列表(ID)对“生产计划”执行“新建表单”操作,并赋值任务ID;

该数据接口的数据源为“本模板(销售订单)”,数据列为销售订单的基本数据项,过滤条件如下;

②针对《生产计划》的明细信息操作时,需要完成2件事:根据销售订单的商品明细生成生产计划的商品明细,并计算商品的可分配库存。
当商品的库存为空的时候,直接分配库存为0;
当商品的销售数量 < 剩余库存( 库存数量 - 已合计分配库存 )时,直接分配库存销售数量;
当商品的销售数量≥剩余库存( 库存数量 - 已合计分配库存 )时,直接分配剩余库存;

★根据销售订单的商品明细生成生产计划的商品明细。调用数据接口
销售订单.查询销售商品明细(销售单号),查询该销售订单的商品明细;
该数据接口的数据源为“本模板(销售订单).明细”,数据列为明细的数据项,过滤条件如下:

数据接口:销售订单.查询销售商品明细(销售单号)
★计算商品的可分配库存。查询《库存表》原料仓(为了简便以仓库编号02 为例)的商品库存数量
库存表.查询商品库存(仓库编号,商品编号),并查询合计被《生产计划》分配的库存
生产计划.商品合计分配库存(任务ID,商品编号);
数据接口“查询商品库存”,数据源为“本模板(库存表)”,数据列为本模板的数据项,过滤条件中有2个参数;

数据接口:库存表.查询商品库存(仓库编号,商品编号)
数据接口“商品合计分配库存”,数据源为“本模板(生产计划).明细”,数据列“合计分配库存”调用“合计”函数,合计已分配的库存,

数据接口:生产计划.商品合计分配库存(任务ID,商品编号)
过滤条件中有2个参数“任务ID”和“商品编号”;

数据接口:生产计划.商品合计分配库存(任务ID,商品编号)
4)在《计划任务测试》模板的保存表单后事件中,根据该“任务ID”对应的所有“生产计划”,计算商品的分配库存合计,将分配的库存进行锁定和扣减

给锁定数量赋值时,填写条件表达式,当库存表的库存≥合计分配库存时,锁定“合计分配库存”数量,否则,锁定库存表中已有的库存数量;

给库存数量赋值时,填写条件表达式 当 库存表的库存≥合计分配库存时,库存数量=库存数量-合计分配库存,否则为0;

①计算商品的分配库存合计,通过数据接口
生产计划.商品分配库存合计(任务ID)计算本次任务中不同商品的分配库存合计;
数据源为本模板(生产计划).明细,数据列添加“商品编号”和“合计(本模板.明细.分配库存)”,根据商品合计分配库存;

过滤条件添加参数“任务ID”,查询该任务ID下的所有商品明细;

5)在《计划任务测试》模板的保存表单后事件中,若有未足额分配的商品,自动生成“采购订单”;
①针对采购订单的基本信息操作,根据“任务ID”查询未分配足额的商品数,若未分配的商品数>0,则新建“采购订单”;

数据接口 生产计划.未分配足额商品数(任务ID) ,数据源为“本模板(生产任务).明细”,数据列中计数商品;

过滤条件中添加参数“任务ID”,过滤出该“任务ID”下 生产总量 > 分配库存 的商品;

②针对采购订单的“明细”操作,通过数据接口
生产计划.商品合计情况(任务ID)查询该任务ID下所有商品的合计情况,当商品的生产总量 > 分配库存 时,需要采购;

设计数据接口 生产计划.商品合计情况(任务ID),数据源为“本模板(生产计划).明细”,数据列中根据商品分组小计 生产总量和分配库存,

过滤条件,根据“任务ID”过滤;

6)应用效果
①销售订单。9月13日审核2个销售订单,合计销售 001商品 25台,002商品 20台,008商品 30台;

销售订单1

销售订单2
②库存表如下:

库存表
③根据计划任务自动运行后
根据销售订单自动生成2个“生产计划”,并填写好分配库存,合计分配库存数量 001商品 25台,002商品0台,008商品24台;


④自动锁定已分配的库存

⑤自动生成“采购订单”,采购足额分配的商品数量
