案例背景:BOM在生产领域是指物料清单,就是一件产品会有多个部件组成,每个部件又分别有自己对应的其他子材料组成,想要实现我想生产这几个产品,可以自动计算出需要多少部件,需要多少子材料,就可以参看此案例。
实现思路:在基础表中录入每个产品需要的组成部件,一级组成部件对应的子材料,然后在清单表中,根据产品名称获取对应的组成部件一一拆分整合起来,再根据组成部件再获取对应的子材料再进行拆分。
应用安装链接:https://jiandaoyun.com/a/5ff5866e2f44f700063f7c49
表单外链:https://syos39w472.jiandaoyun.com/f/5ff586985a286300073c4577
知识库外链:https://t6ixa9nyl6.jiandaoyun.com/sharedoc/6hc77ELmeR6qv9DMyDN9Zh
一、基础表设计
子物料数(数字字段):COUNT(BOM明细.子物料)
子物料集合(单行文本):TEXT(BOM明细.子物料)
用量集合(单行文本):TEXT(BOM明细.用量)
二、基础数据录入
产品,组成部件,子材料,这些数据可以全部录入在一张表中,主材料录入在主表中,对应的组成的子材料录入在子表单中,如果有的部件,没有对应的子部件了,也需要录入对应的数据,不然最后的明细就会少数据。就比如下面的示例数据中,第一行的主产品【草莓籽】,他没有下一级的组成成分了,那么子表单的子物料就只要录入他自己就行了
三、BOM表设置
产品明细公式
一级材料集合(单行文本):数据联动,关联BOM基础表,当主产品等于本表的产品名称获取对应的子物料集合
一级材料用量集合(单行文本):数据联动,关联BOM基础表,当主产品等于本表的产品名称获取对应的用量集合
物料数(数字字段):数据联动,关联BOM基础表,当主产品等于本表的产品名称获取对应的用料数
数量重复(单行文本):LEFT(REPT(CONCATENATE(TEXT(产品明细.数量),','),产品明细.物料数),LEN(REPT(CONCATENATE(TEXT(产品明细.数量),','),产品明细.物料数))-1)
一级用料子表单公式
序号(数字字段):根据主表的一级用料总行数字段的值联动子表单行数基础表,参考案例:动态显示子表单行数案例
材料名称(单行文本):SPLIT(一级材料总集合,',')[VALUE(一级用料.序号)-1]
材料用量(数字字段):一级用料.单个产品需要材料用料*一级用料.产品数量
单个产品需要材料用料(数字字段):SPLIT(一级材料用量集合,',')[VALUE(一级用料.序号)-1]
产品数量(数字字段):SPLIT(产品数量重复,',')[VALUE(一级用料.序号)-1]
二级材料集合(单行文本):数据联动,关联BOM基础表,当主产品等于本表一级用料子表单中的材料名称获取对应的子物料集合
二级用量集合(单行文本):数据联动,关联BOM基础表,当主产品等于本表一级用料子表单中的材料名称获取对应的用量集合
二级材料数(数字字段):数据联动,关联BOM基础表,当主产品等于本表一级用料子表单中的材料名称获取对应的用料数
数量重复(单行文本):LEFT(REPT(CONCATENATE(TEXT(一级用料.材料用量),','),一级用料.二级材料数),LEN(REPT(CONCATENATE(TEXT(一级用料.材料用量),','),一级用料.二级材料数))-1)
二级用料子表单公式
序号(数字字段):根据主表的二级用料总行数字段的值联动子表单行数基础表,参考案例:动态显示子表单行数案例
二级材料名称(单行文本):SPLIT(二级材料总集合,',')[VALUE(二级用料.序号)-1]
二级材料用量(数字字段)【最终需要的结果】:二级用料.单个一级需要材料数*二级用料.一级数量
单个一级需要材料数(数字字段):SPLIT(二级材料用量集合,',')[VALUE(二级用料.序号)-1]
一级数量(数字字段):SPLIT(一级用料数量重复,',')[VALUE(二级用料.序号)-1]
主表字段公式
产品数量重复(单行文本):TEXT(产品明细.数量重复)
一级材料总集合(单行文本):TEXT(产品明细.一级材料集合)
一级用料总行数(数字):COUNT(SPLIT(一级材料总集合,','))
一级材料用量集合(单行文本):TEXT(产品明细.一级材料数量集合)
一级用料数量重复(单行文本):TEXT(一级用料明细.数量重复)
二级材料总集合(单行文本):TEXT(一级用料明细.二级材料集合)
二级用料总行数(数字):COUNT(SPLIT(二级材料总集合,','))
二级材料用量集合(单行文本):TEXT(一级用料明细.二级用量集合)