Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor
  BOM API Export über iLogic ,,verursacht Fehler

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
Autor Thema:  BOM API Export über iLogic ,,verursacht Fehler (497 / mal gelesen)
LoBeer123
Mitglied


Sehen Sie sich das Profil von LoBeer123 an!   Senden Sie eine Private Message an LoBeer123  Schreiben Sie einen Gästebucheintrag für LoBeer123

Beiträge: 3
Registriert: 04.01.2024

erstellt am: 04. Jan. 2024 16:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen, ich versuche mich gerade daran die BOM in eine Vorlage-Excel einzufügen. Leider klappt es noch nicht so recht. Vlt. kann mir ja einer Helfen.

Folgende Regel habe ich aufgestellt:
Sub Main()
'Declarations
Dim oAssyDoc As AssemblyDocument
oAssyDoc = ThisApplication.ActiveDocument

Dim oAssyCompDef As AssemblyComponentDefinition
oAssyCompDef = oAssyDoc.ComponentDefinition

'Get path of current document
Dim sPath As String = ThisDoc.Path

'Set to Master LevelOfDetail. Needs to be Master LoD for BOM manipulation
Dim oLOD As LevelOfDetailRepresentation
Try
oLOD = oAssyCompDef.RepresentationsManager.LevelOfDetailRepresentaions.Item("Hauptansicht")
Catch ex As System.ArgumentException
Finally
oLOD.Activate(True)
End Try

'Get BOM from Assembly
Dim oBOM As BOM
oBOM = oAssyCompDef.BOM
Logger.Trace("oBOM is set")

Dim oBOMView As BOMView

oBOMView = oBOM.BOMViews.Item("Strukturiert")
'oBOMView = oBOM.BOMView.Item("nurBauteile")

Logger.Trace("oBOMView is set")

oBOM.StructuredViewEnabled = True
'oBOM.nurBauteileViewEnabled = True

oBOM.StructuredViewFirstLevelOnly = True


'BOM Export

'Copy Job Information Spreadsheet from workspace
Dim aJobBOMTempName As String = String.Concat(sPath, "\_BOM_Template.xls")
Dim aJobBOMName As String = String.Concat(sPath, "\", "BOM Export.xlsx")
Logger.Trace("sJobBOMName: " & sJobBOMName)

Try
IO.File.Copy(sJobBOMTempName, sJobBOMName, True)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

Dim sMySheet As String = "BOM"
Static iCurrRow As Integer = 3

GoExcel.DisplayAlerts = False
GoExcel.Open(sJobBOMName, sMySheet)

'Write BOM values to Excel
Call QueryBOMRowProperties(oBOMView.BOMRows, sJobBOMName, iCurrRow)
oAssyDoc.Save

'Wriet assembly information
GoExcel.CellValue("D1") = String.Concat("JOB: ", iProperties.Value("Custom", "Job Number"))

Dim sVar As String
sVar = GoExcel.CellValue("D1")

'Save Excel
GoExcel.Save
GoExcel.Close

'Set to iLogic LevelOfDetail
Try
oLOD = oAssyCompDef.RepresentationsManager.LevelOfDetailRepresentations.Item("iLogic")
Catch es As System.ArgumentException
oLOD = oAssyCompDef.RepresentationsManager.LevelOfDetailRepresentations.Add("iLogic")
Finally
oLOD.Activate(True)
End Try

'Massage Box
Dim sMassege As String = "BOM Export Complete."
Dim sCaption As String = "BOM Export Complete"
Dim oButtons As MassageBoxButton = MessageBoxButtons.OK
Dim oIcons As MessageBoxIcon = MessageBoxIcon.Information

Dim oResult As DialogResult

'Display the MessageBox
oResult = MessageBox.Show(sMessage, sCaption, oButtons, oIcons)

End Sub

Public Sub QueryBOMRowProperties(oBOMRows As BOMRowsEnumerator, JobSpreadsheetName As String, iCurrRow As Integer)
'Iterate through the contents of the BOM Rows.
Static CurrentRow As Integer = iCurrRow
Dim i As Long
Dim sWriteCell As String

For i = 1 To oBOMRows.Count

'Get the current row
Dim oRow As BOMRow
oRow = oBOMRows.Item(i)

'Set a reference to the primary ComponentDefinition of the row
Dim oCompDef As ComponentDefinition
oCompDef = oRow.ComponentDefinitions.Item(1)

Dim oPropSets As PropertySets
oPropSets = oCompDef.Document.PropertySets

oDesignTrackingPropertySet = oPropSets.Item("Design Tracking Properties")
oInventorSummaryPropertySet = oPropSets.Item("Inventor Summary Information")
oCustomPropertySets = oPropSets.Item("Inventor User Defines Properties")

'Get the File properties that are reguired
oItemNumberProperty = oRow.ItemNumber
oPartNumProperty = oDesignTrackingPropertySet.Item("Part Number")
oDescripProperty = oDesignTrackingPropertySet.Item("Description")
oTitleProperty = oInventorSummaryPropertySet.Item("Title")

Trace.WriteLine("iLogic: oltemNumberProperty: " & oltemNumberProperty & " | " & oPartNumProperty.Value & " | " & oDescripProperty.Value)

'Check to see if row is from Content Center
Dim Ex As Exception
Try
If oCompDef.IsContentMember = False Then
Trace.WriteLine("iLogic: bCCComp: " & bCCComp)
bCCComp = False
Try
oPMCodeProperty = oCustomPropertySet.Item("P/M Code")
Catch Ex 'As Exception
oCustomPropertySet.Add("", "P/M Code")
oPMCodeProperty = oCustomPropertySet.Item("P/M Code")
oPMCodeProperty.Value = "U"
End Try
Else
bCCComp = True
End If
Catch Ex 'As Exception
bCCComp = False
Try
oPMCodeProperty = oCostomPropertySet.Item("P/M Code")
Catch Ex 'As Exception
oCustomPropertySet.Add("", "P/M Code")
oPMCodeProperty = oCustomPropertySet.Item("P/M Code")
oPMCodeProperty.Value = "U"
End Try
End Try

sWriteCell = "A" & CurrentRow
GoExcel.CellValue(sWriteCell) = oItemNumberProperty

sWriteCell = "B" & CurrentRow
GoExcel.CellValue(sWriteCell) = oRow.ItemQuantity

sWriteCell = "C" & CurrentRow
GoExcel.CellValue(sWriteCell) = oPartNumProperty.Value

sWriteCell = "D" & CurrentRow
GoExcel.CellValue(sWriteCell) = oTitleProperty.Value

sWriteCell = "E" & CurrentRow
GoExcel.CellValue(sWriteCell) = oDescripProperty.Value

sWriteCell = "F" & CurrentRow
If bCCComp = False Then
GoExcel.CellValue(sWriteCell) = oPMCodeProperty.Value
Else
GoExcel.CellValue(sWriteCell) = "P"
End If

' Increment current row
CurrentRow = CurrenRow + 1

'Recursively iterate child rows if present.
If Not oRow.ChildRows Is Nothing Then
Call QueryBOMRowProperties(oRow.ChildRows, JobSpreadsheetName, CurrentRow)
Else
End If
Next i
End Sub

Dabei kommt es zu folgenden Fehlern:

Regelkompilierungsfehler in API_Advanced_Export_A, in Test_Baugruppe_01.iam

Fehler in Zeile 84 : Der Typ "MassageBoxButton" ist nicht definiert.
Fehler in Zeile 132 : "oCustomPropertySet" ist nicht deklariert. Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden.
Fehler in Zeile 134 : "oCustomPropertySet" ist nicht deklariert. Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden.
Fehler in Zeile 135 : "oCustomPropertySet" ist nicht deklariert. Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden.
Fehler in Zeile 144 : "oCostomPropertySet" ist nicht deklariert. Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden.
Fehler in Zeile 146 : "oCustomPropertySet" ist nicht deklariert. Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden.
Fehler in Zeile 147 : "oCustomPropertySet" ist nicht deklariert. Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden.

Jemand ne Idee?

Grüße in die Runde

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2630
Registriert: 15.11.2006

Windows 10 x64, AIP 2020-2025

erstellt am: 04. Jan. 2024 21:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für LoBeer123 10 Unities + Antwort hilfreich

Moin

Willkommen im Forum 

1. Einen MassageBoxButton gibt es in iLogic nicht, wenn ist es ein MessageBoxButton.
2. Du definierst in Zeile 115 oCustomPropertySets = oPropSets.Item("Inventor User Defines Properties"). Da ist schonmal der Bezeichner falsch. Das muss "Inventor User Defined Properties" heißen.
3. Du verwendest oCustomPropertySet, deklarierst es aber nicht vorher. Vermutlich soll es oCustomPropertySets heißen.

Beim durchscrollen habe ich noch mehr solcher Tippfehler gesehen. Denke mal ernsthaft darüber nach dir ein

Code:
Option Explicit On

in den Ruleheader zu schreiben. Dann fallen nicht deklarierte Variablen auf. Sonst deklariert man in Zeile 82 einen String sMassege, verwendet in Zeile 90 einen String sMessage und wundert sich warum nichts angezeigt wird.

Welche Inventorversion soll das verwenden? LoD sind schon seit 2022 obsolet. Den restlichen Code habe ich nicht weiter durchgesehen und auch nicht getestet.

------------------
MfG
Ralf

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

LoBeer123
Mitglied


Sehen Sie sich das Profil von LoBeer123 an!   Senden Sie eine Private Message an LoBeer123  Schreiben Sie einen Gästebucheintrag für LoBeer123

Beiträge: 3
Registriert: 04.01.2024

erstellt am: 05. Jan. 2024 08:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hey Ralf, Danke für deine Antwort.
Vorab, sorry ich bin bisher reiner Inventor Anwender und muss mich jetzt mit iLogic beschäftigen um Zeit einzusparen. Stücklistenerstellung usw.
Das Problem ist das ich bisher mit Visual Basic noch nicht so viel zu tun hatte.

Mein eigentliches Ziel die BOM in eine von mir erstellte Excel-Vorlage zu übertragen. Am besten sortiert nach Artikel, Material und/oder Normteile/Kaufteile.

Ich habe jetzt einmal den Teil der Message Box entfernt und die Tippfehler korrigiert.

Jetziger Fehler ist:

Fehler in Regel: API_Advanced_Export_A - Test in Dokument: Test_Baugruppe_01.iam

Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Ich vermute es hängt mit dem Link zur Vorlage zusammen. Oder?

Code

Sub Main()
'Declarations
Dim oAssyDoc As AssemblyDocument
oAssyDoc = ThisApplication.ActiveDocument

Dim oAssyCompDef As AssemblyComponentDefinition
oAssyCompDef = oAssyDoc.ComponentDefinition

'Get path of current document
Dim sPath As String = ThisDoc.Path

'Set to Master LevelOfDetail. Needs to be Master LoD for BOM manipulation
Dim oLOD As LevelOfDetailRepresentation
Try
oLOD = oAssyCompDef.RepresentationsManager.LevelOfDetailRepresentaions.Item("Master")
Catch ex As System.ArgumentException
Finally
oLOD.Activate(True)
End Try

'Get BOM from Assembly
Dim oBOM As BOM
oBOM = oAssyCompDef.BOM
Logger.Trace("oBOM is set")

Dim oBOMView As BOMView

oBOMView = oBOM.BOMViews.Item("Strukturiert")
'oBOMView = oBOM.BOMView.Item("nurBauteile")

Logger.Trace("oBOMView is set")

oBOM.StructuredViewEnabled = True
'oBOM.nurBauteileViewEnabled = True

oBOM.StructuredViewFirstLevelOnly = True


'BOM Export

'Copy Job Information Spreadsheet from workspace
Dim aJobBOMTempName As String = String.Concat(sPath, "C:\\Users\\Christian.Lorbeer\\OneDrive - Enexio-Service\\Inventor-Projekte\\Stückliste\\_BOM_Template.xls")
Dim aJobBOMName As String = String.Concat(sPath, "C:\\Users\\Christian.Lorbeer\\OneDrive - Enexio-Service\\Inventor-Projekte\\StücklisteBOM Export.xlsx")
Logger.Trace("sJobBOMName: " & sJobBOMName)

Try
IO.File.Copy(sJobBOMTempName, sJobBOMName, True)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

Dim sMySheet As String = "BOM"
Static iCurrRow As Integer = 3

GoExcel.DisplayAlerts = False
GoExcel.Open(sJobBOMName, sMySheet)

'Write BOM values to Excel
Call QueryBOMRowProperties(oBOMView.BOMRows, sJobBOMName, iCurrRow)
oAssyDoc.Save

'Save Excel
GoExcel.Save
GoExcel.Close

'Set to iLogic LevelOfDetail
Try
oLOD = oAssyCompDef.RepresentationsManager.LevelOfDetailRepresentations.Item("iLogic")
Catch es As System.ArgumentException
oLOD = oAssyCompDef.RepresentationsManager.LevelOfDetailRepresentations.Add("iLogic")
Finally
oLOD.Activate(True)
End Try

End Sub

Public Sub QueryBOMRowProperties(oBOMRows As BOMRowsEnumerator, JobSpreadsheetName As String, iCurrRow As Integer)
'Iterate through the contents of the BOM Rows.
Static CurrentRow As Integer = iCurrRow
Dim i As Long
Dim sWriteCell As String

For i = 1 To oBOMRows.Count

'Get the current row
Dim oRow As BOMRow
oRow = oBOMRows.Item(i)

'Set a reference to the primary ComponentDefinition of the row
Dim oCompDef As ComponentDefinition
oCompDef = oRow.ComponentDefinitions.Item(1)

Dim oPropSets As PropertySets
oPropSets = oCompDef.Document.PropertySets

oDesignTrackingPropertySet = oPropSets.Item("Design Tracking Properties")
oInventorSummaryPropertySet = oPropSets.Item("Inventor Summary Information")
oCustomPropertySets = oPropSets.Item("Inventor User Defines Properties")

'Get the File properties that are reguired
oItemNumberProperty = oRow.ItemNumber
oPartNumProperty = oDesignTrackingPropertySet.Item("Part Number")
oDescripProperty = oDesignTrackingPropertySet.Item("Description")
oTitleProperty = oInventorSummaryPropertySet.Item("Title")

Trace.WriteLine("iLogic: oltemNumberProperty: " & oltemNumberProperty & " | " & oPartNumProperty.Value & " | " & oDescripProperty.Value)



sWriteCell = "A" & CurrentRow
GoExcel.CellValue(sWriteCell) = oItemNumberProperty

sWriteCell = "B" & CurrentRow
GoExcel.CellValue(sWriteCell) = oRow.ItemQuantity

sWriteCell = "C" & CurrentRow
GoExcel.CellValue(sWriteCell) = oPartNumProperty.Value

sWriteCell = "D" & CurrentRow
GoExcel.CellValue(sWriteCell) = oTitleProperty.Value

sWriteCell = "E" & CurrentRow
GoExcel.CellValue(sWriteCell) = oDescripProperty.Value

sWriteCell = "F" & CurrentRow
If bCCComp = False Then
Else
GoExcel.CellValue(sWriteCell) = "P"
End If

' Increment current row
CurrentRow = CurrenRow + 1

'Recursively iterate child rows if present.
If Not oRow.ChildRows Is Nothing Then
Call QueryBOMRowProperties(oRow.ChildRows, JobSpreadsheetName, CurrentRow)
Else
End If
Next i
End Sub

Grüße Christian

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2630
Registriert: 15.11.2006

Windows 10 x64, AIP 2020-2025

erstellt am: 05. Jan. 2024 10:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für LoBeer123 10 Unities + Antwort hilfreich

Moin

Ich vermute die Zeile

Code:
oLOD.Activate(True)

löst die Ausnahme aus, da es die Detailgenauigkeit nicht gibt.

Ich kann nur wiederholen, setze "Option Explicit On" in den Header und du wirst sehen wieviel auch in dieser Codeversion noch im Argen liegt.  

Wie willst du eine strukturierte Stückliste nach diesen Kriterien sortieren? Das kann ich mir höchstens in der "Nur Bauteile" Ansicht vorstellen.
Ich weiß immer noch nicht von welcher Inventorversion (bitte Sysinfo im Userprofil ausfüllen) wir reden. Seit Version 2015 gibt es die Möglichkeit Stücklistenanpassungen zu importieren. Das heißt, du passt die Stückliste im Inventor einmal manuell so an, dass sie deinen Vorstellungen möglichst nahe kommt, exportierst diese Anpassung als XML und importierst in deiner Regel diese Anpassungen wieder. Das spart dir die iProps einzeln zusammensuchen zu müssen und die BOM wird in einem Rutsch exportiert. Die Exportdatei öffnen, alles in die Zwischenablage kopieren und an Position A3 in die Vorlage einfügen. Besonders bei großen Stücklisten sollte das wesentlich performanter laufen als so ein Rekursionsschleifenkonstrukt.

Das Einrücken der Zeilen halte ich für kontraproduktiv, da du im Excel so nicht sortieren kannst. Wenn man eh nur die erste Ebene mit "oBOM.StructuredViewFirstLevelOnly = True" anzeigt, benötigt man die Rekursion und Einrückung auch nicht. Es ist etwas verwirrend. Ich empfehle, falls es für verschiedene BOMViews sein soll, den Code auch entsprechend zu trennen.


------------------
MfG
Ralf

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

LoBeer123
Mitglied


Sehen Sie sich das Profil von LoBeer123 an!   Senden Sie eine Private Message an LoBeer123  Schreiben Sie einen Gästebucheintrag für LoBeer123

Beiträge: 3
Registriert: 04.01.2024

erstellt am: 05. Jan. 2024 10:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Inventor 2021

Sorry, auf Anfang zurück. :-) Den Code den ich gezeigt habe ist nur zur Verständnis für mich da. Ich möchte erst einmal iLogic besser verstehen. Stehe ja noch am Anfang.

Den einfachen Schritt über Stückliste exportieren und dann in eine Vorlage händisch einfügen kenne ich. Diese Variante braucht mir hinsichtlich Anpassung, Sortierung und  Nachvollziehbartkeit bei Änderungen zu viel Zeit. Ich denke über iLogic kann man das besser lösen. Da wir in unseren Baugruppen meistens mehr als 50 verschiedene Teile haben.

Ich danke Dir auf jeden Fall das Du dich mit meinem Problem befasst hast.

Grüße Christian

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz