QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
请教一下大家SW明细表中的数量怎么加总啊如下图第一层的总装配有2个,对应下面的零件应都X2
. i1 @& J& B: ^: f7 a1 L在SW明细表中怎么能自动识别的?
7 h6 X/ s) ~- I; A' X3 B' `7 F) Z) p: o9 }
  d' G+ \) P) Z
QQ图片20161112150911.png
& C( F2 S1 U- ^* e- S$ B
8 K% F! X: d9 r+ ^5 E( T: {# _) P* N$ F) p, ~0 _$ _3 w* `* s$ l- D! x
发表于 2016-11-12 15:33:49 | 显示全部楼层 来自: 中国辽宁营口
什么样的设备装配图的明细表需要具备数量加总
发表于 2016-11-12 23:29:30 | 显示全部楼层 来自: 中国北京
加方程式啊( ~% j5 J4 o" Q& x' s
发表于 2016-11-13 10:48:13 | 显示全部楼层 来自: 中国辽宁盘锦
暂时理解不透你说的意思
 楼主| 发表于 2016-11-14 08:49:59 | 显示全部楼层 来自: 中国湖北武汉
阿帕奇 发表于 2016-11-13 10:48
, M- N$ [  S, D" Z暂时理解不透你说的意思
1 k) c% j9 y* p" l
也就是总装配中有二个一样的装配体,但在明细表中只显示装配有2个,而下面的零件只计了1个装配体的。实际中要把下面的每个零件都是乘以2如下图 1 r0 T, w9 Q9 Q. U/ F
  {5 W* g7 h& ?0 z& f

; j+ f5 e' A. \& L
QQ截图20161114084729.png
 楼主| 发表于 2016-11-14 08:51:51 | 显示全部楼层 来自: 中国湖北武汉
hhaa545 发表于 2016-11-12 23:29
0 d: N9 d, U) T4 ?7 q( _" m* A# m加方程式啊

$ ~# C; }/ |6 j9 H" [, K9 Y, H方程式只能一个个的加,如果明细表中的零件多是不好实现的1 q4 v. n$ H4 }  R4 K- O: i
发表于 2016-11-14 16:53:04 | 显示全部楼层 来自: 中国天津

  1. 3 L# @$ {+ D  b5 ]7 w
  2. Dim TopDocPathOnly As String
    ! W5 z% \  A: P! r3 `' V  U. M
  3. Dim PartsCollect() As String '遍历清单(阵列)
    7 K' l. o* q; V* t* p0 v
  4. Dim InCollectCount As Double '遍历清单长度
    8 R% }0 Y, A. j( D0 |: ^
  5. Dim CustomInfoQTY As String
    2 f; _6 n) Z% o, ]( X/ I# [
  6. 5 b  T5 v  }7 y1 l* M
  7. Sub main()
    ! K: E1 i! X0 m! g' P
  8. Set swapp = Application.SldWorks 'SW对象
    6 a( n/ ~+ W+ M% Z1 ?& M) c$ v# S
  9. Set TopDoc = swapp.ActiveDoc '总装对象
    , V  x2 p) t: P- O+ `+ |3 h
  10. If TopDoc.GetType <> 2 Then Exit Sub '不是装配=退出
      @: ]9 E6 |7 N* ]* _
  11. TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割; K) t0 ~6 n) P0 ~- }4 G1 C
  12. TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '总装文件名称
    8 L+ n) n, c# i. I; K0 W8 P1 y
  13. TopDocName = Left(TopDocName, Len(TopDocName) - 7) '总装文件名称(排除.SLDASM)5 |4 W1 p7 h6 t8 I$ @3 \
  14. TopDocPathOnly = Mid(TopDoc.GetPathName, 1, InStrRev(TopDoc.GetPathName, "", -1)) '总装的完整目录& \( w9 l' r2 t/ K+ H' f
  15. TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱
    ' B* C* J* v( P1 P! ^( D
  16. CustomInfoQTY = "数量" '可按个人喜好修改预设值0 }; K8 h: g: y: h7 I) s* e# \
  17. InCollectCount = 1 '遍历清单长度基数' s. L6 K1 ]& b; j2 i5 ?" c
  18. ReDim PartsCollect(InCollectCount) '定义阵列项数
    8 q, ]* r6 W5 Y2 I4 T+ z
  19. SubAsm TopDoc, TopConfString '遍历
    * y, P6 D1 f4 \: ~5 n
  20. Beep
    : z) `6 j% m( _" x" |' h
  21. MsgBox "完成", f4 f, t4 d! ~" q- ]& O
  22. End Sub
    * g( M! u; L' C7 E6 U5 ?, E
  23. 8 P9 q  ?" |- @; x$ O' f
  24. Function SubAsm(AsmDoc, ConfString)
    + `% ?7 X) Q9 D6 r0 _( \# l
  25. Set Configuration = AsmDoc.GetConfigurationByName(ConfString)4 T( S, Q5 `& Z2 y) q9 L* E5 Y
  26. Set RootComponent = Configuration.GetRootComponent3 X) h) N# b5 E% O' x& [
  27. Components = RootComponent.GetChildren
    , ?; y+ N9 L1 c! }  |0 ~
  28. For Each Child In Components
    0 Z* @* k, L0 P  J5 _7 T& a& m
  29.     Set ChildModel = Child.GetModelDoc
    ( Q+ }3 n$ g  W2 ?
  30.     If Not (ChildModel Is Nothing) Then '排除抑制及轻化
    " ^8 d2 p; E8 |- L- a; ~  i
  31.         ChildConfString = Child.ReferencedConfiguration '零件配置名称" {6 Z! g% F/ f$ G( Q1 ?7 L
  32.         ChildType = ChildModel.GetType
    ! }% Z5 O) m8 z# @+ _& H
  33.         ChildPathSplit = Split(Child.GetPathName, "") '分割  z6 {3 ?: u9 K; J
  34.         ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名称: n; p! _! C/ V& Q. s1 J! t
  35.         & T# W% [$ i" p+ L4 I+ `6 Y6 o
  36.         ChildPathOnly = Mid(Child.GetPathName, 1, InStrRev(Child.GetPathName, "", -1)) '零件的完整目录
    6 Q2 P0 a0 j" J+ O! p& N7 b
  37.         If ChildPathOnly = Replace(ChildPathOnly, TopDocPathOnly, "") Then SamePath = False Else SamePath = True '零件是否在总装目录或往下目录
    % _6 L1 Q& R% h$ W7 y; Z. T9 a6 i
  38.         ! ]8 @( r" H; n$ S) `9 F
  39.         If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳過:不在总装目錄或其往下目錄 或 不包括在材料明細表中 或 是个封套
    8 N$ \$ k- E) S
  40. '        If (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳过:不包括在材料明細表中 及 封套
    9 [+ L. N* {9 }+ ]* u+ N' c* I
  41.             UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '备用量属性名称
    / e  N: |$ F3 M
  42.             UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '备用量( l0 y) O7 s& ~
  43.             If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '备用量除错
    1 ?# g8 [9 [1 \- K7 C& o' i( |( y
  44.             inCollect = False '重置判断变量' e8 e* c1 r" Q4 X+ l* {# w
  45.             For Each PartinCollect In PartsCollect '判断是否已在遍历清单內
    ' b; E: W" j+ h* h; C4 z! `
  46.                 If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True1 z' A7 [8 `9 ]4 k+ V" Q
  47.             Next, o- B, q% A& l, s+ x4 A
  48.             If inCollect Then '已在遍历清单內  A/ j# w$ k$ E, I+ {4 ^: b
  49.                 ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE
    : }* }) j+ X% K: l' w4 G
  50.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY
    % q7 \6 R& ~8 e7 S2 n4 r( J( I
  51.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty; B/ [/ t, h" X2 \' {% E6 }0 n( x
  52.             Else '不在遍历清单內(首次处理)
    ) j  l; |$ \7 g; J8 K" ~6 d
  53.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY
    3 I0 c% w3 O3 H; y  w" ?1 ~
  54.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE, P. W; q. v& v% [
  55.                 InCollectCount = InCollectCount + 1 '遍历清单长度基数+13 l5 p. I6 h! e4 j
  56.                 ReDim Preserve PartsCollect(InCollectCount) '重新定义阵列项数(保留內含数据)
    ( M* g, u* f/ Z2 E& f1 H# R; J
  57.                 PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍历清单中7 Z( k8 x  P! Y
  58.                 ChildModel.SetUserPreferenceIntegerValue swUnitSystem, swUnitSystem_Custom '单位系统=Custom
    & o/ l3 Z9 `( i  |
  59.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '重量单位设定为kg(可按喜好加入設定)7 c  J# Y0 K% y! U7 ^, Z
  60.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropLength, swMM '设定长度单位为毫米1 B7 `: ~. M+ f& T6 ]* h7 w
  61.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropVolume, swUnitsMassPropVolume_Centimeters3 '设定体积单位为立方厘米2 B- R0 H! H( z, F- U; Z5 S
  62.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropDecimalPlaces, 2 '质量及体积小数点后2位' L2 e, J6 C' b3 }
  63.                 ChildModel.AddCustomInfo3 "", "Weight", 30, Chr(34) & "SW-Mass@*" & ChildName & Chr(34) '在自订属性加入Weight属性  @9 p$ l( _! C8 c% q' M
  64.                 ChildModel.AddCustomInfo3 "", "Material", 30, Chr(34) & "SW-Material@*" & ChildName & Chr(34) '在自订属性加入Material属性: G6 V4 U2 J2 T9 x5 X+ V# c) l
  65.                 ChildModel.AddCustomInfo3 ChildConfString, "Weight", 30, Chr(34) & "SW-Mass@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Weight属性
    9 h3 k5 |% Q) o- i* N
  66.                 ChildModel.AddCustomInfo3 ChildConfString, "Material", 30, Chr(34) & "SW-Material@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Material属性
    2 F' m% G% m& D" N
  67.                 ChildModel.SketchManager.Insert3DSketch True '插入三低草图,从而激活零件的“需存盘标签”
    2 W1 ?2 {) C! r* a% e# g
  68.                 ChildModel.SketchManager.Insert3DSketch True '离开三低草图& w2 v1 G. o6 |% S0 Y& v3 i
  69.             End If
    ; p" I, {! S0 p' D) L& x; s; t- C
  70.             If ChildType = 2 Then
    ' U8 h; g! A! S
  71.                 SubAsm ChildModel, ChildConfString '如果是装配则向下遍历% n# S- U8 D- l8 w3 D5 i# ~
  72.             End If* w( X! e! u# \5 D/ P
  73.             & q1 n# d" c8 A& x
  74.         End If
    % j/ ~# z! Q$ e" M% \9 s  e
  75.     End If
    . z1 i+ N: j5 a, _6 g; L
  76. Next& l; z5 f. ?( K% b) D; f( ?! V3 G
  77. End Function( p+ x2 G3 }% O" r+ H' x1 v
  78.    
    . E( ~3 `1 }' \' j! `0 f5 v
复制代码
发表于 2016-11-14 16:54:03 | 显示全部楼层 来自: 中国天津
本帖最后由 erikgqp8645 于 2016-11-14 16:56 编辑
/ v+ f5 W/ o, W: G, n1 M6 `+ u! S& `( l2 ]! }1 x3 ]
试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html
! c3 P0 s& K8 G7 G' j" J+ l附件是上面那个代码的宏程序。
% j" ]7 G7 e4 g! C6 A3 @5 n使用方法,在装配体中运行宏,就会添加总数量。
. o( V+ w, u5 M

添加总数量.rar

12.68 KB, 下载次数: 46

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

  l; X( l$ o4 C* m' Y+ P' C这位兄台,我并不是这么认为的。% o: n6 ~4 p" G+ c* x- Q& @1 H
对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便于更好的加工。2 T* D5 `7 q* Z2 p" c
做图纸的是要给加工部门看的,而大家方便了自然也可以不那么符合逻辑。
$ z3 M  ^- Q% w& K1 \! T8 i上面的宏程序可以在把数量改为“总数量”单独在bom上加一列,这样看起来更加直观。
 楼主| 发表于 2016-11-18 08:07:58 | 显示全部楼层 来自: 中国湖北武汉
erikgqp8645 发表于 2016-11-15 08:04( z$ L/ e# v- g, h" x1 |
这位兄台,我并不是这么认为的。. U: x  R$ J/ j2 K! n2 y, {
对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便 ...

% @6 Y; V' J4 f- W有时可能相同的装配体的2组 或3组 或1组的
, [6 O8 |$ y6 }0 o9 C那到对应的装配体下面的零件是就是X2  X3  X1是不相同的$ m% E9 r! A* R" N6 h: H
发表于 2016-11-18 13:08:51 | 显示全部楼层 来自: 中国山东临沂
你的这个我大体理解什么意思了 ,就是把不同的或者相同的部件中共同使用件数做个统计是吧?如果是这样的话,我一般做两个明细表,一个是零件BOM,跟总成下的部件BOM
发表于 2016-11-18 16:19:17 | 显示全部楼层 来自: 中国天津
yh2008 发表于 2016-11-18 08:07
$ j! w6 `# K+ z. A有时可能相同的装配体的2组 或3组 或1组的
& Q' V, Q7 O/ h那到对应的装配体下面的零件是就是X2  X3  X1是不相同的
2 [  U3 ?( D- E1 M' H. N% z  {) z6 t% u
上面那个宏就是实现这个功能的。  d1 N. ^4 v# Y$ [0 b
假如你一个装配体里面有两个组件,分别为a和b。
8 r& ?; k/ s1 P+ ]7 \2 R, ?9 ^. s  `其中有个零件c在这两个组件里面都有。
4 V) v* `1 D$ h运行上面那段宏就可以添加一个总数量的属性,就是在这个装配体里面的总数量。
发表于 2016-11-18 19:54:29 | 显示全部楼层 来自: 中国广东深圳
晕,没有ERP系统,也没有生产计划部?5 v: c, m0 e$ [5 k; m, h
图纸上不带这样表示的吧?
: C- V9 C. |. o5 O7 h* R最多再另出一个总计算的表格吧?
发表于 2016-11-18 21:03:02 | 显示全部楼层 来自: 中国安徽蚌埠
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头的图标,数字也变了& s: _7 i! t. V- }/ ~6 [
1114.png
 楼主| 发表于 2016-11-19 08:22:34 | 显示全部楼层 来自: 中国湖北武汉
jinqin11 发表于 2016-11-18 21:03; h; Z6 h* Z0 P5 R1 w  j1 |+ V
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头 ...
7 S# p6 h. w" U: D/ v0 p
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的
发表于 2016-11-19 11:43:51 | 显示全部楼层 来自: 中国香港
yh2008 发表于 2016-11-19 08:224 u& |6 m! x+ o( p
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的

: @2 I$ d8 H9 R, S3 b2 @楼主大大明明白白在问“加总”,怎么又说“分开”。+ u- A: o5 V* x- J: }5 e

0 i2 G6 G: z1 P# A1 j1 k, o$ g原来在问“小计”(subtotal)。
发表于 2016-11-19 20:45:33 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif
7 ~8 Z* P, P6 j6 k% }方程式只能一个个的加,如果明细表中的零件多是不好实现的

- \6 i/ S  t9 `& F, C: @可以实现的
& v! j8 D8 _( N9 T* l2 s: M
发表于 2016-11-19 20:46:17 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif
/ H0 J6 M7 A1 y, T方程式只能一个个的加,如果明细表中的零件多是不好实现的
+ E! f4 {7 b# T/ }
要是不明白就加我Q726915950说是三维网的3 |8 }& e% q9 X  B, y
发表于 2016-11-20 11:30:43 | 显示全部楼层 来自: 中国台湾
贊同#9、#10的「部份」內容。
3 X* h0 R. ]$ w, M. a1 _( d; G' d
1 J" S6 L5 ^7 C) q1 j. i7 F就我個人而言,這樣的表示方法並沒有問題呀~6 F6 Z0 @/ Y. T/ B
我想這是對於此種「階梯式」的零件圖產生的誤解而衍生出的問題,而且還不少人有這樣的疑惑~- ?6 z: A! K( F# x
3 W. D& S, f9 y% ?& B
階梯式表達的數量欄位的值,指的是在「這一層」次組件的單用量,這樣去想就沒有錯了。$ d8 C# X3 w5 R( h4 R* O2 [
試想,如果有像我一樣解讀的人來看樓主要求的BOM,那麼數量要如何計算才是對的?, \' u3 H8 v9 \- Z8 ~5 a7 y; i0 v  b
9 Y) V4 L# N4 j. @: o0 V0 [- e- P% r
如果要顯示一零件在總裝配裡的使用量,那麼就不應該使用階梯式了。  ~& V. A# V( O+ \4 t

" U& O* w: U- l: g" v9 w& r而這也呼應了大鹿先生說的「小計」。; _5 }# }0 ?, n" l* a

: i9 H# N8 k  X  Y1 ^
, `& `; m- o+ J% u/ z
 楼主| 发表于 2016-11-21 08:11:42 | 显示全部楼层 来自: 中国湖北武汉
大鹿 发表于 2016-11-19 11:43
& D" t3 c0 w- z3 Z/ q. `, C7 _楼主大大明明白白在问“加总”,怎么又说“分开”。: ]1 J# a7 S, \! q

6 }6 ^0 j/ C/ W- [- T% s原来在问“小计”(subtotal)。
( N; }% g% R  Q1 Q  n8 o( x
是的可以说是小计
 楼主| 发表于 2016-11-21 08:15:54 | 显示全部楼层 来自: 中国湖北武汉
gt.adan 发表于 2016-11-20 11:30
( p, j0 B9 `8 F) G贊同#9、#10的「部份」內容。' s* v( u5 N" g/ @

$ R; A2 T$ X8 n/ n1 |+ Y/ `就我個人而言,這樣的表示方法並沒有問題呀~
$ M; ]6 }9 `- q5 N( H+ P9 f" P
SW的表现方式是对的,只是在计算时会出现一个小计数量,: s, o& D$ d/ A$ e5 c
现在就是想怎么直接出现小计的结果,因为零件要在EXCEL中计算成本
/ x* ^- F3 @) `# n5 r6 t% K3 Q目前的做法是手动修改数量,缺点就是有时可能漏
& E4 S3 g2 |7 g, S不知大家有没有什么好的方法
发表于 2022-6-9 10:21:06 | 显示全部楼层 来自: 中国上海
erikgqp8645 发表于 2016-11-14 16:54& U) @( F) `& u5 L6 k
试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html
) x0 [3 z9 V8 n/ u$ T! M附件是上面那个代码的宏程序。- }* x' `! m( L3 I9 j$ j1 U
...
% W# s0 ~6 C& @% Y* L
我试了这个宏 为什么不行啊?
发表于 2022-8-3 09:04:53 | 显示全部楼层 来自: 中国湖北
其实是有同感的。我的办法是做两张BOM表。一个是阶梯的,一个是总数的。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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