QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 版主微信号:caivin811031;还未入三维微信群的小伙伴,速度加
2022-07-04
全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
查看: 5264|回复: 24
收起左侧

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

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

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

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

x
请教一下大家SW明细表中的数量怎么加总啊如下图第一层的总装配有2个,对应下面的零件应都X2
# B4 t. E8 b+ [2 M, g, H+ F+ C9 v在SW明细表中怎么能自动识别的?' n, A8 c, _1 l2 c+ X
/ T5 c5 r$ X3 _# @3 _7 e

# S" w, F; }. j! P$ R; D% e QQ图片20161112150911.png % H. g% l% i9 T& M

% w- ]) M6 h' G% A
1 g/ ?7 u0 B2 }1 e# Y. F. C
发表于 2016-11-12 15:33:49 | 显示全部楼层
什么样的设备装配图的明细表需要具备数量加总
发表于 2016-11-12 23:29:30 | 显示全部楼层
加方程式啊
! {3 _. Q3 h4 W- S0 K
发表于 2016-11-13 10:48:13 | 显示全部楼层
暂时理解不透你说的意思
 楼主| 发表于 2016-11-14 08:49:59 | 显示全部楼层
阿帕奇 发表于 2016-11-13 10:48
5 U8 @/ j; _, M& b$ W0 W% j* I暂时理解不透你说的意思

* E# ], ~6 j. u1 u& [' m. p9 D也就是总装配中有二个一样的装配体,但在明细表中只显示装配有2个,而下面的零件只计了1个装配体的。实际中要把下面的每个零件都是乘以2如下图 ) `; x4 h! Q1 E% D2 K' c3 l

$ N: {! C# Z4 \( r! k1 N. v& O8 @. j: ?
QQ截图20161114084729.png
 楼主| 发表于 2016-11-14 08:51:51 | 显示全部楼层
hhaa545 发表于 2016-11-12 23:29
0 y3 T) K! C3 d1 ?: u" n$ R加方程式啊
) o( R6 \+ P4 r/ K( \
方程式只能一个个的加,如果明细表中的零件多是不好实现的4 K0 V( Q, a6 L1 b0 N; A- {
发表于 2016-11-14 16:53:04 | 显示全部楼层
  1. . z3 r! Z" a* i7 z9 W1 m
  2. Dim TopDocPathOnly As String
    ' |$ \& b6 j: x, B2 U$ G$ _
  3. Dim PartsCollect() As String '遍历清单(阵列)# c! P' q7 a8 m( _
  4. Dim InCollectCount As Double '遍历清单长度1 {8 ~; l4 u1 P# U( k
  5. Dim CustomInfoQTY As String- f: }* Z4 D* X4 l: f" {% |/ H
  6. 9 ?% d  l7 q% ?: _# f
  7. Sub main()) @7 N- z8 p  q% H
  8. Set swapp = Application.SldWorks 'SW对象
    ' q3 s8 ^- Y0 l+ o
  9. Set TopDoc = swapp.ActiveDoc '总装对象
    1 I; u/ m% L& z8 @0 ~
  10. If TopDoc.GetType <> 2 Then Exit Sub '不是装配=退出
    1 n8 q) v# G% y1 f4 C5 L: y
  11. TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割
    ) H, D1 r) {1 f3 F  Q% p% c
  12. TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '总装文件名称9 F* ^# ]3 P; B# A
  13. TopDocName = Left(TopDocName, Len(TopDocName) - 7) '总装文件名称(排除.SLDASM). M/ j- S* D2 ^
  14. TopDocPathOnly = Mid(TopDoc.GetPathName, 1, InStrRev(TopDoc.GetPathName, "", -1)) '总装的完整目录) @3 [$ q' q: C5 A4 S
  15. TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱9 d+ i! u- S3 g5 f$ I7 b2 |/ @% X
  16. CustomInfoQTY = "数量" '可按个人喜好修改预设值' B$ F- }, T  @& @
  17. InCollectCount = 1 '遍历清单长度基数# q) i! }0 \  J% C( X  c
  18. ReDim PartsCollect(InCollectCount) '定义阵列项数# f5 |4 Q& \! ~* ]: V
  19. SubAsm TopDoc, TopConfString '遍历" v; q+ F6 Z: {
  20. Beep
    6 W( O3 j( v9 B. Y' U
  21. MsgBox "完成"
    ! @5 k) g3 ?7 u5 x& _
  22. End Sub" ?5 J3 g5 c( Z2 q  D' \* C2 ~7 ?$ l
  23. ! R" e9 M/ ]& z" K0 [
  24. Function SubAsm(AsmDoc, ConfString)
    5 h7 C5 h5 @- j6 U" `; w; f# e0 h( }
  25. Set Configuration = AsmDoc.GetConfigurationByName(ConfString)# |: {0 l# N/ Q) `+ Y
  26. Set RootComponent = Configuration.GetRootComponent
    ' \# D, n, o) W) [5 o7 o
  27. Components = RootComponent.GetChildren
    4 ^' T; s5 x3 O. a; X0 S+ o
  28. For Each Child In Components
      W3 J9 U1 f  W  L5 G# p5 m1 K
  29.     Set ChildModel = Child.GetModelDoc( I0 a* V* V, I7 X+ p" B( M& X0 q# j
  30.     If Not (ChildModel Is Nothing) Then '排除抑制及轻化. t: ~" J$ d+ \: e
  31.         ChildConfString = Child.ReferencedConfiguration '零件配置名称
    . K) N9 b1 `0 f+ V' O: B; m
  32.         ChildType = ChildModel.GetType* @# Q- }1 _% u  _. B
  33.         ChildPathSplit = Split(Child.GetPathName, "") '分割
    + |7 ~5 e" r- m1 I. h
  34.         ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名称$ a& H" i  x, X3 U) R! T
  35.         # P. V' `3 A0 c! w5 o$ x3 O. ]
  36.         ChildPathOnly = Mid(Child.GetPathName, 1, InStrRev(Child.GetPathName, "", -1)) '零件的完整目录6 e. ]0 R2 K2 `5 U& ]( {) d& L6 Z
  37.         If ChildPathOnly = Replace(ChildPathOnly, TopDocPathOnly, "") Then SamePath = False Else SamePath = True '零件是否在总装目录或往下目录: c* a6 ~) r; a2 L, G3 ~# Z: s) y6 P
  38.         ) t- R7 S4 ~# y6 S# L+ v$ A
  39.         If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳過:不在总装目錄或其往下目錄 或 不包括在材料明細表中 或 是个封套
    ' `, T# Q" l2 n( ^
  40. '        If (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳过:不包括在材料明細表中 及 封套& I- i5 ^( o# p) h: y
  41.             UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '备用量属性名称
    , M, A4 ^4 s8 p3 l4 C! L; q, l. A
  42.             UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '备用量
    % I8 ], F5 D; a
  43.             If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '备用量除错  N% G5 b  h% j5 e: `
  44.             inCollect = False '重置判断变量
    4 a$ ]/ V1 Z' G
  45.             For Each PartinCollect In PartsCollect '判断是否已在遍历清单內2 A; f. f  g5 n# }+ }- y+ X& L, L
  46.                 If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True
    6 \* Y- j4 Z+ l% d- \  Y, G/ Q; c9 U
  47.             Next
    3 I3 x* m% m+ e3 W4 I. x' y2 m
  48.             If inCollect Then '已在遍历清单內' k5 O1 b+ p9 o2 h! ~
  49.                 ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE3 q6 Z! u4 f% j5 S
  50.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY) m8 N/ W* X* H, v+ g  x9 R( ]% K
  51.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty  Z/ h1 ]- X9 o7 k) A
  52.             Else '不在遍历清单內(首次处理)" A( F) Z( e+ F% a) V
  53.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY
    2 p! l# |/ W, |3 m3 X3 _3 M2 h; b
  54.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE
    $ ^7 c" x8 ]4 W; s
  55.                 InCollectCount = InCollectCount + 1 '遍历清单长度基数+1  `; q! Q0 E: \! y
  56.                 ReDim Preserve PartsCollect(InCollectCount) '重新定义阵列项数(保留內含数据)
    9 r, T$ Q3 i* @/ J
  57.                 PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍历清单中& K! W* t2 K" k; F- I
  58.                 ChildModel.SetUserPreferenceIntegerValue swUnitSystem, swUnitSystem_Custom '单位系统=Custom* W% H- q( \3 I) `
  59.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '重量单位设定为kg(可按喜好加入設定)/ ]8 v- \( G1 J, Q% |: G
  60.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropLength, swMM '设定长度单位为毫米
    8 D1 ?) Q, L6 y: t0 A# j8 n3 E6 v
  61.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropVolume, swUnitsMassPropVolume_Centimeters3 '设定体积单位为立方厘米0 x2 G% l4 U% n3 o  [/ z/ d
  62.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropDecimalPlaces, 2 '质量及体积小数点后2位9 j  M) F0 @% `7 m) L7 W5 r* k
  63.                 ChildModel.AddCustomInfo3 "", "Weight", 30, Chr(34) & "SW-Mass@*" & ChildName & Chr(34) '在自订属性加入Weight属性
      l1 f7 ?, {) b7 s' s
  64.                 ChildModel.AddCustomInfo3 "", "Material", 30, Chr(34) & "SW-Material@*" & ChildName & Chr(34) '在自订属性加入Material属性
    * f- V' a& {  Y! J
  65.                 ChildModel.AddCustomInfo3 ChildConfString, "Weight", 30, Chr(34) & "SW-Mass@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Weight属性! |% t8 ?) W, `( E: G! n$ w
  66.                 ChildModel.AddCustomInfo3 ChildConfString, "Material", 30, Chr(34) & "SW-Material@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Material属性0 @. E  i( N0 m* e
  67.                 ChildModel.SketchManager.Insert3DSketch True '插入三低草图,从而激活零件的“需存盘标签”
    * K: h. }; J, r4 \+ N. Y# x
  68.                 ChildModel.SketchManager.Insert3DSketch True '离开三低草图$ l; h! h* U/ i1 C- e
  69.             End If
    6 @/ s( s. B3 I5 X: `6 z
  70.             If ChildType = 2 Then: P# l, y( T4 ~+ Q
  71.                 SubAsm ChildModel, ChildConfString '如果是装配则向下遍历1 B+ }( C0 H  _9 E! T) x; E
  72.             End If# O7 W7 X' U8 r8 u' ^7 r% m
  73.             + s, P7 a' o1 B' x: T; T: t0 P
  74.         End If
    : p! l: B' D. K" v" j
  75.     End If
    + {2 Q. y( J2 F) E
  76. Next: Y) x/ y+ i# y0 ^
  77. End Function; M# b3 N. \$ g4 c3 ^- G5 ?
  78.    
    0 `0 _, e* f% z( f1 n2 h
复制代码
发表于 2016-11-14 16:54:03 | 显示全部楼层
本帖最后由 erikgqp8645 于 2016-11-14 16:56 编辑
& `4 R! G8 {# e8 X3 @+ x" E; U& D3 M* c
试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html
. o) r) i. V. w$ G: U+ k附件是上面那个代码的宏程序。
9 B" i0 @4 a7 |2 d9 }+ H: f6 Q使用方法,在装配体中运行宏,就会添加总数量。
( v/ d( p9 W' u8 x) `+ I" `

添加总数量.rar

12.68 KB, 下载次数: 46

发表于 2016-11-14 20:11:04 | 显示全部楼层
明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是单个子装配体中的数量。这才符合逻辑,而楼主的需要明显是瞎胡闹
发表于 2016-11-15 08:04:37 | 显示全部楼层
yk2906 发表于 2016-11-14 20:11" B2 q( j+ ^, c9 N$ s
明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是 ...

  `' T( O# Q9 C1 }+ p这位兄台,我并不是这么认为的。. t3 f: u2 ^: W+ ]; {6 I
对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便于更好的加工。$ H# i; N& s! d4 T  d: E) T# R: e
做图纸的是要给加工部门看的,而大家方便了自然也可以不那么符合逻辑。. P; E  J( |, M# R( A4 ~
上面的宏程序可以在把数量改为“总数量”单独在bom上加一列,这样看起来更加直观。
 楼主| 发表于 2016-11-18 08:07:58 | 显示全部楼层
erikgqp8645 发表于 2016-11-15 08:040 T, ~" n, Z9 @$ k' _) P% I- w
这位兄台,我并不是这么认为的。
6 X: t$ v$ Y+ A3 Z" w8 y对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便 ...

" C) {! k6 ^2 w7 p有时可能相同的装配体的2组 或3组 或1组的1 Q" v  ^6 B" T: _7 p3 e* G: D; S# U
那到对应的装配体下面的零件是就是X2  X3  X1是不相同的
3 }: L( c% C4 W9 [/ }2 V. l* ]
发表于 2016-11-18 13:08:51 | 显示全部楼层
你的这个我大体理解什么意思了 ,就是把不同的或者相同的部件中共同使用件数做个统计是吧?如果是这样的话,我一般做两个明细表,一个是零件BOM,跟总成下的部件BOM
发表于 2016-11-18 16:19:17 | 显示全部楼层
yh2008 发表于 2016-11-18 08:071 O' q$ q4 F* t; M; Q: a
有时可能相同的装配体的2组 或3组 或1组的
+ ]! F" a$ \! c% R# d  m9 ]+ Q那到对应的装配体下面的零件是就是X2  X3  X1是不相同的

$ p" p4 C1 C+ ?; Q上面那个宏就是实现这个功能的。
7 C; y" T/ ~6 Z- d# z1 f& _假如你一个装配体里面有两个组件,分别为a和b。. \# e) q8 y1 O5 c: n: ?
其中有个零件c在这两个组件里面都有。
# j$ [% n0 S- l+ Z运行上面那段宏就可以添加一个总数量的属性,就是在这个装配体里面的总数量。
发表于 2016-11-18 19:54:29 | 显示全部楼层
晕,没有ERP系统,也没有生产计划部?
% L8 V, h2 }: z7 B, G图纸上不带这样表示的吧?. I' N: z. a  z- o* I
最多再另出一个总计算的表格吧?
发表于 2016-11-18 21:03:02 | 显示全部楼层
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头的图标,数字也变了
6 ~5 q: Q2 o: }
1114.png
 楼主| 发表于 2016-11-19 08:22:34 | 显示全部楼层
jinqin11 发表于 2016-11-18 21:03! A8 ]9 _1 |! o9 P
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头 ...
/ Z6 v, M% Z3 z. \
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的
发表于 2016-11-19 11:43:51 | 显示全部楼层
yh2008 发表于 2016-11-19 08:226 _7 @' z% r5 y
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的
# t: A( V" i6 L6 O6 ?) O  R  ^
楼主大大明明白白在问“加总”,怎么又说“分开”。
# N) r; |0 G9 P& y4 d! b( ^+ o0 U
  ]6 `- E9 v, r  n原来在问“小计”(subtotal)。
发表于 2016-11-19 20:45:33 | 显示全部楼层
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif
) `# ]; O, i0 j% G( K方程式只能一个个的加,如果明细表中的零件多是不好实现的
" U$ l6 J4 B9 W3 o1 I
可以实现的
$ y/ `% a$ F% f
发表于 2016-11-19 20:46:17 | 显示全部楼层
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif1 H: R$ y) |5 s! g( a* a/ t0 `' C
方程式只能一个个的加,如果明细表中的零件多是不好实现的
& F, @% h" t! i$ P
要是不明白就加我Q726915950说是三维网的
# e3 _7 L! Y8 e; U
发表于 2016-11-20 11:30:43 | 显示全部楼层
贊同#9、#10的「部份」內容。- H1 C. z# I7 E* y7 B

9 U$ k: o6 s4 z# d就我個人而言,這樣的表示方法並沒有問題呀~: g& Y5 }# v& b
我想這是對於此種「階梯式」的零件圖產生的誤解而衍生出的問題,而且還不少人有這樣的疑惑~
% r* l+ v- V% ^0 x: Q* A- ]
9 c. p1 @( ~9 K
階梯式表達的數量欄位的值,指的是在「這一層」次組件的單用量,這樣去想就沒有錯了。, \' T! r8 z$ a8 h
試想,如果有像我一樣解讀的人來看樓主要求的BOM,那麼數量要如何計算才是對的?" Q5 d9 N3 y$ y0 X" v/ ~
5 K6 j  K: [& l6 f+ }" q8 \8 g" y6 L
如果要顯示一零件在總裝配裡的使用量,那麼就不應該使用階梯式了。
8 U% q) S$ C+ V; I- K7 A' o# G2 R
而這也呼應了大鹿先生說的「小計」。
$ w, \' i2 W: c  \1 ~; K+ d6 o' I1 K# ]8 U+ B
# l. b- k4 e: G1 M9 a6 h% U
 楼主| 发表于 2016-11-21 08:11:42 | 显示全部楼层
大鹿 发表于 2016-11-19 11:431 P) b. B9 g! \- X" u  f
楼主大大明明白白在问“加总”,怎么又说“分开”。
" ~% K4 x% D8 @+ T  z0 m+ z; I9 _7 i: _* `- D$ d
原来在问“小计”(subtotal)。
- i4 [! {2 K6 }8 G
是的可以说是小计
 楼主| 发表于 2016-11-21 08:15:54 | 显示全部楼层
gt.adan 发表于 2016-11-20 11:305 `( w0 D- D: @) t! p+ T
贊同#9、#10的「部份」內容。$ g" D7 Q( \6 Q, C
2 I; T7 N4 R3 I7 `  P8 S
就我個人而言,這樣的表示方法並沒有問題呀~
; Q, k# n0 y' f5 y* Y
SW的表现方式是对的,只是在计算时会出现一个小计数量,; e2 {  }' N! q- G8 P8 v+ D
现在就是想怎么直接出现小计的结果,因为零件要在EXCEL中计算成本
6 R; G! k& K% n+ m( D目前的做法是手动修改数量,缺点就是有时可能漏# W# E7 r' Y( Q+ C6 V8 `3 e0 r! f
不知大家有没有什么好的方法
发表于 2022-6-9 10:21:06 | 显示全部楼层
erikgqp8645 发表于 2016-11-14 16:54
* t( S& ?% o, j% p试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html
. ?, [0 y/ ]" L* N附件是上面那个代码的宏程序。* P2 p+ e" g9 ^7 T6 v0 w2 p) O0 L
...

* _( F" |# b  {  P! b我试了这个宏 为什么不行啊?
发表于 2022-8-3 09:04:53 | 显示全部楼层
其实是有同感的。我的办法是做两张BOM表。一个是阶梯的,一个是总数的。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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