QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
请教一下大家SW明细表中的数量怎么加总啊如下图第一层的总装配有2个,对应下面的零件应都X20 d& @% N/ p# Z# g( ?
在SW明细表中怎么能自动识别的?4 _; e: R5 O1 N" q1 u% ]/ m3 |8 A

# j- R! S1 f9 ^' [! C
/ g/ X! X2 f0 D* G QQ图片20161112150911.png # e# h  Q% y  b/ v4 b0 a6 A3 J

7 r( X; D# k3 T6 N
' H( m3 I+ {0 y  W6 ?  S, ^
发表于 2016-11-12 15:33:49 | 显示全部楼层 来自: 中国辽宁营口
什么样的设备装配图的明细表需要具备数量加总
发表于 2016-11-12 23:29:30 | 显示全部楼层 来自: 中国北京
加方程式啊" f8 A3 _, O) O; D( k
发表于 2016-11-13 10:48:13 | 显示全部楼层 来自: 中国辽宁盘锦
暂时理解不透你说的意思
 楼主| 发表于 2016-11-14 08:49:59 | 显示全部楼层 来自: 中国湖北武汉
阿帕奇 发表于 2016-11-13 10:48
! N- T" {- H+ {4 z8 G! \暂时理解不透你说的意思
+ L( d- t1 T& W0 i0 S  |' A( ^
也就是总装配中有二个一样的装配体,但在明细表中只显示装配有2个,而下面的零件只计了1个装配体的。实际中要把下面的每个零件都是乘以2如下图
7 K; g' g0 [- ?, K# O, E
7 M* d. m. @" \8 R
, }& R) \  X- v5 ?3 c; }- }8 e
QQ截图20161114084729.png
 楼主| 发表于 2016-11-14 08:51:51 | 显示全部楼层 来自: 中国湖北武汉
hhaa545 发表于 2016-11-12 23:29$ h) Y' e9 r; l( Y
加方程式啊

: J7 n/ N3 f' B$ }方程式只能一个个的加,如果明细表中的零件多是不好实现的
' G2 x' }4 _8 s* E1 J$ R
发表于 2016-11-14 16:53:04 | 显示全部楼层 来自: 中国天津

  1. 2 Q6 C! J, |7 j, `
  2. Dim TopDocPathOnly As String
    6 u7 r$ |5 P# l3 K; F( [
  3. Dim PartsCollect() As String '遍历清单(阵列)
    , K) i! z! k( N- Y  p( o
  4. Dim InCollectCount As Double '遍历清单长度: s& K9 A4 |! `, B- J( [2 L9 Q
  5. Dim CustomInfoQTY As String6 }; ~9 ~4 \6 K2 W1 W

  6. 2 ~% j3 \) B% w- d; a
  7. Sub main()
    9 E/ a9 Q' u5 ^5 i' P" f6 C1 \$ x
  8. Set swapp = Application.SldWorks 'SW对象5 r, b* c: ^! x/ h! Z5 Z# y/ S
  9. Set TopDoc = swapp.ActiveDoc '总装对象
    % R/ T  M) M2 |# g- D
  10. If TopDoc.GetType <> 2 Then Exit Sub '不是装配=退出
    ' P: L/ d0 ^5 G2 X- R' p
  11. TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割
      u5 G( g/ x1 n. W0 l3 p! X
  12. TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '总装文件名称) q, b! k& y, d+ Z' B
  13. TopDocName = Left(TopDocName, Len(TopDocName) - 7) '总装文件名称(排除.SLDASM)& L- z6 W0 U& g6 k$ G6 P$ r
  14. TopDocPathOnly = Mid(TopDoc.GetPathName, 1, InStrRev(TopDoc.GetPathName, "", -1)) '总装的完整目录
    8 n' v. i9 K# H: g! O" W' ~: e
  15. TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱' i# s8 U: t5 {
  16. CustomInfoQTY = "数量" '可按个人喜好修改预设值4 {) |" I% w$ a: d: d3 y" M, {; M# d0 q
  17. InCollectCount = 1 '遍历清单长度基数5 b% b3 s1 P7 W( z# n. a# o) ?
  18. ReDim PartsCollect(InCollectCount) '定义阵列项数6 w9 I2 F6 Y8 {
  19. SubAsm TopDoc, TopConfString '遍历! `0 o/ j, _. P. k8 u. k( b
  20. Beep
    % T4 q; v/ k2 A' o0 ?( K0 c9 t
  21. MsgBox "完成"
    % w0 P/ u8 V) b& G( Y
  22. End Sub
    6 T9 w" l/ P5 U" N& g. D1 ?

  23. # H5 \9 A- R, J- ?- [1 U  ]2 \! G2 y
  24. Function SubAsm(AsmDoc, ConfString)9 g8 L) N& E8 [# F( w
  25. Set Configuration = AsmDoc.GetConfigurationByName(ConfString)/ I2 @3 }% O# r! E& @" k" l
  26. Set RootComponent = Configuration.GetRootComponent. G0 C) }6 Y2 H
  27. Components = RootComponent.GetChildren
    ( {: v; C5 c3 A5 U1 h
  28. For Each Child In Components* ^4 B# o2 U* F0 j, J" c
  29.     Set ChildModel = Child.GetModelDoc1 O* U. h% B/ b2 k: P) A
  30.     If Not (ChildModel Is Nothing) Then '排除抑制及轻化
    ) `% U4 F7 |' _  W& C" {
  31.         ChildConfString = Child.ReferencedConfiguration '零件配置名称
    ) h  }1 d$ Q( u* p, h. J$ t0 ?8 |
  32.         ChildType = ChildModel.GetType# G- s; v3 j( Q1 b' }5 e6 x
  33.         ChildPathSplit = Split(Child.GetPathName, "") '分割- A& ]+ x: `+ V3 Q" O0 g/ b2 X
  34.         ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名称' A9 f7 V8 U5 W7 d: B1 @4 d: ~; Y
  35.         
    3 _8 i4 F  d( O) {
  36.         ChildPathOnly = Mid(Child.GetPathName, 1, InStrRev(Child.GetPathName, "", -1)) '零件的完整目录
    ( p+ M7 H& d' u/ x) d) p7 E$ a
  37.         If ChildPathOnly = Replace(ChildPathOnly, TopDocPathOnly, "") Then SamePath = False Else SamePath = True '零件是否在总装目录或往下目录: U7 C% V5 u3 c' r  D
  38.         
    $ P3 @4 Y& U/ v7 Q
  39.         If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳過:不在总装目錄或其往下目錄 或 不包括在材料明細表中 或 是个封套% W' [" t  z& `8 l
  40. '        If (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳过:不包括在材料明細表中 及 封套! [5 M4 c2 I$ G
  41.             UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '备用量属性名称$ i9 T4 ^) ?" k
  42.             UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '备用量" {: f" A) w! l4 m2 a- k
  43.             If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '备用量除错" y) G4 x9 k1 s) u+ I# \6 w
  44.             inCollect = False '重置判断变量; r4 z" L9 ?$ \7 H% N6 ]; T9 V
  45.             For Each PartinCollect In PartsCollect '判断是否已在遍历清单內
    # k* N7 h, E2 T4 K" ]
  46.                 If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True
    2 A4 O+ P9 W. ]; }
  47.             Next$ |8 Z- j6 W/ T2 L, H# {
  48.             If inCollect Then '已在遍历清单內
    8 {: K. A8 E% a" v: ?
  49.                 ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE7 ]2 Y- j5 B4 n
  50.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY, O8 ^( l0 R2 ?8 t4 r! V
  51.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty7 E; _1 b" c1 a* |% q
  52.             Else '不在遍历清单內(首次处理)8 {1 ^" ]+ a6 q; h' w* d6 x/ g
  53.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY: H' p6 d# m! N( S7 g' ^; Q
  54.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE
    6 q( [4 Y4 p6 B, U1 k2 k
  55.                 InCollectCount = InCollectCount + 1 '遍历清单长度基数+19 o/ N# |' [) b. z0 Z- u4 H% l  E$ R
  56.                 ReDim Preserve PartsCollect(InCollectCount) '重新定义阵列项数(保留內含数据)
    ! j. p- u* w9 ]# b4 m
  57.                 PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍历清单中
    ! v1 G8 C  D4 E! w+ n# L
  58.                 ChildModel.SetUserPreferenceIntegerValue swUnitSystem, swUnitSystem_Custom '单位系统=Custom; P" T  Y: z( r9 G
  59.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '重量单位设定为kg(可按喜好加入設定)
    $ E: u6 M* d& J. J2 K) v6 q3 ]- r3 B; ]
  60.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropLength, swMM '设定长度单位为毫米
    ' V; d" p# J; M9 H
  61.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropVolume, swUnitsMassPropVolume_Centimeters3 '设定体积单位为立方厘米2 Z/ ], t2 D" B% P6 ?% v0 c1 o
  62.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropDecimalPlaces, 2 '质量及体积小数点后2位8 H" d0 M! J9 v! k4 D" ~/ L" @
  63.                 ChildModel.AddCustomInfo3 "", "Weight", 30, Chr(34) & "SW-Mass@*" & ChildName & Chr(34) '在自订属性加入Weight属性
    $ T0 f3 }, W5 K
  64.                 ChildModel.AddCustomInfo3 "", "Material", 30, Chr(34) & "SW-Material@*" & ChildName & Chr(34) '在自订属性加入Material属性
    8 j8 W. _% Q# \+ P+ A# f1 g
  65.                 ChildModel.AddCustomInfo3 ChildConfString, "Weight", 30, Chr(34) & "SW-Mass@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Weight属性9 m% q: \* r, S7 f# G3 F
  66.                 ChildModel.AddCustomInfo3 ChildConfString, "Material", 30, Chr(34) & "SW-Material@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Material属性  I0 x* o3 k4 n* H  ^3 R
  67.                 ChildModel.SketchManager.Insert3DSketch True '插入三低草图,从而激活零件的“需存盘标签”& I" Z8 S: C0 S6 S- P9 Q
  68.                 ChildModel.SketchManager.Insert3DSketch True '离开三低草图
    9 H" I) j; g7 t' z/ S
  69.             End If9 n* p$ c1 x9 j. W# @
  70.             If ChildType = 2 Then2 N9 ^2 i1 L) a
  71.                 SubAsm ChildModel, ChildConfString '如果是装配则向下遍历+ Z4 x2 s4 N# w- K# {
  72.             End If7 Q" n. s' g# Z7 I7 S9 x0 n* [# a
  73.             
    ! w  r( p0 Z1 H3 }
  74.         End If
      ~6 I2 I) g3 e
  75.     End If
    2 l8 l8 L0 ~& H' U! x
  76. Next9 B+ t0 ~, ^( X* Q& R
  77. End Function, W" i/ V$ d2 _6 `
  78.     " n! d+ ?) ?5 ~  ~& g. ~+ q
复制代码
发表于 2016-11-14 16:54:03 | 显示全部楼层 来自: 中国天津
本帖最后由 erikgqp8645 于 2016-11-14 16:56 编辑 % B9 B! g7 ~( g( ~$ @

2 f% T$ ^9 `5 q. t/ e试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html0 \' Q+ q* ^3 v1 R4 S" t
附件是上面那个代码的宏程序。
: y! ^6 D. @, h5 q3 l; b使用方法,在装配体中运行宏,就会添加总数量。; R3 a; X; P! ?

添加总数量.rar

12.68 KB, 下载次数: 46

发表于 2016-11-14 20:11:04 | 显示全部楼层 来自: 中国辽宁营口
明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是单个子装配体中的数量。这才符合逻辑,而楼主的需要明显是瞎胡闹
发表于 2016-11-15 08:04:37 | 显示全部楼层 来自: 中国天津
yk2906 发表于 2016-11-14 20:11
/ p, M/ {; ]# A$ m: b6 U$ b明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是 ...

6 C- ]6 T2 d. {% \% G/ S4 a这位兄台,我并不是这么认为的。
# {0 s* n  g7 P2 y( I9 c0 \对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便于更好的加工。
& r0 n) _2 z5 j, g1 p8 Y% O+ U做图纸的是要给加工部门看的,而大家方便了自然也可以不那么符合逻辑。& Z. y: Y6 M, n3 W: h+ C
上面的宏程序可以在把数量改为“总数量”单独在bom上加一列,这样看起来更加直观。
 楼主| 发表于 2016-11-18 08:07:58 | 显示全部楼层 来自: 中国湖北武汉
erikgqp8645 发表于 2016-11-15 08:04
7 f( ^" q; P3 L这位兄台,我并不是这么认为的。' a: V2 `+ G5 X2 O3 l% D
对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便 ...
# N' n* `8 ^$ H0 U& G
有时可能相同的装配体的2组 或3组 或1组的
6 l; a' W/ Z8 X4 d那到对应的装配体下面的零件是就是X2  X3  X1是不相同的
- {& `4 x5 u7 w' T: Z( Y* H- a0 C
发表于 2016-11-18 13:08:51 | 显示全部楼层 来自: 中国山东临沂
你的这个我大体理解什么意思了 ,就是把不同的或者相同的部件中共同使用件数做个统计是吧?如果是这样的话,我一般做两个明细表,一个是零件BOM,跟总成下的部件BOM
发表于 2016-11-18 16:19:17 | 显示全部楼层 来自: 中国天津
yh2008 发表于 2016-11-18 08:078 k3 D0 {% k% [2 F
有时可能相同的装配体的2组 或3组 或1组的9 z  m- {- J- Y- V! G: j- _
那到对应的装配体下面的零件是就是X2  X3  X1是不相同的

" k: o# e1 d$ W1 q& r; l上面那个宏就是实现这个功能的。/ p2 l( p, n% o- ~! j5 t8 s  E
假如你一个装配体里面有两个组件,分别为a和b。# v8 ~8 H  [- @9 m6 a/ \/ x
其中有个零件c在这两个组件里面都有。
. @) d9 Y, ]/ n7 e运行上面那段宏就可以添加一个总数量的属性,就是在这个装配体里面的总数量。
发表于 2016-11-18 19:54:29 | 显示全部楼层 来自: 中国广东深圳
晕,没有ERP系统,也没有生产计划部?. e0 ~2 n7 j# E. H
图纸上不带这样表示的吧?
# j* U  e* r1 g2 h) F最多再另出一个总计算的表格吧?
发表于 2016-11-18 21:03:02 | 显示全部楼层 来自: 中国安徽蚌埠
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头的图标,数字也变了
1 X: r" R0 }5 t; Q0 C
1114.png
 楼主| 发表于 2016-11-19 08:22:34 | 显示全部楼层 来自: 中国湖北武汉
jinqin11 发表于 2016-11-18 21:03
5 c& K* N. T; _( E! Q鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头 ...
6 K. u4 F, o: k7 G5 M
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的
发表于 2016-11-19 11:43:51 | 显示全部楼层 来自: 中国香港
yh2008 发表于 2016-11-19 08:22, s& H3 j2 s, i6 S3 X
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的

9 ]& L. ^% {) ]楼主大大明明白白在问“加总”,怎么又说“分开”。
, E1 ?! d; M7 z3 ~" h* q9 L6 Q( T4 `! ~( F" h  |& ]
原来在问“小计”(subtotal)。
发表于 2016-11-19 20:45:33 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif
( L' a$ F# E, V4 e4 v+ A方程式只能一个个的加,如果明细表中的零件多是不好实现的

" I8 a5 q$ w% d) a可以实现的
7 O, ^  ]9 s4 N; A
发表于 2016-11-19 20:46:17 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif
% f' |) K4 T) J8 a8 h方程式只能一个个的加,如果明细表中的零件多是不好实现的
% }% B2 Q& P7 ?7 U
要是不明白就加我Q726915950说是三维网的9 n9 {" p9 j6 {% K' X* l4 }
发表于 2016-11-20 11:30:43 | 显示全部楼层 来自: 中国台湾
贊同#9、#10的「部份」內容。. a0 }7 F* T5 E; T5 {8 j

3 p" p3 l; ^& R+ z就我個人而言,這樣的表示方法並沒有問題呀~
0 v# d) L! o0 e! U. u# w我想這是對於此種「階梯式」的零件圖產生的誤解而衍生出的問題,而且還不少人有這樣的疑惑~
( b/ U5 L8 F9 C3 I$ `+ ]. N  o, {
% g- J, l8 b& I
階梯式表達的數量欄位的值,指的是在「這一層」次組件的單用量,這樣去想就沒有錯了。7 j9 |- F4 o' E6 k+ _5 C
試想,如果有像我一樣解讀的人來看樓主要求的BOM,那麼數量要如何計算才是對的?6 L+ Q7 v6 O/ q6 ]$ c; e& ~/ J

4 f, a6 s4 b, z! j如果要顯示一零件在總裝配裡的使用量,那麼就不應該使用階梯式了。9 ^* P- a$ W% A2 n4 V, `: U

6 \( |0 ?1 Y; E) H而這也呼應了大鹿先生說的「小計」。% z  |; j+ v7 L- E. ]1 O0 c! F( I

) A2 ~1 x! ~1 I. f1 Q# Q7 S4 d7 G9 B1 B2 c6 T. _& G% n: ]  L
 楼主| 发表于 2016-11-21 08:11:42 | 显示全部楼层 来自: 中国湖北武汉
大鹿 发表于 2016-11-19 11:43, u# S' U( B2 C- D
楼主大大明明白白在问“加总”,怎么又说“分开”。
( \" n& u' [) q. X) l
1 h1 _' X# L- u% |  j6 c原来在问“小计”(subtotal)。
& M$ w& Y) [( }; V' W/ n2 X
是的可以说是小计
 楼主| 发表于 2016-11-21 08:15:54 | 显示全部楼层 来自: 中国湖北武汉
gt.adan 发表于 2016-11-20 11:30  i8 b! e* r$ N1 q4 k
贊同#9、#10的「部份」內容。6 |+ a; R; `. B' G5 z. c- }

  T: b8 |2 C2 T$ r& c4 l就我個人而言,這樣的表示方法並沒有問題呀~
1 E/ H; C3 i, D+ f9 Z' `: h
SW的表现方式是对的,只是在计算时会出现一个小计数量,
. Y% c; w/ L9 P. d7 G/ I" F现在就是想怎么直接出现小计的结果,因为零件要在EXCEL中计算成本
& Z$ z  m! _" l3 n) `目前的做法是手动修改数量,缺点就是有时可能漏
, Z: @) L) n! B* M$ `& A5 @不知大家有没有什么好的方法
发表于 2022-6-9 10:21:06 | 显示全部楼层 来自: 中国上海
erikgqp8645 发表于 2016-11-14 16:54
: a. e- a2 [6 t( ^: p4 p7 W1 @( L试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html. F: F3 m/ t2 f3 s
附件是上面那个代码的宏程序。. Y+ _# F$ b6 N
...

6 L+ d8 I7 k  m  p2 [5 u# {9 ^& v我试了这个宏 为什么不行啊?
发表于 2022-8-3 09:04:53 | 显示全部楼层 来自: 中国湖北
其实是有同感的。我的办法是做两张BOM表。一个是阶梯的,一个是总数的。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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