-- Zur richtigen Daten wechseln
USE eazybusiness
-- Benötigte Variablen deklarieren
DECLARE @Startzeitpunkt datetime
DECLARE @Endzeitpunkt datetime
DECLARE @kArtikel int
DECLARE @cArtNr varchar(100)
DECLARE @cBarcode varchar(255)
DECLARE @fEKNetto decimal(28,15)
DECLARE @cName varchar(255)
DECLARE @Bestand_Aktuell decimal(28,15)
DECLARE @Bestand_Endzeitpunkt decimal(28,15)
DECLARE @Bestand_Startzeitpunkt decimal(28,15)
DECLARE @Menge_Warenausgang decimal(28,15)
DECLARE @Menge_Wareneingang decimal(28,15)
-- Den Start und Endzeitpunkt für die Auswertung definieren
SET @Startzeitpunkt = CONVERT(varchar(30),'01.01.2016 06:00:00',4)
SET @Endzeitpunkt = CONVERT(varchar(30),'07.01.2016 12:00:00',4)
-- Temporäre Tabelle erstellen in der die ausgewerteten Daten gesammelt werden
CREATE TABLE #Bestandsauswertung ( InterneID int, Artikelnummer varchar(255), Artikelbezeichnung varchar(255), Barcode varchar(255), EKNetto decimal(28,15), Bestand_Start decimal(28,15), Bestand_Ende decimal(28,15), Differenz decimal(28,15) )
-- Die gesuchten Artikeldaten abrufen
DECLARE Artikeldaten CURSOR FOR
SELECT TOP(100) tArtikel.kArtikel, tArtikel.cArtNr, tArtikel.cBarcode, tArtikel.fEKNetto, tArtikelBeschreibung.cName, tlagerbestand.fLagerbestand
FROM tArtikel INNER JOIN tArtikelBeschreibung ON (tArtikel.kArtikel = tArtikelBeschreibung.kArtikel) INNER JOIN tlagerbestand ON (tArtikel.kArtikel = tlagerbestand.kArtikel)
WHERE tArtikel.cLagerAktiv = 'Y' AND tArtikel.kStueckliste = 0 AND tArtikel.nIstVater = 0 AND tArtikelBeschreibung.kSprache = 1 AND tArtikelBeschreibung.kShop = 0 AND tArtikelBeschreibung.kPlattform = 1
-- Die Variablen mit den entsprechenden Werten belegen und
OPEN Artikeldaten;
FETCH NEXT FROM Artikeldaten INTO @kArtikel, @cArtNr, @cBarcode, @fEKNetto, @cName, @Bestand_Aktuell;
-- Alle gefundenen Artikel nacheinander durchlaufen
WHILE @@FETCH_STATUS = 0
BEGIN
-- Ermittle die Warenausgänge seit dem heutigen Datum und dem Endzeitpunkt
SELECT @Menge_Warenausgang = COALESCE(SUM(fAnzahl), 0) FROM tWarenLagerAusgang WHERE kArtikel = @kArtikel AND dErstellt BETWEEN @Endzeitpunkt AND CURRENT_TIMESTAMP
-- Ermittle die Wareningänge seit dem heutigen Datum und dem Endzeitpunk
SELECT @Menge_Wareneingang = COALESCE(SUM(fAnzahl), 0) FROM tWarenLagerEingang WHERE kArtikel = @kArtikel AND dErstellt BETWEEN @Endzeitpunkt AND CURRENT_TIMESTAMP
-- Speichere den Bestand der zum Endzeitpunkt vorhanden war in eine Variable
SET @Bestand_Endzeitpunkt = @Bestand_Aktuell + @Menge_Warenausgang - @Menge_Wareneingang
-- Ermittle die Warenausgänge seit dem heutigen Datum und dem Endzeitpunkt
SELECT @Menge_Warenausgang = COALESCE(SUM(fAnzahl), 0) FROM tWarenLagerAusgang WHERE kArtikel = @kArtikel AND dErstellt BETWEEN @Startzeitpunkt AND DATEADD(second, -1, @Endzeitpunkt)
-- Ermittle die Wareningänge seit dem heutigen Datum und dem Endzeitpunk
SELECT @Menge_Wareneingang = COALESCE(SUM(fAnzahl), 0) FROM tWarenLagerEingang WHERE kArtikel = @kArtikel AND dErstellt BETWEEN @Startzeitpunkt AND DATEADD(second, -1, @Endzeitpunkt)
-- Speichere den Bestand der zum Startzeit vorhanden war in eine Variable
SET @Bestand_Startzeitpunkt = @Bestand_Endzeitpunkt + @Menge_Warenausgang - @Menge_Wareneingang
-- Prüfe ob bereits eine Auswertung für diesen Artikel vorhanden ist, kann passieren wenn der Artikel in mehreren Kategorien der Abfrage vorhanden ist
IF NOT EXISTS(SELECT InterneID FROM #Bestandsauswertung WHERE InterneID = @kArtikel)
BEGIN
-- Füge die Bestandsdaten in die temporäre Tabelle ein
INSERT INTO #Bestandsauswertung
(InterneID , Artikelnummer , Artikelbezeichnung, Barcode , EKNetto, Bestand_Start, Bestand_Ende, Differenz)
VALUES
(@kArtikel, @cArtNr, @cName, @cBarcode, @fEKNetto, @Bestand_Startzeitpunkt, @Bestand_Endzeitpunkt, @Bestand_Endzeitpunkt - @Bestand_Startzeitpunkt)
END
FETCH NEXT FROM Artikeldaten INTO @kArtikel, @cArtNr, @cBarcode, @fEKNetto, @cName, @Bestand_Aktuell;
END
CLOSE Artikeldaten;
DEALLOCATE Artikeldaten;
-- Rufe die gesammelten Daten aus der temporären Tabelle ab und lösche sie anschliessend
SELECT * FROM #Bestandsauswertung
DROP TABLE #Bestandsauswertung