Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Stückliste von einzelnen Membern einer iAssembly auslesen

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
Autor Thema:  Stückliste von einzelnen Membern einer iAssembly auslesen (2015 mal gelesen)
WilliamSpiderWeb
Mitglied
Dipl.-Ing. (FH) Physikalische Technik


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

Beiträge: 96
Registriert: 09.01.2012

erstellt am: 19. Feb. 2013 15:00    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 gerade folgendes in VBA zu realisieren:
Ist eine Baugruppe geöffnet, möchte ich per Knopfdruck die Stückliste der Baugruppe auslesen und in eine csv-Datei schreiben. Handelt es sich bei der Baugruppe um eine iAssembly, soll die Stückliste für jedes iAssembly Member mit den entsprechenden Unterschieden geschrieben werden.

Das Lesen der Stückliste an sich und das irgendwo hinschreiben ist kein Problem. Problematisch wird es beim Unterscheiden der einzelnen iAssembly Member.
Ich weiß, in der Inventor Funktion "Stückliste" kann man in der Symbolleiste wählen, ob man die Spalte "Anzahl" für eine bestimmte Variante oder für alle Varianten anzeigen möchte. Im VBA-Code kann ich die Eigenschaft "ItemQuantity" der Klasse "BOMRow" auslesen. Das ist allerdings lediglich die Anzahl für das derzeit berechnete iAssembly-Member (Im Modell-Browser unter Tabelle die derzeit aktivierte Variante).

Wenn mir jemand sagen kann, ob ich die "ItemQuantity" für bestimmte iAssembly Member auslesen kann wäre das super.

Alternativ habe ich versucht (Workaround), den Inventor alle iAssembly Member nacheinander aktivieren zu lassen und dann die Stückliste auszulesen. In dem Fall bekomme ich bei drei Varianten zwar drei Stücklisten, allerdings sind die Werte der Spalte "Anzahl" in allen drei ausgelesenen Stückliste gleich - und zwar gleich der zu allererst aktivierten Variante.

Mein Quellcode mit dem Workaround:

Code:

Public Sub BOMQuery()
    Dim oDoc As AssemblyDocument
    Dim bIAssembly As Boolean
    Set oDoc = ThisApplication.ActiveDocument
    If oDoc.DocumentType <> kAssemblyDocumentObject Then Exit Sub
    If oDoc.ComponentDefinition.iAssemblyFactory.TableRows.Count > 1 Then
        bIAssembly = True
    Else
        bIAssembly = False
    End If
           
    For Each row In oDoc.ComponentDefinition.iAssemblyFactory.TableRows
        oDoc.ComponentDefinition.iAssemblyFactory.DefaultRow = row
       
    Dim oBOM As BOM
    Set oBOM = oDoc.ComponentDefinition.BOM
    oBOM.StructuredViewFirstLevelOnly = False
    oBOM.StructuredViewEnabled = True
    Dim oBOMView As BOMView
    Set oBOMView = oBOM.BOMViews.Item("Strukturiert")
               
        Debug.Print
        Debug.Print
        Debug.Print "Zeichn.-Nr."; Tab(15); "Rev"; Tab(30); "Art.-Nr."; Tab(45); "Menge"; Tab(60); "Zeichn.-Nr."; Tab(75); "Rev"; Tab(90); "Art.-Nr."
        Debug.Print "--------------------------------------------------------------------------------------------------------------------"

        Call QueryBOMRowProperties(oDoc.ComponentDefinition, oBOMView.BOMRows)
    Next
End Sub

Private Sub QueryBOMRowProperties(oCompDef As ComponentDefinition, oBOMRows As BOMRowsEnumerator)
             
  Dim sPropSet As String
  sPropSet = "Inventor User Defined Properties"
 
  Dim ZNr1 As String
  Dim Rev1 As String
  Dim ArtNr1 As String
  ZNr1 = readProperty(oCompDef, sPropSet, "Zeichnungsnummer")
  Rev1 = readProperty(oCompDef, sPropSet, "Revision")
  ArtNr1 = readProperty(oCompDef, sPropSet, "Artikelnummer")
 
    Dim i As Long
    For i = 1 To oBOMRows.Count
        Dim oRow As BOMRow
        Set oRow = oBOMRows.Item(i)

        Set oCompDef = oRow.ComponentDefinitions.Item(1)
       
        Dim Menge As String
        Dim ZNr2 As String
        Dim Rev2 As String
        Dim ArtNr2 As String
        Menge = oRow.ItemQuantity
        ZNr2 = readProperty(oCompDef, sPropSet, "Zeichnungsnummer")
        Rev2 = readProperty(oCompDef, sPropSet, "Revision")
        ArtNr2 = readProperty(oCompDef, sPropSet, "Artikelnummer")

        'If Int(Menge) > 0 Then
            Debug.Print ZNr1; Tab(15); Rev1; Tab(30); Artnr1; Tab(45); Menge; Tab(60); ZNr2; Tab(75); Rev2; Tab(90); ArtNr2
           
            If Not TypeOf oCompDef Is VirtualComponentDefinition Then
                If Not oRow.ChildRows Is Nothing Then
                    Call QueryBOMRowProperties(oCompDef, oRow.ChildRows, ItemTab)
                End If
            End If
        'End If
    Next
End Sub


Mein Ergebnis sieht folgendermaßen aus:
(Zur besseren Übersicht wurden hier die meisten Stücklisteneinträge und alle die Artikelnummern entfernt. Die betroffenen Zeilen wurden fett gedruckt)

Code:

Zeichn.-Nr.  Rev            Art.-Nr.      Menge          Zeichn.-Nr.    Rev            Art.-Nr.
--------------------------------------------------------------------------------------------------------------------
Z30060-01    01                            1              Z30051-01      01                 
Z30060-01    01                            1              Z30052-01      02                 
Z30060-01    01                            4              Z30050-04      00                 
Z30060-01    01                            1              Z30054-01      01                 
Z30060-01    01                            1              Z30055-01      01
Z30069-01    00                            3              Z30066-01      01           
Z30060-01    01                            0              Z30070-01      01         


Zeichn.-Nr.  Rev            Art.-Nr.      Menge          Zeichn.-Nr.    Rev            Art.-Nr.
--------------------------------------------------------------------------------------------------------------------
Z30060-02    01                            1              Z30051-01      01           
Z30060-02    01                            1              Z30052-01      02           
Z30060-02    01                            4              Z30050-04      00           
Z30060-02    01                            1              Z30054-01      01           
Z30060-02    01                            1              Z30055-01      01               
Z30069-01    00                            3              Z30066-01      01           
Z30060-02    01                            0              Z30070-01      01            


Aus diesen Tabellen kann man nun ablesen, dass pro Zeile das rechte Zeichnungsnummer-Revisions-Paar X-mal im linken Zeichnungsnummer-Revisions-Paar verbaut ist. In der Variante Z30060-02 müsste nun eigentlich die Z30055-01 mit 0x und die Z30070-01 mit 1x angegeben sein.

Warum passiert das nicht?

Viele Grüße,
Alexander

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: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 19. Feb. 2013 18:50    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 WilliamSpiderWeb 10 Unities + Antwort hilfreich

Hallo

Ich kann es grad nicht testen (keine iAssembly da), aber versuch mal nach dem

Code:
oDoc.ComponentDefinition.iAssemblyFactory.DefaultRow = row

einfach ein
Code:
oDoc.Update

Vielleicht aktualisiert Inventor nach dem Umschalten nicht automatisch.

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

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

WilliamSpiderWeb
Mitglied
Dipl.-Ing. (FH) Physikalische Technik


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

Beiträge: 96
Registriert: 09.01.2012

erstellt am: 20. Feb. 2013 09:50    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

Danke für die schnelle Antwort.
Der Lösungsvorschlag liefert aber leider auch nicht den Erfolg.

Sowohl mit als auch ohne

Code:
oDoc.update

sieht man in der geöffneten Baugruppe, dass alle iAssembly-Tabelleneinträge nacheinander ausgewählt werden.
Trotzdem wird mir immer die selbe Stückliste ausgegeben.

Ich hatte auch schon versucht, eine ca. 2 sek. lange Pause nach dem oDoc.update einzuprogrammieren, für den Fall dass vielleicht der Quellcode schneller abgearbeitet wird, als das Modell aktualisiert wird. Hat aber auch nichts gebracht.

[Diese Nachricht wurde von WilliamSpiderWeb am 20. Feb. 2013 editiert.]

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

WilliamSpiderWeb
Mitglied
Dipl.-Ing. (FH) Physikalische Technik


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

Beiträge: 96
Registriert: 09.01.2012

DELL Precision 3620
Core i7-6900K @ 4,00 GHz
16,00GB RAM
Grafik: AMD FirePro W5100
---
Win7 Pro 64bit SP1
---
Inventor Professional 2021
Vault Workgroup 2021
Visual Basic .NET 2010 Express
... dabei seit Inventor 5

erstellt am: 20. Feb. 2013 11:58    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

Ich weiß nicht genau, was ich jetzt anders gemacht habe, aber nu funktioniert es.
Irgendwo beim Umstrukturieren des "Spagetti-Codes" muss ich was entscheidendes geändert haben.
Das Problem hat mich nun fast nen ganzen Tag gekostet.

Trotzdem danke. 

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: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 20. Feb. 2013 14:46    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 WilliamSpiderWeb 10 Unities + Antwort hilfreich

Egal, Hauptsache es läuft. 

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

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

MichlB1003
Mitglied
Konstrukteur


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

Beiträge: 42
Registriert: 07.03.2013

erstellt am: 11. Apr. 2013 13:27    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 WilliamSpiderWeb 10 Unities + Antwort hilfreich

hi
ich bin nach viel recherche auf diesen beitrag gestossen und hoffe, dass ihr mir bei meinem problem auch weiterhelfen könnt... hier mein post http://ww3.cad.de/foren/ubb/Forum50/HTML/032154.shtml

wär echt super!
danke

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)2023 CAD.de | Impressum | Datenschutz