Archivwerte von einem Archiv ins Andere übertragen

Archivwerte von einem Archiv ins Andere übertragen

Hallo,
ein Zenonprojekt verändert sich über die Zeit. Ich habe in einem bestehenden Projekt Energieverbräuche archiviert. Je Energieform habe ich ein Archiv erstellt. œber die Zeit hat es sich aber bewährt alle Verbräuche in einem Archiv zu speichern. Ich habe also ein neues Archiv erstellt in dem alle Variablen liegen die vorher in den anderen Archiven verteilt waren. Nun möchte ich aber das die alten Archivwerte weiter verfügbar sind, und ich möchte auch nicht einen separaten Weg erstellen um einen Trend mit den neuen Werten und einen Trend mit den alten Werten zu erstellen. Die Archive beinhalten auch Folgearchive und haben auch eine etwas andere Auflösung (Aufzeichnungszyklus).
Grundsätzlich ist es ja möglich Werte in einem Archiv manuell nachzutragen, mit dem Bildtyp Archiv-Nachbearbeitung.
Was ich aber machen möchte, ist mittels VBA alle alten Archive zu durchlaufen und jeweils abhängig vom Variablennamen die alten Archivwerte in das große neue Archiv übertragen.
Mit Archiven sollte man etwas vorsichtig sein, deshalb meine Frage, hat schon mal jemand so etwas gemacht?
Gibt es etwas auf das ich achten muss, oder kann ich einfach neue Archiveinträge anlagen? Kann ich einen Archiveintrag als ganzes Objekt verschieben oder muss ich alle Eigenschaften (Zeit Werst Satus etc.) einzeln auslesen und neu anlegen?
Bis jetzt habe ich mir mal folgendes zusammen gereimt.
VBA Code:

Public Sub LeftClickUp_Test(obElem As Element)
'Archivwerte von altem in neues Archiv übertragen
'Werte werden nach Variablennamen identifiziert
'Zeitraum der zu übertragenden Werte bitte angeben
'Declarations
Dim zArchiveZiel As Archive
Dim zArchivQuelle As Archive

Dim zArvFilterZiel As ArchiveFilter
Dim zArvFilterQuelle As ArchiveFilter
Dim dTime As Double

Dim zArvVarsZiel As ArchiveFilterVariables
Dim zArvVarsQuelle As ArchiveFilterVariables

Dim myNewArchivValue As ArchiveValue

Dim i As Long
Dim k As Long
Dim y As Long
Dim n As Long
Dim j As Long

'Initialize zArchive with the first available archive
Set zArchiveZiel = thisProject.Archives.Item("ArchivZiel")
'Initialize zArchive with the first available archive
Set zArchiveQuelle = thisProject.Archives.Item("ArchivQuelle")

'If no archive is availabe, then ...
If zArchiveZiel Is Nothing Or zArchiveQuelle Is Nothing Then
'... inform the user
MsgBox ("No archive available!")

Else
'Initialize zArvFilter by creating a new archive filter
Set zArvFilterZiel = zArchiveZiel.ArchiveFilters.CreateArchiveFilter
'Initialize zArvFilter by creating a new archive filter
Set zArvFilterQuelle = zArchiveQuelle.ArchiveFilters.CreateArchiveFilter
End If
'manuell pflegen
dTime = System2zenOn(CDbl(CDate("01.01.2014")))
zArvFilterZiel.StartTime = dTime
zArvFilterQuelle.StartTime = dTime
'Endzeit des Filter ist aktuelle Zeit (in Long)
dTime = System2zenOn(CDbl(Now))
zArvFilterZiel.EndTime = dTime
zArvFilterQuelle.EndTime = dTime

'alle Variablen im Archiv in den Filter laden
For k = 0 To zArchiveZiel.ArchiveVariables.Count - 1
zArvFilter.AddArchiveVariable zArchiveZiel.ArchiveVariables.Item(k)
n = n + 1
Next k

'alle Variablen im Archiv in den Filter laden
For k = 0 To zArchiveQuelle.ArchiveVariables.Count - 1
zArvFilterQuelle.AddArchiveVariable zArchiveQuelle.ArchiveVariables.Item(k)
j = j + 1
Next k

'Initialize zArvVars by initiating a new filter query
Set zArvVarsZiel = zArvFilterZiel.Query
'Initialize zArvVars by initiating a new filter query
Set zArvVarsQuelle = zArvFilterQuelle.Query


'Prüfung ob Werte aus dem Archiv geslesen wurden, oder ob ein Fehler beim Filtern auftrat
If zArvVarsZiel.Item(0).ArchiveValues.Count = 0 Or zArvVarsQuelle.Item(0).ArchiveValues.Count = 0 Then
MsgBox ("keine Daten Verfügbar")
Exit Sub
End If

For k = 0 To j - 1

For i = 0 To n - 1

If zArvVarsQuelle.Item(j).ArchiveVariable.Name = zArvVarsZiel.Item(n).ArchiveVariable.Name Then

For y = 0 To zArvVarsQuelle.Item(j).ArchiveValues.Count - 1

Set myNewArchivValue = zArvVarsZiel.Item(n).ArchiveValues.CreateArchiveValue
Set myNewArchivValue = zArvVarsQuelle.Item(j).ArchiveValues.Item(y)
myNewArchivValue.SetModified 'set entry to modified

Next y
End If
Next i
Next k

End Sub

Gruß Tobi

This is a migrated post! Originally posted on 11.02.2016 by user zero. Please be aware that information can be outdated.