Veraltet. Verwenden Sie für neue Skripts die Funktion CreateStatisticEntry2
Dieses Skript läuft täglich um Mitternacht und wird dazu verwendet neue Einträge für Statistiken mit der Funktion dc.InsertOrUpdate_Statistik() zu generieren.
Die einzige Aufgabe von Sub CreateStatisticEntry ist es, anhand der bereitgestellten Parameter täglich Daten in die Statistiktabelle zu schreiben.
Parameter
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. |
Ausgabe
Die Ausgabe erfolgt durch schreiben von Daten in die Statistiktabelle mit der Funktion:
dc.InsertOrUpdate_Statistik([Datum], [Wert], [MinimumWert], [MaximumWert], [istGeschätzt], st.ID, [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 |
|
st.ID |
bigint / Int64 |
Die ID der Statistik. Hier muss zwingend st.ID verwendet werden. |
|
[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 CreateStatisticEntry(st As tbl_Statistik_Settings, dc As DC_AllgemeinDataContext, prg As IProgress(Of Styletronix.Threading.TaskProgress), ctx As System.Threading.CancellationToken)
Dim EvaluatedDay = dc.GetServerTime.Value.AddDays(-1)
If Not st.StartTime Is Nothing Then
EvaluatedDay = st.StartTime
End If
EvaluatedDay = Styletronix.Utils.DateTimeHelper.Truncate(EvaluatedDay, TimeSpan.TicksPerDay)
Dim QueryDatum As DateTime = EvaluatedDay.AddDays(1)
Do Until QueryDatum > If(dc.GetServerTime, DateTime.Now)
For Each g In (From a In 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
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)
ctx.ThrowIfCancellationRequested()
For Each lager In (From a In dc.tbl_Lagers)
Dim Menge = 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
dc.InsertOrUpdate_Statistik(QueryDatum, (SummeEK + SummeVK) / 2, SummeEK, SummeVK, False, st.ID, 0, g.Bezeichnung)
Next
st.StartTime = QueryDatum
dc.SubmitChanges()
QueryDatum = st.StartTime.Value.AddDays(10)
Loop
End Sub