Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  E3.series
  Hilfe bei Script zur BOM Erstellung

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:   Hilfe bei Script zur BOM Erstellung (267 mal gelesen)
Nobby96
Mitglied


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

Beiträge: 1
Registriert: 01.03.2021

erstellt am: 01. Mrz. 2021 14:20    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, ich bin neu hier im Forum und hoffe, das mir jemand mit mehr Erfahrung mit E3 Scripten weiterhelfen kann.

Das Script gibt eine Excel BOM mit dem Ort, Anzahl, Teilenummer, Hersteller, BMK und der Länge der im E3 Projekt enthaltenen Bauteile aus.
So wie ich es aktuell geschrieben habe funktioniert es auch, nur der Ort wird nicht richtig ausgegeben bzw. nicht so wie ich mir das eigentlich vorgestellt habe.

Zum Beispiel der Artikel UT4 ist im Projekt mit dem Ort C1 und C2 vorhanden. Auf dem Screenshot im Anhang sieht man aber, dass nur C1 angegeben wird. So wie es scheint, wird immer nur der erste Ort ausgegeben, an dem das Teil verbaut ist.

Um die Bauteile für jeden Ort separat auszugeben, müsste das Script also zunächst C1 durchsuchen und ausgeben, dann C2 und so weiter. Kann mir hier jemand einen Tipp geben, wie ich das umsetzen könnte?

Code:

Dim e3: Set e3 = CreateObject( "CT.Application" )
Dim prj: Set prj = CreateObject( "CT.Job" )
Dim dev: Set dev = CreateObject( "CT.Device" )
Dim cmp: Set cmp = CreateObject( "CT.Component")
Dim App: Set App = CreateObject("CT.Application")


Class CComponent
Private Sub Class_Initialize()
count = 1
terminal = False
Set devnamlst = CreateObject("Scripting.Dictionary")
End Sub

Dim count, name, supplier, devnamlst, terminal, filter, description, location
End Class

Dim oDicCmp: Set oDicCmp = CreateObject("scripting.dictionary")

'Excelvorlage

Dim Excelvorlage
Excelvorlage = "W:\Parts.xltm"


devcnt = prj.GetAllDeviceIds( devids )
For d = 1 To devcnt
dev.SetId devids( d )


' device oder component?
cmpnam = dev.GetComponentName
If( cmpnam <> "" ) Then
' component in Liste?
If( Not oDicCmp.Exists( cmpnam ) ) Then
' ist nicht in der Liste
' Neue Instanz component class
Set ccmp = New CComponent
' Klasse füllen
ccmp.name = cmpnam
ccmp.supplier = dev.GetComponentAttributeValue( "Supplier" )
ccmp.description = dev.GetComponentAttributeValue ( "Description" )
ccmp.location = dev.GetLocation
ccmp.devnamlst.Add dev.Getid, dev
ccmp.Filter = dev.HasAttribute("NotInBOM")
App.putinfo 0, dev.HasAttribute("NotInBOM")

oDicCmp.Add cmpnam, ccmp
If( dev.IsTerminal ) Then ccmp.terminal = True
Else
' increase the amount of devices
Set ccmp = oDicCmp( cmpnam )
ccmp.count = ccmp.count + 1
ccmp.devnamlst.Add dev.Getid, null
End If
' Nächstes Schleifenelement
End if

Next

Dim oExcel: Set oExcel = WScript.CreateObject("Excel.Application")

' Neue Excel Tabelle mit Vorlage erzeugen
oExcel.Workbooks.Add Excelvorlage
oExcel.ActiveWorkbook.SaveAs prj.GetPath & prj.GetName & "_Rev." & prj.GetAttributeValue("rmChangeIndex") & "_BOM"
oExcel.Visible = 1
' Überschriften in der Tabelle einfügen

oExcel.Cells( 4, 1 ) = "Ort"
oExcel.Cells( 4, 2 ) = "Anzahl"
oExcel.Cells( 4, 3 ) = "Ident-Nr."
oExcel.Cells( 4, 4 ) = "Beschreibung"
oExcel.Cells( 4, 5 ) = "Hersteller"
oExcel.Cells( 4, 6 ) = "Betriebsmittelkennzeichen"
oExcel.Cells( 4, 7 ) = "Länge (m)"

' Zeilenzähler auf 7 setzen
eline = 5
' Schleife über die Schlüssel in der Bauteilliste
For Each ccmp In oDicCmp.Items
' Daten in die Exceltabelle übertragen

if ccmp.filter = 0 then

oExcel.Cells( eline, 1 ) = ccmp.location
oExcel.Cells( eline, 2 ) = ccmp.count
oExcel.Cells( eline, 3 ) = "'" & ccmp.name
oExcel.Cells( eline, 4 )  = ccmp.description
oExcel.Cells( eline, 5 ) = ccmp.supplier


' Betriebsmittel in die Exceltabelle übertragen
tmpstr = ""
If( Not ccmp.terminal ) Then
For Each key In ccmp.devnamlst.keys
dev.SetId key
tmpstr = tmpstr & dev.Getname & ","
next

oExcel.Cells( eline, 6 ) = Left( tmpstr, Len( tmpstr ) - 1 )

End If


' Länge der Betriebsmittel in die Exceltabelle übertragen
tmpstr2 = ""

If ( Not ccmp.terminal ) Then
For Each key In ccmp.devnamlst.keys
dev.SetId key

Dim ATTLength, ATTLengthDouble
ATTLength = dev.GetAttributeValue("Length")


if ATTLength <> "" then
ATTLengthDouble = CDBl (ATTLength)
ATTlengthDouble = round (ATTlengthDouble / 1000,2)

Length = ATTLengthDouble & "m, "
else
Length = " "
end if
tmpstr2 = tmpstr2 & Length
next

oExcel.Cells( eline, 7 ) = Left( tmpstr2, Len( tmpstr2 ) - 1 )

End If
' Zeilenzähler erhöhen
eline = eline + 1
App.putinfo 0, eline

' Nächstes Schleifenelement
end if
Next

oExcel.Columns( "A:G" ).AutoFit
oExcel.Application.Run "Sortieren"

App.putinfo 0, "Skript fertig!"


Set App  = Nothing
Set oExcel = Nothing
Set dev = Nothing
Set prj = Nothing
Set e3 = Nothing


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

K0NFUZIUS
Moderator



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

Beiträge: 240
Registriert: 06.02.2006

erstellt am: 01. Mrz. 2021 21:26    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 Nobby96 10 Unities + Antwort hilfreich

Hallo Nobby,

Code:

Else
  ' increase the amount of devices
  Set ccmp = oDicCmp( cmpnam )
  ccmp.count = ccmp.count + 1
  ccmp.devnamlst.Add dev.Getid, null
End If

In

Code:

Else
  ' increase the amount of devices
  Set ccmp = oDicCmp( cmpnam )
  ccmp.count = ccmp.count + 1
  ccmp.devnamlst.Add dev.Getid, null
  if ccmp.location <> "" then
     ccmp.location = ccmp.location & "," & dev.GetLocation
  else
     ccmp.location = dev.GetLocation
  end if
End If

Das sollte fluppen.
Liebe Grüße

Jörg

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