Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Makro zur Abfrage der Stücklistenstruktur (Referenz?)

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:  Makro zur Abfrage der Stücklistenstruktur (Referenz?) (3547 mal gelesen)
GRM
Mitglied
CAD/PDM-Administrator / Konstrukteur Maschinenbau


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

Beiträge: 272
Registriert: 02.06.2005

erstellt am: 14. Apr. 2008 08:23    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

Morgen!

Ich möchte gern ein Makro schreiben, mit dem ich überprüfen kann ob ein Bauteil bzw. eine Baugruppe auf "Referenz" gesetzt ist.
Auf den Dateinamen inkl. Pfad greife ich mit
     sFullFileName = oDoc.ReferencedFileDescriptors.Item(z).FullFileName
zu.

Gibt es eine Möglichkeit um auf diese oder ähnliche Weise auch auf die Stücklistenstruktur zuzugreifen? 

mfg
GRM

------------------
Gruß Markus

[Diese Nachricht wurde von GRM am 15. Apr. 2008 editiert.]

[Diese Nachricht wurde von GRM am 15. Apr. 2008 editiert.]

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

Manfred Zirk
Mitglied



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

Beiträge: 513
Registriert: 01.11.2002

IV2008 SP1 MDT2008 WIN XP SP2, Vista x64
Asus A8N-SLI, AMD Opteron 180 , 4GB,
Quadro FX 3400

erstellt am: 16. Apr. 2008 17:23    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 GRM 10 Unities + Antwort hilfreich

Abend!

In jeder Modelldatei (IAM, IPT) kann man unter Auswahl des richtigen Dokumentobjekts (Partdocument, Assemblydocument, nicht bei allgemeinem Documentobjekt)
unter Componentdefintions.BomStructur feststellen, was für ein Teiletyp das Modell in der Stückliste ist.

In der Stückliste kann dies jedoch vom Bediener für jedes Exemplar lokal ohne Auswrirkung auf das Quellmodell überschrieben werden.

In einer IDW kann man ebenfalls auf die Component Definitions zugreifen, aber nicht direkt sondern mittels Apprentice.


Bitte Objekte vorher deklarieren.

Eventuell musst du das Apprenticeobjekt  als Verweis in dein Propekt mit aufnehmen.

Der Code ist für VB 2005 Net.

---

oApprentice = New Inventor.ApprenticeServerComponent()

oApprentice.Open(oDrawDoc.ReferencedDocuments.Item(blaba).FullFileName)
If oApprentice.Document.ComponentDefinition.BOMStructure = BOMStructureEnum.kReferenceBOMStructure Then
MsgBox("Referenz")
End If
oApprentice.Close()
oApprentice = nothing

---

Grüße

Manfred

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

rtend12
Mitglied
Dipl.-Ing. (FH) Maschinenbau / Konstrukteur


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

Beiträge: 436
Registriert: 21.07.2004

Catia V5 (R16SP5, B18SP5)
VB.Net 2003

erstellt am: 16. Apr. 2008 20:43    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 GRM 10 Unities + Antwort hilfreich

Hallo zusammen,

@Manfred:

Bist du sicher, dass Apprentice in einem AddIn fehlerfrei funktioniert?
Mit VBA funktioniert es mit INV10 jedenfalls nicht.

Ich glaub du verwechselst da etwas:

Wenn ich Inventor laufen hab und von den aktuell geladenen Dateien das "Referenz"-Flag überprüfen will mach ich das mit AddIn oder VBA, weil die Dateien ja schon geöffnet sind und das Flag auswertbar ist.

Wenn ich von allen vorhandenen Inventor-Dateien ermitteln will welches "Referenz"-Flag gesetzt ist mach ich das mit Apprentice weil die Dateien mit Apprentice deutlich schneller geöffnet werden als mit Inventor.

Ob du eine IPT direkt oder eine IPT in einer IDW untersuchen willst ist völlig egal. Du kannst beide IPTs mit Inventor oder Apprentice untersuchen, nur abhängig von den Umständen wie du generell auf die Dateien zugreifen willst und wieviel Zeit du hast.

@Markus:

- deklariere dein aktives Dokument als Part- oder AssembyDocument
- jetzt kannst du über ComponentDefinition auf die BOMStructure zugreifen
- wenn Du willst kannst du auch alle Unterdokumente durchlaufen und die BOMStructure abfragen

Gruß
Reinhard

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

Manfred Zirk
Mitglied



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

Beiträge: 513
Registriert: 01.11.2002

IV2008 SP1 MDT2008 WIN XP SP2, Vista x64
Asus A8N-SLI, AMD Opteron 180 , 4GB,
Quadro FX 3400

erstellt am: 16. Apr. 2008 23:47    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 GRM 10 Unities + Antwort hilfreich

Hallo Reinhard,

"Bist du sicher, dass Apprentice in einem Addin fehlerfrei funktioniert?"
Ja, du kannst Apprentice unter inventor 2008 in einem Addin ausführen.


Vielleicht habe ich da was falsch verstanden, aber:

Ich denke, das Markus eine IAM geöffnet hat und per Makro prüfen will, ob eine der referenzierten Dateien eine entsprechende Eigenschaft hat.


Dazu kann man die Stückliste durchsuchen:
---
if oAssemblyDoc.ComponentDefinition.BOM.BOMViews.Item(1).ComponentDefinitions.Item(1).BOMStructure = BOMStructureEnum.kReferenceBOMStructure ...
---

Allerdings sieht man dann die Daten der Exemplare, nicht die der referenzierten Modelle.


Man kann auch über die referenzierten Dateien der IAM gehen:

---
oAssemblyDoc.AllReferencedDocuments.Item(1)...
---

"AllReferencedDocuments" bzw "ReferencedDocuments" gestattet meines Wissens aber nie einen direkten Zugriff auf die Componentdefinitions der referenzierten Datei.

Daher bleibt dann nur:
Ein neues Documentobjekt erstellen, egal ob Partdocument oder Assemblydocument, das auf die referenzierte Datei zeigt und damit auf die Componentdefinition zuzugreifen:
---
oAssemblyDoc = CType(oDrawDoc.ReferencedDocuments.Item(1), Inventor.AssemblyDocument)

If oAssemblyDoc.ComponentDefinition.BOMStructure = BOMStructureEnum.kReferenceBOMStructure ...
---

Oder das Gleiche mit Apprentice zu machen.

Das Ganze noch in eine For each Schleife verpackt, und man durchsucht wirklich alle Dateien des Assemblies.

In einer IDW sieht das meiner Meinung nach im Prinzip genauso aus:
Über "AllReferencedDocuments" erhält man eine Liste aller referenzierten Dateien in der IDW.

Ich kann aber auch in die Teileliste reinschauen:
---
oDrawdoc.ActiveSheet.PartsLists.Item(1).PartsListColumns.PropertyType....
---
Es exisitiert aber kein Property (Spalte), das die BoMStructure zum referenzierten Modell in der Zeile liefern könnte.
Allerdings findet man den Namen der Datei, die in der Zeile verewigt wurde.
In unserem Fall würde die Untersuchung der Teileliste aber sinnlos sein, da auf Referenz gesetzte Teile dort gar nicht auftauchen können.

Ich hatte auch dazu geschrieben, das ich mich nicht auf VBA beziehe. 

Grüße

Manfred

[Diese Nachricht wurde von Manfred Zirk am 16. Apr. 2008 editiert.]

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

rtend12
Mitglied
Dipl.-Ing. (FH) Maschinenbau / Konstrukteur


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

Beiträge: 436
Registriert: 21.07.2004

Catia V5 (R16SP5, B18SP5)
VB.Net 2003

erstellt am: 17. Apr. 2008 21:19    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 GRM 10 Unities + Antwort hilfreich

Hallo Manfred,

wenn Apprentice in INV12 in einem AddIn funktioniert dann ist das ja schon mal ein Vortschritt.
Das wird aber Markus nicht helfen, weil er ein Makro schreiben will.
Und wenn er die referenzierten Dateien einer geöffneten Baugruppe durchlaufen will, dann würde ich das so machen:

public sub FlagCheck
dim odoc as document
set odoc=thisapplication.activedocument
call allfiles(odoc)
end sub

public funtion (byval odoc as document)
dim odoc2 as document
dim oFlag as Integer
oflag=odoc.ComponentDefinition.BOMStructure
# Hier muß noch irgendwas mit dem Flag passieren
for odoc2 in odoc.referencedfiles
oflag=odoc2.ComponentDefinition.BOMStructure
# Hier muß noch irgendwas mit dem Flag passieren
if odoc2.referencedfiles.count >0 then
call allfiles(odoc2)
endif
next
end function

Wenn man die Flags in einen Treeview mit dem z.B. dem Dateinamen darstellt hat man die gesamte Baugruppenstruktur abgebildet.

Der Vorteil von Apprentice Dateien schneller zu öffnen weil weniger Informationen verarbeitet werden ist ja bei bereits geöffneten Dateien nicht vorhanden und hilft deshalb auch nicht.

Gruß
Reinhard

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

Manfred Zirk
Mitglied



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

Beiträge: 513
Registriert: 01.11.2002

IV2008 SP1 MDT2008 WIN XP SP2, Vista x64
Asus A8N-SLI, AMD Opteron 180 , 4GB,
Quadro FX 3400

erstellt am: 18. Apr. 2008 17:48    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 GRM 10 Unities + Antwort hilfreich

Hallo Reinhard,

die Lösung mit dem rekursiven Aufruf gefällt mir, da du die
Baumstruktur des Modells gleich mit zurücklieferst.
Ich habe allerdings mit Treeview noch nichts gemacht.

Meine Lösung liefert eine einfache Liste.

Jedoch sollte man ein Part oder Assemblydocument in "allfiles" verwenden, da sonst
die Componentdefinition nicht gelesen werden kann.

Grüße

Manfred

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

daywa1k3r
Moderator
Softwareentwickler




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

Beiträge: 3497
Registriert: 01.08.2002

Alienware m17x, Win7, Inventor2012

erstellt am: 18. Apr. 2008 19: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 Nur für GRM 10 Unities + Antwort hilfreich

Könntet Ihr bitte den CODE Befehl nutzen, bzw. die Makros vor dem Posten mal laufen lassen? 

Zitat:

Code Befehl

Ähnlich dem QUOTE Code, fügt dieser Code <PRE> Befehle hinzu, um Formatierungen beizubehalten. Das ist besonders hilfreich, um z.B. Programmiercode darzustellen.

Code:
#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "Hello World!";


In diesem Beispiel behält der UBB Code die Formatierungen automatisch bei.


Danke. 

------------------
Grüße Igor

FX64 Software Solutions

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

rtend12
Mitglied
Dipl.-Ing. (FH) Maschinenbau / Konstrukteur


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

Beiträge: 436
Registriert: 21.07.2004

Catia V5 (R16SP5, B18SP5)
VB.Net 2003

erstellt am: 18. Apr. 2008 22:33    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 GRM 10 Unities + Antwort hilfreich

Hallo Igor,

formatiert und getestet:

Code:
Public Sub FlagCheck()
Dim odoc As Inventor.Document
Set odoc = ThisApplication.ActiveDocument
Call allfiles(odoc)
End Sub

Function allfiles(ByVal odoc As Inventor.Document)
Dim odoc2 As Inventor.Document
Dim oFlag As Long
oFlag = odoc.ComponentDefinition.BOMStructure
'# Hier muß noch irgendwas mit dem Flag passieren
For Each odoc2 In odoc.ReferencedFiles
    oFlag = odoc2.ComponentDefinition.BOMStructure
    '# Hier muß noch irgendwas mit dem Flag passieren
    If odoc2.ReferencedFiles.Count > 0 Then
        Call allfiles(odoc2)
    End If
Next
End Function


Gruß
Reinhard

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



Konstrukteur (m/w/d) Bordnetz / Kabelbaum / Leitungssatz
Menschen und Technologien zu verbinden, den Perfect Match für unsere Kunden zu gestalten, immer die richtigen Expert:innen für die jeweilige Herausforderung zu finden - das ist unser Anspruch bei FERCHAU und dafür suchen wir dich: als ambitionierte:n Kolleg:in, der:die wie wir Technologien auf die nächste Stufe bringen möchte. Wir realisieren spannende Projekte für namhafte Kunden in allen Technologiebereichen und für alle Branchen und sorgen für sichere und nachhaltige Technologielösungen....
Anzeige ansehenKonstruktion, Visualisierung
THPET
Mitglied
Dipl Ing Schiffbau Meerestechnik


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

Beiträge: 31
Registriert: 01.03.2004

erstellt am: 22. Mai. 2008 20:11    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 GRM 10 Unities + Antwort hilfreich

Einfach geht es wenn die Stückliste der Zeichnung abgefragt werden soll:
Private Sub AddStkL()
    Dim oDrawDoc As DrawingDocument
    Set oDrawDoc = oIDWDoc
    Dim oPartList As PartsList
    Dim oPartLists As PartsLists
    Set oPartLists = oSheet.PartsLists
    For Each oPartList In oPartLists
        Dim I As Long
        MacheFett
        oExcel.Cells(oZeile, 3).Value = "Teileliste von: " + oPartList.ReferencedDocumentDescriptor.DisplayName
        oZeile = oZeile + 1
        MacheFett
        For I = 1 To oPartList.PartsListColumns.Count
            oExcel.Cells(oZeile, I).Value = oPartList.PartsListColumns.Item(I).Title
        Next
        oZeile = oZeile + 1
        For I = 1 To oPartList.PartsListRows.Count
            Dim oRow As PartsListRow
            Set oRow = oPartList.PartsListRows.Item(I)
            Dim j As Long
            For j = 1 To oPartList.PartsListColumns.Count
                Dim oCell As PartsListCell
                Set oCell = oRow.Item(j)
                oExcel.Cells(oZeile, j).Value = oCell.Value
            Next
            oZeile = oZeile + 1
        Next
        oZeile = oZeile + 1
    Next
End Sub

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