Спецификация сборочных едениц

Автор Тема: Спецификация сборочных едениц  (Прочитано 3564 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mazycoАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Здравствуйте коллеги!

не могу решить одну задачку может кто подскажет.
вывожу спецификацию в книгу Excel,вроде бы все ок , структурированная таблица, но анализ количества сборочных единиц невозможен. Что я имею в виду. Например одна небольшая сборочная единица входит в несколько более старших сборок в количестве 1шт. но количество сборочных единиц высшего уровня, а иерархия может доходить до 5-6 уровней, их количество может быть разное и явного количества, как например это сделано в деталях, невозможно и как следствие анализ с помощью  сводной таблице в excel невозможен, не посчитать общее количество сборок на все изделие. в итоге получается полная ерунда и неверный расчет. надеюсь получилось у меня объяснить.
как можно вывести отдельную спецификацию содержащую обозначение сборочной единый и ее количество на все изделие?????
HELP  короче. Буду признателен за любую идею.

PS  да можно посчитать ручками, но мы же с вами программисты а не ......



Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Спецификация сборочных едениц
« Ответ #1 : 31-08-2020, 10:50:02 »
А тут ответ простой, в самом ВОМ подсборки вложенные глубже одного уровня вниз не подсчитываются. Это можно только отдельно посчитать рекурсивно
Вот пример из хэлпа:

Код - Visual Basic [Выбрать]
  1. Public Sub AssemblyCount()
  2.     ' Set reference to active document.
  3.    ' This assumes the active document is an assembly
  4.    Dim oDoc As Inventor.AssemblyDocument
  5.     Set oDoc = ThisApplication.ActiveDocument
  6.    
  7.     ' Get assembly component definition
  8.    Dim oCompDef As Inventor.ComponentDefinition
  9.     Set oCompDef = oDoc.ComponentDefinition
  10.  
  11.     Dim sMsg As String
  12.     Dim iLeafNodes As Long
  13.     Dim iSubAssemblies As Long
  14.    
  15.     ' Get all occurrences from component definition for Assembly document
  16.    Dim oCompOcc As ComponentOccurrence
  17.     For Each oCompOcc In oCompDef.Occurrences
  18.         ' Check if it's child occurrence (leaf node)
  19.        If oCompOcc.SubOccurrences.Count = 0 Then
  20.             Debug.Print oCompOcc.Name
  21.             iLeafNodes = iLeafNodes + 1
  22.         Else
  23.             Debug.Print oCompOcc.Name
  24.             iSubAssemblies = iSubAssemblies + 1
  25.             Call processAllSubOcc(oCompOcc, _
  26.                                 sMsg, _
  27.                                 iLeafNodes, _
  28.                                 iSubAssemblies) ' subassembly
  29.        End If
  30.     Next
  31.    
  32.     Debug.Print "No of leaf nodes    : " + CStr(iLeafNodes)
  33.     Debug.Print "No of sub assemblies: " + CStr(iSubAssemblies)
  34. End Sub
  35.  
  36. ' This function is called for processing sub assembly.  It is called recursively
  37. ' to iterate through the entire assembly tree.
  38. Private Sub processAllSubOcc(ByVal oCompOcc As ComponentOccurrence, _
  39.                              ByRef sMsg As String, _
  40.                              ByRef iLeafNodes As Long, _
  41.                              ByRef iSubAssemblies As Long)
  42.    
  43.     Dim oSubCompOcc As ComponentOccurrence
  44.     For Each oSubCompOcc In oCompOcc.SubOccurrences
  45.         ' Check if it's child occurrence (leaf node)
  46.        If oSubCompOcc.SubOccurrences.Count = 0 Then
  47.             Debug.Print oSubCompOcc.Name
  48.             iLeafNodes = iLeafNodes + 1
  49.         Else
  50.             sMsg = sMsg + oSubCompOcc.Name + vbCr
  51.             iSubAssemblies = iSubAssemblies + 1
  52.  
  53.             Call processAllSubOcc(oSubCompOcc, _
  54.                                   sMsg, _
  55.                                   iLeafNodes, _
  56.                                   iSubAssemblies)
  57.         End If
  58.     Next
  59. End Sub

Оффлайн mazycoАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Re: Спецификация сборочных едениц
« Ответ #2 : 31-08-2020, 13:14:36 »
к сожалению это не то. Так и я могу посчитать. тут немного задача сложнее и входимость сборок глубже.
Все равно спасибо за участие )

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Спецификация сборочных едениц
« Ответ #3 : 31-08-2020, 13:49:40 »
Ну я готового кода вам не дал конечно же, просто сказал вам что ваша проблема решается через рекурсивный обход верхней сборки.
Делаете рекурсию и ищете сколько раз и что куда входит и выводите данные куда нужно. А предыдущий макрос как раз на рекурсию.

Оффлайн mazycoАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Re: Спецификация сборочных едениц
« Ответ #4 : 01-09-2020, 09:44:56 »
да , в любом случае спасибо, я ее каплю откорректировал, сделал вывод, но это не совсем так как я хотел, доработал данные в ексель и получил что мне надо, хоть не совсем все автоматизированно но пока становлюсь на этом
спасибо