QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
请教一下大家SW明细表中的数量怎么加总啊如下图第一层的总装配有2个,对应下面的零件应都X2+ e/ S3 B/ N% k3 N2 o+ M
在SW明细表中怎么能自动识别的?% M; `8 u' O) q8 \

. O$ y% J3 A6 t% p; ?+ Y2 _* V# I! K* [, W" b" \7 r. m: w
QQ图片20161112150911.png $ Z: _- b1 P$ |9 p8 Z) [3 [) M8 U
7 {+ A% ^: w3 J& U! C. i6 ~: U8 ?
" S" W; h" O$ j; x5 e% N5 D; y, W
发表于 2016-11-12 15:33:49 | 显示全部楼层 来自: 中国辽宁营口
什么样的设备装配图的明细表需要具备数量加总
发表于 2016-11-12 23:29:30 | 显示全部楼层 来自: 中国北京
加方程式啊* A' Z  l5 C/ J$ L% B. L
发表于 2016-11-13 10:48:13 | 显示全部楼层 来自: 中国辽宁盘锦
暂时理解不透你说的意思
 楼主| 发表于 2016-11-14 08:49:59 | 显示全部楼层 来自: 中国湖北武汉
阿帕奇 发表于 2016-11-13 10:485 e% y* z7 h( m
暂时理解不透你说的意思
+ Q. H" z: s4 H# N6 [0 z
也就是总装配中有二个一样的装配体,但在明细表中只显示装配有2个,而下面的零件只计了1个装配体的。实际中要把下面的每个零件都是乘以2如下图 : N' t( U6 r: {% R

+ w# x! ^+ ?- n0 }* c* A* `' b% @1 H
QQ截图20161114084729.png
 楼主| 发表于 2016-11-14 08:51:51 | 显示全部楼层 来自: 中国湖北武汉
hhaa545 发表于 2016-11-12 23:29
/ `2 n; O8 _, [! K( |: a  Q1 K加方程式啊

3 e( r5 |" M# v- O1 ^$ j方程式只能一个个的加,如果明细表中的零件多是不好实现的) o9 ]" o' D. o
发表于 2016-11-14 16:53:04 | 显示全部楼层 来自: 中国天津
  1. 0 q0 y' P& U# q1 S
  2. Dim TopDocPathOnly As String
    + j$ ]" z) a' y/ Z4 ]
  3. Dim PartsCollect() As String '遍历清单(阵列)
    ) p0 A. \; |' ~/ O, B) ^8 j7 `
  4. Dim InCollectCount As Double '遍历清单长度& x( w' R/ T7 E' \5 f/ K4 B0 a1 a
  5. Dim CustomInfoQTY As String
    + Y/ N6 d% s3 W+ {
  6. % Y7 E* T/ E) C) A* q4 z' P+ l
  7. Sub main()  o3 B* ~! @& P1 k/ d* b, b) X
  8. Set swapp = Application.SldWorks 'SW对象
    & p2 f( D4 U* E. J! {
  9. Set TopDoc = swapp.ActiveDoc '总装对象5 `- p8 [: l2 c' D% B
  10. If TopDoc.GetType <> 2 Then Exit Sub '不是装配=退出
    ; W2 ?  y* g1 ~  O
  11. TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割
    " B9 R+ b) S8 e+ A) b
  12. TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '总装文件名称% V. V; L+ t& R. G; T
  13. TopDocName = Left(TopDocName, Len(TopDocName) - 7) '总装文件名称(排除.SLDASM)
    * o6 B5 z! ]8 v% S2 h' i
  14. TopDocPathOnly = Mid(TopDoc.GetPathName, 1, InStrRev(TopDoc.GetPathName, "", -1)) '总装的完整目录
    1 p( T, t- {, x* S! Y6 v
  15. TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱
    . ^/ T! e$ n* }& U. U; G; I
  16. CustomInfoQTY = "数量" '可按个人喜好修改预设值$ A8 o1 {% t$ q- E; C- _9 a0 J0 n
  17. InCollectCount = 1 '遍历清单长度基数
    $ G# C  V1 q5 K: A5 X7 K
  18. ReDim PartsCollect(InCollectCount) '定义阵列项数
    9 T( ~9 [, H0 q+ I
  19. SubAsm TopDoc, TopConfString '遍历8 x4 G: ]$ [& o' j" `9 f
  20. Beep
    ' S+ P9 w5 m& s7 l2 ^& @' i; s& r
  21. MsgBox "完成"
    0 \7 \; e. z  L0 w/ }
  22. End Sub. j9 s$ A) _& j* I
  23. - s- I- G" l: r/ N! [
  24. Function SubAsm(AsmDoc, ConfString)% z' K9 L# l# f7 Q
  25. Set Configuration = AsmDoc.GetConfigurationByName(ConfString)7 r# ~( Q- p+ `5 z) t( N
  26. Set RootComponent = Configuration.GetRootComponent
    2 o' |4 ]/ S$ `. D6 f! E
  27. Components = RootComponent.GetChildren" \: L; v- x  C7 c$ y! {* a% T
  28. For Each Child In Components
    1 s/ k4 n) B) F! @, V' E; k
  29.     Set ChildModel = Child.GetModelDoc
    5 D* d4 Z( J) p. b/ `
  30.     If Not (ChildModel Is Nothing) Then '排除抑制及轻化8 x6 o' x  ~+ o% h9 N4 C+ A
  31.         ChildConfString = Child.ReferencedConfiguration '零件配置名称
    7 E$ U! i, ?& N
  32.         ChildType = ChildModel.GetType
    ; F" A: B1 l% Q- @
  33.         ChildPathSplit = Split(Child.GetPathName, "") '分割2 Q' {+ n! ]1 Y6 p
  34.         ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名称+ U2 u/ N  f* W
  35.         
    , h! a/ W( G3 H" y) C8 M
  36.         ChildPathOnly = Mid(Child.GetPathName, 1, InStrRev(Child.GetPathName, "", -1)) '零件的完整目录
    & U* j( z' ?; g3 x
  37.         If ChildPathOnly = Replace(ChildPathOnly, TopDocPathOnly, "") Then SamePath = False Else SamePath = True '零件是否在总装目录或往下目录" I. D5 r$ M& q+ o6 l$ N" H
  38.         - Y$ ^. h4 ]# T+ w: N5 Z6 j- O0 S
  39.         If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳過:不在总装目錄或其往下目錄 或 不包括在材料明細表中 或 是个封套! ?! q0 q0 f) p2 P+ v( a
  40. '        If (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳过:不包括在材料明細表中 及 封套
    ' h- r( T8 F7 l; ~* ~2 X7 ]1 d
  41.             UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '备用量属性名称
    3 N& L8 u, m3 s4 b% I1 W  i; T
  42.             UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '备用量
    2 F7 {" c% P  S7 d2 e/ H$ j1 D1 a
  43.             If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '备用量除错9 l6 h# z+ [! ^& P6 a4 [8 p. d
  44.             inCollect = False '重置判断变量
    / M4 h* _& ~9 \# V
  45.             For Each PartinCollect In PartsCollect '判断是否已在遍历清单內" x+ i: `, c9 {2 B: q6 W' Q
  46.                 If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True
    . J) T+ O+ c" y- |% F$ o
  47.             Next7 R- i) K! O: P
  48.             If inCollect Then '已在遍历清单內
    " l( e+ W5 F" U( E2 o6 h; O4 o% W
  49.                 ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE
    ; c. N& J: o3 x$ I4 z" g) j5 S% b! U
  50.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY: c3 ~2 \( W0 e
  51.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty
    3 U4 J! X* N* a  Q) K3 @
  52.             Else '不在遍历清单內(首次处理)! o# j1 e4 W+ R+ y
  53.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY
    + Y, e! T& y3 S2 ]; \
  54.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE
    , O1 ~$ H1 \' f
  55.                 InCollectCount = InCollectCount + 1 '遍历清单长度基数+1; i, t# O3 w+ u, x5 I2 {2 ~
  56.                 ReDim Preserve PartsCollect(InCollectCount) '重新定义阵列项数(保留內含数据)
    " b( W+ s( K( _$ ~/ i  T; q! w1 e
  57.                 PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍历清单中" l7 `" Q0 b% V0 E5 W' L, y
  58.                 ChildModel.SetUserPreferenceIntegerValue swUnitSystem, swUnitSystem_Custom '单位系统=Custom5 t" o+ ~8 f8 m9 O
  59.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '重量单位设定为kg(可按喜好加入設定)% J* j9 h# z7 N0 Y; h5 [3 s1 T
  60.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropLength, swMM '设定长度单位为毫米
    # [7 i8 H" l# Z; t0 s& n
  61.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropVolume, swUnitsMassPropVolume_Centimeters3 '设定体积单位为立方厘米- N5 _( S5 v& i# ]! \
  62.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropDecimalPlaces, 2 '质量及体积小数点后2位" b( b8 _  Z% K# i
  63.                 ChildModel.AddCustomInfo3 "", "Weight", 30, Chr(34) & "SW-Mass@*" & ChildName & Chr(34) '在自订属性加入Weight属性
    5 L0 p" f( r) n# t
  64.                 ChildModel.AddCustomInfo3 "", "Material", 30, Chr(34) & "SW-Material@*" & ChildName & Chr(34) '在自订属性加入Material属性7 h3 j; e$ d( D) v+ H
  65.                 ChildModel.AddCustomInfo3 ChildConfString, "Weight", 30, Chr(34) & "SW-Mass@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Weight属性3 m8 |5 D- y6 K; L+ T- }& ~; p9 S
  66.                 ChildModel.AddCustomInfo3 ChildConfString, "Material", 30, Chr(34) & "SW-Material@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Material属性
    7 w5 a) l- J! i4 C: i% \
  67.                 ChildModel.SketchManager.Insert3DSketch True '插入三低草图,从而激活零件的“需存盘标签”
    2 [- J! Y& W% n0 ~6 K4 J0 z% w
  68.                 ChildModel.SketchManager.Insert3DSketch True '离开三低草图- w% H+ N2 k, i. u
  69.             End If; b7 z3 c) F  N( E" o3 U& ^
  70.             If ChildType = 2 Then$ u3 m/ ^5 A% q6 `: l0 ^$ ]8 N9 L
  71.                 SubAsm ChildModel, ChildConfString '如果是装配则向下遍历
    * `) ]) e+ W: S0 O8 M
  72.             End If
    0 t4 Y: x3 Q: m3 N& D) T( s
  73.             $ y9 I4 U. h1 T& _( t$ i
  74.         End If
    4 r2 w2 J5 C- G  G0 l
  75.     End If
    % a  F* R. d  R( X# d
  76. Next
    - n" Y/ R* g0 Y! ~: E/ ^
  77. End Function/ t+ B1 _# e4 S# q" T. k
  78.    
    ; ]2 C8 Q! t% e3 w9 F
复制代码
发表于 2016-11-14 16:54:03 | 显示全部楼层 来自: 中国天津
本帖最后由 erikgqp8645 于 2016-11-14 16:56 编辑
6 M" v# J* Z7 V7 d& {/ p6 M* Z! [
试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html
: ?/ f" ^# `4 A  X* ~附件是上面那个代码的宏程序。
& ~$ F0 d7 b, w  o2 C使用方法,在装配体中运行宏,就会添加总数量。7 ~: p8 O& t9 N' @" g8 G+ r! p

添加总数量.rar

12.68 KB, 下载次数: 46

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

% \6 v3 A& z" ~- m0 o这位兄台,我并不是这么认为的。
4 h- b) s: M$ R# G对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便于更好的加工。
/ r# {8 M0 @  H, `- M; o0 s: P  @做图纸的是要给加工部门看的,而大家方便了自然也可以不那么符合逻辑。1 c6 f8 m, R! }, b7 J
上面的宏程序可以在把数量改为“总数量”单独在bom上加一列,这样看起来更加直观。
 楼主| 发表于 2016-11-18 08:07:58 | 显示全部楼层 来自: 中国湖北武汉
erikgqp8645 发表于 2016-11-15 08:04
! Z9 }, m  A+ k1 x这位兄台,我并不是这么认为的。
. y# S1 u5 x/ g' Y# p2 S3 q+ ~对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便 ...

9 |2 F  A! p; w! }4 H) S, s7 I; w有时可能相同的装配体的2组 或3组 或1组的
% b% c: o4 m+ P$ q7 ^8 F7 j+ K. Z那到对应的装配体下面的零件是就是X2  X3  X1是不相同的
5 T  i: p1 S# j' |/ F
发表于 2016-11-18 13:08:51 | 显示全部楼层 来自: 中国山东临沂
你的这个我大体理解什么意思了 ,就是把不同的或者相同的部件中共同使用件数做个统计是吧?如果是这样的话,我一般做两个明细表,一个是零件BOM,跟总成下的部件BOM
发表于 2016-11-18 16:19:17 | 显示全部楼层 来自: 中国天津
yh2008 发表于 2016-11-18 08:07
; }: J( \4 Y9 V! }. h有时可能相同的装配体的2组 或3组 或1组的
  F3 Z! s/ \3 d8 T那到对应的装配体下面的零件是就是X2  X3  X1是不相同的
4 d5 W! L8 C$ n' Q% o/ z
上面那个宏就是实现这个功能的。  k# K( r! K, v. h' ^
假如你一个装配体里面有两个组件,分别为a和b。; Y5 H& N: Q* S& n
其中有个零件c在这两个组件里面都有。
2 C! x# l7 j5 O1 H- O运行上面那段宏就可以添加一个总数量的属性,就是在这个装配体里面的总数量。
发表于 2016-11-18 19:54:29 | 显示全部楼层 来自: 中国广东深圳
晕,没有ERP系统,也没有生产计划部?1 i! d( _7 H. ^' h/ q/ n2 s
图纸上不带这样表示的吧?
1 w0 G6 l" u- E8 Z6 t* @3 g最多再另出一个总计算的表格吧?
发表于 2016-11-18 21:03:02 | 显示全部楼层 来自: 中国安徽蚌埠
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头的图标,数字也变了
) ~" B8 ?$ M" ]2 n2 D+ j* q) d
1114.png
 楼主| 发表于 2016-11-19 08:22:34 | 显示全部楼层 来自: 中国湖北武汉
jinqin11 发表于 2016-11-18 21:037 }* b! T! N7 E  R2 k6 S& X% i& t0 N! S
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头 ...

$ I- C4 }6 w, [9 E这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的
发表于 2016-11-19 11:43:51 | 显示全部楼层 来自: 中国香港
yh2008 发表于 2016-11-19 08:223 N$ i/ U5 i1 D/ @/ f
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的

  T7 o6 y7 K' x$ O7 o, p1 X楼主大大明明白白在问“加总”,怎么又说“分开”。
% |: j) B/ ]2 V8 }0 z! @2 P+ t1 q2 I8 J( J  m
原来在问“小计”(subtotal)。
发表于 2016-11-19 20:45:33 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif4 W  \- v3 a6 n! {5 W
方程式只能一个个的加,如果明细表中的零件多是不好实现的
8 _0 M4 k8 y0 q/ |& S9 }
可以实现的
" I% H2 W8 b- H
发表于 2016-11-19 20:46:17 | 显示全部楼层 来自: 中国北京
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif
& f$ t! z' D! \5 K- W# y& }% g方程式只能一个个的加,如果明细表中的零件多是不好实现的
* A1 X; f) F$ Z: C4 @0 d9 s, n
要是不明白就加我Q726915950说是三维网的
+ u$ {5 @4 K: v, Q
发表于 2016-11-20 11:30:43 | 显示全部楼层 来自: 中国台湾
贊同#9、#10的「部份」內容。
+ |4 O1 V7 t) o
5 O' P  R# Z# H* R就我個人而言,這樣的表示方法並沒有問題呀~2 C' V% U! P& u7 n
我想這是對於此種「階梯式」的零件圖產生的誤解而衍生出的問題,而且還不少人有這樣的疑惑~
! @/ Q% v5 G, g8 x

" c( v6 G& q! G# L, P3 e5 U階梯式表達的數量欄位的值,指的是在「這一層」次組件的單用量,這樣去想就沒有錯了。
5 A0 y# }5 q- D! {' g/ D9 ~! ?$ S試想,如果有像我一樣解讀的人來看樓主要求的BOM,那麼數量要如何計算才是對的?" b/ C1 d# a3 a4 @9 E$ B. @! @* Y

- i. A$ [7 F5 c9 S6 c2 C. O如果要顯示一零件在總裝配裡的使用量,那麼就不應該使用階梯式了。
8 W' p6 b! W+ }5 d
4 P; N! A: ?0 u+ ]3 B% q而這也呼應了大鹿先生說的「小計」。, \* [9 n4 `. A9 A! R

! f: H+ ]$ y$ u0 \
/ i- b0 Z+ W/ Z' T. ^3 q
 楼主| 发表于 2016-11-21 08:11:42 | 显示全部楼层 来自: 中国湖北武汉
大鹿 发表于 2016-11-19 11:43
6 T# G1 a7 m( c6 ^2 z; y& x楼主大大明明白白在问“加总”,怎么又说“分开”。
/ e* n9 K; A3 T, q& M& g+ q+ i! \( O7 Y8 C. e" J, z) ^5 V9 f
原来在问“小计”(subtotal)。

! w. H* H' z$ L1 ?! f- j是的可以说是小计
 楼主| 发表于 2016-11-21 08:15:54 | 显示全部楼层 来自: 中国湖北武汉
gt.adan 发表于 2016-11-20 11:30
3 G, O- G% P# q: h- g0 p7 J" q贊同#9、#10的「部份」內容。& V5 V+ U3 q$ b

" t4 f! h; H$ C: m( ~就我個人而言,這樣的表示方法並沒有問題呀~
: Z7 M# }, [( ^8 d. q1 F# H% Q0 @; D# z
SW的表现方式是对的,只是在计算时会出现一个小计数量,3 o% H9 g, d+ Y3 c3 k
现在就是想怎么直接出现小计的结果,因为零件要在EXCEL中计算成本( M  T2 j7 H5 |9 E: ]
目前的做法是手动修改数量,缺点就是有时可能漏( G1 U1 V+ |% I& ^( r! M8 i4 [7 i3 Y
不知大家有没有什么好的方法
发表于 2022-6-9 10:21:06 | 显示全部楼层 来自: 中国上海
erikgqp8645 发表于 2016-11-14 16:54
& K4 O5 M. u8 @0 n+ s" Q# U& D试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html8 i' W, f6 E- O, x
附件是上面那个代码的宏程序。
7 D; @/ x: o( t% v* P9 f: S ...

# }8 o4 {0 D+ p" f4 d9 H我试了这个宏 为什么不行啊?
发表于 2022-8-3 09:04:53 | 显示全部楼层 来自: 中国湖北
其实是有同感的。我的办法是做两张BOM表。一个是阶梯的,一个是总数的。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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