Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Stücklisten Parameter erstellen

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
Autor Thema:   Stücklisten Parameter erstellen (428 mal gelesen)
Fonz
Mitglied
Konstrukteur

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

Beiträge: 6
Registriert: 13.05.2010

Dell Precission 5820 Tower
Intel Xeon(R) W-2123 3,6GHz
32GB RAM
Quadro P4000 4GB Treiber 385.69
WIN10 64Bit
Catia V5-6 2018 SP3 BN28 HF27
VWGRCLite 7.1.5.1.0

erstellt am: 30. Jan. 2020 18: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


tempsnip.jpg

 
Hallo zusammen,
ich versuche schon seit Tagen zu verstehen wie ich mein Problem lösen kann, aber ohne Erfolg.
Ich habe mir alle Themen zu diesem Bereich schon durchgelesen, aber alles was ich ausprobiert habe funktioniert bei mir nicht.
Das Buch „Makroprogrammierung mit Visual Basic Skript“ hilft mir auch nicht weiter, weil ich viele Dinge darin einfach nicht verstehe.

Was habe ich vor.
1. Ich möchte in vorhandenen Parts mit einem Makro ein Parameter Set für eine Stückliste anlegen.
2. Das Parameter Set beinhaltet die Parameter die später in der Stückliste ausgelesen werden
3. Das Makro soll in einem Produkt mit Unterprodukten funktionieren, ohne dass ich die Parts einzeln öffne.
4. Das Makro soll zuerst prüfen ob die Parameter schon vorhanden sind, wenn nein dann anlegen, wenn ja dann zum nächsten Part gehen.
5. Es kann sein das es 20 Unterprodukte gibt.
6. Es kann sein das es 500 verschiedene Teile gibt.

Ich habe ein Makro gebastelt, das mir die Parameter anlegt, aber nur wenn ich das Part allein geöffnet habe, hier der der Code.
Im Anhang seht Ihr wie das dann aussieht.

Code:
Sub CATMain()

' Parameter-Gruppe erzeugen
set ParamGruppen = CATIA.ActiveDocument.Part.Parameters.RootParameterSet.ParameterSets
set NeueGruppe = ParamGruppen.CreateSet("Stückliste")

' Parameter erzeugen
set NeuerParameter = NeueGruppe.AllParameters
set ParamText = NeuerParameter.CreateString("ZSB_Pos.", "")
set ParamText = NeuerParameter.CreateString("Stückzahl", "")
set ParamText = NeuerParameter.CreateString("Benennung", "")
set ParamText = NeuerParameter.CreateString("Typ-und_Normbez.", "")
set ParamText = NeuerParameter.CreateString("Zeichn.Nr.", "")
set ParamText = NeuerParameter.CreateString("Bestell_Nr.Hersteller_/_Werkstoff", "")
set ParamText = NeuerParameter.CreateString("Hersteller", "")

End Sub


Dann habe ich versucht den Code zu erweitern.
Als erstes wollte ich prüfen ob die Parameter in einem geöffneten Part schon vorhanden sind, leider ohne Erfolg, hier der Code.

Code:
Sub CATMain()

' Parameter-Gruppe erzeugen
' set ParamGruppen = CATIA.ActiveDocument.Part.Parameters.RootParameterSet.ParameterSets
' set NeueGruppe = ParamGruppen.CreateSet("Stückliste")

' Parameter erzeugen
' set NeuerParameter = NeueGruppe.AllParameters

set oParameters = CATIA.ActiveDocument.Part.Parameters
if ParameterExists(oParameters, "ZSB_Pos") then
set oParam = oParameters.String("ZSB_Pos") else
set oParam = oParameters.CreateString("ZSB_Pos", "")


' set ParamText = NeuerParameter.CreateString("ZSB_Pos.", "")

' set ParamZahl = NeuerParameter.CreateString("Stückzahl", "")

' set ParamText = NeuerParameter.CreateString("Benennung", "")

' set ParamText = NeuerParameter.CreateString("Typ-und_Normbez.", "")

' set ParamText = NeuerParameter.CreateString("Zeichn.Nr.", "")

' set ParamText = NeuerParameter.CreateString("Bestell_Nr.Hersteller_/_Werkstoff", "")

' set ParamText = NeuerParameter.CreateString("Hersteller", "")

End Sub


Alle Codeschnipsel habe ich hier oder im Internet gefunden.
Könntet Ihr mich hier bitte unterstützen, ich komme einfach nicht weiter.
Und ja, ich bin blutiger Anfänger was die Programierung angeht.

Gruß Fonz

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

RSchulz
Moderator²
Teamleader IT-CAD



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

Beiträge: 5494
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series
Altium Nexus 18
Win 10 Pro x64

erstellt am: 31. Jan. 2020 12: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 Nur für Fonz 10 Unities + Antwort hilfreich

Hallo,

ich mache das im .net.

Hier sieht die Prüfung wie folgt aus:

Code:

    Public Function Check_Object_Parameters(ByVal CheckObject As INFITF.Document) As Boolean

        '-------------------------------------------------------------------------------
        ' check Object for Parameters
        '-------------------------------------------------------------------------------
        ' Return Value
        ' True = Parameters are found
        ' False = Parameters or Single Entries are not found
        '-------------------------------------------------------------------------------

        Dim OProduct As ProductStructureTypeLib.Product
        Dim oPart As ProductStructureTypeLib.Product
        Dim oDrawing As DRAFTINGITF.DrawingDocument
        Dim oParameters As KnowledgewareTypeLib.Parameters
        Dim oParam As KnowledgewareTypeLib.Parameter
        Dim oParamFullname As String
        Dim oParamNodes() As String
        Dim oParamName As String
        Dim FoundParam(8) As Integer
        Dim i As Integer

        Try

            If InStr(CheckObject.Name, ".CATPart") Then
                oPart = CheckObject.GetItem(1)
                oParameters = oPart.UserRefProperties
            ElseIf InStr(CheckObject.Name, ".CATProduct") Then
                OProduct = CheckObject.Product
                oParameters = OProduct.UserRefProperties
            Else
                oDrawing = CheckObject
                oParameters = oDrawing.Parameters
            End If

            For i = 0 To 8
                FoundParam(i) = 0
            Next

            For Each OParam In oParameters
                oParamFullname = OParam.Name
                oParamNodes = oParamFullname.Split("\")
                oParamName = oParamNodes(oParamNodes.Count - 1)
                If InStr(oParamName, ".") > 1 Then
                    oParamName = Left(oParamName, InStr(oParamName, ".") - 1)
                End If
                Select Case oParamName
                    Case "Param1"
                        FoundParam(0) += 1

                    Case "Param2"
                        FoundParam(1) += 1

                    Case "Param3"
                        FoundParam(2) += 1

                    Case "Param4"
                        FoundParam(3) += 1

                    Case "Param5"
                        FoundParam(4) += 1

                    Case "Param6"
                        FoundParam(5) += 1

                    Case "Param7"
                        FoundParam(6) += 1

                    Case "Param8"
                        FoundParam(7) += 1

                    Case "Param9"
                        FoundParam(8) += 1

                    Case "Param10" 'delete old parameter
                        oParameters.Remove(OParam.Name.ToString)

                    Case "Param11" 'delete old parameter
                        oParameters.Remove(OParam.Name.ToString)

                End Select
                Application.DoEvents()
            Next

            For i = 0 To 8
                If FoundParam(i) <> 1 Then
                    Return False
                End If
            Next

            Return True

        Catch ex As Exception

            MsgBox(ex.ToString, MsgBoxStyle.Critical, "Error in Functions: Check_Object_Parameters")
            Return False

        End Try

    End Function


...und so werden sie generiert.

Code:

    Public Sub Object_Clean_arameters(ByVal WorkObject As INFITF.Document)

        '-------------------------------------------------------------------------------
        ' Cleans Parameters in Object
        ' creates missing Entries and deletes multi entries
        '-------------------------------------------------------------------------------

        Dim OProduct As ProductStructureTypeLib.Product
        Dim oPart As ProductStructureTypeLib.Product
        Dim oDrawing As DRAFTINGITF.DrawingDocument
        Dim oParameters As KnowledgewareTypeLib.Parameters
        Dim oParam As KnowledgewareTypeLib.Parameter
        Dim oParamFullname As String
        Dim oParamNodes() As String
        Dim oParamName As String
        Dim FoundParam(8) As Boolean
        Dim i As Integer

        Try


            If InStr(WorkObject.Name, ".CATPart") Then
                oPart = WorkObject.GetItem(1)
                oParameters = oPart.UserRefProperties
            ElseIf InStr(WorkObject.Name, ".CATProduct") Then
                OProduct = WorkObject.Product
                oParameters = OProduct.UserRefProperties
            Else
                oDrawing = WorkObject
                oParameters = oDrawing.Parameters
            End If


            For i = 0 To 8
                FoundParam(i) = False
            Next

            For Each OParam In oParameters
                oParamFullname = OParam.Name
                oParamNodes = oParamFullname.Split("\")
                oParamName = oParamNodes(oParamNodes.Count - 1)
                If InStr(oParamName, ".") > 1 Then
                    oParamName = Left(oParamName, InStr(oParamName, "."))
                End If
                If InStr(oParamName, ".") > 1 Then
                    oParamName = Left(oParamName, InStr(oParamName, ".") - 1)
                End If
                Select Case oParamName
                    Case "Param1"
                        If FoundParam(0) = True Then
                            oParameters.Remove(oParam.Name.ToString)
                        Else
                            FoundParam(0) = True
                        End If

                    Case "Param2"
                        If FoundParam(1) = True Then
                            oParameters.Remove(oParam.Name.ToString)
                        Else
                            FoundParam(1) = True
                        End If

                    Case "Param3"
                        If FoundParam(2) = True Then
                            oParameters.Remove(oParam.Name.ToString)
                        Else
                            FoundParam(2) = True
                        End If

                    Case "Param4"
                        If FoundParam(3) = True Then
                            oParameters.Remove(oParam.Name.ToString)
                        Else
                            FoundParam(3) = True
                        End If

                    Case "Param5"
                        If FoundParam(4) = True Then
                            oParameters.Remove(oParam.Name.ToString)
                        Else
                            FoundParam(4) = True
                        End If

                    Case "Param6"
                        If FoundParam(5) = True Then
                            oParameters.Remove(oParam.Name.ToString)
                        Else
                            FoundParam(5) = True
                        End If

                    Case "Param7"
                        If FoundParam(6) = True Then
                            oParameters.Remove(oParam.Name.ToString)
                        Else
                            FoundParam(6) = True
                        End If

                    Case "Param8"
                        If FoundParam(7) = True Then
                            oParameters.Remove(oParam.Name.ToString)
                        Else
                            FoundParam(7) = True
                        End If

                    Case "Param9"
                        If FoundParam(8) = True Then
                            oParameters.Remove(oParam.Name.ToString)
                        Else
                            FoundParam(8) = True
                        End If

                End Select
                Application.DoEvents()
            Next

            If FoundParam(0) = False Then
                oParameters.CreateString("Param1", "")
            End If

            If FoundParam(1) = False Then
                oParameters.CreateString("Param2", "")
            End If

            If FoundParam(2) = False Then
                oParameters.CreateString("Param3", "")
            End If

            If FoundParam(3) = False Then
                oParameters.CreateString("Param4", "")
            End If

            If FoundParam(4) = False Then
                oParameters.CreateString("Param5", "")
            End If

            If FoundParam(5) = False Then
                oParameters.CreateString("Param6", "")
            End If

            If FoundParam(6) = False Then
                oParameters.CreateString("Param7", "")
            End If

            If FoundParam(7) = False Then
                oParameters.CreateString("Param8", "")
            End If

            If FoundParam(8) = False Then
                oParameters.CreateString("Param9", "")
            End If

        Catch ex As Exception

            MsgBox(ex.ToString, MsgBoxStyle.Critical, "Error in Functions: Object_Parameters_Clean")

        End Try

    End Sub


HTH

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

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

Fonz
Mitglied
Konstrukteur

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

Beiträge: 6
Registriert: 13.05.2010

Dell Precission 5820 Tower
Intel Xeon(R) W-2123 3,6GHz
32GB RAM
Quadro P4000 4GB Treiber 385.69
WIN10 64Bit
Catia V5-6 2018 SP3 BN28 HF27
VWGRCLite 7.1.5.1.0

erstellt am: 31. Jan. 2020 16: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

Hallo Herr Schulz,

vielen Dank für Ihre Antwort, aber das verwirrt mich jetzt noch mehr,
und mit .net haben Sie wahrscheinlich Visual Basic oder Studio gemeint.

Es ist sehr nett gemeint von Ihnen, aber ich habe keinen Schimmer wie ich den Code verwenden,
geschweige denn zum Laufen bringe.

Ich habe mir heute ein Buch von Hr. Hansen bestellt „Catia V5 automatisieren“ vielleicht hilft mir das weiter.
Wenn nicht, dann muss ich wohl die Stückliste weiterhin aufwendig über BOM als Excel ausgeben
und dann in die Kundenstückliste kopieren.

Hut ab vor all jenen die sich mit der Makro Programmierung auskennen, ich bin wahrscheinlich
schon zu alt, um das noch in meine Birne zu bekommen.

Und mittlerweile würde ich sogar dafür bezahlen, wenn mir das jemand zum Laufen bringt 😉

Gruß Fonz

P.S. Ach ja, die Links in Ihrer Signatur funktionieren nicht 😉

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

RSchulz
Moderator²
Teamleader IT-CAD



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

Beiträge: 5494
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series
Altium Nexus 18
Win 10 Pro x64

erstellt am: 31. Jan. 2020 16:30    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 Fonz 10 Unities + Antwort hilfreich

Hallo Fonz,

vielen Dank für die Information. Ich habe das auf die neue URL angeglichen.

Zu dem Thema Programmierung. Den Code kann man eins zu eins auch in VBA umsetzen. Und ja mit .Net meine ich VB.Net\Visual Studio. Die Eigenschaften der einzelnen Objekte sind im VBA exakt gleich. Somit ist der Code prinzipiell richtig, die Objekte sind nur anders definiert.

Leider fehlt mir die Zeit das auf VBA umzumünzen. Von daher können wir aber mit Sicherheit hoffen, dass ein anderer evtl. passenderes liefert.

BTW das Buch von Jens ist super für den Einstieg...

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

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

K.Siebert
Mitglied
Tech Zeichner


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

Beiträge: 414
Registriert: 19.05.2007

Win XP
Catia V5 R19
Catia V5 R24

erstellt am: 02. Feb. 2020 15:29    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 Fonz 10 Unities + Antwort hilfreich


Stueckliste.CATScript.txt

 
Hi,
ich hatte Heute mal ein wenig Zeit.
Bei dem Skript habe viel mit dem Marcorecorder gearbeitet.

noch ein paar Links:
Parameter auf TechEcke

https://ww3.cad.de/foren/ubb/Forum137/HTML/004414.shtml
https://ww3.cad.de/foren/ubb/Forum137/HTML/005971.shtml#000017
http://ww3.cad.de/foren/ubb/Forum137/HTML/001678.shtml#000012


------------------
Sei Schlau bleib Dumm !!?!!

[Diese Nachricht wurde von K.Siebert am 02. Feb. 2020 editiert.]

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