QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
请教一下大家SW明细表中的数量怎么加总啊如下图第一层的总装配有2个,对应下面的零件应都X28 U( ?: O; F" ^6 t" I+ [% `- G
在SW明细表中怎么能自动识别的?
9 T3 b$ W2 r" M
$ h& [$ ]6 {4 g% j2 k+ J) y. U8 A. L: n3 A9 d
QQ图片20161112150911.png : G, ]' u, s) `. k) h/ r  G! k0 H

7 M* F( g! h# w9 {0 T
+ p5 `$ h/ C5 Q* ~
发表于 2016-11-12 15:33:49 | 显示全部楼层
什么样的设备装配图的明细表需要具备数量加总
发表于 2016-11-12 23:29:30 | 显示全部楼层
加方程式啊
; _+ ~  d3 ~# J* F5 ~# D
发表于 2016-11-13 10:48:13 | 显示全部楼层
暂时理解不透你说的意思
 楼主| 发表于 2016-11-14 08:49:59 | 显示全部楼层
阿帕奇 发表于 2016-11-13 10:48
  y0 X/ T2 t8 N+ E; M7 A暂时理解不透你说的意思
- j* O* {, G3 E( L' h3 e* [
也就是总装配中有二个一样的装配体,但在明细表中只显示装配有2个,而下面的零件只计了1个装配体的。实际中要把下面的每个零件都是乘以2如下图 / D9 Y, q  R" G% x

) M( W0 h. ]! U, J( I; i" n" d7 N3 G" E- o8 {. ~
QQ截图20161114084729.png
 楼主| 发表于 2016-11-14 08:51:51 | 显示全部楼层
hhaa545 发表于 2016-11-12 23:29- S! }) m4 Y) S& J$ V1 X) q: q7 f
加方程式啊

% Q) [+ T* H5 {; [方程式只能一个个的加,如果明细表中的零件多是不好实现的. M- @6 O$ L/ N
发表于 2016-11-14 16:53:04 | 显示全部楼层

  1. 5 Q9 p; R" l  n+ [6 M2 W6 m1 @5 o
  2. Dim TopDocPathOnly As String
    / q" K8 V8 w% [: a) E) q
  3. Dim PartsCollect() As String '遍历清单(阵列)$ @( ~+ ?" C. r: G
  4. Dim InCollectCount As Double '遍历清单长度
    ; `7 z9 O+ h4 c8 U% I! M( ?
  5. Dim CustomInfoQTY As String
    . D, o9 `$ _/ P" u; Y6 }6 ?  R! g. e

  6. 0 P' w# f# P' L8 L, {( Z0 ]
  7. Sub main()
    5 f; A" P% v$ L3 u# g( }2 x( h
  8. Set swapp = Application.SldWorks 'SW对象' T/ E$ \% }9 [1 A
  9. Set TopDoc = swapp.ActiveDoc '总装对象+ a) Z# C+ ~3 @6 Z4 F" H9 x
  10. If TopDoc.GetType <> 2 Then Exit Sub '不是装配=退出
    " \" u  |& @( N& {
  11. TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割3 z3 Y: o: Y8 Y6 b# K
  12. TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '总装文件名称
    4 D* r1 a) X  Z* A
  13. TopDocName = Left(TopDocName, Len(TopDocName) - 7) '总装文件名称(排除.SLDASM)
    7 o) B* B5 C4 d$ e( o
  14. TopDocPathOnly = Mid(TopDoc.GetPathName, 1, InStrRev(TopDoc.GetPathName, "", -1)) '总装的完整目录' i' U9 Q( x6 p" h* |- b9 m' n
  15. TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱
    ! x. t1 A& u) x$ T* }7 D: F2 \2 e
  16. CustomInfoQTY = "数量" '可按个人喜好修改预设值
    5 ~8 O) |6 a9 M- C+ d
  17. InCollectCount = 1 '遍历清单长度基数
    " ~0 r! {8 I( r! Q7 s# B$ C
  18. ReDim PartsCollect(InCollectCount) '定义阵列项数4 H! ?, Q; n% @* o
  19. SubAsm TopDoc, TopConfString '遍历
    ) l7 B5 e, z. E- S8 s
  20. Beep4 G+ O) |# A: B7 t. X- F
  21. MsgBox "完成"
    2 _0 D  g& c) O0 |) e$ D
  22. End Sub4 Z- A. W+ K6 i
  23. ) I1 E( p8 l% H
  24. Function SubAsm(AsmDoc, ConfString)3 \- T% ^' {+ O2 B! i
  25. Set Configuration = AsmDoc.GetConfigurationByName(ConfString)
    4 {% Y; W8 D3 a: a" Q
  26. Set RootComponent = Configuration.GetRootComponent; X  }8 I! c# ^5 ]: X: }+ {
  27. Components = RootComponent.GetChildren
    + m! o9 n  ^: _6 L
  28. For Each Child In Components
    6 U8 I# ?! t9 s( ]/ i+ p/ j/ R/ n
  29.     Set ChildModel = Child.GetModelDoc2 f4 _2 Z( R$ _
  30.     If Not (ChildModel Is Nothing) Then '排除抑制及轻化+ V7 s+ y, R! n' l$ j* Y9 [! y
  31.         ChildConfString = Child.ReferencedConfiguration '零件配置名称3 C/ f- s: }: Y# X% e" F
  32.         ChildType = ChildModel.GetType
    1 ]9 j& |& k& @9 M6 [
  33.         ChildPathSplit = Split(Child.GetPathName, "") '分割! ^% Z! [1 v" L! x' g. ?
  34.         ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名称
    . v  M' Z9 A8 r' ^  Q$ B: x
  35.         , f* L; p" L' @6 o4 I$ [. E: n
  36.         ChildPathOnly = Mid(Child.GetPathName, 1, InStrRev(Child.GetPathName, "", -1)) '零件的完整目录
    & Z4 L3 z+ {- {. K
  37.         If ChildPathOnly = Replace(ChildPathOnly, TopDocPathOnly, "") Then SamePath = False Else SamePath = True '零件是否在总装目录或往下目录
    ; [; j6 A/ v9 ]
  38.         / n4 c% b5 U5 [4 ?: i
  39.         If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳過:不在总装目錄或其往下目錄 或 不包括在材料明細表中 或 是个封套5 z% u2 k% j/ O1 E
  40. '        If (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳过:不包括在材料明細表中 及 封套0 S5 Y- t( W: U2 X" M
  41.             UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '备用量属性名称, t, \8 \. B' Q
  42.             UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '备用量; a4 o; g3 f) o( b5 r- \
  43.             If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '备用量除错4 l  J, Y7 R7 v) O
  44.             inCollect = False '重置判断变量
    6 m& j9 X2 d. s+ e" K* r" O; ~$ S2 l
  45.             For Each PartinCollect In PartsCollect '判断是否已在遍历清单內
      r1 d( V0 N1 j% ]0 `) ?3 [
  46.                 If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True* j9 O9 |# P5 P( T& z' O- j
  47.             Next
    ; v' q5 Y. S$ k4 q. r# r
  48.             If inCollect Then '已在遍历清单內
    1 Z$ `" o" \+ O0 x% s
  49.                 ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE. Z' X. B6 i$ H' a" {0 t  E
  50.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY, ]- [7 ?* \- \1 U2 @, _/ G
  51.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty
    + `, e# s+ v# u: ^5 D
  52.             Else '不在遍历清单內(首次处理)
    6 m4 ?+ V- e6 A1 f" W' U* y2 ?
  53.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY* J) G/ P% _6 q0 N8 E; |
  54.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE
    9 d3 v5 N0 ]9 d5 O( H3 F8 S4 S
  55.                 InCollectCount = InCollectCount + 1 '遍历清单长度基数+1. \" b/ [. y' V& ~$ S
  56.                 ReDim Preserve PartsCollect(InCollectCount) '重新定义阵列项数(保留內含数据)/ f" @/ G5 W2 B' i
  57.                 PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍历清单中
    8 R$ ^! K1 L! T& D* @
  58.                 ChildModel.SetUserPreferenceIntegerValue swUnitSystem, swUnitSystem_Custom '单位系统=Custom: O: \8 ~3 L0 t' l( y9 d
  59.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '重量单位设定为kg(可按喜好加入設定)
    & X2 X+ {' B* t! w" x1 A
  60.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropLength, swMM '设定长度单位为毫米; E' Q* V% l; d* n- S
  61.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropVolume, swUnitsMassPropVolume_Centimeters3 '设定体积单位为立方厘米
    ; ?( z6 K% c" z1 G, D: w% L$ v$ t
  62.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropDecimalPlaces, 2 '质量及体积小数点后2位
    ! F) h1 H- i, r
  63.                 ChildModel.AddCustomInfo3 "", "Weight", 30, Chr(34) & "SW-Mass@*" & ChildName & Chr(34) '在自订属性加入Weight属性- n, j* w/ ?3 m+ z9 r% a# s( M  e
  64.                 ChildModel.AddCustomInfo3 "", "Material", 30, Chr(34) & "SW-Material@*" & ChildName & Chr(34) '在自订属性加入Material属性
    5 c% q5 _& e6 S2 O, R1 o$ x
  65.                 ChildModel.AddCustomInfo3 ChildConfString, "Weight", 30, Chr(34) & "SW-Mass@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Weight属性
    ( X( u7 H- Z/ a; C! H0 {( ^0 E1 O
  66.                 ChildModel.AddCustomInfo3 ChildConfString, "Material", 30, Chr(34) & "SW-Material@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Material属性
    6 Y  b2 t' @: B: H
  67.                 ChildModel.SketchManager.Insert3DSketch True '插入三低草图,从而激活零件的“需存盘标签”
    + z' E% G" _  y1 J9 s) V4 `
  68.                 ChildModel.SketchManager.Insert3DSketch True '离开三低草图
    4 ]7 O9 d7 b7 E9 U( E9 a' e# c0 z5 R
  69.             End If
    # U* ?, `' q0 f" o
  70.             If ChildType = 2 Then
    8 l3 I# X& s: Z8 H
  71.                 SubAsm ChildModel, ChildConfString '如果是装配则向下遍历' o* E6 c, i; E: g4 e+ e7 i
  72.             End If
    * @! g/ A. Q5 r
  73.             
    ' v' |6 p" _: }# ^) M
  74.         End If1 z/ V8 w6 a8 k0 I! e" g
  75.     End If
    7 \; |$ C6 D4 Y4 N- ], W
  76. Next
    7 i7 j) q. N( A, \. l5 r
  77. End Function
    5 T2 s& M+ J) `, h! X
  78.    
    & w$ `, ?0 ]3 @
复制代码
发表于 2016-11-14 16:54:03 | 显示全部楼层
本帖最后由 erikgqp8645 于 2016-11-14 16:56 编辑 " o& }$ z: l& N, F) E. }1 o

7 o  E, z% t1 [试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html5 L/ \6 \* i- F7 ]4 x5 d5 W& P, s
附件是上面那个代码的宏程序。2 P) x5 G3 E; R+ h# D
使用方法,在装配体中运行宏,就会添加总数量。
0 n- E: e3 |/ u) h* c, u+ W- r

添加总数量.rar

12.68 KB, 下载次数: 46

发表于 2016-11-14 20:11:04 | 显示全部楼层
明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是单个子装配体中的数量。这才符合逻辑,而楼主的需要明显是瞎胡闹
发表于 2016-11-15 08:04:37 | 显示全部楼层
yk2906 发表于 2016-11-14 20:11
; S8 B/ I2 J$ J) ]明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是 ...

# ^5 j2 m7 e; e这位兄台,我并不是这么认为的。
6 H3 G; J$ N1 ?- _8 I6 f对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便于更好的加工。8 p4 Y0 E/ l8 i$ ?5 ]7 Y
做图纸的是要给加工部门看的,而大家方便了自然也可以不那么符合逻辑。" e: n0 y3 @& v
上面的宏程序可以在把数量改为“总数量”单独在bom上加一列,这样看起来更加直观。
 楼主| 发表于 2016-11-18 08:07:58 | 显示全部楼层
erikgqp8645 发表于 2016-11-15 08:042 b$ }6 C5 @' J, `! X
这位兄台,我并不是这么认为的。
) l4 a% B" W! ^. Y对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便 ...

3 x& ~- f# `. K: A/ d- P: |有时可能相同的装配体的2组 或3组 或1组的6 e# u7 R. Q& n+ q1 R
那到对应的装配体下面的零件是就是X2  X3  X1是不相同的
  a5 U+ f; k0 A. J4 k; t) v2 Z
发表于 2016-11-18 13:08:51 | 显示全部楼层
你的这个我大体理解什么意思了 ,就是把不同的或者相同的部件中共同使用件数做个统计是吧?如果是这样的话,我一般做两个明细表,一个是零件BOM,跟总成下的部件BOM
发表于 2016-11-18 16:19:17 | 显示全部楼层
yh2008 发表于 2016-11-18 08:07
! A' }, D- Y: m4 f, ]有时可能相同的装配体的2组 或3组 或1组的
- z' ]9 j" `+ F6 l* X那到对应的装配体下面的零件是就是X2  X3  X1是不相同的
; V" p( r; g( K' ]( q$ h
上面那个宏就是实现这个功能的。
! E: K! i# N# M, y7 }9 A/ l假如你一个装配体里面有两个组件,分别为a和b。
+ W3 B$ P/ |9 G9 i+ ~5 X其中有个零件c在这两个组件里面都有。
# ~; p2 E8 L8 y0 R+ I1 w运行上面那段宏就可以添加一个总数量的属性,就是在这个装配体里面的总数量。
发表于 2016-11-18 19:54:29 | 显示全部楼层
晕,没有ERP系统,也没有生产计划部?
9 H$ O( U$ S0 [图纸上不带这样表示的吧?
6 A1 h$ G: V- C  ?, X最多再另出一个总计算的表格吧?
发表于 2016-11-18 21:03:02 | 显示全部楼层
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头的图标,数字也变了  n) ~+ Y4 ~8 k4 ^3 D* a7 n2 d% \
1114.png
 楼主| 发表于 2016-11-19 08:22:34 | 显示全部楼层
jinqin11 发表于 2016-11-18 21:03, k/ A2 e- I: P  [! L( \# b
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头 ...
0 Q2 _+ g/ \4 N" d8 i9 S1 {
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的
发表于 2016-11-19 11:43:51 | 显示全部楼层
yh2008 发表于 2016-11-19 08:22
. H- M" O8 I) h' w这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的

" c$ C0 b$ [+ e2 d$ p/ s% a  R楼主大大明明白白在问“加总”,怎么又说“分开”。
+ _0 {: I! S0 \
/ A$ U: F6 z' A# w4 {, |原来在问“小计”(subtotal)。
发表于 2016-11-19 20:45:33 | 显示全部楼层
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif
. R/ s) J+ f  @& a* U* M; ]* Z; l方程式只能一个个的加,如果明细表中的零件多是不好实现的
2 }# t% [  v2 b$ `# }( v/ v
可以实现的9 C  V1 v# f4 e, [3 p1 m3 O
发表于 2016-11-19 20:46:17 | 显示全部楼层
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif+ v1 }  U6 K. c
方程式只能一个个的加,如果明细表中的零件多是不好实现的
" l' _; b7 I! s! S% u
要是不明白就加我Q726915950说是三维网的" K6 s) k2 |6 D, w% h
发表于 2016-11-20 11:30:43 | 显示全部楼层
贊同#9、#10的「部份」內容。
7 p1 Q# s4 W; S' e( M# s, b/ t/ s3 E; }
就我個人而言,這樣的表示方法並沒有問題呀~/ {$ R5 h- u% Q/ J
我想這是對於此種「階梯式」的零件圖產生的誤解而衍生出的問題,而且還不少人有這樣的疑惑~
2 d- F8 |7 ~1 N  E3 |! y- d
4 @; w" \4 V% p0 W
階梯式表達的數量欄位的值,指的是在「這一層」次組件的單用量,這樣去想就沒有錯了。* _( v. s; {) m7 G# m! K& O
試想,如果有像我一樣解讀的人來看樓主要求的BOM,那麼數量要如何計算才是對的?
  L* T3 S) w  N* p1 B: {2 f5 ?, c" Y8 K5 s2 d6 P1 [
如果要顯示一零件在總裝配裡的使用量,那麼就不應該使用階梯式了。$ W0 h0 N9 n/ y6 K) B9 M3 x
& f4 h) \0 a$ i3 u7 J5 w0 ]# J
而這也呼應了大鹿先生說的「小計」。/ T+ E& m- K4 G# }: Q0 t/ u" z
! e& u% z+ c2 B- h
6 N! f3 N1 M5 S  _
 楼主| 发表于 2016-11-21 08:11:42 | 显示全部楼层
大鹿 发表于 2016-11-19 11:43
* V. z7 N: l, x2 m. c楼主大大明明白白在问“加总”,怎么又说“分开”。
8 A3 O( Q" Y4 A- a& h& m2 c( x# d- J5 z4 z" @' @$ C
原来在问“小计”(subtotal)。

- L. ?6 v5 g: V7 i2 T0 G是的可以说是小计
 楼主| 发表于 2016-11-21 08:15:54 | 显示全部楼层
gt.adan 发表于 2016-11-20 11:306 y) ~6 ^1 Z% d& u
贊同#9、#10的「部份」內容。
& X) E& L1 s* {( ]% Z$ E
. c- W4 x" J" h* M就我個人而言,這樣的表示方法並沒有問題呀~
: r0 X/ w$ m& l, q% V1 c
SW的表现方式是对的,只是在计算时会出现一个小计数量,
* g; T# A/ E4 [  c9 w现在就是想怎么直接出现小计的结果,因为零件要在EXCEL中计算成本: S& B* ?8 Z/ n) t
目前的做法是手动修改数量,缺点就是有时可能漏* F3 K8 _4 s! x/ \' Q
不知大家有没有什么好的方法
发表于 2022-6-9 10:21:06 | 显示全部楼层
erikgqp8645 发表于 2016-11-14 16:545 d8 J0 T' w, G$ c! K7 M2 i4 O1 T
试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html" J: F# X* Z5 Q- c6 @+ ?# q) |5 w1 F
附件是上面那个代码的宏程序。6 P  j! e6 u1 ^9 h$ n
...
- v) ~: A# `. R+ Y
我试了这个宏 为什么不行啊?
发表于 2022-8-3 09:04:53 | 显示全部楼层
其实是有同感的。我的办法是做两张BOM表。一个是阶梯的,一个是总数的。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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