QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
请教一下大家SW明细表中的数量怎么加总啊如下图第一层的总装配有2个,对应下面的零件应都X2
3 l& f/ ?; u9 \. P) t* j在SW明细表中怎么能自动识别的?
" F4 v' n% H% I
* Q% J5 r. [( ?% S: z" _. @( q- R9 E1 b* r- \6 s1 q
QQ图片20161112150911.png * @, J% j1 i. u1 W* b* f

6 w/ x* n0 O/ k4 _
, H4 A% c, q  m# p2 e. }9 x
发表于 2016-11-12 15:33:49 | 显示全部楼层 来自: 中国辽宁营口
什么样的设备装配图的明细表需要具备数量加总
发表于 2016-11-12 23:29:30 | 显示全部楼层 来自: 中国北京
加方程式啊
6 T# X; p, [1 K( U4 a8 n. u
发表于 2016-11-13 10:48:13 | 显示全部楼层 来自: 中国辽宁盘锦
暂时理解不透你说的意思
 楼主| 发表于 2016-11-14 08:49:59 | 显示全部楼层 来自: 中国湖北武汉
阿帕奇 发表于 2016-11-13 10:48* m8 r' r: V- X+ M/ c
暂时理解不透你说的意思

' _- \/ w2 a1 Q& n! E也就是总装配中有二个一样的装配体,但在明细表中只显示装配有2个,而下面的零件只计了1个装配体的。实际中要把下面的每个零件都是乘以2如下图 . p" b. S8 p/ J- ~) _

  {9 b) p8 s2 p" g- y) @* \# u. b' H+ B- X* V9 m
QQ截图20161114084729.png
 楼主| 发表于 2016-11-14 08:51:51 | 显示全部楼层 来自: 中国湖北武汉
hhaa545 发表于 2016-11-12 23:296 w1 @" ~. H4 r" t% H# x
加方程式啊
6 U: Y. v7 v# T" Z
方程式只能一个个的加,如果明细表中的零件多是不好实现的
& S3 q- Y7 H9 b- H6 G% p/ q4 H6 @
发表于 2016-11-14 16:53:04 | 显示全部楼层 来自: 中国天津
  1. 7 V9 r" r4 o3 w8 s2 ?4 ]$ _
  2. Dim TopDocPathOnly As String  d# H* W- T* J; |* a
  3. Dim PartsCollect() As String '遍历清单(阵列)
    ! _4 b0 l( j7 J( B* `
  4. Dim InCollectCount As Double '遍历清单长度
    3 {1 Z0 l4 \9 q' n+ [/ l
  5. Dim CustomInfoQTY As String
    5 c  K6 G% A4 M6 L8 t
  6. 9 M& u! Z, z$ P% `; Y2 B
  7. Sub main()
    . q: F1 O; g( g. ]; J8 c
  8. Set swapp = Application.SldWorks 'SW对象
    + n. g! I; ?4 _5 W
  9. Set TopDoc = swapp.ActiveDoc '总装对象2 M# W" I! R9 V2 D$ |5 T4 D
  10. If TopDoc.GetType <> 2 Then Exit Sub '不是装配=退出' Q0 j. @4 ]1 l' F% N6 b4 _
  11. TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割
    ( `, h. z* f) }2 M7 M3 i, o
  12. TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '总装文件名称
    ' p( p' Z8 f7 d, G1 q5 O/ u
  13. TopDocName = Left(TopDocName, Len(TopDocName) - 7) '总装文件名称(排除.SLDASM)
    # g6 Q3 o+ G+ p7 n6 _7 T6 y6 I( N3 g! N
  14. TopDocPathOnly = Mid(TopDoc.GetPathName, 1, InStrRev(TopDoc.GetPathName, "", -1)) '总装的完整目录$ ]6 `$ b- ]0 @2 {2 V. J/ E& c
  15. TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱+ j' b# X9 K3 ]5 O
  16. CustomInfoQTY = "数量" '可按个人喜好修改预设值
    ! E- t& J0 }4 S9 v) t, l* B) O
  17. InCollectCount = 1 '遍历清单长度基数
    + Z9 f4 F5 M! o1 q& h) M0 i
  18. ReDim PartsCollect(InCollectCount) '定义阵列项数& x) z4 s4 Q- \
  19. SubAsm TopDoc, TopConfString '遍历6 s1 k  T) R7 J* t
  20. Beep# J# N8 O+ }/ @$ D; `! F
  21. MsgBox "完成"
    * G' R; I/ u; w& @1 D
  22. End Sub( s, V0 C( ^" g1 h# r; y2 {
  23. : _9 r" A, J- O' h  t
  24. Function SubAsm(AsmDoc, ConfString)
    + ?) c6 V* T/ r. y
  25. Set Configuration = AsmDoc.GetConfigurationByName(ConfString)
    ) T  @/ }) R4 _
  26. Set RootComponent = Configuration.GetRootComponent
    " s: i; j% ~, a
  27. Components = RootComponent.GetChildren
      @* d4 U& T+ v4 I
  28. For Each Child In Components
    ( {; Q9 u, u4 j5 i8 M. h
  29.     Set ChildModel = Child.GetModelDoc
    5 i! ]8 e4 `- u& y  Q' O4 t
  30.     If Not (ChildModel Is Nothing) Then '排除抑制及轻化4 V; O9 q( v  v! E, n1 Y! G
  31.         ChildConfString = Child.ReferencedConfiguration '零件配置名称
    * T, P8 n; \2 |
  32.         ChildType = ChildModel.GetType2 G2 B9 M+ ^" a8 E
  33.         ChildPathSplit = Split(Child.GetPathName, "") '分割
    2 `1 A6 ?% A3 S8 N/ X) w1 y9 |! b
  34.         ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名称9 B& c1 O2 u4 n0 t7 c
  35.         
    9 N3 Y7 [7 X8 q7 ^1 L
  36.         ChildPathOnly = Mid(Child.GetPathName, 1, InStrRev(Child.GetPathName, "", -1)) '零件的完整目录$ G8 [( i: W& ^7 n
  37.         If ChildPathOnly = Replace(ChildPathOnly, TopDocPathOnly, "") Then SamePath = False Else SamePath = True '零件是否在总装目录或往下目录
    . h  C( j  I- w
  38.         
    : v9 v8 ?2 q/ F) }% _
  39.         If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳過:不在总装目錄或其往下目錄 或 不包括在材料明細表中 或 是个封套) T4 l$ Q0 r) k$ `- a) c
  40. '        If (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳过:不包括在材料明細表中 及 封套; J  @8 Z1 {) x. a" E( ?4 r
  41.             UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '备用量属性名称1 j* A/ y/ f6 \' a
  42.             UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '备用量
    $ J" t! }4 U  W( {% c4 \4 }
  43.             If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '备用量除错( Y& `8 m7 M+ E; F! x( |' E! t
  44.             inCollect = False '重置判断变量
    ' a6 r! Z" `! ]7 i5 q
  45.             For Each PartinCollect In PartsCollect '判断是否已在遍历清单內( R. Y0 _  i" |5 p- n$ s3 u' C9 [
  46.                 If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True
    3 i0 |* B9 r5 P. Y, G
  47.             Next2 I8 h. h) v& k6 r
  48.             If inCollect Then '已在遍历清单內  p) W. N" X! [/ K% m& z7 w' q, Z- H
  49.                 ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE
    1 X$ v: k+ }: i* P4 _' X: y) J6 m
  50.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY- X- z, e/ V$ x; w$ r$ ]3 z
  51.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty8 t, ]. E  C+ V5 Z0 H6 q2 ~- m
  52.             Else '不在遍历清单內(首次处理)& L, Q8 k1 S8 n) A2 N0 ^7 }
  53.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY
    9 ]. X2 |. ^+ B2 I( R
  54.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE
    ) E; `4 T! g# {
  55.                 InCollectCount = InCollectCount + 1 '遍历清单长度基数+1* E- Z3 B  r6 }
  56.                 ReDim Preserve PartsCollect(InCollectCount) '重新定义阵列项数(保留內含数据)
    - b8 R6 y6 d/ w/ M6 \: y, U
  57.                 PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍历清单中* W' v* w5 v+ A5 ?# B! I
  58.                 ChildModel.SetUserPreferenceIntegerValue swUnitSystem, swUnitSystem_Custom '单位系统=Custom9 S# Q. e7 d; j% l9 Z
  59.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '重量单位设定为kg(可按喜好加入設定)4 A) ?- m  d9 H* S& q; V
  60.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropLength, swMM '设定长度单位为毫米+ Z+ w/ E" y6 N5 l, n8 f
  61.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropVolume, swUnitsMassPropVolume_Centimeters3 '设定体积单位为立方厘米
    4 N, [- Y5 m1 D% |
  62.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropDecimalPlaces, 2 '质量及体积小数点后2位
    + g9 F9 b5 E. z, Z) v
  63.                 ChildModel.AddCustomInfo3 "", "Weight", 30, Chr(34) & "SW-Mass@*" & ChildName & Chr(34) '在自订属性加入Weight属性
    ( O7 }; C* y+ T$ L+ `; v) ~
  64.                 ChildModel.AddCustomInfo3 "", "Material", 30, Chr(34) & "SW-Material@*" & ChildName & Chr(34) '在自订属性加入Material属性
    ; e1 o0 `' r% Y1 d9 S
  65.                 ChildModel.AddCustomInfo3 ChildConfString, "Weight", 30, Chr(34) & "SW-Mass@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Weight属性
    " c6 O8 z2 e- n& {* p0 f. }$ M
  66.                 ChildModel.AddCustomInfo3 ChildConfString, "Material", 30, Chr(34) & "SW-Material@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Material属性
    ( a! h6 ^1 x3 Z
  67.                 ChildModel.SketchManager.Insert3DSketch True '插入三低草图,从而激活零件的“需存盘标签”
    % p$ Z# v/ m8 C. Z( }
  68.                 ChildModel.SketchManager.Insert3DSketch True '离开三低草图/ n7 \; P8 I4 T& N9 K
  69.             End If) y. q) b7 H# w; u7 _+ t" Z
  70.             If ChildType = 2 Then6 j1 ^; c" E  D2 a: }/ n
  71.                 SubAsm ChildModel, ChildConfString '如果是装配则向下遍历
    ; W( f/ W2 c! i
  72.             End If" q3 r2 ^; ?7 {! E: j
  73.             4 P" @; T. `. I. l. o
  74.         End If; k# m8 P* N8 h/ B3 @0 p& k
  75.     End If
    2 O2 N# X4 |5 v& B# Q
  76. Next
    9 Y& s3 O+ g" `
  77. End Function' f  W9 a2 m9 `0 J% R
  78.    
    0 j% Z4 s2 y8 ~' f+ j) v8 L' b
复制代码
发表于 2016-11-14 16:54:03 | 显示全部楼层 来自: 中国天津
本帖最后由 erikgqp8645 于 2016-11-14 16:56 编辑 - v# J: ~& v$ h. `2 x% U$ J4 a
" Q* M+ k) B& K2 D. j1 L
试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html
/ S7 j7 _( W9 c4 d% }! H5 K4 E附件是上面那个代码的宏程序。
8 Z9 i* D* x0 K1 Q  j/ s) D使用方法,在装配体中运行宏,就会添加总数量。: `8 V0 L: W8 G$ v% }1 `- K

添加总数量.rar

12.68 KB, 下载次数: 46

发表于 2016-11-14 20:11:04 | 显示全部楼层 来自: 中国辽宁营口
明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是单个子装配体中的数量。这才符合逻辑,而楼主的需要明显是瞎胡闹
发表于 2016-11-15 08:04:37 | 显示全部楼层 来自: 中国天津
yk2906 发表于 2016-11-14 20:11/ A4 Q9 C8 M: Q& ^( {
明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是 ...
9 b' c) B0 x9 ~' g8 E! Z0 b
这位兄台,我并不是这么认为的。' m8 C8 \8 b$ k8 C) l4 |
对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便于更好的加工。; {) e. t4 C1 Z# q
做图纸的是要给加工部门看的,而大家方便了自然也可以不那么符合逻辑。: T$ _- d6 f5 L- a# u6 B
上面的宏程序可以在把数量改为“总数量”单独在bom上加一列,这样看起来更加直观。
 楼主| 发表于 2016-11-18 08:07:58 | 显示全部楼层 来自: 中国湖北武汉
erikgqp8645 发表于 2016-11-15 08:04
* R( v! m/ V6 z) }& q这位兄台,我并不是这么认为的。$ B" y% p. d0 R8 L+ s
对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便 ...

0 E% g0 H6 ]& V2 _1 F有时可能相同的装配体的2组 或3组 或1组的4 u* x/ P& J& D# D, V' J
那到对应的装配体下面的零件是就是X2  X3  X1是不相同的
7 Z+ S! k5 h2 Q: ?8 p
发表于 2016-11-18 13:08:51 | 显示全部楼层 来自: 中国山东临沂
你的这个我大体理解什么意思了 ,就是把不同的或者相同的部件中共同使用件数做个统计是吧?如果是这样的话,我一般做两个明细表,一个是零件BOM,跟总成下的部件BOM
发表于 2016-11-18 16:19:17 | 显示全部楼层 来自: 中国天津
yh2008 发表于 2016-11-18 08:07* |4 U( Y7 y# b" D
有时可能相同的装配体的2组 或3组 或1组的7 p( Y, u! B. P. ~/ [3 {
那到对应的装配体下面的零件是就是X2  X3  X1是不相同的
9 z; d+ u) r; h0 u, K! z, i' P3 s, D
上面那个宏就是实现这个功能的。9 p" B# r8 B. U. x5 r, e% F
假如你一个装配体里面有两个组件,分别为a和b。
# F5 E0 T# S& y* e1 d其中有个零件c在这两个组件里面都有。$ x% ~  U2 @5 l$ X
运行上面那段宏就可以添加一个总数量的属性,就是在这个装配体里面的总数量。
发表于 2016-11-18 19:54:29 | 显示全部楼层 来自: 中国广东深圳
晕,没有ERP系统,也没有生产计划部?
9 y4 u2 x, ~' x图纸上不带这样表示的吧?9 s3 w% x, \- k( ?* j2 q
最多再另出一个总计算的表格吧?
发表于 2016-11-18 21:03:02 | 显示全部楼层 来自: 中国安徽蚌埠
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头的图标,数字也变了
( C8 f& E4 s4 z. _8 W) f# Q
1114.png
 楼主| 发表于 2016-11-19 08:22:34 | 显示全部楼层 来自: 中国湖北武汉
jinqin11 发表于 2016-11-18 21:03
3 a  Z3 ^" R% Q鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头 ...
+ _: p- l- ?# l* q6 d  \- a+ E
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的
发表于 2016-11-19 11:43:51 | 显示全部楼层 来自: 中国香港
yh2008 发表于 2016-11-19 08:22, B8 n1 \, ]3 h  z3 o" ^, ~  K, ?
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的

6 [6 s* ]% v4 x7 ]$ E. l: w! g楼主大大明明白白在问“加总”,怎么又说“分开”。0 V1 @2 ]1 a' r3 R. v  N

* b/ M/ l1 V  b( T原来在问“小计”(subtotal)。
发表于 2016-11-19 20:45:33 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif* Y& A4 D, G3 j: [) Y# F; E" O7 u
方程式只能一个个的加,如果明细表中的零件多是不好实现的
) V2 t% m+ s' ~# k6 j1 M! `
可以实现的
- W( ]6 a- W, x& n0 s1 L* I0 b
发表于 2016-11-19 20:46:17 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif* L/ O, h0 _- i' X/ V. E
方程式只能一个个的加,如果明细表中的零件多是不好实现的

. N' h3 f+ [5 R要是不明白就加我Q726915950说是三维网的, j  ?# _$ l9 a# j7 I
发表于 2016-11-20 11:30:43 | 显示全部楼层 来自: 中国台湾
贊同#9、#10的「部份」內容。7 Q; o! n- s+ L2 m3 r$ H% s

/ E! }+ E6 U( }) r( |. W% h" b1 E就我個人而言,這樣的表示方法並沒有問題呀~
6 {- I7 ~$ t: r4 {9 A) o, h1 _我想這是對於此種「階梯式」的零件圖產生的誤解而衍生出的問題,而且還不少人有這樣的疑惑~
6 Z2 ^1 n. m/ M4 H1 f

  h3 Z! q% q/ j階梯式表達的數量欄位的值,指的是在「這一層」次組件的單用量,這樣去想就沒有錯了。" I; M$ d& y- p$ O$ m/ a8 J5 b
試想,如果有像我一樣解讀的人來看樓主要求的BOM,那麼數量要如何計算才是對的?
7 l: W0 }0 I) w4 A. F' |) d3 w% @; R; O4 I: K
如果要顯示一零件在總裝配裡的使用量,那麼就不應該使用階梯式了。# ~* f5 k9 L, B5 o7 u2 _" s

; a4 j" u% v! R* D6 }8 \/ w& L0 a而這也呼應了大鹿先生說的「小計」。
! W# n3 `& H3 Z& K
: o8 D! `8 J7 ~, `* W4 \% p; e8 g+ Z; T
 楼主| 发表于 2016-11-21 08:11:42 | 显示全部楼层 来自: 中国湖北武汉
大鹿 发表于 2016-11-19 11:43
; }. a" l. q. W. f. V4 F5 F楼主大大明明白白在问“加总”,怎么又说“分开”。
# g$ L/ B+ Q) A# C7 o. q+ a5 `0 m. L3 h0 Y2 p
原来在问“小计”(subtotal)。
2 h/ z9 [. N- x" D$ F
是的可以说是小计
 楼主| 发表于 2016-11-21 08:15:54 | 显示全部楼层 来自: 中国湖北武汉
gt.adan 发表于 2016-11-20 11:30
8 j. `! k0 E+ P. c. m贊同#9、#10的「部份」內容。% B6 z/ T) Q% H8 w

$ I9 p4 D0 I1 l4 Y0 x& j% \* c就我個人而言,這樣的表示方法並沒有問題呀~

% S# t" i- C: l0 C1 F2 A5 L" GSW的表现方式是对的,只是在计算时会出现一个小计数量,8 q  g' p- c( P
现在就是想怎么直接出现小计的结果,因为零件要在EXCEL中计算成本4 V2 s5 V# g! S
目前的做法是手动修改数量,缺点就是有时可能漏
1 a, k" K6 t( }( U* _不知大家有没有什么好的方法
发表于 2022-6-9 10:21:06 | 显示全部楼层 来自: 中国上海
erikgqp8645 发表于 2016-11-14 16:54# \# M; s  q2 b
试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html' T5 e$ l3 b0 U- {( e
附件是上面那个代码的宏程序。5 b( [  n" g; J# z- p+ U7 q$ j1 p
...

( U% W3 b& }3 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 )

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