查找BOM 中死循环及所有死循环路径
在制造业中,普通使用BOM (Bill Of Material )来表示物料之间层次及结构关系。但是在实际作业中,可能对BOM 中料号维护错误。造成相应死循环,这对于后续计划及稽核都带来诸多问题。本文主要用SQL 语句来查找BOM 中存在死循环的料号及对应的所有路径。
图1 BOM 结构
图1是示例的BOM 结构,其中相应的路径A ->B ->C->D->E->B ->F->A ,存在死循环料号A 和B 。在料号的BOM 结构在数据库中存储并不是这样,其部分料号存储结构如下。
表1 BOM 数据库存储结构
其实在BOM 的结构类似于树,此处我们定义:如果料号只在父料号栏中出现,而在子料号栏中不存在。其为根料号。如果料号只在子料号栏中出现,而在根料号栏中不存在。其为叶子料号。如果料号在父料号栏和子料号栏都存在,则其为中间节点。只有中间节点的料号才可能造成死循环。
我们可以根据中间节点逐级向上展BOM 来确认是否是死循环。通过引入如下结构,我们可以进行循环处理以找出死循环。
表3查找死循环结构(上层料号每次变化,是目标料号的祖先节点)