Discoverer导出的多层BOM如何转为能够直接体现采购层的单层BOM?

这个标题可能有点拗口!

我们发现Discoverer导出的FG零件清单,只有第一层。

第一层的每个Phantom件又有其它Purchased Item,Reference Item,Phantom....

第二层,第三层也是如此。但是工作中我们需要一份Excel的物料Forecast,制作这份Forecast可以从Discrete Job中建立,马上取消方式得到采购层的BOM。一个一个的操作显然有点浪费时间,最后,我决定用VBA来重组Discoverer数据,这些都是供应链需要

具体步骤

一、固定格式,以后每次使用这个VBA都要遵守此格式。

1.1,Sheets(“BOM”)格式:

1.2,Sheets(“FC”)格式:

1.3,假设最终层为4层,Layer1,Layer2,Layer3都是过渡的Sheet,所以不做Title设定,Layer4格式:

二、VBA代码部分:

2.1,建立FG下的BOM提取,代码:

Sub FG_layer()Dim i, j, k As Integer
Dim c As Range
k = 1
Sheets.Add after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "Layer_1"
For i = 1 To Sheets("FC").UsedRange.Rows.CountFor Each c In Sheets("BOM").Range("A:A")If c = Sheets("FC").Cells(i, 1) ThenSheets("BOM").Rows(c.Row).Copy Sheets("layer_1").Rows(k)k = k + 1End IfNext c
Next i
End Sub

2.2,建立Layer1下的BOM,把Layer1下的物料清单从BOM中提取出来:

错误记录:if A<>B then statement,     Else出错,因为这个else的符合的条件太多,建议使用Elseif condition

Sub Layer_1()'we have found all the layer1 under FG SKU, now we need to find all sub-layer under Layer1
Dim i, j, k As Integer
Dim c As Rangek = 1
Sheets.Add after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "Layer_2"For i = 1 To Sheets("Layer_1").UsedRange.Rows.CountIf Sheets("Layer_1").Cells(i, 4) <> "Phantom item" ThenSheets("layer_2").Cells(k, 1) = Sheets("Layer_1").Cells(i, 1)Sheets("layer_2").Cells(k, 3) = Sheets("Layer_1").Cells(i, 2)Sheets("layer_2").Cells(k, 4) = Sheets("Layer_1").Cells(i, 3)Sheets("layer_2").Cells(k, 5) = Sheets("Layer_1").Cells(i, 4)k = k + 1ElseIf Sheets("Layer_1").Cells(i, 4) = "Phantom item" ThenFor Each c In Sheets("BOM").Range("A:A")If c = Sheets("Layer_1").Cells(i, 2) ThenSheets("layer_2").Cells(k, 1) = Sheets("Layer_1").Cells(i, 1)Sheets("layer_2").Cells(k, 2) = cSheets("layer_2").Cells(k, 3) = c.Offset(0, 1)Sheets("layer_2").Cells(k, 4) = c.Offset(0, 2) * Sheets("Layer_1").Cells(i, 3)Sheets("layer_2").Cells(k, 5) = c.Offset(0, 3)k = k + 1End IfNext cEnd If
Next i
End Sub

三、把第二层下的子件也提取出来,If c = Sheets("Layer_2").Cells(i, 3),就是永远都是把最新的层为依据去总BOM中查找。

Sub Layer_2()
Dim i, j, k As Integer
Dim c As Rangek = 1
Sheets.Add after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "Layer_3"For i = 1 To Sheets("Layer_2").UsedRange.Rows.CountIf Sheets("Layer_2").Cells(i, 5) <> "Phantom item" Then   Sheets("layer_3").Cells(k, 1) = Sheets("Layer_2").Cells(i, 1)Sheets("layer_3").Cells(k, 4) = Sheets("Layer_2").Cells(i, 3)Sheets("layer_3").Cells(k, 5) = Sheets("Layer_2").Cells(i, 4)Sheets("layer_3").Cells(k, 6) = Sheets("Layer_2").Cells(i, 5)          k = k + 1    ElseIf Sheets("Layer_2").Cells(i, 5) = "Phantom item" Then    For Each c In Sheets("BOM").Range("A:A")If c = Sheets("Layer_2").Cells(i, 3) ThenSheets("layer_3").Cells(k, 1) = Sheets("Layer_2").Cells(i, 1)Sheets("layer_3").Cells(k, 2) = Sheets("Layer_2").Cells(i, 2)Sheets("layer_3").Cells(k, 3) = cSheets("layer_3").Cells(k, 4) = c.Offset(0, 1)Sheets("layer_3").Cells(k, 5) = c.Offset(0, 2) * Sheets("Layer_2").Cells(i, 4)Sheets("layer_3").Cells(k, 6) = c.Offset(0, 3)        k = k + 1        End IfNext cEnd IfNext i
End Sub

四、同理,把第三层下Phantom的子件提取出来,没有子件的purchased、Reference就直接拷贝到新的Sheet中:

Sub layer_3()Dim i, j, k As Integer
Dim c As Rangek = 1
Sheets.Add after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "Layer_4"For i = 1 To Sheets("Layer_3").UsedRange.Rows.CountIf Sheets("Layer_3").Cells(i, 6) <> "Phantom item" ThenSheets("layer_4").Cells(k, 1) = Sheets("Layer_3").Cells(i, 1)Sheets("layer_4").Cells(k, 5) = Sheets("Layer_3").Cells(i, 4)Sheets("layer_4").Cells(k, 6) = Sheets("Layer_3").Cells(i, 5)Sheets("layer_4").Cells(k, 7) = Sheets("Layer_3").Cells(i, 6)k = k + 1ElseIf Sheets("Layer_3").Cells(i, 6) = "Phantom item" ThenFor Each c In Sheets("BOM").Range("A:A")If c = Sheets("Layer_3").Cells(i, 4) ThenSheets("layer_4").Cells(k, 1) = Sheets("Layer_3").Cells(i, 1)Sheets("layer_4").Cells(k, 2) = Sheets("Layer_3").Cells(i, 2)Sheets("layer_4").Cells(k, 3) = Sheets("Layer_3").Cells(i, 3)Sheets("layer_4").Cells(k, 4) = cSheets("layer_4").Cells(k, 5) = c.Offset(0, 1)Sheets("layer_4").Cells(k, 6) = c.Offset(0, 2) * Sheets("Layer_3").Cells(i, 5)Sheets("layer_4").Cells(k, 7) = c.Offset(0, 3)k = k + 1End IfNext cEnd IfNext iSheets("layer_4").Rows(1).InsertSheets("layer_4").Cells(1, 1) = "FG"Sheets("layer_4").Cells(1, 2) = "Layer1"Sheets("layer_4").Cells(1, 3) = "Layer2"Sheets("layer_4").Cells(1, 4) = "Layer3"Sheets("layer_4").Cells(1, 5) = "Layer4"Sheets("layer_4").Cells(1, 6) = "Usage"Sheets("layer_4").Cells(1, 7) = "Item_Type"End Sub

五、最后,我们用一个Sub S_total把上文的四个Sub按先后顺序汇总起来,以后只要直接使用S_Total过程就可以了。

注意事项:

1,因为没有加入Error处理语句(懒),所以必须保证每个物料的Item Type都是有参数的,不能是#N/A,不然报错

2,运行完第四个Sub之后,Layer_4的清单中item Type应该只有Purchase和Reference

3,没有加入Subassembly(需要单独建工单的Item,如果需要加入,可以考虑与Phantom同属性,至少在采购,物料计划这个领域可以这样认为)

Discoverer导出的多层BOM如何拼装为能够直接体现采购层的单层BOM?相关推荐

  1. PLSQ执行同样的sql,使用mybatis进行动态拼装执行的时候非常慢的问题解决

    如题,项目中碰到了同样的sql,在plsql中执行很快,几乎秒出,但在程序中使用mybatis框架时,却非常的慢,前提是动态拼装的sql.在使用写死的参数,不会出现很慢的效果.最后发现是使用 #{xx ...

  2. 拼装sql_3分钟短文 | Laravel复杂SQL超多WHERE子句,本地作用域你没用过

    引言 使用框架就是为了方便把注意力集中在逻辑上,而不用关心与数据库操作的方方面面.Laravel提供的 eloquent orm 使用面向对象的方式封装了PDO数据库操作,使用起来非常方便,对于复杂的 ...

  3. 第十五届全国大学生智能汽车竞赛赛道拼装图

    作者:卓晴博士,清华大学自动化系 更新时间:2020-08-08 Saturday 在博文 2020年智能车竞赛由预赛赛道拼接成决赛赛道的方案 公布了2020年线上比赛赛道以及相应的全国总决赛拼接图. ...

  4. Gson应用:利用map和list来拼装Json消息

    Gson应用:利用map和list来拼装Json消息 1 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import ja ...

  5. soap响应报文拼装_SOAP学习,构建实际的报文格式

    因为需要做一个SOAP的接口对接,对方环境没有弄好不能抓包,也只会调用不懂格式构成,我们只想做个轻量级的接口,不需要支持SOAP的具体格式,只需要针对接口指定的具体参数名,解析字符串就可以了. 所以需 ...

  6. 拼装sql_SQL优化最干货总结(2020最新版)

    前言 BATJTMD等大厂的面试难度越来越高,但无论从大厂还是到小公司,一直未变的一个重点就是对SQL优化经验的考察.一提到数据库,先"说一说你对SQL优化的见解吧?". SQL优 ...

  7. String path = request.getContextPath(....拼装当前网页的相对路径

    原文地址 <% String path = request.getContextPath(); String basePath = request.getScheme()+"://&q ...

  8. 该服务器支持最多2100个参数,Mybatis批量查询拼装参数超长的解决办法

    在使用Mybatis动态拼装查询参数时,执行过程中如果你的项目报错如下 Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 传入的请求具有过 ...

  9. 雅马哈机器人左手右手系统_3名工人花1000元用两天拼装机器人,空气不好时自动喷水...

    随着人工智能的进步,各类机器人应运而生,但你肯定还没见过工地上工人师傅们手工安装成的"机器人".在西安曲江陕西建工第八建设集团有限公司的一处在建工地上,一位2米多高的"机 ...

最新文章

  1. golang:1.并发编程之互斥锁、读写锁详解
  2. sping拦截器配置顺序影响事务正常运行
  3. java读取项目资源文件的方法
  4. protobuf生成
  5. 【Flask】ORM一对一关联关系
  6. 视觉、概念、故事——角色设计三原色
  7. 微信推送封面尺寸_连封面图都搞不明白,做什么新时代的新媒体人?
  8. java云开发_Java 快速开始
  9. java 双循环是如何执行的_java – 双循环赛
  10. SpringSecurity Basic Authentication
  11. Spark Streaming保存到HDFS目录中案例
  12. 使用NeatUpload控件实现ASP.NET大文件上传
  13. JAVA ECXCEL 考勤导入查询
  14. 代码整洁之道Clean Code笔记
  15. python中水量_Python居然还能用于巨大的工程项目!比如三峡发电量估算系统!
  16. 计算机内图片怎么自定义排序,win10系统设置图片文件自定义排序的图文教程
  17. 原生JS实现中文简繁切换,引入即可整站变繁体
  18. 基于Dragonboard 410c设计的智能管家
  19. 如何解决app store显示invalid address的问题
  20. 查看进程占用的句柄数

热门文章

  1. 江苏自考计算机应用基础停考了吗,江苏自考停考35个自考专业!附详细专业目录...
  2. PhotoSwipe添加caption title
  3. 网格系统:初识网格系统(一)
  4. 机器学习案例之:甲状腺射频消融数据模型
  5. Linux课堂练习1
  6. 儿童护理通用PPT模板
  7. python给微信好友发消息
  8. Hadoop ViewFs允许hdfs schema的重载
  9. 如何写好科研论文 (第一章习题 Quiz 1)
  10. 嘉立创EDA的一些使用技巧