1.需求
当商品(比如牛奶,面包等有保质期的商品等)有特殊的要求必须按照——先进先出后进后出的原则进行出库,该如何实现呢?
如下图,《FT-出库单》中有3条出库明细记录,004商品需要出库40,005商品需要出库20,006商品需要出库20
《库存表》中,004商品有3个不同的批次,005商品有2个不同的批次,006商品有2个不同的批次。
执行出库后,则按照先进先出后进后出原则出库,生成“出库记录”如下图,004商品有3条出库记录,合计出库数量40,004商品有2条出库记录,合计出库数量20,006商品有1条出库记录出库数量20
2.模板
①《库存表》中增加数据项“批次”数据项,并用年月日+序号的方式记录商品的进仓时间,以便能清晰的判断哪个库存将先出;
该模板的主键为 仓库编号+商品编号+批次,3个数据项联合唯一。
②《FT-出库单》中增加“出库记录”明细,用于记录每个批次商品的出库数量;
3.实现
利用业务公式子数据源实现,
①在《FT-出库单》中设置状态数据项“出库”
②校验库存,库存表中每个商品不同批次的合计数量是否够出库,不够出库则报错;
利用子数据源合计不同批次的库存合计,库存数据在模板《库存表》,因此需要在库存表中设计数据接口“库存合计”
《库存表》中设计数据接口“库存合计”,数据源为本模板,数据列设置如下,针对“库存数量”调用“合计”函数
过滤条件设置如下,添加2个参数,过滤不同仓库不同商品的合计数量;
③出库时更新本模板“FT-出库单”的“出库记录”。
该模板有2个明细表,针对明细表操作时,必须先针对基本信息操作,(在出库单总表中)根据匹配条件找到这张出库单,此时数据源为“本表单”只需执行一次;
④在《库存表》中设计数据接口,根据仓库和商品查询不同批次的库存明细,根据批次升序,将批次小的排在前面,达到先分配的目的。
针对“FT出库单.记录明细”操作。每个商品都需要出库,数据源选择“出库明细”,
先调用子数据源——(模板数据接口)“FT库存表.库存明细”查询不同批次的商品库存明细,该数据接口查询结果有多条记录,必须勾选“多记录”;
再调用第2级子数据源——“FT出库单.出库合计”(插入一个批次的记录明细后,需要重新查询出库合计,因此必须设置为第1个子数据源的子数据源),该数据接口查询结果只有一条记录;
设置满足条件。当出库还未完成,即 本表单.出库明细.数量 > 出库合计.合计数量时,应在“记录明细”中插入新的出库记录;
赋值“FT出库单.记录明细.数量”,填写条件表达式。当次批次的库存数据量 < 还需出库的数量(出库明细.数量-出库合计.合计数量)时,直接赋值本批次的数量,当次批次的库存数据量 ≥ 还需出库的数量(出库明细.数量-出库合计.合计数量)时,出库还需出库的数量(出库明细.数量-出库合计.合计数量)。
《库存表》中设计数据接口“库存明细”,数据源为本模板,数据列选择本模板所有的数据列,过滤条件如下,将不同批次的库存都筛选出来,并只过滤出“库存数量”>0的记录;
《FT出库单》中设计数据接口“出库合计”,数据源为本模板.记录明细,数据列选择设置为“合计数据”,针对商品合计已记录的出库数量
过滤条件如下,添加3个参数,查询该出库单中此仓库该商品的合计已记录的出库数量;
④出库时扣减《库存表》的数量,取消时增加《库存表》的数量。
此时的匹配条件有3个 仓库编号、商品编号、批次;
⑤取消出库时,删除“FT出库单.记录明细”的数据。
模板《FT出库单》有2个明细表,针对明细表操作时,必须先针对基本信息操作,(在出库单总表中)根据匹配条件找到这张出库单,此时数据源为“本表单”只需执行一次;
找到这个出库单后,删除”记录明细“中的所有数据;
在《FT出库单》的“出库”状态改变事件下有4个业务公式,校验放在第一个,若出错不执行,不用回滚,删除放在最后一个,先利用“FT出库单”的“记录明细”恢复“库存表”后,再删除记录;