QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
8天前
查看: 6575|回复: 24
收起左侧

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

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

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

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

x
请教一下大家SW明细表中的数量怎么加总啊如下图第一层的总装配有2个,对应下面的零件应都X2
* F2 |( @& y6 w+ O" V( l9 ^在SW明细表中怎么能自动识别的?
( g( e8 j" Z' B$ ~  n  v
) a& u5 R9 u) ?' c1 U3 ]# m# W9 O# u+ b
QQ图片20161112150911.png
2 T( o; [4 g6 C* u& X- K. m- w/ J3 n; D3 t

7 l  y: t. }1 ^- P) l; H+ y
发表于 2016-11-12 15:33:49 | 显示全部楼层 来自: 中国辽宁营口
什么样的设备装配图的明细表需要具备数量加总
发表于 2016-11-12 23:29:30 | 显示全部楼层 来自: 中国北京
加方程式啊
! \4 r) w( T: X8 ~# o
发表于 2016-11-13 10:48:13 | 显示全部楼层 来自: 中国辽宁盘锦
暂时理解不透你说的意思
 楼主| 发表于 2016-11-14 08:49:59 | 显示全部楼层 来自: 中国湖北武汉
阿帕奇 发表于 2016-11-13 10:48
* A+ ^+ |3 A; h8 B* Q' @! K暂时理解不透你说的意思

1 K3 Z3 m- B* Z* L, s+ n也就是总装配中有二个一样的装配体,但在明细表中只显示装配有2个,而下面的零件只计了1个装配体的。实际中要把下面的每个零件都是乘以2如下图
1 _5 s& h. K. a& N$ e) D" h8 e7 r* `: _
0 w! A# X! `) N6 L8 v
QQ截图20161114084729.png
 楼主| 发表于 2016-11-14 08:51:51 | 显示全部楼层 来自: 中国湖北武汉
hhaa545 发表于 2016-11-12 23:29
; \& z4 I: t3 O& V& T加方程式啊

4 I+ ]1 R- I  ]- t" I方程式只能一个个的加,如果明细表中的零件多是不好实现的
  u% l. H% P7 |8 P1 {8 J
发表于 2016-11-14 16:53:04 | 显示全部楼层 来自: 中国天津
  1. # S/ R% _5 R8 p* [
  2. Dim TopDocPathOnly As String
    9 x, S7 @6 ^3 m" c
  3. Dim PartsCollect() As String '遍历清单(阵列)$ d! L$ X- T; u* Z2 `' A2 C2 W
  4. Dim InCollectCount As Double '遍历清单长度1 m+ g; v6 e1 c+ x
  5. Dim CustomInfoQTY As String
    6 \# i7 w2 W+ l$ e! z( }' `- x
  6. 7 {4 L9 L  E# B' H: f5 q
  7. Sub main()- J8 L# J6 E1 @9 y, y8 i
  8. Set swapp = Application.SldWorks 'SW对象+ f' m' T0 @/ R9 n9 y
  9. Set TopDoc = swapp.ActiveDoc '总装对象: `& r1 k  h5 m+ d7 Z! Z3 |% H
  10. If TopDoc.GetType <> 2 Then Exit Sub '不是装配=退出+ k6 R  G6 b& W2 A
  11. TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割
    ( W& x3 z( O2 [$ N
  12. TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '总装文件名称
    & r: [( h7 ?5 j8 @! p2 h
  13. TopDocName = Left(TopDocName, Len(TopDocName) - 7) '总装文件名称(排除.SLDASM)
    8 T8 F: c+ @6 d4 _+ C5 r+ `
  14. TopDocPathOnly = Mid(TopDoc.GetPathName, 1, InStrRev(TopDoc.GetPathName, "", -1)) '总装的完整目录
    ! Y8 E3 y: Q# D6 Z0 _* n
  15. TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱
    ! R# F0 \9 P1 `$ m
  16. CustomInfoQTY = "数量" '可按个人喜好修改预设值# c$ o5 x2 H" \, ?# z
  17. InCollectCount = 1 '遍历清单长度基数3 [% D# W/ H5 K' H# l
  18. ReDim PartsCollect(InCollectCount) '定义阵列项数
    " A/ N2 z7 ]6 Y
  19. SubAsm TopDoc, TopConfString '遍历
    & L. {1 F8 l3 @* ~- b' `) s" j
  20. Beep
    & ]- S  v% S2 [/ j: x5 v/ `
  21. MsgBox "完成"
    " |: X4 i  o% V- p" T% i
  22. End Sub% m" L% s" c  t1 h+ h' H

  23. ; B9 {1 T6 M0 A; N% {( u
  24. Function SubAsm(AsmDoc, ConfString)2 t8 c' T! V5 T( r
  25. Set Configuration = AsmDoc.GetConfigurationByName(ConfString)
    4 {7 `6 N5 i3 a) Q- S) M1 `) _
  26. Set RootComponent = Configuration.GetRootComponent* B7 m. z+ o+ {+ W
  27. Components = RootComponent.GetChildren
    , @' h( Q% e2 b; j
  28. For Each Child In Components$ J: L2 v* J. e$ G, B
  29.     Set ChildModel = Child.GetModelDoc
    ( R4 }. ^& w' N
  30.     If Not (ChildModel Is Nothing) Then '排除抑制及轻化
    # M/ I* E/ [$ H. F& r
  31.         ChildConfString = Child.ReferencedConfiguration '零件配置名称/ g0 a+ X  s4 o
  32.         ChildType = ChildModel.GetType4 B; U2 O8 e" Y4 Z# p3 ^
  33.         ChildPathSplit = Split(Child.GetPathName, "") '分割
    , u9 H- R1 J* @1 e
  34.         ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名称
    - y0 B- h0 l: c
  35.         
    ! z1 v. }7 O$ @+ A4 p$ o6 z3 q
  36.         ChildPathOnly = Mid(Child.GetPathName, 1, InStrRev(Child.GetPathName, "", -1)) '零件的完整目录/ @) g) l8 a2 |/ Z
  37.         If ChildPathOnly = Replace(ChildPathOnly, TopDocPathOnly, "") Then SamePath = False Else SamePath = True '零件是否在总装目录或往下目录
    . D* u8 f. W$ Y
  38.         + d% O8 d: n4 `1 K3 w) ]; B' Z1 e
  39.         If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳過:不在总装目錄或其往下目錄 或 不包括在材料明細表中 或 是个封套
    / V7 G! [1 T4 |, H; {
  40. '        If (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳过:不包括在材料明細表中 及 封套8 Q, z( N6 q; H  Q  z: q
  41.             UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '备用量属性名称
      q3 u+ Y: F; S) `, |7 n0 J
  42.             UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '备用量+ }1 c; _" w- k
  43.             If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '备用量除错5 a% x  e6 p! D! l
  44.             inCollect = False '重置判断变量
    ; I  V  o- i( n9 Y$ i6 D
  45.             For Each PartinCollect In PartsCollect '判断是否已在遍历清单內
    " C4 s3 ?) h3 y- B# R9 N. t
  46.                 If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True
    ' @. ~. J, U1 K" j, T: K: r3 r
  47.             Next
    4 H- E1 _; K4 \0 C
  48.             If inCollect Then '已在遍历清单內1 O. G' \$ C5 {8 ~. d. x$ \
  49.                 ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE  Q+ u! [5 `6 W0 d% F5 z0 s
  50.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY2 \& U  O( P  v& N3 q1 x
  51.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty
    4 Y3 ]" A6 i4 x$ x% b; F
  52.             Else '不在遍历清单內(首次处理)
    & D1 u/ T2 G  ?# o2 @
  53.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY
    , `/ o5 u5 S" W" B& s, E
  54.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE
    ' m" U" a) [% r# S- O. J# X
  55.                 InCollectCount = InCollectCount + 1 '遍历清单长度基数+1
    7 ]+ f$ z5 }8 u3 L
  56.                 ReDim Preserve PartsCollect(InCollectCount) '重新定义阵列项数(保留內含数据)
    / [8 w* f: |: w  e) p9 [
  57.                 PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍历清单中! \2 L& w0 g" n' H6 G
  58.                 ChildModel.SetUserPreferenceIntegerValue swUnitSystem, swUnitSystem_Custom '单位系统=Custom3 \' K$ M8 [: W; @5 g
  59.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '重量单位设定为kg(可按喜好加入設定)
    ; W, j, d0 O& B2 j4 R
  60.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropLength, swMM '设定长度单位为毫米$ Q0 G' y, D/ ?) w! E# h9 \
  61.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropVolume, swUnitsMassPropVolume_Centimeters3 '设定体积单位为立方厘米
    " G5 ^4 v% A2 }8 R+ g
  62.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropDecimalPlaces, 2 '质量及体积小数点后2位+ z& l. i' `& `. L3 j8 d
  63.                 ChildModel.AddCustomInfo3 "", "Weight", 30, Chr(34) & "SW-Mass@*" & ChildName & Chr(34) '在自订属性加入Weight属性
    ( l) B% k( u$ @- z7 l, V. O
  64.                 ChildModel.AddCustomInfo3 "", "Material", 30, Chr(34) & "SW-Material@*" & ChildName & Chr(34) '在自订属性加入Material属性' ~+ b( G2 {/ W$ G. V
  65.                 ChildModel.AddCustomInfo3 ChildConfString, "Weight", 30, Chr(34) & "SW-Mass@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Weight属性2 z3 y/ `/ W9 u- d. Z/ ^2 ]; f
  66.                 ChildModel.AddCustomInfo3 ChildConfString, "Material", 30, Chr(34) & "SW-Material@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Material属性
    0 i9 }: i* Z( a0 b4 n* K: g* g0 K2 O
  67.                 ChildModel.SketchManager.Insert3DSketch True '插入三低草图,从而激活零件的“需存盘标签”; `8 Q' m$ S" E/ d6 Y. j- z
  68.                 ChildModel.SketchManager.Insert3DSketch True '离开三低草图0 i& a* H: t$ k1 X4 H
  69.             End If
      ?' ^& r8 n  I. R: q& R
  70.             If ChildType = 2 Then9 t& q6 P+ l& }) V+ H+ b! Z- V
  71.                 SubAsm ChildModel, ChildConfString '如果是装配则向下遍历
    , o5 S& E8 _% I- o; s( F- i  v
  72.             End If
    ( e- P! G; V% K4 i4 Z7 @/ n5 n6 {
  73.             
      t& b+ G; u( ?8 X; v. v
  74.         End If; }( o4 G% g0 j, p  G0 u( B  u
  75.     End If0 j- O5 a3 w" B/ W7 J3 x
  76. Next0 n0 B% \6 y3 T
  77. End Function5 d3 Z) C2 z* S1 t( ]- d; o9 e2 {* \
  78.     ! P  b3 j4 E& q
复制代码
发表于 2016-11-14 16:54:03 | 显示全部楼层 来自: 中国天津
本帖最后由 erikgqp8645 于 2016-11-14 16:56 编辑 ) E: ~- l# ?8 O

2 ^- W: G( @0 g) a4 D试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html; W. g# G2 Z" M; M) w
附件是上面那个代码的宏程序。
% U4 [2 [7 f) I使用方法,在装配体中运行宏,就会添加总数量。
& L* L/ B+ \$ U) W+ Q

添加总数量.rar

12.68 KB, 下载次数: 46

发表于 2016-11-14 20:11:04 | 显示全部楼层 来自: 中国辽宁营口
明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是单个子装配体中的数量。这才符合逻辑,而楼主的需要明显是瞎胡闹
发表于 2016-11-15 08:04:37 | 显示全部楼层 来自: 中国天津
yk2906 发表于 2016-11-14 20:11
6 c2 d, J" K; E6 J明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是 ...

, r+ |* D) U+ B  _% X+ q这位兄台,我并不是这么认为的。
) B8 m7 \4 }/ }3 v$ q3 L8 ~# e+ u7 E对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便于更好的加工。! c5 k% o  [1 U1 N# f  o0 M
做图纸的是要给加工部门看的,而大家方便了自然也可以不那么符合逻辑。
3 _& P% b6 M" `" [8 W) z7 f上面的宏程序可以在把数量改为“总数量”单独在bom上加一列,这样看起来更加直观。
 楼主| 发表于 2016-11-18 08:07:58 | 显示全部楼层 来自: 中国湖北武汉
erikgqp8645 发表于 2016-11-15 08:04
0 O+ t$ v( U1 M0 r' |) c这位兄台,我并不是这么认为的。( w# W4 i4 ?$ L: z1 Z" ^3 d
对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便 ...
5 _4 a4 d7 M! R9 Y; A
有时可能相同的装配体的2组 或3组 或1组的) }9 k$ y# t5 |% {0 z
那到对应的装配体下面的零件是就是X2  X3  X1是不相同的4 z+ G  }% |/ m& p# R: {
发表于 2016-11-18 13:08:51 | 显示全部楼层 来自: 中国山东临沂
你的这个我大体理解什么意思了 ,就是把不同的或者相同的部件中共同使用件数做个统计是吧?如果是这样的话,我一般做两个明细表,一个是零件BOM,跟总成下的部件BOM
发表于 2016-11-18 16:19:17 | 显示全部楼层 来自: 中国天津
yh2008 发表于 2016-11-18 08:07
  ?9 \- F+ z0 X3 ~1 K有时可能相同的装配体的2组 或3组 或1组的
, W% Q. w8 _- Q- Z% z那到对应的装配体下面的零件是就是X2  X3  X1是不相同的
* P  [1 d* r# Q; ?2 E6 O
上面那个宏就是实现这个功能的。: \1 s, j" i2 ]: o0 u2 s
假如你一个装配体里面有两个组件,分别为a和b。
5 O9 B  }5 {+ R, C" u其中有个零件c在这两个组件里面都有。% _9 }6 k( ]/ j1 Q1 o
运行上面那段宏就可以添加一个总数量的属性,就是在这个装配体里面的总数量。
发表于 2016-11-18 19:54:29 | 显示全部楼层 来自: 中国广东深圳
晕,没有ERP系统,也没有生产计划部?
) J- h5 s$ N7 @& k图纸上不带这样表示的吧?, [/ x3 Q1 F( l8 i
最多再另出一个总计算的表格吧?
发表于 2016-11-18 21:03:02 | 显示全部楼层 来自: 中国安徽蚌埠
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头的图标,数字也变了
. Y8 z- Q- K5 ]- P  i4 F7 c' v* l
1114.png
 楼主| 发表于 2016-11-19 08:22:34 | 显示全部楼层 来自: 中国湖北武汉
jinqin11 发表于 2016-11-18 21:03
* {/ ]. D7 S! h5 }: P- T鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头 ...
, P% m9 u, ~$ \. G6 W" q6 E* c( [
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的
发表于 2016-11-19 11:43:51 | 显示全部楼层 来自: 中国香港
yh2008 发表于 2016-11-19 08:226 u; N0 t  G& }8 ]" C0 h2 x( Z& |
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的

7 B( D, O9 T2 q( @8 d楼主大大明明白白在问“加总”,怎么又说“分开”。
$ G) K8 y6 O8 N0 ]" k- f% O8 j6 t( g5 u* b
原来在问“小计”(subtotal)。
发表于 2016-11-19 20:45:33 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif1 p5 k6 v" V4 H9 ]; _7 ]
方程式只能一个个的加,如果明细表中的零件多是不好实现的

5 T3 w4 Q% c( g0 p可以实现的
3 f$ W# ~& G$ Q) I
发表于 2016-11-19 20:46:17 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif+ r9 n- @& g7 T' m2 P
方程式只能一个个的加,如果明细表中的零件多是不好实现的

" N" \* d* a2 ^" D3 t7 [要是不明白就加我Q726915950说是三维网的6 e, _& m$ m- [! u2 h) ^
发表于 2016-11-20 11:30:43 | 显示全部楼层 来自: 中国台湾
贊同#9、#10的「部份」內容。
/ K: l' `- h: }) K3 G9 S0 b
+ }+ ]2 C& T3 s就我個人而言,這樣的表示方法並沒有問題呀~/ X  Q( U6 b: F. X9 A8 j
我想這是對於此種「階梯式」的零件圖產生的誤解而衍生出的問題,而且還不少人有這樣的疑惑~8 O: Y1 v+ v  D% O2 m8 G

6 ~4 }6 ^# ^) i  ~' R% V6 B; {階梯式表達的數量欄位的值,指的是在「這一層」次組件的單用量,這樣去想就沒有錯了。
( v$ E0 A- [: Y5 ?* w" B試想,如果有像我一樣解讀的人來看樓主要求的BOM,那麼數量要如何計算才是對的?$ |5 l3 s/ e, Z9 O( x, p9 B" V

! v7 Z6 s9 u; W  j3 {如果要顯示一零件在總裝配裡的使用量,那麼就不應該使用階梯式了。; h  S) G2 N: _- b7 k( C9 V0 W+ C
5 ?7 `5 k7 H; X
而這也呼應了大鹿先生說的「小計」。6 f0 P: J7 V* E+ T/ v$ l( L

6 y4 h$ X3 K! ^2 B" t# v9 f) a# Y1 a
 楼主| 发表于 2016-11-21 08:11:42 | 显示全部楼层 来自: 中国湖北武汉
大鹿 发表于 2016-11-19 11:437 E+ P7 _; Q# k. Z4 m! b% C
楼主大大明明白白在问“加总”,怎么又说“分开”。
: `% ?, _5 B( S# t, a4 ~! P. x. b  G8 \/ ?! W
原来在问“小计”(subtotal)。

: w5 L! F  X: B& i是的可以说是小计
 楼主| 发表于 2016-11-21 08:15:54 | 显示全部楼层 来自: 中国湖北武汉
gt.adan 发表于 2016-11-20 11:30
. z8 U  o  E6 o" `贊同#9、#10的「部份」內容。
: m0 S) u5 v& m3 ~% `) `- ^
# o* e# e3 W& [! D. V就我個人而言,這樣的表示方法並沒有問題呀~
% j. R, e7 a. A& z" b
SW的表现方式是对的,只是在计算时会出现一个小计数量,
7 j) I" M" z  c( P. M: h/ N+ O现在就是想怎么直接出现小计的结果,因为零件要在EXCEL中计算成本
" ?) x" D+ g7 q* W+ T2 b目前的做法是手动修改数量,缺点就是有时可能漏
! Y8 b: [; i9 x' _不知大家有没有什么好的方法
发表于 2022-6-9 10:21:06 | 显示全部楼层 来自: 中国上海
erikgqp8645 发表于 2016-11-14 16:546 A3 {) w5 Q7 C0 k) K
试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html; [8 S( p+ B! o1 L9 c0 r2 @
附件是上面那个代码的宏程序。, t0 z2 Y" W1 B6 Z& ^
...

- I! z- a- B/ g9 j4 W/ |/ a8 u我试了这个宏 为什么不行啊?
发表于 2022-8-3 09:04:53 | 显示全部楼层 来自: 中国湖北
其实是有同感的。我的办法是做两张BOM表。一个是阶梯的,一个是总数的。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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