QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
7天前
查看: 6573|回复: 24
收起左侧

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

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

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

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

x
请教一下大家SW明细表中的数量怎么加总啊如下图第一层的总装配有2个,对应下面的零件应都X2% i% j2 v; {% }% p* W0 c5 n
在SW明细表中怎么能自动识别的?
+ {$ {  n$ h7 j' P& Q$ j
2 S0 _  f/ E2 `" W& W8 j3 v+ F
2 M6 w6 u8 B! k$ p+ v1 J QQ图片20161112150911.png   t) ], ^% [1 r% `5 \
4 }% c8 _% n# F- X& y* H

7 g& q, Q0 j5 v" G( S2 I- E( k3 i
发表于 2016-11-12 15:33:49 | 显示全部楼层 来自: 中国辽宁营口
什么样的设备装配图的明细表需要具备数量加总
发表于 2016-11-12 23:29:30 | 显示全部楼层 来自: 中国北京
加方程式啊8 f9 |9 n! ?5 P* }+ B9 H0 t
发表于 2016-11-13 10:48:13 | 显示全部楼层 来自: 中国辽宁盘锦
暂时理解不透你说的意思
 楼主| 发表于 2016-11-14 08:49:59 | 显示全部楼层 来自: 中国湖北武汉
阿帕奇 发表于 2016-11-13 10:48
) t: I6 m" }) _6 ^- s) |8 L暂时理解不透你说的意思
* _# l0 b& S- P; Z0 Z
也就是总装配中有二个一样的装配体,但在明细表中只显示装配有2个,而下面的零件只计了1个装配体的。实际中要把下面的每个零件都是乘以2如下图
$ m3 z7 ^3 g. D  o' m2 x& J$ a! _5 n* o) |; ]5 L9 Z) l

9 e+ K0 z2 d' X9 v9 L/ N% D% ?
QQ截图20161114084729.png
 楼主| 发表于 2016-11-14 08:51:51 | 显示全部楼层 来自: 中国湖北武汉
hhaa545 发表于 2016-11-12 23:296 j- L8 ?) e, a9 W7 E
加方程式啊

. D) V' ?, k" l+ J0 c# c6 Y方程式只能一个个的加,如果明细表中的零件多是不好实现的2 j* O& k% T. n. h' j
发表于 2016-11-14 16:53:04 | 显示全部楼层 来自: 中国天津

  1. 8 f0 i& y# A$ F0 e' i
  2. Dim TopDocPathOnly As String
    4 r& j6 ]- e4 s! L& B' ?6 a
  3. Dim PartsCollect() As String '遍历清单(阵列)
    1 ]( E# l8 u) U
  4. Dim InCollectCount As Double '遍历清单长度
    , q. P) V7 H2 I/ _6 b
  5. Dim CustomInfoQTY As String
    $ N6 j- w1 t& f
  6. / m# \* p0 y; s7 |
  7. Sub main()
    8 b; [; W) c4 r2 g  _+ T
  8. Set swapp = Application.SldWorks 'SW对象
    ( M+ f" k4 X: w) h3 X  \8 j
  9. Set TopDoc = swapp.ActiveDoc '总装对象
    1 k# \, P$ \6 M: u
  10. If TopDoc.GetType <> 2 Then Exit Sub '不是装配=退出7 w. H0 Y2 V9 p) H& v
  11. TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割
    ! z3 S3 k0 _: s; j+ q4 d
  12. TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '总装文件名称
    % y% j/ o5 x% j% [8 P6 b! Q
  13. TopDocName = Left(TopDocName, Len(TopDocName) - 7) '总装文件名称(排除.SLDASM)
    - @6 f' e7 X( w; k# M* t- p
  14. TopDocPathOnly = Mid(TopDoc.GetPathName, 1, InStrRev(TopDoc.GetPathName, "", -1)) '总装的完整目录
    4 |. ~9 U9 \- x! @0 g
  15. TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱* H  n3 u5 B+ Q- i* c' J
  16. CustomInfoQTY = "数量" '可按个人喜好修改预设值! S% Q1 R: `  b- \% T* f
  17. InCollectCount = 1 '遍历清单长度基数
    : q, }: d8 R# y3 i6 a% a
  18. ReDim PartsCollect(InCollectCount) '定义阵列项数' ?5 r" j/ k) x
  19. SubAsm TopDoc, TopConfString '遍历, K8 a2 v( D0 b) g) \8 i
  20. Beep! y6 W5 {% n2 j" p6 s9 Z
  21. MsgBox "完成"
    1 F6 S2 q0 G% F( i3 M# |4 n- o
  22. End Sub
    4 \6 x5 }# w# t& X5 Q0 G8 u% ~
  23. - M8 ?% n  e  S4 R6 o& X3 X
  24. Function SubAsm(AsmDoc, ConfString)
    5 ~+ r4 G" T% E+ x  e
  25. Set Configuration = AsmDoc.GetConfigurationByName(ConfString)' D2 L) I- b2 G: i2 Z
  26. Set RootComponent = Configuration.GetRootComponent- d& U$ T& s; n5 E) ?5 X1 c$ e
  27. Components = RootComponent.GetChildren+ @9 B4 r. s' Q% s. F
  28. For Each Child In Components% n0 o) o3 e4 q( {$ a0 I' [
  29.     Set ChildModel = Child.GetModelDoc; Q) i/ r# \3 ?1 R0 s, V2 o& H, A  w
  30.     If Not (ChildModel Is Nothing) Then '排除抑制及轻化1 O( y1 x+ z! F$ i
  31.         ChildConfString = Child.ReferencedConfiguration '零件配置名称
    2 Z3 f' Q4 |  ^% z) }3 f
  32.         ChildType = ChildModel.GetType! O/ `9 p) D+ D9 l
  33.         ChildPathSplit = Split(Child.GetPathName, "") '分割
      \# M1 H$ `3 Z
  34.         ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名称3 K" f5 H6 L  E6 I, x
  35.         " c( p' \; Q3 @( F9 E
  36.         ChildPathOnly = Mid(Child.GetPathName, 1, InStrRev(Child.GetPathName, "", -1)) '零件的完整目录, }2 {  {% C% ]  a( F7 i% l
  37.         If ChildPathOnly = Replace(ChildPathOnly, TopDocPathOnly, "") Then SamePath = False Else SamePath = True '零件是否在总装目录或往下目录5 x! q/ I  R* x- R2 d7 k
  38.         
    / c. f% T, b: \( S* i9 h
  39.         If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳過:不在总装目錄或其往下目錄 或 不包括在材料明細表中 或 是个封套
    ; r' \6 J( Q; o8 O1 w  ^* F: y( }
  40. '        If (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳过:不包括在材料明細表中 及 封套8 p6 @9 A. ]1 G6 [
  41.             UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '备用量属性名称
    2 h6 {1 g  d9 v, e! I  B
  42.             UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '备用量+ d7 w5 d/ I9 o: I' S3 o
  43.             If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '备用量除错
    : F% J' o! U6 k
  44.             inCollect = False '重置判断变量- n% y7 e8 l: p# S4 ^5 G4 o8 S
  45.             For Each PartinCollect In PartsCollect '判断是否已在遍历清单內. q; E, x: _  K6 m) u6 [
  46.                 If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True
    ) i1 a! [! S8 {- l
  47.             Next2 k+ ], q2 v! ?8 O+ P
  48.             If inCollect Then '已在遍历清单內
    ! f3 ~. M& H  M$ U# i  w2 ]
  49.                 ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE0 h+ [1 O  l- O/ V; N
  50.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY! E' e6 ?; k! `3 s
  51.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty* U0 j4 K5 ~; @" q7 e
  52.             Else '不在遍历清单內(首次处理)
    - f. i( }5 _, [7 [* G8 _
  53.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY2 x& z$ e0 {& S4 ^5 F* ^7 L: `
  54.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE
    8 y6 D, }$ D; k$ d$ b
  55.                 InCollectCount = InCollectCount + 1 '遍历清单长度基数+1
    - W$ v0 T$ p1 G$ ]- A) o: C: \
  56.                 ReDim Preserve PartsCollect(InCollectCount) '重新定义阵列项数(保留內含数据)& a* g$ w# X. ^6 \$ Y" X) f
  57.                 PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍历清单中
    . q1 I* l  ]: p1 R0 A/ {$ u
  58.                 ChildModel.SetUserPreferenceIntegerValue swUnitSystem, swUnitSystem_Custom '单位系统=Custom; A( v, h+ H" i% r/ U/ G8 Z
  59.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '重量单位设定为kg(可按喜好加入設定): T! C( `+ G6 _3 I
  60.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropLength, swMM '设定长度单位为毫米
    6 A( O$ S: n# N3 Q: I* |0 m* b* f
  61.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropVolume, swUnitsMassPropVolume_Centimeters3 '设定体积单位为立方厘米4 g- f- D7 z) C8 ?
  62.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropDecimalPlaces, 2 '质量及体积小数点后2位
    / P: c- a# ^% u0 S% V7 @0 b
  63.                 ChildModel.AddCustomInfo3 "", "Weight", 30, Chr(34) & "SW-Mass@*" & ChildName & Chr(34) '在自订属性加入Weight属性& K* X: b3 L& w4 w# s+ n# U" s
  64.                 ChildModel.AddCustomInfo3 "", "Material", 30, Chr(34) & "SW-Material@*" & ChildName & Chr(34) '在自订属性加入Material属性
    " s3 _0 {' {$ N
  65.                 ChildModel.AddCustomInfo3 ChildConfString, "Weight", 30, Chr(34) & "SW-Mass@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Weight属性# B4 z  d0 T# y6 P" F
  66.                 ChildModel.AddCustomInfo3 ChildConfString, "Material", 30, Chr(34) & "SW-Material@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Material属性
    1 a9 h8 h$ e- Q$ J
  67.                 ChildModel.SketchManager.Insert3DSketch True '插入三低草图,从而激活零件的“需存盘标签”
    $ g- C2 m( ?& v3 O, t3 W
  68.                 ChildModel.SketchManager.Insert3DSketch True '离开三低草图
      I% t6 B7 }1 @4 y: |1 {4 c
  69.             End If
    7 ~7 O' R2 _0 ~9 A3 j
  70.             If ChildType = 2 Then2 ~0 U( Z# v! O! Y3 A* O5 ]; C
  71.                 SubAsm ChildModel, ChildConfString '如果是装配则向下遍历: W5 A, Z+ o, S$ W* R) k" B( H
  72.             End If
    % J: w$ w0 p+ E- _" x6 V" c
  73.             0 i8 L  H# I- t
  74.         End If
    $ }1 S0 Z) B9 F2 b/ h& ?8 _. E' b
  75.     End If
    * n/ o+ w6 ?' F5 G1 n
  76. Next- U' Y  }* I6 p: z- i
  77. End Function# ^+ }# g4 @$ R
  78.     1 q0 S! i6 d) O+ L" |! }* s2 ^! s
复制代码
发表于 2016-11-14 16:54:03 | 显示全部楼层 来自: 中国天津
本帖最后由 erikgqp8645 于 2016-11-14 16:56 编辑 " Z2 v$ N; J; L! C7 v

, Y1 \% w$ U  i+ B试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html& J, G% p5 C4 Q' l, J# S, B
附件是上面那个代码的宏程序。
7 d# b9 S& {+ }使用方法,在装配体中运行宏,就会添加总数量。7 ]' c7 J8 \# p6 u/ w  m2 v+ V, K+ e

添加总数量.rar

12.68 KB, 下载次数: 46

发表于 2016-11-14 20:11:04 | 显示全部楼层 来自: 中国辽宁营口
明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是单个子装配体中的数量。这才符合逻辑,而楼主的需要明显是瞎胡闹
发表于 2016-11-15 08:04:37 | 显示全部楼层 来自: 中国天津
yk2906 发表于 2016-11-14 20:115 e+ R8 ~# F8 V3 c; S7 {" u
明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是 ...

) k+ K  b3 g9 P这位兄台,我并不是这么认为的。
! y1 [3 J+ @; l# {8 i对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便于更好的加工。
- U8 E0 Z3 x6 N# P5 k做图纸的是要给加工部门看的,而大家方便了自然也可以不那么符合逻辑。. k- x5 J& K' ]8 t  c
上面的宏程序可以在把数量改为“总数量”单独在bom上加一列,这样看起来更加直观。
 楼主| 发表于 2016-11-18 08:07:58 | 显示全部楼层 来自: 中国湖北武汉
erikgqp8645 发表于 2016-11-15 08:04
! [4 O( n, v! ^! K这位兄台,我并不是这么认为的。* M; Q3 z6 C# ^7 m+ X; l9 ^
对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便 ...
" g* ?% u. o1 H* P
有时可能相同的装配体的2组 或3组 或1组的
+ Y* v/ r. n- Y9 I/ ?1 P那到对应的装配体下面的零件是就是X2  X3  X1是不相同的& S0 c( V& g7 ]1 w) D
发表于 2016-11-18 13:08:51 | 显示全部楼层 来自: 中国山东临沂
你的这个我大体理解什么意思了 ,就是把不同的或者相同的部件中共同使用件数做个统计是吧?如果是这样的话,我一般做两个明细表,一个是零件BOM,跟总成下的部件BOM
发表于 2016-11-18 16:19:17 | 显示全部楼层 来自: 中国天津
yh2008 发表于 2016-11-18 08:072 b( W; C. V/ x3 X
有时可能相同的装配体的2组 或3组 或1组的, u# W7 m: E' ]( e" @3 B6 g0 z
那到对应的装配体下面的零件是就是X2  X3  X1是不相同的
9 v2 J7 V8 F" b. ?( [  k. t5 \
上面那个宏就是实现这个功能的。1 {  ~1 a- {6 C
假如你一个装配体里面有两个组件,分别为a和b。5 s6 f) Z- ?# Q& p! K' k6 u/ V
其中有个零件c在这两个组件里面都有。8 }+ I$ |5 E( R( M' h
运行上面那段宏就可以添加一个总数量的属性,就是在这个装配体里面的总数量。
发表于 2016-11-18 19:54:29 | 显示全部楼层 来自: 中国广东深圳
晕,没有ERP系统,也没有生产计划部?
% \: O7 _) |/ Y1 c' U图纸上不带这样表示的吧?5 w* L9 i+ @5 ^/ C5 d& C8 B
最多再另出一个总计算的表格吧?
发表于 2016-11-18 21:03:02 | 显示全部楼层 来自: 中国安徽蚌埠
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头的图标,数字也变了1 ?; F1 ]$ F) I
1114.png
 楼主| 发表于 2016-11-19 08:22:34 | 显示全部楼层 来自: 中国湖北武汉
jinqin11 发表于 2016-11-18 21:03
0 X, Z0 }0 k4 g6 B鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头 ...

( U: W0 m& S3 A5 h/ u* F" n/ t这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的
发表于 2016-11-19 11:43:51 | 显示全部楼层 来自: 中国香港
yh2008 发表于 2016-11-19 08:22
' a& o+ k% h! ~0 M- t# {: s$ k2 F这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的
" k. s9 O. R1 D: }) X( c, l
楼主大大明明白白在问“加总”,怎么又说“分开”。
5 w$ G. H1 ^. z$ E4 A
1 e3 Q& u$ O# n* t; k原来在问“小计”(subtotal)。
发表于 2016-11-19 20:45:33 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif
* G: ?  V/ W+ b, P6 F! I8 U& b/ S方程式只能一个个的加,如果明细表中的零件多是不好实现的

2 g6 G% X: D. c  ]可以实现的6 F! r! z! _, D7 ~& q9 s4 r
发表于 2016-11-19 20:46:17 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif
% h( G+ z; _: x* j5 C方程式只能一个个的加,如果明细表中的零件多是不好实现的

: L- l' }2 q+ r' a; d1 I) h要是不明白就加我Q726915950说是三维网的/ s, D" R) d8 Z  d+ o1 \' L7 d: x  P) x
发表于 2016-11-20 11:30:43 | 显示全部楼层 来自: 中国台湾
贊同#9、#10的「部份」內容。
3 `' y: X8 I, O& s9 k& v2 r3 y& f
* Q8 C# j9 n6 ^6 N% z就我個人而言,這樣的表示方法並沒有問題呀~
- x7 }9 G4 M* c. ^: C9 i  r我想這是對於此種「階梯式」的零件圖產生的誤解而衍生出的問題,而且還不少人有這樣的疑惑~" X# P4 f) g7 T
( ~1 U- g+ \1 Q* Q7 J+ S0 M4 r
階梯式表達的數量欄位的值,指的是在「這一層」次組件的單用量,這樣去想就沒有錯了。
/ E6 Z4 y/ y" C* u; D% J試想,如果有像我一樣解讀的人來看樓主要求的BOM,那麼數量要如何計算才是對的?- z9 E4 E& K: A. }' h

0 d. O) J# _) d5 c4 l如果要顯示一零件在總裝配裡的使用量,那麼就不應該使用階梯式了。
2 P3 @- ~1 F) }# A# J+ V+ ?/ g5 i. z; V! s+ ~- M! p# j
而這也呼應了大鹿先生說的「小計」。
1 y5 h( M' ^5 y# B$ g
0 n. O% H" Z* n. f& u- l2 M5 _
8 H$ l* k% x4 V0 y7 R
 楼主| 发表于 2016-11-21 08:11:42 | 显示全部楼层 来自: 中国湖北武汉
大鹿 发表于 2016-11-19 11:43( R( }+ Z0 Q9 D  X# x* _" L/ M9 @
楼主大大明明白白在问“加总”,怎么又说“分开”。
2 v& X4 l* b/ w3 T. \0 ?# _* n* g. @# I2 i- i- H5 S, a+ p; a! p
原来在问“小计”(subtotal)。

  Q+ ~: y: q. P$ S4 m) p5 Z是的可以说是小计
 楼主| 发表于 2016-11-21 08:15:54 | 显示全部楼层 来自: 中国湖北武汉
gt.adan 发表于 2016-11-20 11:30
% P$ i& d% }0 Y' G9 J5 y贊同#9、#10的「部份」內容。
( h6 e0 I: t) ^
9 C& g$ h" W# ~9 }就我個人而言,這樣的表示方法並沒有問題呀~
+ }5 m- |6 N  c$ q
SW的表现方式是对的,只是在计算时会出现一个小计数量,5 P* E/ ~; h: g: i, d7 N% m5 O
现在就是想怎么直接出现小计的结果,因为零件要在EXCEL中计算成本
8 ~4 [) O& l' n# w目前的做法是手动修改数量,缺点就是有时可能漏
9 [0 l+ S9 l5 W4 B2 M+ e( _7 v4 U, e不知大家有没有什么好的方法
发表于 2022-6-9 10:21:06 | 显示全部楼层 来自: 中国上海
erikgqp8645 发表于 2016-11-14 16:54
# A' y* G( k& k$ I$ R7 x试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html
0 o. c8 {# e" K0 R附件是上面那个代码的宏程序。
$ W; s6 i* R# K8 {4 b+ E# { ...
, p' f# C; o9 G7 n" j+ H* |8 b
我试了这个宏 为什么不行啊?
发表于 2022-8-3 09:04:53 | 显示全部楼层 来自: 中国湖北
其实是有同感的。我的办法是做两张BOM表。一个是阶梯的,一个是总数的。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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