查找BOM中死循环及所有死循环路径.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
查找BOM中死循环及所有死循环路径

查找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数据库存储结构父料号子料号ABBCCDDEEBBFFACD1其实在BOM的结构类似于树,此处我们定义:如果料号只在父料号栏中出现,而在子料号栏中不存在。其为根料号。如果料号只在子料号栏中出现,而在根料号栏中不存在。其为叶子料号。如果料号在父料号栏和子料号栏都存在,则其为中间节点。只有中间节点的料号才可能造成死循环。我们可以根据中间节点逐级向上展BOM来确认是否是死循环。通过引入如下结构,我们可以进行循环处理以找出死循环。表2中间结点及其父结点结构中间料号父结点料号表3查找死循环结构(上层料号每次变化,是目标料号的祖先节点)目标料号上层料号BOM查找路径首先,把BOM中间节点的料号放于目标料号,其上层料号为目标料号的父亲结点料号。每次向上展BOM时做如下逻辑处理:判断目标料号与上层料号是否相同,相同则说明目标料号存在死循环判断上层料号是否已经存在于BOM查找路径中,如果存在。说明上层料号存在死循环。判断比较结果集是否为空,如果为空则退出循环。程序结束程序的TSQL代码如下:--truncate table bom_middle_node--truncate table bom_endless_loop--truncate table bom_endless_loop_temp--truncate table bom_endless_errordeclare@i_bom_countintdeclare@i_cycle_countintset@i_bom_count= 100 set@i_cycle_count= 0 --1抓取BOM中间节点(非根和叶子节点),因为其可能造成展BOM死循环,后续Inner Join就是串取中间节点,根和叶子节点不会导致循环truncatetablebom_middle_nodeinsertbom_middle_nodeselectdistinctt1.matnr,t1.baugafromstwot1innerjoinstwot2ont1.hacno=t2.hacnoandt1.mjahr=t2.mjahrandt1.[month]=t2.[month]andt1.matnr=t2.baugawheret1.[HACNO ]=023242450019andt1.MJAHR=2012andt1.[MONTH]=08--2.Init bom_endless_looptruncatetablebom_endless_loop--初始化死循环查找料号为所有中间料号insertbom_endless_loopselectdistinctmatnr,bauga,matnr+-+baugafromstwowhere[HACNO ]=023242450019andMJAHR=2012and[MONTH]=08andmatnrin(selectmatnrfrombom_middle_node)-- matnr = 180-100-0376R truncatetablebom_endless_error--3.判断料号是否有死循环--WHILE (SELECT count(matnr) FROM bom_endless_loop) 0declare@i_process_timesintdeclare@i_error_countintset@i_process_times= 0 set@i_error_count= 0WHILE@i_process_times 30 -- WHILE (SELECT count(matnr) FROM bom_endless_loop) 0BEGIN--3.1 Clear table bom_endless_loop_temptruncatetablebom_endless_loop_temp--3.2 Load current data to bom_endless_loop_tempinsertbom_endless_loop_tempselect*frombom_endless_loop--3.3 clear table bom_endless_looptruncatetablebom_endless_loo

文档评论(0)

abf4675328 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档