ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: lzhuohui

[求助] 工程项目多层BOM的查询思路

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-14 17:40 | 显示全部楼层
三坛老窖 发表于 2017-3-14 13:54
你的意图是想依据已有的资料(配置BOM和价格BOM),用更好或更简单的思路,生成采购清单和报价清单。
如果 ...

谢谢关注。
本示例只是工程需要。按7楼例子把编码列取消
1、材料单价可理解为零件的采购入库成本,人工价格该怎么理解安装这个材料我要花多少人工成本
2、材料和人工仅向上累加即可
另:输出1目的主要是输出底层材料,也方便采购下单和询价对比
      输出2目的主要是检查该母项目中下挂的项目到底是什么。。。
      输出3主要是这个项目主项情况。当然不能把所有下挂的项目都给对方知道。。。呵呵呵
本示例也是初步的想法。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-14 18:07 | 显示全部楼层
根据大师们意见。对BOM表和示例说明进行了一些调整。
希望大师们能继续关注并提出宝贵意见

工程项目多层BOM查询新.rar

33.81 KB, 下载次数: 36

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-14 18:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
三坛老窖 发表于 2017-3-14 13:54
你的意图是想依据已有的资料(配置BOM和价格BOM),用更好或更简单的思路,生成采购清单和报价清单。
如果 ...

1、材料单价为采购成本。人工单价理解为安装这个东东要花多少钱的人工费用
2、暂时不考虑消耗先。

TA的精华主题

TA的得分主题

发表于 2017-3-15 01:10 | 显示全部楼层
lzhuohui 发表于 2017-3-14 18:10
1、材料单价为采购成本。人工单价理解为安装这个东东要花多少钱的人工费用
2、暂时不考虑消耗先。

看来你还是没能理解物料和成本的概念。之所以向你提这两个问题,本指望你能据此去思考、去百度,弄清楚这两个概念的内涵和外延,不曾想你一句“暂时不考虑消耗先”,又把这问题本身就存在问题的问题,稍作修饰后又踢回了论坛,我服了你,靓仔!

论坛中关于BOM的帖子有很多,绝大部分依据产品(父件)需求,通过BOM展开求子件数量的,也有一些是依据BOM子件的单价算产品(父件)的材料成本的,像你这样要在累加材料成本的同时,还要累加人工费用的,似乎没见过。而依据BOM进行对外报价或成本核算,在企业中是一种常见的行为,故而我觉得你这个问题对本论坛而言,是很有价值的,所以希望你能把你问题中的问题解决掉,我想我应该能帮你最终解决此问题。(题外话:多年前因工作需要,做过一个BOM管理系统,其中有成本核算功能,只不过用的是标准工时而非人工费用,今天在电脑中找了半天还是没能找到)

最后再给你指出一点你问题中的问题,希望你能在真正理清物料和成本的概念后,把问题中的问题解决掉:
===1、材料单价为采购成本。人工单价理解为安装这个东东要花多少钱的人工费用===
===对照附件中价格BOM表第一条记录,零件1 采购成本 10,人工费用 2  ===
表面上似乎很顺溜,实际上这句话和这条记录存在一个令人无法接受的逻辑错误。因为这里的零件1其实代表着2个物料!

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-16 01:21 | 显示全部楼层
三坛老窖 发表于 2017-3-15 01:10
看来你还是没能理解物料和成本的概念。之所以向你提这两个问题,本指望你能据此去思考、去百度,弄清楚这 ...

谢谢关注。
其实你说的在实际工作中的报价预算中都有考虑。包括有些特殊材料的图纸标注和实际采购的差别。这次示例只是想一步步来。先解决每个项目下挂的子项目。因每个项目和子项目的损耗量不同,所有想先放放,慢慢完善。。。。
例如:风管安装中的报价中。。图纸标注的“风管”仅有“宽度*高度”;而实际采购是需要的钢板材料需要:厚度和面积。。。。那么,原来我是这样子做的(不考了下挂的项目都有如下的数据要处理):
1、手动:按图纸输入“宽度*高度”数据,量出图纸中每段同“宽度*高度”的“长度”
           1输入之后,以下除7点手动调整外,其他都自动查询、计算所得:
2、自动累加没段长度;
3、按“宽度*高度*长度”计算图纸面积;
4、增加不同风管制作的标准损耗,算出风管成本材料面积。
5、根据“宽度”自动从风管厚度BOM表(还涉及高低压风管、空调风管、消费风管等不同类型)选择到合适的“厚度”;
6、根据上述得出的风管“成本材料面积”和“厚度”算出查询到单位面积的风管材料单价;算出风管实际成本价格。。
7、在这个工程的调整表中,输入风管项目的调价系数
8,对外的报价表中,风管实际成本价格*调整系数得出最终报价价格。。。
    以下内部分析用。。
9、对“实际成本价格”和“最终对外报价”进行分析。。。分析出该报价的利润和利润率;
10、列出本报价每降1%(更细也可)之后的利润和利润率!!!
11、根据10点的的数据,在工程谈判中做到心中有数!
欢迎大师们继续提出宝贵意见。


TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-16 12:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lzhuohui 于 2017-3-16 13:08 编辑

完成多层BOM表的查询。请指教
Sub 按钮1_Click()
    Dim objDic As Object, objDicXm As Object: Dim ArrBom, ArrXm
    Dim BomMm$, BomZm$    '父件与子件
           Application.DisplayAlerts = False

    i = Worksheets("配置BOM").Range("B" & Cells.Rows.Count).End(xlUp).Row
        ArrBom = Worksheets("配置BOM").Range("B3:F" & i)
    i = Worksheets("工程项目").Range("B" & Cells.Rows.Count).End(xlUp).Row
        ArrXm = Worksheets("工程项目").Range("B3:D" & i)

    Set objDicBom = CreateObject("scripting.dictionary")
    Set objDicXm = CreateObject("scripting.dictionary")

    For i = 1 To UBound(ArrBom) '装入配置BOM
        BomMm = ArrBom(i, 1) & vbTab & ArrBom(i, 2) '母件名称、型号
        BomZm = ArrBom(i, 3) & vbTab & ArrBom(i, 4) '子名称、型号
        BomZs = ArrBom(i, 5) '子件数量

            If Not objDicBom.exists(BomMm) Then
                Set objDicBom(BomMm) = CreateObject("scripting.dictionary")
            End If

            If Not objDicBom(BomMm).exists(BomZm) Then
                objDicBom(BomMm)(BomZm) = BomZs '子件数量
           End If
            objDicXm(BomMm) = 0
        objDicXm(BomZm) = 0
    Next

    For i = 1 To UBound(ArrXm) '装入工程项目
        XmMm = ArrXm(i, 1) & vbTab & ArrXm(i, 2)
        objDicXm(XmMm) = ArrXm(i, 3) '工程项目数量
    Next

        For i = 1 To objDicXm.Count '计量
            For Each d In objDicXm '历遍工程项目名称
                If objDicBom.exists(d) And objDicXm(d) Then
                    For Each d1 In objDicBom(d) '历遍配置BOM名称
                        objDicXm(d1) = objDicXm(d1) + objDicBom(d)(d1) * objDicXm(d) '数量汇总
                    Next
                        objDicXm(d) = 0
                End If
            Next
        Next

        For Each d In objDicXm '清除无用数据
            If objDicXm(d) = 0 Then objDicXm.Remove d
        Next

        Worksheets("采购清单").Activate
            i = Range("B" & Cells.Rows.Count).End(xlUp).Row
                Range("A3:D" & i).ClearContents
                    [B3].Resize(objDicXm.Count) = Application.Transpose(Array(objDicXm.keys)) '输出名称、型号
                        [D3].Resize(objDicXm.Count) = Application.Transpose(Array(objDicXm.items)) '输出汇总数量
                            Range("B3:B" & i).TextToColumns [B3:B3]  '拆分名称型号
                                Range("A3:A" & i) = "=row()-2" '加序号
        Application.DisplayAlerts = True
End Sub

多层BOM查询.rar

24.69 KB, 下载次数: 24

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-17 20:36 | 显示全部楼层
抽了点时间把本例完成“输入”、“多层Bom查询”、“生成采购清单“、“价格查询”,“生成成本清单”。其中的代码有待改进,请大师看看是否有什么好方法更方便实现。

多层BOM查询----至价格查询.rar

37.3 KB, 下载次数: 28

TA的精华主题

TA的得分主题

发表于 2017-3-18 17:24 | 显示全部楼层
不用递归过程而用字典+循环,依据BOM,计算出子件用量,我还是第一次看到,很好的思路与技巧!值得学习。

正如我一开始所判断的,你的问题不是VBA技术问题,而是系统思想问题。

在此我复述一遍你的问题:如何用更好或更简便的方法,根据现有资料(图纸)生成采购清单和产品成本明细清单(即产品按

BOM展开的详细清单)

如果我的复述没错,建议你放弃你15楼所说的数据处理流程,改为:
1、按项目图纸创建新的物料项目
2、添加新的工序数据
3、添加新的外购物料价格数据
4、构建新的BOM项目
5、输入工程项目数据,获取所需的清单或报表
归结为一句话,就是根据图纸创建或维护基础数据,剩下的就交给ExcelVBA来实现

我前面两次提到的物料和成本的概念,不知你是否真的理解。我之所以再此提到,是因为你前面给出的问题中存在的逻辑错误

源于对这两个概念的不理解。

附件是根据我对你所提问题的理解而作,其中增加或更改的模拟数据和工序表中的简图,希望能帮助你理解物料和成本。你所需的输出报表,详细报价(即工程项目按BOM展开的数量和成本清单)能生成,其他报表我想你自己应能轻松搞掂。

多层BOM查询.rar (60.75 KB, 下载次数: 59)

-----------------------------------------------------------------------------------------
如果数据是乱编的,非常有可能含有逻辑错误,这样对编写、调试代码来说有时候是个致命的错误。

即使没有逻辑错误,也会由于数据脱离实际,导致很多问题不能在一开始就显现出来,
这样的后果就是你辛辛苦苦写了代码,原帖主又提出一个条件你就得从新开始构思。呵呵。

所以,问题求解,最好还是要提供真实有效的数据。
-----------------------------------------------------------------------------------------
以上这段话来自http://club.excelhome.net/thread-1327898-2-1.html 16楼 香川群子


TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-19 02:17 | 显示全部楼层
三坛老窖 发表于 2017-3-18 17:24
不用递归过程而用字典+循环,依据BOM,计算出子件用量,我还是第一次看到,很好的思路与技巧!值得学习。
...

三坛老窖大师说的特别有道理。十分感谢!!!
基本的情况您的叙述基本符合我的初衷情况!对于以后VBA技术问题我还是要多请教大师们。现在的主要问题就是这个工程报价过程的思路整理。。
现在情况我主要是想理清这个过程的思路。
今晚太晚了。
等有空整一个小工程的报价过程整理一套比较真实的数据和思路出来,并向各位大师讨论学习!

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-3 16:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lzhuohui 发表于 2017-3-19 02:17
三坛老窖大师说的特别有道理。十分感谢!!!
基本的情况您的叙述基本符合我的初衷情况!对于以后VBA技 ...

折腾了一段时间之后。主要思路调整如下,希望大家能参与讨论和完善!
1、设置独立的《配置库》文件夹
   1-A、对需要各层的配置作为一个预处理,生成本层需要的下层材料配置;
   1-B、每层的下层配置生成方法稍有不同,故该层处理代码有所不同;
   1-C、每个文件(材料)配置更改后,均应整理和保存。
2、工程报价.xls作为工程的项目输入、和结果输出文件
   2-A、处理“配置”数据:
           a、总配置表数据复制《配置库》文件夹中各文件里面的“总配”数据。
           b、工程名称库数据由父件名称、规格去除重复项后汇总,并生成拼音简拼,为联想输入做准备。
   2-B、输入“项目”数据:名称、规格、单位、数量  
   2-C、每个项目数据:到“配置”中的总配置表查询,提取相应的数据,提示数量累加。
   2-D、价格查询并整理。
3、调整报出价格和成本、利润分析(本附件未处理)
4、输出最终报价和各谈价数据(本附件未处理)



缺陷:
a、展开查询应仅由名称、规格为Key来对应查询。并输出子件的名称、规格、单位、累加数量和系统分类。
b、“单位”处理有问题,应为:未找到下层,按该层的“单位”输出;找到下层则由下层“单位”输出。
c、下层“系统分类”“保温情况”未能继承上层。
d、价格查询时,应由名称、型号、单位为Key来对应查询,应该比较合理。
d、无价格的项目改变颜色,方便检查、补充、完善价格库。
e、价格查询时,只要价格表中的"主材"辅材""人工"中的其中一项为空值,就查询错误。但加上"0"时。查询正确。(现在代码加判断,又长又臭)。



现在求助方面:缺陷a、b、c。。在此先谢谢各位老师。提示希望各位提出宝贵意见

工程报价系统.rar

692.57 KB, 下载次数: 40

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-15 06:53 , Processed in 0.032343 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表