QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
请教一下大家SW明细表中的数量怎么加总啊如下图第一层的总装配有2个,对应下面的零件应都X2, u' h( a' b: Z& f0 G
在SW明细表中怎么能自动识别的?
& ^/ e8 R8 p! D% @2 c! R8 f0 ?6 i$ R3 Z) k8 V
8 ?' l3 l$ h  ]
QQ图片20161112150911.png * G: P3 H5 y/ E1 x: |

5 I6 o' ^  L/ q" @5 U  d2 E% w
发表于 2016-11-12 15:33:49 | 显示全部楼层 来自: 中国辽宁营口
什么样的设备装配图的明细表需要具备数量加总
发表于 2016-11-12 23:29:30 | 显示全部楼层 来自: 中国北京
加方程式啊; [8 T) C& ?1 j; v7 }( ?
发表于 2016-11-13 10:48:13 | 显示全部楼层 来自: 中国辽宁盘锦
暂时理解不透你说的意思
 楼主| 发表于 2016-11-14 08:49:59 | 显示全部楼层 来自: 中国湖北武汉
阿帕奇 发表于 2016-11-13 10:48
+ O( C# l+ I' z% b: m暂时理解不透你说的意思

3 P7 \$ g6 o1 i0 k0 S也就是总装配中有二个一样的装配体,但在明细表中只显示装配有2个,而下面的零件只计了1个装配体的。实际中要把下面的每个零件都是乘以2如下图 ! J6 K" ]9 z9 E+ d3 L) H7 i

, h( m5 B) T8 W1 X4 c6 f/ X7 V9 s) k' F. O
QQ截图20161114084729.png
 楼主| 发表于 2016-11-14 08:51:51 | 显示全部楼层 来自: 中国湖北武汉
hhaa545 发表于 2016-11-12 23:29% r  u0 x4 [. q% G
加方程式啊

0 \9 k, |. Q4 `& V# |7 I2 H0 u, S方程式只能一个个的加,如果明细表中的零件多是不好实现的
7 T4 \+ Z% z% r0 }8 X; e/ G! o! c
发表于 2016-11-14 16:53:04 | 显示全部楼层 来自: 中国天津
  1. , h- u1 @: W. T" Q6 X
  2. Dim TopDocPathOnly As String
    - g2 c' u! _- N! N" Y
  3. Dim PartsCollect() As String '遍历清单(阵列)
    ! I( u2 m0 X. k5 Z6 F
  4. Dim InCollectCount As Double '遍历清单长度
    4 t- ^% ^8 G0 R# f. [9 `; V0 F2 j
  5. Dim CustomInfoQTY As String* h8 V. Y2 X2 E

  6. 7 q. Y- z" R1 I0 t2 X) ~3 X
  7. Sub main()
    ' @" s, N% ?2 H5 e- Z! L7 [/ U
  8. Set swapp = Application.SldWorks 'SW对象. b# E/ n- _9 [
  9. Set TopDoc = swapp.ActiveDoc '总装对象( w# L( L. k) k% q
  10. If TopDoc.GetType <> 2 Then Exit Sub '不是装配=退出3 A* z- u9 E- f8 S6 |
  11. TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割
    3 k3 ]- n: \/ ?$ A& ^
  12. TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '总装文件名称! v: v: ~- H, X6 z) {4 K/ m: m
  13. TopDocName = Left(TopDocName, Len(TopDocName) - 7) '总装文件名称(排除.SLDASM)
    0 b7 O0 H' D- k& l' e4 B/ o7 o
  14. TopDocPathOnly = Mid(TopDoc.GetPathName, 1, InStrRev(TopDoc.GetPathName, "", -1)) '总装的完整目录: \" e2 U) o; w5 J7 U* @( f
  15. TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱7 f7 x4 ~2 `% g8 c
  16. CustomInfoQTY = "数量" '可按个人喜好修改预设值+ l4 m5 U- ^" v7 }" J# d- ~, B
  17. InCollectCount = 1 '遍历清单长度基数
    - ^& C& H2 ?$ x: \8 `$ _
  18. ReDim PartsCollect(InCollectCount) '定义阵列项数
    2 i" `2 a$ u3 C. q5 V' N: H
  19. SubAsm TopDoc, TopConfString '遍历
    ! P, C# s; m% P" a3 s6 ~
  20. Beep
    1 m% r* j) D3 V4 i
  21. MsgBox "完成"' N$ g( m4 d" d
  22. End Sub9 w1 U& v7 T: o
  23. 3 t' H6 R$ y5 P( |
  24. Function SubAsm(AsmDoc, ConfString): X3 c( v" o* F# Q
  25. Set Configuration = AsmDoc.GetConfigurationByName(ConfString)# t. g9 _) d1 P) l
  26. Set RootComponent = Configuration.GetRootComponent
    8 E& L9 I! j% [- V) R$ @
  27. Components = RootComponent.GetChildren
    0 b/ }) g9 ?( w
  28. For Each Child In Components
    , B3 k6 F1 K7 j+ }9 S
  29.     Set ChildModel = Child.GetModelDoc# E- ~, n6 h5 a& V
  30.     If Not (ChildModel Is Nothing) Then '排除抑制及轻化
    ; R" Q, w" L; o
  31.         ChildConfString = Child.ReferencedConfiguration '零件配置名称
    ' A9 M) Q5 ~4 p7 F' i8 T
  32.         ChildType = ChildModel.GetType
    & ]# A* o* A8 c7 W2 ~$ i
  33.         ChildPathSplit = Split(Child.GetPathName, "") '分割0 Y. u( m6 a/ @
  34.         ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名称
    ! h+ n9 X5 d6 z' w# _: A/ v
  35.         , x1 \" O& _" [# J; x( R' \
  36.         ChildPathOnly = Mid(Child.GetPathName, 1, InStrRev(Child.GetPathName, "", -1)) '零件的完整目录1 r* b0 N! Z( p3 S
  37.         If ChildPathOnly = Replace(ChildPathOnly, TopDocPathOnly, "") Then SamePath = False Else SamePath = True '零件是否在总装目录或往下目录7 x' v& H0 f1 p6 \3 W$ j3 u7 Y) @
  38.         $ Z+ I. |: {% i( H1 b1 q, W" U3 z* B
  39.         If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳過:不在总装目錄或其往下目錄 或 不包括在材料明細表中 或 是个封套
    - j; J. \; S- |: R5 }* ~6 m& V
  40. '        If (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳过:不包括在材料明細表中 及 封套" g5 l# r: m6 ?
  41.             UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '备用量属性名称, S5 B4 O  f, w* J
  42.             UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '备用量; m$ F" q8 s0 F- p& {" C
  43.             If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '备用量除错/ `  b% {5 ?2 y0 C
  44.             inCollect = False '重置判断变量
    0 E# g3 y/ k4 M% ]. t
  45.             For Each PartinCollect In PartsCollect '判断是否已在遍历清单內
    , @" w7 w% A4 l9 j" U3 Q
  46.                 If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True
    8 C7 R/ a; j+ ^" F. N
  47.             Next0 S4 f2 M* ?1 _) k
  48.             If inCollect Then '已在遍历清单內0 v# o4 i8 ~) C# Z
  49.                 ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE
    7 d5 a3 @( J1 U: m( {" D( H
  50.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY/ ]3 p5 \1 A* b
  51.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty
    0 |) u& `! g, i3 d, @1 L8 a$ @
  52.             Else '不在遍历清单內(首次处理)
    " @' ^0 q) P$ w: m
  53.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY  _5 I+ Y( d! o
  54.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE
    0 F4 K. h+ i4 L, }
  55.                 InCollectCount = InCollectCount + 1 '遍历清单长度基数+1
    % U% c9 p. ~7 w% {' C
  56.                 ReDim Preserve PartsCollect(InCollectCount) '重新定义阵列项数(保留內含数据)6 z8 y6 ?* {# Y9 i( F
  57.                 PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍历清单中
      O9 e2 _. w3 A0 Z
  58.                 ChildModel.SetUserPreferenceIntegerValue swUnitSystem, swUnitSystem_Custom '单位系统=Custom
    * N  A# F5 k! z, L# v* M8 L4 R$ A
  59.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '重量单位设定为kg(可按喜好加入設定)7 |2 n; h: \8 p
  60.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropLength, swMM '设定长度单位为毫米& L9 }; Y% O% Q- e. Q" Z3 L  G
  61.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropVolume, swUnitsMassPropVolume_Centimeters3 '设定体积单位为立方厘米) b, O5 g4 b+ j; H% M' G$ ^
  62.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropDecimalPlaces, 2 '质量及体积小数点后2位) S, n+ c- [  Q4 r. Z4 H9 e
  63.                 ChildModel.AddCustomInfo3 "", "Weight", 30, Chr(34) & "SW-Mass@*" & ChildName & Chr(34) '在自订属性加入Weight属性$ z$ c2 g9 E* v& o/ x5 D
  64.                 ChildModel.AddCustomInfo3 "", "Material", 30, Chr(34) & "SW-Material@*" & ChildName & Chr(34) '在自订属性加入Material属性
    $ `  P) d, @  y% x1 k
  65.                 ChildModel.AddCustomInfo3 ChildConfString, "Weight", 30, Chr(34) & "SW-Mass@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Weight属性6 C, |. [2 W  w! P  r, h7 Q/ b
  66.                 ChildModel.AddCustomInfo3 ChildConfString, "Material", 30, Chr(34) & "SW-Material@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Material属性5 D* W& K3 @& D8 M7 k) Q+ R) H
  67.                 ChildModel.SketchManager.Insert3DSketch True '插入三低草图,从而激活零件的“需存盘标签”
    * R+ n/ ^% ]3 E* e- O) a
  68.                 ChildModel.SketchManager.Insert3DSketch True '离开三低草图
    : ^( K2 P( {4 m) t/ n" s' l7 {
  69.             End If
    , L5 A& S" V+ o( S5 u& Y4 Q! u
  70.             If ChildType = 2 Then
    ( @& E; E5 Y2 F: e+ @
  71.                 SubAsm ChildModel, ChildConfString '如果是装配则向下遍历" Y6 d: O, J! Y; n* U
  72.             End If
    9 @8 s  t8 X* I3 C8 q, f2 ?: U
  73.             0 k; j) I# w8 E: ]  r
  74.         End If
    # L3 S$ Y- l" ~# F
  75.     End If0 Q  J' Q1 P5 W+ W" K
  76. Next1 O/ Q6 m% |' z
  77. End Function( f1 z1 D, d0 N: P; z
  78.     % S& G1 H! O! m1 W
复制代码
发表于 2016-11-14 16:54:03 | 显示全部楼层 来自: 中国天津
本帖最后由 erikgqp8645 于 2016-11-14 16:56 编辑
8 ^; d& ]0 I, b; F
1 Q0 j: W7 Z( }' f+ u) V试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html" q& a. t. S" ?7 W1 _4 f; r2 o
附件是上面那个代码的宏程序。& Y( ]: \+ t) Z
使用方法,在装配体中运行宏,就会添加总数量。7 n1 Q( @. n" H8 \

添加总数量.rar

12.68 KB, 下载次数: 46

发表于 2016-11-14 20:11:04 | 显示全部楼层 来自: 中国辽宁营口
明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是单个子装配体中的数量。这才符合逻辑,而楼主的需要明显是瞎胡闹
发表于 2016-11-15 08:04:37 | 显示全部楼层 来自: 中国天津
yk2906 发表于 2016-11-14 20:11+ c( B- q- u5 T# t( C1 Y
明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是 ...
/ ?( S; ?, z# [+ e6 ?& q( M
这位兄台,我并不是这么认为的。
9 V: [, H" W# ^3 J6 O$ D对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便于更好的加工。
# ]; D; W, M: t6 O6 C# F做图纸的是要给加工部门看的,而大家方便了自然也可以不那么符合逻辑。
! C, a6 o9 n7 e. {上面的宏程序可以在把数量改为“总数量”单独在bom上加一列,这样看起来更加直观。
 楼主| 发表于 2016-11-18 08:07:58 | 显示全部楼层 来自: 中国湖北武汉
erikgqp8645 发表于 2016-11-15 08:04! J- I2 N, D/ o3 k3 b5 Y5 O
这位兄台,我并不是这么认为的。
( k4 Z/ d# b' W0 E, p对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便 ...

4 z! @# ^, ~% y/ m1 G: a8 k有时可能相同的装配体的2组 或3组 或1组的
0 m; h' q) u' n1 y那到对应的装配体下面的零件是就是X2  X3  X1是不相同的8 n' \. M$ E2 @; x* e1 B& R
发表于 2016-11-18 13:08:51 | 显示全部楼层 来自: 中国山东临沂
你的这个我大体理解什么意思了 ,就是把不同的或者相同的部件中共同使用件数做个统计是吧?如果是这样的话,我一般做两个明细表,一个是零件BOM,跟总成下的部件BOM
发表于 2016-11-18 16:19:17 | 显示全部楼层 来自: 中国天津
yh2008 发表于 2016-11-18 08:07
1 s, \, z6 c$ t! q# h9 }有时可能相同的装配体的2组 或3组 或1组的8 T; o! t& R# ~$ l4 r, @
那到对应的装配体下面的零件是就是X2  X3  X1是不相同的

! s+ D: ]( k2 T2 l  U2 ]' V上面那个宏就是实现这个功能的。- H2 q( C+ D- V
假如你一个装配体里面有两个组件,分别为a和b。
, \3 h8 q# H, u  V# {2 [6 r其中有个零件c在这两个组件里面都有。
% K7 p5 b" j! z% e, L运行上面那段宏就可以添加一个总数量的属性,就是在这个装配体里面的总数量。
发表于 2016-11-18 19:54:29 | 显示全部楼层 来自: 中国广东深圳
晕,没有ERP系统,也没有生产计划部?
9 X5 v: Z1 j. s% r6 @图纸上不带这样表示的吧?3 [1 Q0 |6 j5 C3 A. ~
最多再另出一个总计算的表格吧?
发表于 2016-11-18 21:03:02 | 显示全部楼层 来自: 中国安徽蚌埠
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头的图标,数字也变了+ N9 M# C/ O6 N  B: N
1114.png
 楼主| 发表于 2016-11-19 08:22:34 | 显示全部楼层 来自: 中国湖北武汉
jinqin11 发表于 2016-11-18 21:03
) P7 t! }6 z  o( ]& M8 C鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头 ...
' ~, E6 f8 L* J
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的
发表于 2016-11-19 11:43:51 | 显示全部楼层 来自: 中国香港
yh2008 发表于 2016-11-19 08:22$ l$ J1 @+ l0 s0 W! ]2 F
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的

# _% m+ m6 K2 t, q楼主大大明明白白在问“加总”,怎么又说“分开”。1 p% W) y2 {8 N

7 U3 g2 J0 S3 l& d' h8 ?原来在问“小计”(subtotal)。
发表于 2016-11-19 20:45:33 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif
. Q) g' ^" K/ E7 T1 M方程式只能一个个的加,如果明细表中的零件多是不好实现的

$ _3 |' w9 Z) |' z7 }可以实现的9 q! U; d7 j; h) D/ S8 z% j0 N
发表于 2016-11-19 20:46:17 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif+ ?7 {) y* O" O& ^
方程式只能一个个的加,如果明细表中的零件多是不好实现的

  Q% S: k) P8 N: u0 t6 L要是不明白就加我Q726915950说是三维网的
8 m  p% n+ M4 F4 k, E7 I' k) {3 y
发表于 2016-11-20 11:30:43 | 显示全部楼层 来自: 中国台湾
贊同#9、#10的「部份」內容。2 i3 I/ E3 o3 z3 e* H4 P
. F& b3 M' N% V' W/ I7 y
就我個人而言,這樣的表示方法並沒有問題呀~0 {& J% b7 ~+ W! [) }. D
我想這是對於此種「階梯式」的零件圖產生的誤解而衍生出的問題,而且還不少人有這樣的疑惑~
* W+ p( p% x7 p/ W

0 }2 \% s; ]% L. c9 a; ~8 k! f階梯式表達的數量欄位的值,指的是在「這一層」次組件的單用量,這樣去想就沒有錯了。
, |4 J; @2 ?( h' v試想,如果有像我一樣解讀的人來看樓主要求的BOM,那麼數量要如何計算才是對的?! L# J( `5 h& U$ m; r" v& J
3 i. v" c' p* ^4 |# @
如果要顯示一零件在總裝配裡的使用量,那麼就不應該使用階梯式了。
4 ]' D9 I' l, C4 h1 t
% }" X% z) M& o4 d3 Z% x而這也呼應了大鹿先生說的「小計」。
& z. X) Y7 d6 ^/ C1 c# Z/ K$ ]0 W8 {- Y

8 S! o7 c5 o% ?7 w% b, w" o
 楼主| 发表于 2016-11-21 08:11:42 | 显示全部楼层 来自: 中国湖北武汉
大鹿 发表于 2016-11-19 11:43
% Q3 o$ G/ R. X, U' |楼主大大明明白白在问“加总”,怎么又说“分开”。( G, P% d% [" t; C  T) ~
8 R: U9 Z* {4 m* o
原来在问“小计”(subtotal)。

: [* v/ R  o& H- K- N是的可以说是小计
 楼主| 发表于 2016-11-21 08:15:54 | 显示全部楼层 来自: 中国湖北武汉
gt.adan 发表于 2016-11-20 11:30+ f/ ~( p$ j/ B4 U: b
贊同#9、#10的「部份」內容。, w$ h/ H$ e$ u& m2 q9 v
+ Y! Q) V  M6 u7 S
就我個人而言,這樣的表示方法並沒有問題呀~
. e( N  y! I4 A/ B- I3 b9 _
SW的表现方式是对的,只是在计算时会出现一个小计数量,% d6 e3 U8 o, N4 x( B; c7 z2 K
现在就是想怎么直接出现小计的结果,因为零件要在EXCEL中计算成本
4 S' ~0 m6 L, Y: F目前的做法是手动修改数量,缺点就是有时可能漏+ P; F# ~+ e; W' e  t: g% k7 E  y
不知大家有没有什么好的方法
发表于 2022-6-9 10:21:06 | 显示全部楼层 来自: 中国上海
erikgqp8645 发表于 2016-11-14 16:54
/ J6 f8 v" E) g& y( b试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html* h& l& `- u9 \
附件是上面那个代码的宏程序。
4 |2 K! A$ O  g& J ...

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

本版积分规则


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

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

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