QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 6610|回复: 24
收起左侧

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

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

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

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

x
请教一下大家SW明细表中的数量怎么加总啊如下图第一层的总装配有2个,对应下面的零件应都X2
( [9 P7 Y- |, G: l) K- J在SW明细表中怎么能自动识别的?& k" [' j: L: h* a9 M
- y0 w+ }6 g3 O# \+ m

4 c0 {0 D. I5 q4 u- [% C QQ图片20161112150911.png
% f8 n& N3 q. I) }) c! h8 Q  @; ^3 M" ]6 f$ N* m( y
1 G* b% H$ J0 e9 d' [
发表于 2016-11-12 15:33:49 | 显示全部楼层 来自: 中国辽宁营口
什么样的设备装配图的明细表需要具备数量加总
发表于 2016-11-12 23:29:30 | 显示全部楼层 来自: 中国北京
加方程式啊/ }: D9 y3 D& T7 i& l0 Q/ X3 L6 W
发表于 2016-11-13 10:48:13 | 显示全部楼层 来自: 中国辽宁盘锦
暂时理解不透你说的意思
 楼主| 发表于 2016-11-14 08:49:59 | 显示全部楼层 来自: 中国湖北武汉
阿帕奇 发表于 2016-11-13 10:48' W! `. v2 X+ q3 P% R
暂时理解不透你说的意思
6 W+ d% W  S- q
也就是总装配中有二个一样的装配体,但在明细表中只显示装配有2个,而下面的零件只计了1个装配体的。实际中要把下面的每个零件都是乘以2如下图 7 D' ]5 v6 U( W% p% ?! D* f

) J4 b, r% \& c, b
3 u* L" Y9 Y4 Q0 v6 ~/ U' h
QQ截图20161114084729.png
 楼主| 发表于 2016-11-14 08:51:51 | 显示全部楼层 来自: 中国湖北武汉
hhaa545 发表于 2016-11-12 23:29
9 D) B& {* {# j  _$ [加方程式啊

9 A! S5 S( A0 @* H方程式只能一个个的加,如果明细表中的零件多是不好实现的/ [2 s% H+ Z% f
发表于 2016-11-14 16:53:04 | 显示全部楼层 来自: 中国天津
  1. % p! g3 u; o& t. f2 Z
  2. Dim TopDocPathOnly As String7 ^4 u, x  v# k. |: I+ G: ~
  3. Dim PartsCollect() As String '遍历清单(阵列)  R7 Z+ i" E8 R) I' F
  4. Dim InCollectCount As Double '遍历清单长度, b# }9 }$ A) ~2 h! q% W
  5. Dim CustomInfoQTY As String1 x  w3 e1 V0 p  t) F. n
  6. $ v3 K9 I0 R6 \5 n
  7. Sub main()
    & `. Z- C: t, a* P! E
  8. Set swapp = Application.SldWorks 'SW对象
    0 `* @5 C1 ~$ X& t  @
  9. Set TopDoc = swapp.ActiveDoc '总装对象" H6 V: `% E9 J7 U6 O7 o+ H$ P& ]
  10. If TopDoc.GetType <> 2 Then Exit Sub '不是装配=退出
    # w& P* v+ E" M5 [. @
  11. TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割6 l1 j' e: D  _) {; R9 S! \
  12. TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '总装文件名称
    * G/ G5 ^0 Q: M9 T8 ?
  13. TopDocName = Left(TopDocName, Len(TopDocName) - 7) '总装文件名称(排除.SLDASM)
    9 V2 _, H. a) N1 D4 y$ k
  14. TopDocPathOnly = Mid(TopDoc.GetPathName, 1, InStrRev(TopDoc.GetPathName, "", -1)) '总装的完整目录$ E2 \" l& ^7 K9 b# ]  l
  15. TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱- s1 z/ e6 P1 C/ I! D! {, r8 v. d: D
  16. CustomInfoQTY = "数量" '可按个人喜好修改预设值$ l) x& X3 K" w
  17. InCollectCount = 1 '遍历清单长度基数
    + |) L9 N6 x! j& j3 h+ c
  18. ReDim PartsCollect(InCollectCount) '定义阵列项数3 {6 T( a+ ~6 O6 g
  19. SubAsm TopDoc, TopConfString '遍历, g9 ~- O9 l" n# I3 `" Y' H
  20. Beep( V9 t6 a. J% C& _1 B" m
  21. MsgBox "完成"8 M9 y, D1 [! m! L4 A5 u' r2 Z
  22. End Sub
    7 Z9 |+ c7 Q7 K2 ^3 k$ V( w( K

  23. , j, \1 s  y3 @' P# g. @6 S
  24. Function SubAsm(AsmDoc, ConfString)
    4 e4 b1 b$ F8 m7 v3 Q* q, l' a  _
  25. Set Configuration = AsmDoc.GetConfigurationByName(ConfString)9 c" t$ O4 R, p# Q
  26. Set RootComponent = Configuration.GetRootComponent- Q" G( h- p8 l- ~
  27. Components = RootComponent.GetChildren$ f- K& p( w  Y- R5 {* Q% a
  28. For Each Child In Components- \# P3 A- V/ U
  29.     Set ChildModel = Child.GetModelDoc
    - O4 y$ j% Y4 P( Q# D
  30.     If Not (ChildModel Is Nothing) Then '排除抑制及轻化4 t7 s: h" x/ v% h) w& y9 ~/ F
  31.         ChildConfString = Child.ReferencedConfiguration '零件配置名称
    - T3 w7 H4 D, }/ t3 z0 k
  32.         ChildType = ChildModel.GetType
    4 G" d3 I; W& f, \" u5 o7 C
  33.         ChildPathSplit = Split(Child.GetPathName, "") '分割: o" E9 C: R5 A3 O
  34.         ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名称
    1 J. L, N1 L2 n1 C$ I. A2 P6 D- O
  35.         : G* s2 U( q* W3 D0 n" G
  36.         ChildPathOnly = Mid(Child.GetPathName, 1, InStrRev(Child.GetPathName, "", -1)) '零件的完整目录
    ! V" f/ j' U" b: |
  37.         If ChildPathOnly = Replace(ChildPathOnly, TopDocPathOnly, "") Then SamePath = False Else SamePath = True '零件是否在总装目录或往下目录
    - Y  D" ]5 W. v. D& p
  38.         
    , r- i/ P+ `+ {( T1 W' |
  39.         If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳過:不在总装目錄或其往下目錄 或 不包括在材料明細表中 或 是个封套
    . K( s; a% v& M3 k  S
  40. '        If (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳过:不包括在材料明細表中 及 封套5 P. }, l" F6 a, i4 I( D
  41.             UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '备用量属性名称
    . B" C4 W% E# s. [7 X
  42.             UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '备用量! G3 t5 H$ p2 s: Q
  43.             If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '备用量除错, s! K! g/ ?) U* C1 O
  44.             inCollect = False '重置判断变量8 U! h) @6 ^/ y. ^
  45.             For Each PartinCollect In PartsCollect '判断是否已在遍历清单內
    6 b( j3 f0 {6 O' J
  46.                 If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True! n" D: n: y( Z" N2 f
  47.             Next* K) Y4 d5 S  w* m
  48.             If inCollect Then '已在遍历清单內
    0 q4 K( n, I" _% J$ G
  49.                 ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE
    $ F1 ]  L, f2 j: f; \2 k* u0 A
  50.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY
    % u  Y9 `( f. ?* L# g# {. J. y/ Z
  51.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty
    7 ]4 v- e5 c' g+ n' A& p
  52.             Else '不在遍历清单內(首次处理)1 Q6 V; d/ O& b
  53.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY
    : n4 G! U4 R! b' e2 O5 _3 o
  54.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE
    ' |8 D3 ]; S4 s; p# D
  55.                 InCollectCount = InCollectCount + 1 '遍历清单长度基数+1
    4 L1 a) g( [( w
  56.                 ReDim Preserve PartsCollect(InCollectCount) '重新定义阵列项数(保留內含数据)5 k. v( S2 q0 O% c8 ]
  57.                 PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍历清单中& {; W. e' E' I5 g7 y
  58.                 ChildModel.SetUserPreferenceIntegerValue swUnitSystem, swUnitSystem_Custom '单位系统=Custom6 C* p- _) k# _1 y. o% D( {; J8 l
  59.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '重量单位设定为kg(可按喜好加入設定)) I9 J/ O. ]- d" D
  60.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropLength, swMM '设定长度单位为毫米
    - T4 T0 Z1 V. x; J6 ^$ W
  61.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropVolume, swUnitsMassPropVolume_Centimeters3 '设定体积单位为立方厘米
    ' g- h1 h. _9 v2 f& h2 t
  62.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropDecimalPlaces, 2 '质量及体积小数点后2位6 D) r% ?7 A& T! Y& d
  63.                 ChildModel.AddCustomInfo3 "", "Weight", 30, Chr(34) & "SW-Mass@*" & ChildName & Chr(34) '在自订属性加入Weight属性
    . K2 W6 w/ Z- ?  ~" Z8 [6 y
  64.                 ChildModel.AddCustomInfo3 "", "Material", 30, Chr(34) & "SW-Material@*" & ChildName & Chr(34) '在自订属性加入Material属性# M" p* v. [) S+ i2 W9 F
  65.                 ChildModel.AddCustomInfo3 ChildConfString, "Weight", 30, Chr(34) & "SW-Mass@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Weight属性
    & T* @$ l  @( q- {
  66.                 ChildModel.AddCustomInfo3 ChildConfString, "Material", 30, Chr(34) & "SW-Material@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Material属性. }; t$ [  p" a& H
  67.                 ChildModel.SketchManager.Insert3DSketch True '插入三低草图,从而激活零件的“需存盘标签”' y& v2 \  y, o$ l7 Z. I6 H
  68.                 ChildModel.SketchManager.Insert3DSketch True '离开三低草图/ b1 @5 G6 N9 B$ J
  69.             End If4 ~# _# ~. s; `* l
  70.             If ChildType = 2 Then( ^! A1 ^. l7 n2 ~0 p% r
  71.                 SubAsm ChildModel, ChildConfString '如果是装配则向下遍历
    , u3 I) }0 K2 I' h8 d% e0 K8 s
  72.             End If0 A8 D! g- a  i0 @  X
  73.             9 f, J7 k6 i( w3 W4 ?7 G
  74.         End If
    ' |. J: U" g4 S  @& O9 Y1 m' P3 E0 R, U
  75.     End If
    * Y/ |- e8 H0 v) W: ~, ~0 e
  76. Next: M2 g# g* B& L, A+ [5 f9 @$ U
  77. End Function0 O  v) @2 J& L: n) p9 U% L: x
  78.     ' a$ I5 J" g8 O, I8 A
复制代码
发表于 2016-11-14 16:54:03 | 显示全部楼层 来自: 中国天津
本帖最后由 erikgqp8645 于 2016-11-14 16:56 编辑 ) R- d- p* _" o" T
/ a4 K' [! B, t! m% F7 V1 R. e
试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html  }  G9 D6 a$ P
附件是上面那个代码的宏程序。/ B9 r7 a6 [) a3 F
使用方法,在装配体中运行宏,就会添加总数量。
+ B& y/ T$ {3 l% Q

添加总数量.rar

12.68 KB, 下载次数: 46

发表于 2016-11-14 20:11:04 | 显示全部楼层 来自: 中国辽宁营口
明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是单个子装配体中的数量。这才符合逻辑,而楼主的需要明显是瞎胡闹
发表于 2016-11-15 08:04:37 | 显示全部楼层 来自: 中国天津
yk2906 发表于 2016-11-14 20:11
! K& a- O8 \) I0 W明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是 ...
# ]0 R% F4 N2 ~! l( j
这位兄台,我并不是这么认为的。6 \0 T* _$ G- V
对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便于更好的加工。
9 A4 X0 z1 K9 K& r+ [0 u做图纸的是要给加工部门看的,而大家方便了自然也可以不那么符合逻辑。
8 }6 Z6 S  q: O- x6 i上面的宏程序可以在把数量改为“总数量”单独在bom上加一列,这样看起来更加直观。
 楼主| 发表于 2016-11-18 08:07:58 | 显示全部楼层 来自: 中国湖北武汉
erikgqp8645 发表于 2016-11-15 08:044 z8 K6 |5 i  o$ ]
这位兄台,我并不是这么认为的。7 H" o, G3 ^+ m# J/ q( A
对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便 ...
; L4 M) d1 I0 w0 U7 d
有时可能相同的装配体的2组 或3组 或1组的$ `4 E6 [+ E& z: J. G
那到对应的装配体下面的零件是就是X2  X3  X1是不相同的
1 x. X- Y  E7 n$ l
发表于 2016-11-18 13:08:51 | 显示全部楼层 来自: 中国山东临沂
你的这个我大体理解什么意思了 ,就是把不同的或者相同的部件中共同使用件数做个统计是吧?如果是这样的话,我一般做两个明细表,一个是零件BOM,跟总成下的部件BOM
发表于 2016-11-18 16:19:17 | 显示全部楼层 来自: 中国天津
yh2008 发表于 2016-11-18 08:07' {" W* q1 u. A( A
有时可能相同的装配体的2组 或3组 或1组的
2 \5 w6 b5 h+ c2 h# n那到对应的装配体下面的零件是就是X2  X3  X1是不相同的
/ }/ h9 B" j* ]4 L
上面那个宏就是实现这个功能的。
/ c0 B* E) x; K0 o( M8 _假如你一个装配体里面有两个组件,分别为a和b。) H0 O" d/ x+ C
其中有个零件c在这两个组件里面都有。6 l% L9 c2 s  M8 O! l& J
运行上面那段宏就可以添加一个总数量的属性,就是在这个装配体里面的总数量。
发表于 2016-11-18 19:54:29 | 显示全部楼层 来自: 中国广东深圳
晕,没有ERP系统,也没有生产计划部?- e0 x4 B) ]; [7 u
图纸上不带这样表示的吧?
' l: H) J, x$ N" }/ S最多再另出一个总计算的表格吧?
发表于 2016-11-18 21:03:02 | 显示全部楼层 来自: 中国安徽蚌埠
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头的图标,数字也变了8 v" ~, I8 Q* e0 K
1114.png
 楼主| 发表于 2016-11-19 08:22:34 | 显示全部楼层 来自: 中国湖北武汉
jinqin11 发表于 2016-11-18 21:03
* Z4 H# h* \+ p# N鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头 ...

4 [% y6 L4 S( {, G1 T4 Q# i这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的
发表于 2016-11-19 11:43:51 | 显示全部楼层 来自: 中国香港
yh2008 发表于 2016-11-19 08:22
; ?/ S. c! ^# W# e% {这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的

+ }( o: M! j+ j. G. n& a% e楼主大大明明白白在问“加总”,怎么又说“分开”。
3 r# ?2 N5 c' N- k
2 f, n9 H& ?& f4 x原来在问“小计”(subtotal)。
发表于 2016-11-19 20:45:33 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif/ x& F/ ]6 _8 j# U0 q5 M* ]4 T
方程式只能一个个的加,如果明细表中的零件多是不好实现的
' \% l/ f! \1 V1 ]' I
可以实现的/ n% m' l- d$ }1 Z; g; d
发表于 2016-11-19 20:46:17 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif9 |! s; d# U5 ]' j3 z; o
方程式只能一个个的加,如果明细表中的零件多是不好实现的
+ G5 {. I3 I. O- X% b
要是不明白就加我Q726915950说是三维网的
2 N1 N6 b( u+ B  k5 U
发表于 2016-11-20 11:30:43 | 显示全部楼层 来自: 中国台湾
贊同#9、#10的「部份」內容。
/ \, `; l8 m* x$ c) _* z" {. u2 @/ G; X) l9 k8 A
就我個人而言,這樣的表示方法並沒有問題呀~- ?- L! G+ z! B  j0 l
我想這是對於此種「階梯式」的零件圖產生的誤解而衍生出的問題,而且還不少人有這樣的疑惑~4 G& [* l% u0 ?1 ]0 R! C" ^" C
$ H3 g$ C8 G; o5 x$ Z' ], p
階梯式表達的數量欄位的值,指的是在「這一層」次組件的單用量,這樣去想就沒有錯了。
# a5 q2 i# o  ]) D2 N4 ~試想,如果有像我一樣解讀的人來看樓主要求的BOM,那麼數量要如何計算才是對的?+ X9 c0 S6 ]! [1 s7 u* v) v" Y

" U- \" s8 q9 U5 a如果要顯示一零件在總裝配裡的使用量,那麼就不應該使用階梯式了。
' e# K9 H8 K1 O9 l5 [
7 G  q0 c) V- N, P3 B而這也呼應了大鹿先生說的「小計」。  ]9 T6 e6 Y* w" H2 H7 d
% Y  ^; H& r7 a9 i) M, i
/ U7 Z! N' Q+ C! [9 M$ [
 楼主| 发表于 2016-11-21 08:11:42 | 显示全部楼层 来自: 中国湖北武汉
大鹿 发表于 2016-11-19 11:43
/ G0 P$ C+ T, y楼主大大明明白白在问“加总”,怎么又说“分开”。
* J/ H5 Q* d3 d. k* T
  p+ v( }, O& L) l# `原来在问“小计”(subtotal)。
  t& I9 j* Q. j" m
是的可以说是小计
 楼主| 发表于 2016-11-21 08:15:54 | 显示全部楼层 来自: 中国湖北武汉
gt.adan 发表于 2016-11-20 11:30
& x' w6 M! b3 V% X" E1 E贊同#9、#10的「部份」內容。# o/ g7 p' v& B! w* b
6 |1 i& _* R! L5 w$ t" N
就我個人而言,這樣的表示方法並沒有問題呀~

" r! ~( Q" \6 p! K% r, l. D  C3 NSW的表现方式是对的,只是在计算时会出现一个小计数量,
# a7 `1 w0 u/ z; k0 D0 h现在就是想怎么直接出现小计的结果,因为零件要在EXCEL中计算成本) X8 n: O2 V/ V* h% C$ ^$ w
目前的做法是手动修改数量,缺点就是有时可能漏' p5 d& L- @- O% }
不知大家有没有什么好的方法
发表于 2022-6-9 10:21:06 | 显示全部楼层 来自: 中国上海
erikgqp8645 发表于 2016-11-14 16:54
3 z: ~- h6 B" o试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html
$ d; Y3 H9 v- J. D附件是上面那个代码的宏程序。
8 j: f+ D7 N# M9 O4 |6 ^& z" j ...

: K% P- {6 B6 f我试了这个宏 为什么不行啊?
发表于 2022-8-3 09:04:53 | 显示全部楼层 来自: 中国湖北
其实是有同感的。我的办法是做两张BOM表。一个是阶梯的,一个是总数的。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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