Indented inventory BOM如何转为最终的Excel格式采购BOM

Objective:从Oracle EBS中Export出来的Indented BOM,通常不能直观显示哪些是需要采购的物料,有时候,需要得到一个最终,实际下单给供应商的物料清单,用来分析下单情况,物料齐料情况,NPI BOM正确性检查等等。

简言之,我们很多时候需要单层BOM(使复杂问题简单化):这个BOM中哪些物料是需要我们实际下单的List。

1,Export Indented inventory BOM

2,在EXCEL中打开".tsv"文档,并保存为xlsx格式,以便后面的VBA处理。

我们可以看到,此时打开的文件第一列是Level1,Level2,Level3,Level4合并在一起,并不能很好的解释“Indented”。

Indented是指锯齿状的多层级BOM。

3,将第二列格式处理:

3.1,替换掉第二列所有的空格,替换掉第二列所有的“-”

3.2,选择第二列,然后选择“数据”>数据工具>分列,将第二列设置为“文本”

4,筛选实际采购层:

4.1,逻辑设计:

a,需要使用Function,不需要返回值,在Function解决标示采购(P),非采购(Non-P)

b,逐条读取数据,当前数据的L值小于N+1的L值时,得到L的一个区间值:首尾位置。并传递给Function

c,我们将采购(P)和非采购(Non-P)放在第6列

运行结果如下,很清晰知道一个多层BOM中,哪些是需要直接下单(把第6列=P的在EXCEL中筛选即可),哪些是不需要下单的。

Level Item Description Revision Type P/Non-P
1 6267000 OUTER CASING 1 CPL CF 0 Subassembly Non-P
2 6267012 CROSS STIFFENING FOR OUTER CASING CF 0 Purchased item P
2 6267032 COVER BACK 6.10 PREASSEMBLED CF 0 Subassembly Non-P
3 6267013 BACK COVER 6.10 FOR OUTER CASING CF 0 Purchased item P
3 6267015 CARIER FOR COOL FAN OUTER CASING CF 0 Purchased item P

多层BOM需要我们获取很多不同的区间的首尾地址,1~1,2~2,3~3,4~4,其中第一个L1到第二个L1中嵌套很多L2,L2中又嵌套很多L3,这就意味这多层BOM有很多的嵌套,造成分析比单层BOM复杂。因为我自己也是半吊子,所以,我花了近1天半的时间分析和编写,修正程序。其中光是循环,就尝试了For each range.... next range,Do...Loop While和find()组合, For...next i好几种。最后还是选择Function处理,代码如下:

Sub indented_BOM()Dim i, j, k, m, n As Integer
Dim c As Range
Dim f_add, e_add As Stringk = Range("A65536").End(xlUp).RowFor i = 2 To kf_add = Cells(i, 1).AddressIf Cells(i + 1, 1) > Cells(i, 1) Thenj = i + 1For m = j To kIf Cells(i, 1) = Cells(m, 1) ThenExit ForEnd IfNext mn = Loct(i, m)End IfNext iFor i = 2 To k
If Int(Cells(i, 1)) = 1 And Cells(i, 6) = "" Then
Cells(i, 6) = "P"
End If
Next iEnd SubFunction Loct(a, b)Dim i, j As Integer
Debug.Print a, b'处理传递下来是1的情形
'1,处理1和2;2,处理2和3;3,处理3和4。。。。以此类推If Cells(a, 1) = 1 Then
'如果L1=P,那么区间内所有L2=Non-P;如果L1=Subassembly,2=P,那么区间的2=P,2=R,区间的L2=Non-PIf Cells(a, 5) = "Subassembly" Then Cells(a, 6) = "Non-P"If Cells(a, 5) = "Purchased item" Then Cells(a, 6) = "P"If Cells(a, 5) = "Subassembly" ThenFor i = a + 1 To b - 1If Cells(i, 1) = 2 And Cells(i, 5) = "Purchased item" And Cells(i, 6) = "" ThenCells(i, 6) = "P"ElseIf Cells(i, 1) = 2 And Cells(i, 5) = "Subassembly" And Cells(i, 6) = "" ThenCells(i, 6) = "Non-P"End IfNext iElseIf Cells(a, 5) = "Purchased item" ThenFor i = a + 1 To b - 1Cells(i, 6) = "Non-P"Next iEnd If
'End If'传递L2的首尾地址下来,只需要处理a+1 to b-1区间的Item
'使用Cells(i, 6) = ""来跳过Cells(a,6)已存在属性的Item
ElseIf Cells(a, 1) = 2 ThenIf Cells(a, 5) = "Subassembly" ThenFor i = a + 1 To b - 1If Cells(i, 1) = 3 And Cells(i, 5) = "Purchased item" And Cells(i, 6) = "" ThenCells(i, 6) = "P"ElseIf Cells(i, 1) = 3 And Cells(i, 5) = "Subassembly" And Cells(i, 6) = "" ThenCells(i, 6) = "Non-P"End IfNext iElseIf Cells(a, 5) = "Purchased item" ThenFor i = a + 1 To b - 1Cells(i, 6) = "Non-P"Next iEnd If'End If'传递L3的首尾地址下来,只需要处理a+1 to b-1区间的Item
'使用Cells(i, 6) = ""来跳过Cells(a,6)已存在属性的Item
ElseIf Cells(a, 1) = 3 ThenIf Cells(a, 5) = "Subassembly" ThenFor i = a + 1 To b - 1If Cells(i, 1) = 4 And Cells(i, 5) = "Purchased item" And Cells(i, 6) = "" ThenCells(i, 6) = "P"ElseIf Cells(i, 1) = 4 And Cells(i, 5) = "Subassembly" And Cells(i, 6) = "" ThenCells(i, 6) = "Non-P"End IfNext iElseIf Cells(a, 5) = "Purchased item" ThenFor i = a + 1 To b - 1Cells(i, 6) = "Non-P"Next iEnd IfEnd IfEnd Function

5,Indented处理:

5.1,打开VBA编辑器,增加一个模块(常用的VBA代码建议存放在Personal.xlsb)

Sub indented()
Dim i As Integer'insert 3 new Columns
For i = 1 To 3Columns(2).InsertCells(1, 2) = "L" & 5 - i
Next i
Cells(1, 1) = "L1"
'Below is for Indented
For i = 2 To ActiveSheet.UsedRange.Rows.CountIf Cells(i, 1) = "2" ThenCells(i, 2) = 2Cells(i, 1) = ""ElseIf Cells(i, 1) = "3" ThenCells(i, 3) = 3Cells(i, 1) = ""ElseIf Cells(i, 1) = "4" ThenCells(i, 4) = 4Cells(i, 1) = ""End If
Next iEnd Sub

5.2,运行之后,得到一个锯齿状的,多层级BOM,如下:

Indented Inventory BOM如何转为最终的单层采购BOM相关推荐

  1. 简单实用BOM管理系统,树形结构,一目了然BOM管理系统,集成ERP的BOM管理系统 BOM集成SAP 快速上线BOM管理系统 目视化BOM管理系统

    这是之前开发花半年开发的BOM业务,实现如下功能: Bom资料.基础物料的导入导出.支持导入到sap: Web目视化界面,可以对内容修改: 有校对基础资料功能.日志操作明细: 本考虑使用java开发, ...

  2. 用123BOM工具处理同产品的多个BOM单这是整理研发BOM最好用的工具;是方案公司、产品型号多、同一个产品多个版本子BOM制定单一、准确的研发BOM清单的更好方式

    123BOM编辑器(BOM123编辑器)是硬件工程师整理BOM的好帮手 BOM123编辑器(www.BOM123.com)是硬件工程师整理BOM的好帮手 (www.123BOM.com) 制定准确的研 ...

  3. MES系统中的BOM为何如此重要?先进的BOM体系怎么构建?

    其实不管有没有数字化,BOM都是制造企业的灵魂纽带,对于产品繁多.流程冗长的工业企业来说,如果BOM管理不规范,必然对生产效率和产品质量带来巨大的隐患,因此在工业企业的数字化转型之路中,建立科学规范的 ...

  4. oracle bom展开 sql,展开BOM并使用最终用量的算法(转载)

    本文系转载子ITPUB,如果有侵犯您权益的地方,烦请及时的告知与我,我即刻将停止侵权行为: LEVEL    Parent   Child    Parent Qty        Child Qty ...

  5. SAP中通过BOM物料清单应用程序配置来解决BOM清单显示及导出问题实例

    近期接到技术用户的资询,为何在CS11/12/13中可以显示和导出生产BOM的清单,但无法显示和导出工程BOM.而在CS03中是可以看到物料的工程BOM是存在的. 如下图物料,在CS11/12/13中 ...

  6. bom event周期_前端知识点总结——BOM

    前端知识点总结--BOM 1.BOM: Browser Object Model 什么是: 专门操作浏览器窗口的API 没有标准, 导致浏览器兼容性问题 包括: window history loca ...

  7. php 清除内容中的bom,检查并清除php文件中bom的函数

    /** 功能:检测并清除BOM link:bbs.it-home.org */ if(isset($_GET['dir'])){ $basedir=$_GET['dir']; }else{ $base ...

  8. php 去除 bom,PHP批量检测并去除文件BOM头信息代码参考

    因为文件头信息输出BOM头信息,有时会对程序的执行结果造成影响,那么此时即应对这些文件的BOM信息进行去除. 如下代码为PHP方式去除当前目录及子目录所有文件BOM信息的代码,新建文件,将其放倒根目录 ...

  9. php utf8 bom,php-如何删除多个UTF-8 BOM序列

    php-如何删除多个UTF-8 BOM序列 使用PHP5(cgi)从文件系统输出模板文件,并出现吐出原始HTML的问题. private function fetch($name) { $path = ...

  10. 是否应该使用utf-8 bom——因DirectVobSub不支持utf-8 no bom带来的问题

    使用DirectVobSub作为播放器的字幕插件. 把字幕转换成utf-8 no bom格式,播放时字幕显示乱码. 把字幕转换成utf-8 bom格式,播放时字幕正常. 看来DirectVobSub不 ...

最新文章

  1. 36晋级12第五场:冯志刚决胜入围(节目视频)
  2. mysql自定义存储过程_MySQL自定义函数、触发器、存储过程
  3. LeetCode MySQL 1623. 三人国家代表队
  4. 深交所与6家股交中心深化区块链合作
  5. MySQL 5.7 免安装版配置
  6. 浅谈各种连接池中连接数量的设置
  7. UE4之cmd调用函数
  8. C语言-第19课 - #pragma预处理分析
  9. B站【千锋】Linux云计算基础视频教程_650集完全入门 课堂笔记
  10. 中国“秃”如其来的头发经济
  11. 4个免费的ASP.NET托管网站
  12. Mysql B+树索引的使用
  13. 【渝粤题库】广东开放大学 风险投资 形成性考核
  14. QT 按钮切换背景图片
  15. 最简单的个人辞职原因[范文7篇]
  16. 色彩和色调(色相,明度,冷暖,纯度)
  17. 可以在xmind上同时有两个大主题吗_矩阵图有何用处?XMind完美展示多对多对象间的关系...
  18. 关于TIME_WAIT数量太多的处理
  19. ROS学习笔记(一):利用节点进行发布与订阅
  20. restTemplate接受文件流

热门文章

  1. 如何在 Next.js 中实现重定向
  2. 基于小波Block-Thresholding的降噪方法
  3. Unmapped Spring configuration files found. Please configure Spring facet
  4. BZOJ4198: [Noi2015]荷马史诗(哈夫曼树)
  5. 上海市高等学校信息技术水平二三级python 模拟题 编程
  6. 佛系前端面试题记录--第四周
  7. spssfisher判别分析步骤_SPSS判别分析
  8. 你每天都在使用的HTTP协议,到底是什么鬼?
  9. int 、long 和long long 区别
  10. JVM MAT使用分析详解