QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
3小时前
全站
goto3d 说: 版主微信号:caivin811031;还未入三维微信群的小伙伴,速度加
2022-07-04
查看: 5032|回复: 24
收起左侧

[求助] 明细表数量自动加总

[复制链接]
发表于 2016-11-12 15:13:01 | 显示全部楼层 |阅读模式
工程图
主题分类用于问题归类:

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
请教一下大家SW明细表中的数量怎么加总啊如下图第一层的总装配有2个,对应下面的零件应都X2
5 z. x8 I4 u* s9 `4 S) [在SW明细表中怎么能自动识别的?
, s  |2 @2 t3 E
! b( E7 c  i- W3 E0 Z: Q) V0 q
  w* {1 i, P/ X% D QQ图片20161112150911.png 3 O' ?2 B4 p) y; p# L1 I
5 d6 ?# y* ~* }+ f
* l3 R# ]" q3 V
发表于 2016-11-12 15:33:49 | 显示全部楼层
什么样的设备装配图的明细表需要具备数量加总
发表于 2016-11-12 23:29:30 | 显示全部楼层
加方程式啊
( ]& y: b4 Z6 w: E# f
发表于 2016-11-13 10:48:13 | 显示全部楼层
暂时理解不透你说的意思
 楼主| 发表于 2016-11-14 08:49:59 | 显示全部楼层
阿帕奇 发表于 2016-11-13 10:48
; E3 h, q8 ?* N, T暂时理解不透你说的意思

0 ]7 T# ^% E; r* A也就是总装配中有二个一样的装配体,但在明细表中只显示装配有2个,而下面的零件只计了1个装配体的。实际中要把下面的每个零件都是乘以2如下图
/ i3 m& x% r4 ?+ W5 r. c7 m3 @% l
4 [0 f2 a' Z4 f+ f
QQ截图20161114084729.png
 楼主| 发表于 2016-11-14 08:51:51 | 显示全部楼层
hhaa545 发表于 2016-11-12 23:29, ~& Y$ H/ Q% `1 J9 U& c
加方程式啊

6 M1 Q0 R  o  A5 S' }方程式只能一个个的加,如果明细表中的零件多是不好实现的
) E; I; D1 \# l/ g
发表于 2016-11-14 16:53:04 | 显示全部楼层

  1. ' K; S/ Y8 s) q8 z. L1 ]
  2. Dim TopDocPathOnly As String
    6 W8 T/ J4 D4 m
  3. Dim PartsCollect() As String '遍历清单(阵列)# ]2 O0 O; R. z! ?2 t9 X0 G# A
  4. Dim InCollectCount As Double '遍历清单长度
    2 x' I5 R- l/ f$ k$ j& C1 L
  5. Dim CustomInfoQTY As String0 Q+ a( {: v1 S2 Y- J/ q3 S

  6. ( k# f$ ~9 J. B
  7. Sub main()
    , {& d0 M& {6 U2 t  v/ r
  8. Set swapp = Application.SldWorks 'SW对象
    % Q4 p$ O* r( q0 w
  9. Set TopDoc = swapp.ActiveDoc '总装对象
    6 b4 k: s; o" e4 g3 H$ z
  10. If TopDoc.GetType <> 2 Then Exit Sub '不是装配=退出
    ; L; `% l7 g: A. C( e
  11. TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割
    ; U- |  w9 N& Z/ e" d
  12. TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '总装文件名称5 s0 W& a5 j: D& P
  13. TopDocName = Left(TopDocName, Len(TopDocName) - 7) '总装文件名称(排除.SLDASM)/ k4 D- u1 ?% B  |
  14. TopDocPathOnly = Mid(TopDoc.GetPathName, 1, InStrRev(TopDoc.GetPathName, "", -1)) '总装的完整目录2 d5 _8 |4 r2 E' L: Z$ s# Q3 k4 ~
  15. TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱0 y- z/ u- R  j3 N7 p) F
  16. CustomInfoQTY = "数量" '可按个人喜好修改预设值
    " z2 H" _6 Y9 x7 z" u
  17. InCollectCount = 1 '遍历清单长度基数2 X( Q# m3 g) p' X3 P
  18. ReDim PartsCollect(InCollectCount) '定义阵列项数
    ) [9 ?& _6 _& H, s9 s8 F% i
  19. SubAsm TopDoc, TopConfString '遍历
    , F/ V8 U# J+ q. f9 W
  20. Beep
    + t3 j5 D' \' M$ {$ K  z' ?* U
  21. MsgBox "完成"( g/ V: N& f% |4 ~/ g
  22. End Sub7 r$ ]8 N4 [0 r  P
  23. . j, U+ t  J8 g' ]4 C) n
  24. Function SubAsm(AsmDoc, ConfString)
    % N* R: H: A3 M: z
  25. Set Configuration = AsmDoc.GetConfigurationByName(ConfString)
    % R8 D. U& w" o, k+ O
  26. Set RootComponent = Configuration.GetRootComponent
    . Z  n$ B! B$ k' \# L2 i
  27. Components = RootComponent.GetChildren+ w, \* S6 }- G
  28. For Each Child In Components+ `3 T4 b, B% |' U' |
  29.     Set ChildModel = Child.GetModelDoc
    ! q+ X2 [4 M* G5 C" L$ b" r
  30.     If Not (ChildModel Is Nothing) Then '排除抑制及轻化
    6 J. J( O$ A$ u& B. u  U
  31.         ChildConfString = Child.ReferencedConfiguration '零件配置名称+ r, n! `, a$ N! E
  32.         ChildType = ChildModel.GetType
    * u3 q4 x5 A' K0 r
  33.         ChildPathSplit = Split(Child.GetPathName, "") '分割
    4 k! B' i! e9 ~6 O/ V' d
  34.         ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名称
    : G4 ~% L: G8 m1 j: M4 ^/ o, f
  35.         9 L4 n& H( m9 P; I! v$ x
  36.         ChildPathOnly = Mid(Child.GetPathName, 1, InStrRev(Child.GetPathName, "", -1)) '零件的完整目录
    0 A: P( y( F1 p4 A" O- A6 C& ?
  37.         If ChildPathOnly = Replace(ChildPathOnly, TopDocPathOnly, "") Then SamePath = False Else SamePath = True '零件是否在总装目录或往下目录
    $ N; V+ o' b" G. J1 F+ i
  38.         6 h) @! r' S& L  }9 a
  39.         If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳過:不在总装目錄或其往下目錄 或 不包括在材料明細表中 或 是个封套
    7 D5 D# r) o$ m$ j# N( s
  40. '        If (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳过:不包括在材料明細表中 及 封套# n& M4 V. @; U: C+ J$ R
  41.             UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '备用量属性名称
    % c8 T2 [& g" q: E3 C1 ^# f
  42.             UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '备用量
    7 D: x1 h; h8 l! d& s+ d8 j
  43.             If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '备用量除错9 e6 }5 Y6 Y- H0 @# ?" }
  44.             inCollect = False '重置判断变量0 W3 g# ]) x# U* e
  45.             For Each PartinCollect In PartsCollect '判断是否已在遍历清单內4 l8 d8 O5 ^6 c' H- F
  46.                 If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True
    8 |* k7 u( A" ?- j/ |
  47.             Next
    ! r- o: I5 E2 M1 `6 \
  48.             If inCollect Then '已在遍历清单內
    ' G& w; L% j+ W+ a! W1 m
  49.                 ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE5 g% N) G- m6 B6 E3 d, k
  50.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY
    ! M% F3 Y7 x; ?0 ~
  51.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty
    5 H! m1 a2 v# R1 c2 f" ]" ~
  52.             Else '不在遍历清单內(首次处理)
      p# |4 F, L, |1 @4 v
  53.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY  ^! j& x( v1 F, z/ z+ N
  54.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE
    8 v$ U/ x  \/ x9 j' h
  55.                 InCollectCount = InCollectCount + 1 '遍历清单长度基数+1
    $ S+ b4 G+ B8 t
  56.                 ReDim Preserve PartsCollect(InCollectCount) '重新定义阵列项数(保留內含数据)
    ) _6 ]4 A+ M- l
  57.                 PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍历清单中
    ; l4 u: Q: g4 W! w! F% ~
  58.                 ChildModel.SetUserPreferenceIntegerValue swUnitSystem, swUnitSystem_Custom '单位系统=Custom
    % o/ a; `/ X3 Y8 h& K  W  v; d
  59.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '重量单位设定为kg(可按喜好加入設定)
    1 Q( {: Q% I9 w
  60.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropLength, swMM '设定长度单位为毫米
    2 ^+ }) |. u% k# E1 h* z7 [
  61.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropVolume, swUnitsMassPropVolume_Centimeters3 '设定体积单位为立方厘米
    3 d3 n( O  V2 I1 M! Z
  62.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropDecimalPlaces, 2 '质量及体积小数点后2位4 C+ c# x2 ]! G2 _2 f  L
  63.                 ChildModel.AddCustomInfo3 "", "Weight", 30, Chr(34) & "SW-Mass@*" & ChildName & Chr(34) '在自订属性加入Weight属性- r$ c( i2 `. I& ]( }  J# G5 w) Z
  64.                 ChildModel.AddCustomInfo3 "", "Material", 30, Chr(34) & "SW-Material@*" & ChildName & Chr(34) '在自订属性加入Material属性; ]$ U& h: s' x) q8 q
  65.                 ChildModel.AddCustomInfo3 ChildConfString, "Weight", 30, Chr(34) & "SW-Mass@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Weight属性* g( m  O9 x8 l( ~2 O
  66.                 ChildModel.AddCustomInfo3 ChildConfString, "Material", 30, Chr(34) & "SW-Material@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Material属性
    6 n9 Z& Y" F! q
  67.                 ChildModel.SketchManager.Insert3DSketch True '插入三低草图,从而激活零件的“需存盘标签”
    ( g4 M+ p8 s4 d% x3 q
  68.                 ChildModel.SketchManager.Insert3DSketch True '离开三低草图% B6 d% R  b7 T4 U# Y# d
  69.             End If! y3 ~2 Z  H7 V
  70.             If ChildType = 2 Then
    ( t3 p1 Z' D  \/ q* l5 A: m
  71.                 SubAsm ChildModel, ChildConfString '如果是装配则向下遍历
    8 Y, E- F" r4 _# v( F2 `3 H
  72.             End If
    9 ~, P6 i/ G% [5 G) b
  73.             3 b2 B, f* @( Q, [
  74.         End If% n. \5 k+ ^$ o8 p
  75.     End If5 L; C/ M! _5 Z3 b
  76. Next
    $ h1 G: l2 z+ ]8 M
  77. End Function  G. ]. l: C: j9 I
  78.    
    $ O% r- z/ [; m
复制代码
发表于 2016-11-14 16:54:03 | 显示全部楼层
本帖最后由 erikgqp8645 于 2016-11-14 16:56 编辑 5 R$ ^; @2 Q2 T2 S+ m2 i

$ _4 o& ^/ [1 S试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html9 q* x8 C- p0 z9 s3 v$ E1 U6 F
附件是上面那个代码的宏程序。8 R& `4 X1 R' x+ A1 |, {8 j
使用方法,在装配体中运行宏,就会添加总数量。
% O5 e' X" L; b6 Q$ j% R9 S

添加总数量.rar

12.68 KB, 下载次数: 46

发表于 2016-11-14 20:11:04 | 显示全部楼层
明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是单个子装配体中的数量。这才符合逻辑,而楼主的需要明显是瞎胡闹
发表于 2016-11-15 08:04:37 | 显示全部楼层
yk2906 发表于 2016-11-14 20:11
, h" M+ d: Q* H+ r明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是 ...

+ O2 Z5 ]; f9 k这位兄台,我并不是这么认为的。+ Z* p& F4 d. R% ~. O& t
对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便于更好的加工。2 O! l$ j2 |0 M; {) |1 V) ^
做图纸的是要给加工部门看的,而大家方便了自然也可以不那么符合逻辑。
- ^. N6 m) q1 F( E* I; S上面的宏程序可以在把数量改为“总数量”单独在bom上加一列,这样看起来更加直观。
 楼主| 发表于 2016-11-18 08:07:58 | 显示全部楼层
erikgqp8645 发表于 2016-11-15 08:04$ I) u$ Y' d/ T1 @
这位兄台,我并不是这么认为的。
: V% [4 y9 v% Y+ |对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便 ...
! X3 Y' O4 _0 S; @, D; n
有时可能相同的装配体的2组 或3组 或1组的
2 A; a/ {1 D) ~3 W那到对应的装配体下面的零件是就是X2  X3  X1是不相同的- c) U/ h5 |* O4 D- L
发表于 2016-11-18 13:08:51 | 显示全部楼层
你的这个我大体理解什么意思了 ,就是把不同的或者相同的部件中共同使用件数做个统计是吧?如果是这样的话,我一般做两个明细表,一个是零件BOM,跟总成下的部件BOM
发表于 2016-11-18 16:19:17 | 显示全部楼层
yh2008 发表于 2016-11-18 08:07- g4 g% O6 q# O8 Q# Q; g1 C
有时可能相同的装配体的2组 或3组 或1组的3 l& _* T1 Q* ~9 X7 \; m% z7 b
那到对应的装配体下面的零件是就是X2  X3  X1是不相同的
8 K1 G* N+ D& g% u
上面那个宏就是实现这个功能的。4 s8 ~6 s. N4 p- q0 v
假如你一个装配体里面有两个组件,分别为a和b。$ L* o( p8 m& W" e) |
其中有个零件c在这两个组件里面都有。
' \8 ~! F- P' u运行上面那段宏就可以添加一个总数量的属性,就是在这个装配体里面的总数量。
发表于 2016-11-18 19:54:29 | 显示全部楼层
晕,没有ERP系统,也没有生产计划部?
: K) p, ?) e! g/ ?2 j图纸上不带这样表示的吧?
5 W, i. o, g6 N1 ~+ N' \4 }0 e最多再另出一个总计算的表格吧?
发表于 2016-11-18 21:03:02 | 显示全部楼层
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头的图标,数字也变了
$ ]5 A! d8 z4 B' t# ?% a
1114.png
 楼主| 发表于 2016-11-19 08:22:34 | 显示全部楼层
jinqin11 发表于 2016-11-18 21:03
; b7 x5 ?0 {6 n: d0 ?4 o鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头 ...
6 ^, _& S" ]4 m% ?  R
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的
发表于 2016-11-19 11:43:51 | 显示全部楼层
yh2008 发表于 2016-11-19 08:224 e! W% o* B6 v% n
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的

" y) E& d5 i5 Q( t2 Y2 R2 ]楼主大大明明白白在问“加总”,怎么又说“分开”。
4 J9 W. X6 l* A+ P, g, I/ t6 ~/ s6 N$ g% F! C, |
原来在问“小计”(subtotal)。
发表于 2016-11-19 20:45:33 | 显示全部楼层
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif6 u  F! R' J# G8 |
方程式只能一个个的加,如果明细表中的零件多是不好实现的
. x, t8 n" A5 m3 K
可以实现的, p) H  o' e' }! m
发表于 2016-11-19 20:46:17 | 显示全部楼层
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif
8 h. U' |8 Q+ s2 B0 g0 p3 |方程式只能一个个的加,如果明细表中的零件多是不好实现的

0 w' ]+ n+ Q& d8 }要是不明白就加我Q726915950说是三维网的
- |. z/ z/ H# M' k
发表于 2016-11-20 11:30:43 | 显示全部楼层
贊同#9、#10的「部份」內容。
8 V& E% [/ k+ J/ z  C9 o$ Y( q! c  R7 K3 x2 H; }& m; [$ {
就我個人而言,這樣的表示方法並沒有問題呀~5 s% g  X' k9 Q
我想這是對於此種「階梯式」的零件圖產生的誤解而衍生出的問題,而且還不少人有這樣的疑惑~& }( p* @/ s+ k/ |) U

, [: m" g4 c0 p階梯式表達的數量欄位的值,指的是在「這一層」次組件的單用量,這樣去想就沒有錯了。6 `9 S! _8 c9 }7 k. }
試想,如果有像我一樣解讀的人來看樓主要求的BOM,那麼數量要如何計算才是對的?
, g9 v( h; }+ F9 K1 Z1 o  ~) K" K+ `7 _3 O. S& R: i% c/ H
如果要顯示一零件在總裝配裡的使用量,那麼就不應該使用階梯式了。' E3 G5 q  W8 T( v, f
4 m% p6 E5 X3 j% D. S
而這也呼應了大鹿先生說的「小計」。
  F+ z, L2 O; m: ?% ?; S6 q& v; I, ?$ t& S# x0 i% H; Y

; |' H& F4 m: l" Z7 L! _) t# `! g
 楼主| 发表于 2016-11-21 08:11:42 | 显示全部楼层
大鹿 发表于 2016-11-19 11:43
% k7 J7 o7 n# ~0 J0 S; j楼主大大明明白白在问“加总”,怎么又说“分开”。
4 Y' z$ e" N7 u4 E0 J6 I
& f  Z7 L4 B# e7 w4 n- S原来在问“小计”(subtotal)。
9 P- Q$ Y- N$ A# ]8 H) a4 V
是的可以说是小计
 楼主| 发表于 2016-11-21 08:15:54 | 显示全部楼层
gt.adan 发表于 2016-11-20 11:30
3 z" @7 a! `! x贊同#9、#10的「部份」內容。
4 Q* ]! m$ j' Q. ^
, ^3 ?* l( ?) M就我個人而言,這樣的表示方法並沒有問題呀~
* j% H  D; d% A
SW的表现方式是对的,只是在计算时会出现一个小计数量,
1 O- X8 }9 J. }+ V, r现在就是想怎么直接出现小计的结果,因为零件要在EXCEL中计算成本1 R& A1 _' h: a8 q; _4 b) r
目前的做法是手动修改数量,缺点就是有时可能漏5 X+ j, S7 B- F9 `
不知大家有没有什么好的方法
发表于 2022-6-9 10:21:06 | 显示全部楼层
erikgqp8645 发表于 2016-11-14 16:54
1 A) k9 J1 r4 O/ D& F9 _试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html/ p3 O8 }) V3 C3 g
附件是上面那个代码的宏程序。' R3 f7 k/ H5 B, Q
...
% s0 h& T7 `+ s
我试了这个宏 为什么不行啊?
发表于 2022-8-3 09:04:53 | 显示全部楼层
其实是有同感的。我的办法是做两张BOM表。一个是阶梯的,一个是总数的。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备13008828号-1 )

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