Dieses Skript läuft täglich um Mitternacht und wird dazu verwendet neue Einträge für Statistiken zu generieren.
Die einzige Aufgabe von Sub CreateStatisticEntry2 ist es, anhand der bereitgestellten Parameter täglich Daten in die Statistiktabelle zu schreiben.
Public Shared Sub CreateStatisticEntry2(p as Statistics.CreateStatisticsEventArgs)
End Sub
Parameter von p
Parameter |
Typ |
Beschreibung |
|
---|---|---|---|
st |
tbl_Statistik_Settings |
Beinhaltet die Einstellungen. Nur erforderlich für Scripts die auf die Filtereinstellungen zugreifen oder das zuletzt berechnete Datum in den Einstellungen speichern. |
|
dc |
DC_AllgemeinDataContext |
Der Datenkontext für den Zugriff auf die Datenbank. |
|
prg |
IProgress(of TaskProgress) |
Schnittstelle zur Rückmeldung des Fortschritts |
|
ctx |
CancellationToken |
Token für kontrollierten Abbruch wenn Skript während der Ausführung gestoppt werden soll. z.B. beim Abbruch des Jobs oder herunterfahren des Servers. |
|
InsertOrUpdate() |
Sub |
Speichert die Statistikdaten. |
Ausgabe
Die Ausgabe erfolgt durch schreiben von Daten in die Statistiktabelle mit der Funktion:
p.InsertOrUpdate([Datum], [Wert], [MinimumWert], [MaximumWert], [istGeschätzt], [Unterkategorie], [Gruppe])
Parameter |
Typ |
Beschreibung |
|
---|---|---|---|
[Datum] |
DateTime |
Das Datum für den Statistikeintrag. Es sollte die Zeitkomponente entfernt werden. (00:00 Uhr) |
|
[Wert] |
Decimal(18,2) |
Wert (Pflichtfeld) Eintrag wird bei "nothing" gelöscht. |
|
[minimumWert] |
Decimal(18,2) |
Optionaler Wert |
|
[maximumWert] |
Decimal(18,2) |
Optionaler Wert |
|
[istGeschätzt] |
boolean |
Pflichtfeld. Ja / Nein |
|
[Unterkategorie] |
bigint / Int64 |
Pflichtfeld. ID für Unterkategorie. Wenn keine Unterkategorie verwendet wird muss der Wert auf 0 gesetzt werden. |
|
[Gruppe] |
string |
Pflichtfeld. Die Gruppe bzw. die Serie der Statistik. Falls keine Gruppierung verwendet wird muss eine beliebige Zeichenfolge übergeben werden. z.B. "" |
Das folgende Beispiel generiert die Statistik für den Lagerstand pro Warengruppe.
Beispiel
Public Shared Sub CreateStatisticEntry2(p as Statistics.CreateStatisticsEventArgs)
Dim EvaluatedDay = p.dc.GetServerTime.Value.AddDays(-1)
If Not p.st.StartTime Is Nothing Then
EvaluatedDay = p.st.StartTime
End If
EvaluatedDay = Styletronix.Utils.DateTimeHelper.Truncate(EvaluatedDay, TimeSpan.TicksPerDay)
Dim QueryDatum As DateTime = EvaluatedDay.AddDays(1)
Do Until QueryDatum > If(p.dc.GetServerTime, DateTime.Now)
For Each g In (From a In p.dc.tbl_Warengruppen Where a.keineLagerstatistik Is Nothing OrElse a.keineLagerstatistik = False)
Dim SummeEK As Decimal = 0
Dim SummeVK As Decimal = 0
Dim Zwischensumme As Decimal = 0
p.prg.Report(New Styletronix.Threading.TaskProgress(0, String.Format("Lagerstand für Warengruppe {0} und Datum {1} erfassen...", g.Bezeichnung, QueryDatum.ToShortDateString)))
For Each art In (From a In g.tbl_Artikel)
p.ctx.ThrowIfCancellationRequested()
For Each lager In (From a In dc.tbl_Lagers)
Dim Menge = p.dc.Artikel_Lagerstand_Datum(art.ID, lager.ID, QueryDatum) ' Where a.UnterLager Is Nothing).FirstOrDefault
Zwischensumme = (Menge * art.EK_ProLagereinheit)
If Zwischensumme > 0 Then SummeEK += Zwischensumme
Zwischensumme = (Menge * art.VK_ProLagereinheit)
If Zwischensumme > 0 Then SummeVK += Zwischensumme
Next
Next
p.InsertOrUpdate(QueryDatum, (SummeEK + SummeVK) / 2, SummeEK, SummeVK, False, 0, g.Bezeichnung)
Next
p.st.StartTime = QueryDatum
p.dc.SubmitChanges()
QueryDatum = p.st.StartTime.Value.AddDays(10)
Loop
End Sub