QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 版主微信号:caivin811031;还未入三维微信群的小伙伴,速度加
2022-07-04
全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
查看: 5265|回复: 24
收起左侧

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

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

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

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

x
请教一下大家SW明细表中的数量怎么加总啊如下图第一层的总装配有2个,对应下面的零件应都X2
4 e6 F( u$ U- L: ^9 t在SW明细表中怎么能自动识别的?
; ]3 h+ ]2 ]7 h0 p. X& t0 h3 H& L$ R
, V0 q2 |) {/ Y. w, Z
$ g+ W% p" G3 s5 w QQ图片20161112150911.png 8 }" B& I7 g/ D5 v  o" X* w
5 g$ X$ ~% N2 g( c" Y9 g9 [; n+ i

7 P( V' l4 \' p4 Z3 \
发表于 2016-11-12 15:33:49 | 显示全部楼层
什么样的设备装配图的明细表需要具备数量加总
发表于 2016-11-12 23:29:30 | 显示全部楼层
加方程式啊
( b7 }% |- R, ~8 P9 D# h
发表于 2016-11-13 10:48:13 | 显示全部楼层
暂时理解不透你说的意思
 楼主| 发表于 2016-11-14 08:49:59 | 显示全部楼层
阿帕奇 发表于 2016-11-13 10:48; _) P4 b- |9 |! d# f
暂时理解不透你说的意思
7 N" z8 F1 B/ h! P5 E
也就是总装配中有二个一样的装配体,但在明细表中只显示装配有2个,而下面的零件只计了1个装配体的。实际中要把下面的每个零件都是乘以2如下图 2 T% N8 H* X3 r$ Z" Q
) y$ B! |; d" A$ @
+ a4 y* Y- B! e) z3 H( k/ J$ I
QQ截图20161114084729.png
 楼主| 发表于 2016-11-14 08:51:51 | 显示全部楼层
hhaa545 发表于 2016-11-12 23:29/ y' @4 m7 ^) a9 h. ]0 h# X8 P
加方程式啊

0 Z& n  j- W0 p0 @) R: m% E. a方程式只能一个个的加,如果明细表中的零件多是不好实现的
9 \. n4 D6 q# J6 M; Z
发表于 2016-11-14 16:53:04 | 显示全部楼层
  1. 1 y9 K) ]( q  q& P; l
  2. Dim TopDocPathOnly As String" j. {+ k/ X+ h5 U
  3. Dim PartsCollect() As String '遍历清单(阵列)
    ; k1 c/ Q& L/ M) Z4 Z
  4. Dim InCollectCount As Double '遍历清单长度
    % ]3 r* {8 J+ A
  5. Dim CustomInfoQTY As String
    ( s+ F: ]1 x( O8 y

  6. : {# J) E9 [" j9 x6 N( X3 E
  7. Sub main()
      D* J" n' n9 \$ S3 S/ W/ y: [8 M# y
  8. Set swapp = Application.SldWorks 'SW对象
    9 u% e* q% z+ F2 q; e, o9 J
  9. Set TopDoc = swapp.ActiveDoc '总装对象
    ' N) w+ u1 f' Q, c+ _! r
  10. If TopDoc.GetType <> 2 Then Exit Sub '不是装配=退出. |1 H) M+ o& R* l2 G
  11. TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割1 ]0 t6 b  J+ ]) y: ~$ k) A) D! J
  12. TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '总装文件名称
    6 L9 l( e7 g. j- t
  13. TopDocName = Left(TopDocName, Len(TopDocName) - 7) '总装文件名称(排除.SLDASM)
    2 w% Y! K/ x; [+ V
  14. TopDocPathOnly = Mid(TopDoc.GetPathName, 1, InStrRev(TopDoc.GetPathName, "", -1)) '总装的完整目录
    $ S# B! K! h! }# r7 m$ y
  15. TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱/ I' z$ ]* Y, _$ C; j" u$ ]& \4 {# M( M
  16. CustomInfoQTY = "数量" '可按个人喜好修改预设值
    6 _+ X4 F- ~4 g6 x. ?( a6 [
  17. InCollectCount = 1 '遍历清单长度基数" g' z% e: @; @) m8 n
  18. ReDim PartsCollect(InCollectCount) '定义阵列项数; p* W! A3 v# `' s' X
  19. SubAsm TopDoc, TopConfString '遍历
    2 S4 D9 `( C+ Q7 R5 W( \) f0 S
  20. Beep2 [9 Z5 {/ i3 L9 F, X+ n$ j
  21. MsgBox "完成"5 k# t; _, O7 _4 e. m, c! v6 W7 x
  22. End Sub
    2 a7 \5 b4 Y+ P( M4 ~: m! F: c' {

  23. / H, L) B" i# o- i
  24. Function SubAsm(AsmDoc, ConfString)
    5 [% ?. K% e; [
  25. Set Configuration = AsmDoc.GetConfigurationByName(ConfString)
    - S8 {9 @9 G1 D# Y9 s/ C& U0 B
  26. Set RootComponent = Configuration.GetRootComponent0 K1 u% |+ W$ }5 C1 N3 `
  27. Components = RootComponent.GetChildren
    ! X9 U+ e: g' L% r  Y$ B0 b
  28. For Each Child In Components6 E% {* E1 p& e' }6 V
  29.     Set ChildModel = Child.GetModelDoc
    : z. e: y, n3 C  T
  30.     If Not (ChildModel Is Nothing) Then '排除抑制及轻化  `) k8 D- H+ y* ^/ i. v/ e: _
  31.         ChildConfString = Child.ReferencedConfiguration '零件配置名称
    . Q3 G4 u! ^5 R  U) Q
  32.         ChildType = ChildModel.GetType
    0 Q6 W3 l4 g9 Y- @
  33.         ChildPathSplit = Split(Child.GetPathName, "") '分割+ H) E1 ^2 p7 v
  34.         ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名称: o' ]; j( ?/ r/ E* I6 Q! f: T) n
  35.         
    ( C3 r" }: ^' S9 V- k$ s
  36.         ChildPathOnly = Mid(Child.GetPathName, 1, InStrRev(Child.GetPathName, "", -1)) '零件的完整目录
    9 h1 _( h: Y9 `; J) s, s2 H7 V& Z. f
  37.         If ChildPathOnly = Replace(ChildPathOnly, TopDocPathOnly, "") Then SamePath = False Else SamePath = True '零件是否在总装目录或往下目录
    ' r+ c) c' O" }* O$ q" O
  38.         7 ]1 a3 M: A! }6 g! d* k
  39.         If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳過:不在总装目錄或其往下目錄 或 不包括在材料明細表中 或 是个封套
    # ~8 v* k) h. v- h- V# o8 r
  40. '        If (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳过:不包括在材料明細表中 及 封套/ S. f/ _- r9 L2 a: y! V' E' L
  41.             UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '备用量属性名称: l- x+ R' m7 q( h3 c) G
  42.             UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '备用量3 X' o/ G6 M3 d
  43.             If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '备用量除错
    $ Q. D5 R$ G5 I5 L
  44.             inCollect = False '重置判断变量1 v. \4 X1 j/ w
  45.             For Each PartinCollect In PartsCollect '判断是否已在遍历清单內
    6 z  w* K; M7 c, f  E+ U  v
  46.                 If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True
    % S) Z# J6 ^: e3 w1 o( Q$ D
  47.             Next: ]; o5 I2 w% f/ P
  48.             If inCollect Then '已在遍历清单內% Y6 a' j. m3 A- f: Z0 C- D
  49.                 ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE7 r! u- H: D% e: ^. Z
  50.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY
    5 k; ^' m, E2 U: r( i& c1 ?4 `
  51.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty
    ) G( Q0 d2 ^: u
  52.             Else '不在遍历清单內(首次处理)
    ) y: N+ c" z8 {9 H% n2 P, o5 t
  53.                 ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY2 j4 i5 `" g( x6 c! w
  54.                 ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE/ U  a) G6 z1 g& i
  55.                 InCollectCount = InCollectCount + 1 '遍历清单长度基数+14 S/ n4 D" B* l" J" G
  56.                 ReDim Preserve PartsCollect(InCollectCount) '重新定义阵列项数(保留內含数据)( t  K5 p& Q$ Y; ]+ O
  57.                 PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍历清单中
    & H2 z6 c+ Z7 Y
  58.                 ChildModel.SetUserPreferenceIntegerValue swUnitSystem, swUnitSystem_Custom '单位系统=Custom
    ( a' U8 f6 ^( C- t6 r* ?0 j
  59.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '重量单位设定为kg(可按喜好加入設定)
    % l$ X, A5 r& T) w2 o2 W( m5 k$ L
  60.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropLength, swMM '设定长度单位为毫米. L; ], G+ j- Z; A( F9 `7 ^
  61.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropVolume, swUnitsMassPropVolume_Centimeters3 '设定体积单位为立方厘米5 N  g1 M1 }' C$ g
  62.                 ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropDecimalPlaces, 2 '质量及体积小数点后2位% E; f  \+ T! U, Q4 c
  63.                 ChildModel.AddCustomInfo3 "", "Weight", 30, Chr(34) & "SW-Mass@*" & ChildName & Chr(34) '在自订属性加入Weight属性; q# B% p1 T/ c" N
  64.                 ChildModel.AddCustomInfo3 "", "Material", 30, Chr(34) & "SW-Material@*" & ChildName & Chr(34) '在自订属性加入Material属性2 E/ L+ _8 {! ~, {3 [
  65.                 ChildModel.AddCustomInfo3 ChildConfString, "Weight", 30, Chr(34) & "SW-Mass@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Weight属性7 k) D7 y5 i& k9 c; k; k" j% Q6 V
  66.                 ChildModel.AddCustomInfo3 ChildConfString, "Material", 30, Chr(34) & "SW-Material@@" & ChildConfString & "@*" & ChildName & Chr(34) '在配置特定加入Material属性4 Q' r1 G6 }5 u6 V' e; }
  67.                 ChildModel.SketchManager.Insert3DSketch True '插入三低草图,从而激活零件的“需存盘标签”
    & S& X' ^9 ]; u  X, F7 J) K0 ]  g* _
  68.                 ChildModel.SketchManager.Insert3DSketch True '离开三低草图
    7 R% M* m* J, t0 Z
  69.             End If+ |6 r' _5 j) v9 @) P
  70.             If ChildType = 2 Then
    9 U2 @9 D6 H, d6 K: w, [  G, J* F
  71.                 SubAsm ChildModel, ChildConfString '如果是装配则向下遍历
    ; ^5 E% Q/ t# R2 l3 \
  72.             End If
    8 y4 C8 g2 o& m$ V' D/ U& C: j; w+ \
  73.             7 L$ P6 N0 o. _. C7 ]9 z( y
  74.         End If8 S" Q2 B( \, S0 f+ q/ ?+ O
  75.     End If
    / u/ f6 d/ }1 d7 u
  76. Next% `, g' n% k" c* p
  77. End Function
    ' Y; n; {8 C) P$ {# r& Y
  78.    
    2 s! G! c5 U/ {# p
复制代码
发表于 2016-11-14 16:54:03 | 显示全部楼层
本帖最后由 erikgqp8645 于 2016-11-14 16:56 编辑
/ B$ P! }8 F2 D0 K6 ?$ u' {3 _/ Z+ f* ?
试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html
% [' i/ U2 M5 j' e附件是上面那个代码的宏程序。/ p# z" I: X" ?- [: W+ N9 P
使用方法,在装配体中运行宏,就会添加总数量。
5 F6 p) s3 m) b  p/ k

添加总数量.rar

12.68 KB, 下载次数: 46

发表于 2016-11-14 20:11:04 | 显示全部楼层
明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是单个子装配体中的数量。这才符合逻辑,而楼主的需要明显是瞎胡闹
发表于 2016-11-15 08:04:37 | 显示全部楼层
yk2906 发表于 2016-11-14 20:11
* |9 b6 K% ^* G" Y* r明细表要么只体现装配体,要么全部是零件,而装配体与零件混杂的明细表中,子装配体中的零件数量仍体现的是 ...

/ J1 @- R' R/ V6 f) o) E这位兄台,我并不是这么认为的。8 j0 S/ L+ L! q
对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便于更好的加工。5 n& b; S* ~3 l8 l! J/ C. H( C
做图纸的是要给加工部门看的,而大家方便了自然也可以不那么符合逻辑。
" O$ O/ A! I  W# A0 W上面的宏程序可以在把数量改为“总数量”单独在bom上加一列,这样看起来更加直观。
 楼主| 发表于 2016-11-18 08:07:58 | 显示全部楼层
erikgqp8645 发表于 2016-11-15 08:040 m: b' m  ^1 ?* X
这位兄台,我并不是这么认为的。- I4 G. i% Q% e1 _( Z9 t
对于没有erp的公司而言,你要提交的bom或者说图纸上是要包含数量的,便 ...

* r, R6 f" a! D" m有时可能相同的装配体的2组 或3组 或1组的/ K  B5 \2 a: x: b% z# L" V, K& d
那到对应的装配体下面的零件是就是X2  X3  X1是不相同的
* B( i* h" l8 t
发表于 2016-11-18 13:08:51 | 显示全部楼层
你的这个我大体理解什么意思了 ,就是把不同的或者相同的部件中共同使用件数做个统计是吧?如果是这样的话,我一般做两个明细表,一个是零件BOM,跟总成下的部件BOM
发表于 2016-11-18 16:19:17 | 显示全部楼层
yh2008 发表于 2016-11-18 08:07
' q% D0 g( P8 U7 k有时可能相同的装配体的2组 或3组 或1组的
8 R7 @  ~3 s3 @那到对应的装配体下面的零件是就是X2  X3  X1是不相同的

" U* O+ L. T  x! ^* r  L; `上面那个宏就是实现这个功能的。( i! n% e, {5 v0 [; X
假如你一个装配体里面有两个组件,分别为a和b。5 @! R9 x9 Y* I1 n0 b0 k2 c1 @
其中有个零件c在这两个组件里面都有。
5 g, k) B% F  v6 v$ S" b+ S7 m运行上面那段宏就可以添加一个总数量的属性,就是在这个装配体里面的总数量。
发表于 2016-11-18 19:54:29 | 显示全部楼层
晕,没有ERP系统,也没有生产计划部?
; u8 [! u4 ^' m( U: y图纸上不带这样表示的吧?
1 H) A) H; E" n  d最多再另出一个总计算的表格吧?
发表于 2016-11-18 21:03:02 | 显示全部楼层
鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头的图标,数字也变了! |2 p5 \, F- w
1114.png
 楼主| 发表于 2016-11-19 08:22:34 | 显示全部楼层
jinqin11 发表于 2016-11-18 21:03
6 q. J, t5 B6 M0 Q3 Z鼠标放在行内点击右键 出现图示快捷菜单  选择 组合相同的零部件 如图完成后零件的图标后面出现一个双箭头 ...

3 r$ C1 M+ s7 ~  f* J0 ^这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的
发表于 2016-11-19 11:43:51 | 显示全部楼层
yh2008 发表于 2016-11-19 08:22, ~  x. b/ Z; K- N6 W" ~7 H# Q' H, @
这样会把所有相同的零件组合在一起,实际上有些零件还是要分开的
( S0 m' I% t/ j3 u1 K$ m
楼主大大明明白白在问“加总”,怎么又说“分开”。
7 s; R4 v3 G. E0 D6 _& C, ?+ [8 M# F2 Z* v) {& ?9 ?& j
原来在问“小计”(subtotal)。
发表于 2016-11-19 20:45:33 | 显示全部楼层
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif
+ l' m3 f  d0 j, o2 _0 h! z方程式只能一个个的加,如果明细表中的零件多是不好实现的
/ I2 m: U' W- L- \# w! J
可以实现的% r( @  B7 B8 I! M: n4 P
发表于 2016-11-19 20:46:17 | 显示全部楼层
yh2008 发表于 2016-11-14 08:51 static/image/common/back.gif6 j5 C& L0 }: J+ x. F- T
方程式只能一个个的加,如果明细表中的零件多是不好实现的
+ i/ {1 e; v, ?" c! L$ r) @
要是不明白就加我Q726915950说是三维网的
! I6 u5 Y2 ~" w; }
发表于 2016-11-20 11:30:43 | 显示全部楼层
贊同#9、#10的「部份」內容。
: e( i: K7 d! y& W. Y& K+ |4 u/ D1 X  T
就我個人而言,這樣的表示方法並沒有問題呀~
- E" ^- P3 r" l8 W5 p" {+ Z我想這是對於此種「階梯式」的零件圖產生的誤解而衍生出的問題,而且還不少人有這樣的疑惑~, y  ~# M+ `  M2 [8 o  t
$ B  u3 n8 M. V& X$ t5 j: z, j
階梯式表達的數量欄位的值,指的是在「這一層」次組件的單用量,這樣去想就沒有錯了。
. V5 ]8 w: b% q# Y試想,如果有像我一樣解讀的人來看樓主要求的BOM,那麼數量要如何計算才是對的?
; P4 e2 d% g) Y7 q1 e* V. g1 b
) S$ [  c* ?2 ~) g如果要顯示一零件在總裝配裡的使用量,那麼就不應該使用階梯式了。
" C- j4 i& ~: t3 T( [  n+ H- Y4 X; H! h, {+ d, Q. [
而這也呼應了大鹿先生說的「小計」。
9 W0 J/ w, C+ H3 ^, j% }
' J1 }0 U, p  z! V5 N$ s) ~; C! G* P' k* y, y
 楼主| 发表于 2016-11-21 08:11:42 | 显示全部楼层
大鹿 发表于 2016-11-19 11:43
- Z  m. R; z% Y* e楼主大大明明白白在问“加总”,怎么又说“分开”。1 @3 }2 t- s  R
8 q5 h/ Z" [4 a8 v' x
原来在问“小计”(subtotal)。

  R* @4 N, E8 v! h是的可以说是小计
 楼主| 发表于 2016-11-21 08:15:54 | 显示全部楼层
gt.adan 发表于 2016-11-20 11:306 |1 f  o3 @8 N3 q
贊同#9、#10的「部份」內容。8 V8 w2 ~- H& K( }2 ?2 o: o

/ D6 \. \7 V7 ?' q. L1 x! O) ]就我個人而言,這樣的表示方法並沒有問題呀~
2 j) `$ K0 e- u" }( a6 C- X; W8 P
SW的表现方式是对的,只是在计算时会出现一个小计数量,! r* U/ ~4 ~3 j' g* U
现在就是想怎么直接出现小计的结果,因为零件要在EXCEL中计算成本
  _9 E! n1 K6 R2 N目前的做法是手动修改数量,缺点就是有时可能漏
) c3 s* D# ?9 w! S7 o5 T不知大家有没有什么好的方法
发表于 2022-6-9 10:21:06 | 显示全部楼层
erikgqp8645 发表于 2016-11-14 16:54* p4 S+ `6 D" e* n: M  @6 t
试试上面那段代码原文来自http://bbs.icax.org/thread-913002-13-1.html
8 a, n5 T( Q( B6 m附件是上面那个代码的宏程序。
# m! s* j8 O- J( d9 ? ...

3 [4 n8 m2 \* `6 D我试了这个宏 为什么不行啊?
发表于 2022-8-3 09:04:53 | 显示全部楼层
其实是有同感的。我的办法是做两张BOM表。一个是阶梯的,一个是总数的。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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