Gelöst Stichtagsbezogene Lagerbewertung [WAWI-37044, WAWI-37043, WAWI-33817, WAWI-32600, WAWI-8316]

overfl0w23

Aktives Mitglied
19. Oktober 2020
57
23
localhost
Hier ein Beispiel:
Screenshot_1.png
SQL-Server: IPADRESSE,PORT\INSTANZ
Datenbank: eazybusiness
SQL Benutzername: (Hier reicht ein Nutzer mit Lesezugriff)
Passwort: Passwort vom Benutzer darüber.


LG
 
  • Gefällt mir
Reaktionen: MoS.pnx

Kissenoutlet24.de

Gut bekanntes Mitglied
2. April 2012
156
5
Sonneberg
Moin Zusammen, ich habe ein wenig Zeit gehabt und eine komplett neue Version gebaut. Wie immer dennoch Beta und ich übernehme keine Gewähr für irgendwas.
Über Feedback oder eine kleine Spende würde ich mich freuen.


Den Anhang 117352 betrachten

Download nach wie vor unter: https://schadeit.de/stockscope/

LG
Hallo,
wir haben gerade mal das Tool getestet,
es scheint ein Bestandsproblem zu geben.
Bei manchen Artikeln, kommt es uns vor als würde das Tool 1 und 7 verwechseln.
Also aktueller Bestand 11 in der WaWi und im Tool Bestand 77, ein weiterer Artikel Bestand 100 in der WaWi im Tool 700.
 

Kissenoutlet24.de

Gut bekanntes Mitglied
2. April 2012
156
5
Sonneberg
Ich habe jetzt nochmal etwas an der ersten Abfrage geändert und dies als v0.3b hochgeladen.
Die SQL Abfrage sieht nun so aus:

-- Deklarieren der Parameter für den Stichtag und das Lager
DECLARE @Stichtag AS DATE = @date;
DECLARE @warenlager INT = @warehouse;

-- Hauptabfrage zur Berechnung der Lagerbewertung
SELECT
tArtikel.cArtNr AS Artikelnummer,
MAX(tArtikelBeschreibung.cName) AS Artikelname,
tWarenLager.cName AS Lager,

-- Berechnung des Bestands zum Stichtag
SUM(
ISNULL(tWarenLagerEingang.fAnzahl, 0.0) -- Summe der Wareneingänge bis zum Stichtag
- ISNULL(Warenausgang.fAnzahl, 0.0) -- Abzüglich der Warenausgänge bis zum Stichtag
) AS Bestand,

-- Berechnung des Gesamt-EK-Werts zum Stichtag
SUM(
(ISNULL(tWarenLagerEingang.fAnzahl, 0.0) -- Summe der Wareneingänge
- ISNULL(Warenausgang.fAnzahl, 0.0)) -- Abzüglich der Warenausgänge
* ISNULL(tWarenLagerEingang.fEKEinzel, 0.0) -- Multipliziert mit dem Einzel-EK-Preis
) AS EKGesamt,

-- Ermittlung des letzten Lieferdatums
MAX(tWarenLagerEingang.dGeliefertAm) AS LetztesLieferdatum,

-- Bestimmung der Abwertungsstufe basierend auf dem letzten Lieferdatum
CASE
WHEN YEAR(MAX(tWarenLagerEingang.dGeliefertAm)) = YEAR(@Stichtag) THEN 'dieses Jahr 100%'
WHEN YEAR(MAX(tWarenLagerEingang.dGeliefertAm)) = YEAR(@Stichtag) - 1 THEN 'Letztes Jahr 90%'
WHEN YEAR(MAX(tWarenLagerEingang.dGeliefertAm)) = YEAR(@Stichtag) - 2 THEN 'Vorletztes Jahr 80%'
ELSE 'älter als vor 2 Jahren 50%'
END AS Abwertung,

-- Berechnung des wertberichtigten EK-Werts basierend auf der Abwertung
COALESCE(
CASE
WHEN YEAR(MAX(tWarenLagerEingang.dGeliefertAm)) = YEAR(@Stichtag)
THEN SUM((ISNULL(tWarenLagerEingang.fAnzahl, 0.0)
- ISNULL(Warenausgang.fAnzahl, 0.0))
* ISNULL(tWarenLagerEingang.fEKEinzel, 0.0))
WHEN YEAR(MAX(tWarenLagerEingang.dGeliefertAm)) = YEAR(@Stichtag) - 1
THEN SUM((ISNULL(tWarenLagerEingang.fAnzahl, 0.0)
- ISNULL(Warenausgang.fAnzahl, 0.0))
* ISNULL(tWarenLagerEingang.fEKEinzel, 0.0) * 0.9)
WHEN YEAR(MAX(tWarenLagerEingang.dGeliefertAm)) = YEAR(@Stichtag) - 2
THEN SUM((ISNULL(tWarenLagerEingang.fAnzahl, 0.0)
- ISNULL(Warenausgang.fAnzahl, 0.0))
* ISNULL(tWarenLagerEingang.fEKEinzel, 0.0) * 0.8)
ELSE SUM((ISNULL(tWarenLagerEingang.fAnzahl, 0.0)
- ISNULL(Warenausgang.fAnzahl, 0.0))
* ISNULL(tWarenLagerEingang.fEKEinzel, 0.0) * 0.5)
END
, 0.0) AS Wertberichtigt
FROM dbo.tWarenLagerPlatz
LEFT JOIN dbo.tWarenLagerEingang
ON tWarenLagerPlatz.kWarenLagerPlatz = tWarenLagerEingang.kWarenLagerPlatz
AND tWarenLagerEingang.dErstellt <= @Stichtag -- Nur Wareneingänge bis zum Stichtag
JOIN dbo.tWarenLager
ON tWarenLagerPlatz.kWarenLager = tWarenLager.kWarenLager
LEFT JOIN dbo.tArtikel
ON tWarenLagerEingang.kArtikel = tArtikel.kArtikel
LEFT JOIN dbo.tSpracheUsed
ON dbo.tSpracheUsed.nStandard = 1
LEFT JOIN dbo.tArtikelBeschreibung
ON tArtikel.kArtikel = tArtikelBeschreibung.kArtikel
AND dbo.tSpracheUsed.kSprache = tArtikelBeschreibung.kSprache

-- Subquery zur Berechnung der Warenausgänge bis zum Stichtag
LEFT JOIN
(
SELECT
SUM(ISNULL(tWarenLagerAusgang.fAnzahl, 0.0)) AS fAnzahl,
tWarenLagerAusgang.kWarenLagerEingang
FROM dbo.tWarenLagerAusgang
WHERE tWarenLagerAusgang.dErstellt <= @Stichtag -- Nur Warenausgänge bis zum Stichtag
GROUP BY tWarenLagerAusgang.kWarenLagerEingang
) AS Warenausgang
ON tWarenLagerEingang.kWarenLagerEingang = Warenausgang.kWarenLagerEingang

-- Filtern nach dem ausgewählten Lager
WHERE tWarenLager.kWarenLager = @warenlager

-- Gruppieren nach Lagername und Artikelnummer
GROUP BY tWarenLager.cName, tArtikel.cArtNr

-- Sortieren nach Artikelnummer
ORDER BY tArtikel.cArtNr;

Ich hab das ganze mal ordentlich kommentiert und hoffe, dass ich keinen Denkfehler drin habe.
Würde mich über Feedback freuen.
Hi,
danke für deine Abfrage, leider kommt beim Export folgender Fehler.
 

Anhänge

  • Screenshot 2025-01-03 105918.png
    Screenshot 2025-01-03 105918.png
    7,2 KB · Aufrufe: 6

overfl0w23

Aktives Mitglied
19. Oktober 2020
57
23
localhost
Schaue ich mir schnellstmöglich an. Danke fürs Feedback. Nochmal kurz zum Verständnis:

- Der Fehler kommt beim v0.3b?
- Bestandsproblem bsp: 11 wird zu 77 bei Version 0.4b?

Ich würde mich nur um die neue Version kümmern. Ich hatte keine Fehler bei mir und versuche es nachzustellen bzw den Fehler zu finden.

lg
 

Kissenoutlet24.de

Gut bekanntes Mitglied
2. April 2012
156
5
Sonneberg
Schaue ich mir schnellstmöglich an. Danke fürs Feedback. Nochmal kurz zum Verständnis:

- Der Fehler kommt beim v0.3b?
- Bestandsproblem bsp: 11 wird zu 77 bei Version 0.4b?

Ich würde mich nur um die neue Version kümmern. Ich hatte keine Fehler bei mir und versuche es nachzustellen bzw den Fehler zu finden.

lg
Haben die Version 0.4b getestet.
 

overfl0w23

Aktives Mitglied
19. Oktober 2020
57
23
localhost
- Fehler behoben, bei dem Bestände in manchen Fällen zu hoch waren (z. B. 77 statt 11).
- Ursache: Mehrfache JOINs auf tArtikelBeschreibung führten zu Vervielfachung.
- Lösung: DISTINCT-Join in der Standard- und Mit-Abwertung-SQL-Abfrage eingeführt, damit jeder Artikel nur einmal gejoint wird. Funktion bleibt unverändert, liefert nun aber korrekte Werte.

Version 0.41b

Kissenoutlet24.de würde mich freuen wenn Du mir nen Feedback gibst :)

 

Kissenoutlet24.de

Gut bekanntes Mitglied
2. April 2012
156
5
Sonneberg
- Fehler behoben, bei dem Bestände in manchen Fällen zu hoch waren (z. B. 77 statt 11).
- Ursache: Mehrfache JOINs auf tArtikelBeschreibung führten zu Vervielfachung.
- Lösung: DISTINCT-Join in der Standard- und Mit-Abwertung-SQL-Abfrage eingeführt, damit jeder Artikel nur einmal gejoint wird. Funktion bleibt unverändert, liefert nun aber korrekte Werte.

Version 0.41b

Kissenoutlet24.de würde mich freuen wenn Du mir nen Feedback gibst :)

Hallo,

vielen Dank für die schnelle Umsetzung.
Leider haben wir mit der neuen Version noch keine Lösung.
Bei der neuen Version 0.41 haben wir bei einem Artikel 600 Stück, in der Version 0.4 waren es 700 Stück in der Wawi sind es aber 100 Stück
 

overfl0w23

Aktives Mitglied
19. Oktober 2020
57
23
localhost
Okay, ich schaue es mir nochmal genauer an.
Sobald ich den Fehler habe schreibe ich es hier.
Ich werde ausgiebiger testen.

Danke ebenfalls für die rasche Rückmeldung.
 

overfl0w23

Aktives Mitglied
19. Oktober 2020
57
23
localhost

Kissenoutlet24.de Magst Du folgende SQLs mal testen bitte?​

Wenn es nun stimmt würde ich das einmal als neue Version veröffentlichen.

Standard:
SQL:
-- Hauptabfrage zur Berechnung der Lagerbewertung 0.42b
SELECT
    tArtikel.cArtNr AS Artikelnummer,
    MAX(artDesc.cName) AS Artikelname,                 -- Nur 1 Beschreibung pro Artikel
    AVG(tWarenLagerEingang.fEKEinzel) AS [Durchschnittlicher Einkaufspreis],
    SUM(ISNULL(tWarenLagerEingang.fAnzahl, 0.0)
        - ISNULL(Warenausgang.fAnzahl, 0.0)) AS Bestand,
    SUM(
        (ISNULL(tWarenLagerEingang.fAnzahl, 0.0)
         - ISNULL(Warenausgang.fAnzahl, 0.0))
        * ISNULL(tWarenLagerEingang.fEKEinzel, 0.0)
    ) AS [Einkaufspreis Gesamt],
    tWarenLager.cName AS Lagerplatz,
    MAX(tWarenLagerEingang.dGeliefertAm) AS [Letztes Lieferdatum]
FROM dbo.tWarenLagerPlatz
LEFT JOIN dbo.tWarenLagerEingang
    ON tWarenLagerPlatz.kWarenLagerPlatz = tWarenLagerEingang.kWarenLagerPlatz
    AND tWarenLagerEingang.dErstellt <= @date -- Nur Wareneingänge bis zum Stichtag
JOIN dbo.tWarenLager
    ON tWarenLagerPlatz.kWarenLager = tWarenLager.kWarenLager
LEFT JOIN dbo.tArtikel
    ON tWarenLagerEingang.kArtikel = tArtikel.kArtikel

-- Subquery für Artikelbeschreibung (nur 1 Datensatz pro Artikel; Standard-Sprache)
LEFT JOIN
(
    SELECT
        ab.kArtikel,
        ab.cName
    FROM dbo.tArtikelBeschreibung ab
    INNER JOIN dbo.tSpracheUsed su
        ON su.nStandard = 1
        AND su.kSprache = ab.kSprache

    GROUP BY ab.kArtikel, ab.cName
) AS artDesc
    ON tArtikel.kArtikel = artDesc.kArtikel

-- Subquery zur Berechnung der Warenausgänge bis zum Stichtag
LEFT JOIN
(
    SELECT
        SUM(ISNULL(tWarenLagerAusgang.fAnzahl, 0.0)) AS fAnzahl,
        tWarenLagerAusgang.kWarenLagerEingang
    FROM dbo.tWarenLagerAusgang
    WHERE tWarenLagerAusgang.dErstellt <= @date
    GROUP BY tWarenLagerAusgang.kWarenLagerEingang
) AS Warenausgang
    ON tWarenLagerEingang.kWarenLagerEingang = Warenausgang.kWarenLagerEingang

WHERE tWarenLager.kWarenLager = @warehouse

GROUP BY
    tArtikel.cArtNr,
    tWarenLager.cName

ORDER BY
    tArtikel.cArtNr;

Mit Abwertung:
SQL:
-- Diese SQL-Abfrage berechnet die Lagerbewertung für Artikel in einem Lager
-- inkl. Abwertung nach Lagerdauer 0.42b
WITH LagerBewertung AS
(
    SELECT
        tArtikel.cArtNr AS Artikelnummer,
        MAX(artDesc.cName) AS Artikelname,   -- Nur 1 Beschreibung pro Artikel
        AVG(tWarenLagerEingang.fEKEinzel) AS [Durchschnittlicher Einkaufspreis],
        SUM(
            ISNULL(tWarenLagerEingang.fAnzahl, 0.0)
            - ISNULL(Warenausgang.fAnzahl, 0.0)
        ) AS Bestand,
        SUM(
            (ISNULL(tWarenLagerEingang.fAnzahl, 0.0)
             - ISNULL(Warenausgang.fAnzahl, 0.0))
            * ISNULL(tWarenLagerEingang.fEKEinzel, 0.0)
        ) AS [Einkaufspreis Gesamt],
        tWarenLager.cName AS Lagerplatz,
        MAX(tWarenLagerEingang.dGeliefertAm) AS [Letztes Lieferdatum],
        DATEDIFF(YEAR, MAX(tWarenLagerEingang.dGeliefertAm), @date) AS [Lagerdauer in Jahren]
    FROM dbo.tWarenLagerPlatz
    LEFT JOIN dbo.tWarenLagerEingang
        ON tWarenLagerPlatz.kWarenLagerPlatz = tWarenLagerEingang.kWarenLagerPlatz
        AND tWarenLagerEingang.dErstellt <= @date
    JOIN dbo.tWarenLager
        ON tWarenLagerPlatz.kWarenLager = tWarenLager.kWarenLager
    LEFT JOIN dbo.tArtikel
        ON tWarenLagerEingang.kArtikel = tArtikel.kArtikel

    -- Subquery für Artikelbeschreibung (nur 1 Datensatz pro Artikel; Standard-Sprache)
    LEFT JOIN
    (
        SELECT
            ab.kArtikel,
            ab.cName
        FROM dbo.tArtikelBeschreibung ab
        INNER JOIN dbo.tSpracheUsed su
            ON su.nStandard = 1
            AND su.kSprache = ab.kSprache

        GROUP BY ab.kArtikel, ab.cName
    ) AS artDesc
        ON tArtikel.kArtikel = artDesc.kArtikel

    -- Subquery zur Berechnung der Warenausgänge bis zum Stichtag
    LEFT JOIN
    (
        SELECT
            SUM(ISNULL(tWarenLagerAusgang.fAnzahl, 0.0)) AS fAnzahl,
            tWarenLagerAusgang.kWarenLagerEingang
        FROM dbo.tWarenLagerAusgang
        WHERE tWarenLagerAusgang.dErstellt <= @date
        GROUP BY tWarenLagerAusgang.kWarenLagerEingang
    ) AS Warenausgang
        ON tWarenLagerEingang.kWarenLagerEingang = Warenausgang.kWarenLagerEingang

    WHERE tWarenLager.kWarenLager = @warehouse

    GROUP BY
        tArtikel.cArtNr,
        tWarenLager.cName
)
SELECT
    Artikelnummer,
    Artikelname,
    [Durchschnittlicher Einkaufspreis],
    Bestand,
    [Einkaufspreis Gesamt],
    Lagerplatz,
    [Letztes Lieferdatum],
    [Lagerdauer in Jahren],
    CASE
        WHEN [Lagerdauer in Jahren] >= 3 THEN 0.5  -- 50% Abwertung nach 3 Jahren
        WHEN [Lagerdauer in Jahren] = 2 THEN 0.8   -- 20% Abwertung nach 2 Jahren
        WHEN [Lagerdauer in Jahren] = 1 THEN 0.9   -- 10% Abwertung nach 1 Jahr
        ELSE 1.0                                   -- Kein Wertverlust innerhalb des ersten Jahres
    END AS Abwertungsfaktor,
    [Einkaufspreis Gesamt] *
    CASE
        WHEN [Lagerdauer in Jahren] >= 3 THEN 0.5
        WHEN [Lagerdauer in Jahren] = 2 THEN 0.8
        WHEN [Lagerdauer in Jahren] = 1 THEN 0.9
        ELSE 1.0
    END AS [Abgewerteter Gesamtwert]
FROM LagerBewertung
ORDER BY Artikelnummer;


*** EDIT ***
Ich schaffe es nicht den Fehler zu reproduzieren. Bei mir wird alles richtig angezeigt.
Dieses SQL sollte die Fehler dennoch eigentl. ausschließen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: arich001

overfl0w23

Aktives Mitglied
19. Oktober 2020
57
23
localhost
So ich habe es alles einmal überarbeitet und sobald ich Zuhause bin schiebe ich das als finale Version hoch.
Hier die SQL Abfragen, die ihr bis dahin einfach im Programm anlegen könnt:

Finale SQL Abfragen"]Standardabfrage welche Artikel mit dem Zustand brauchbar, defekt und verpackung nicht mit einbezieht:
SQL:
/*
    Hinweis:
    Standardabfrage welche die folgenden Zustände NICHT mit einbezieht:
    
    -- AND tArtikel.cArtNr NOT LIKE '%brauchbar'
    -- AND tArtikel.cArtNr NOT LIKE '%defekt'
    -- AND tArtikel.cArtNr NOT LIKE '%verpackung'
*/

SELECT
    tArtikel.cArtNr AS Artikelnummer,
    MAX(tArtikelBeschreibung.cName) AS Artikelname,

    -- Einkaufspreis Gesamt
    SUM(
        (ISNULL(tWarenLagerEingang.fAnzahl, 0.0) - ISNULL(Warenausgang.fAnzahl, 0.0))
        * ISNULL(tArtikel.fEKNetto, 0.0)
    ) AS [Einkaufspreis Gesamt],
    
    -- Durchschnittlicher EK pro Stück
    CASE
        WHEN SUM(ISNULL(tWarenLagerEingang.fAnzahl, 0.0) - ISNULL(Warenausgang.fAnzahl, 0.0)) <> 0
        THEN
            SUM(
                (ISNULL(tWarenLagerEingang.fAnzahl, 0.0) - ISNULL(Warenausgang.fAnzahl, 0.0))
                * ISNULL(tArtikel.fEKNetto, 0.0)
            )
            /
            SUM(ISNULL(tWarenLagerEingang.fAnzahl, 0.0) - ISNULL(Warenausgang.fAnzahl, 0.0))
        ELSE 0
    END AS [Durchschnittlicher EK Einzel],

    -- Bestand
    SUM(
        ISNULL(tWarenLagerEingang.fAnzahl, 0.0)
        - ISNULL(Warenausgang.fAnzahl, 0.0)
    ) AS Bestand,

    tWarenLager.cName AS Lager,
    MAX(tWarenLagerEingang.dGeliefertAm) AS [Letztes Lieferdatum]

FROM dbo.tWarenLagerPlatz
JOIN dbo.tWarenLager
    ON tWarenLagerPlatz.kWarenLager = tWarenLager.kWarenLager
LEFT JOIN dbo.tWarenLagerEingang
    ON tWarenLagerPlatz.kWarenLagerPlatz = tWarenLagerEingang.kWarenLagerPlatz
    AND tWarenLagerEingang.dErstellt < DATEADD(dd, +1, @date)
LEFT JOIN dbo.tArtikel
    ON tWarenLagerEingang.kArtikel = tArtikel.kArtikel
LEFT JOIN dbo.tSpracheUsed
    ON dbo.tSpracheUsed.nStandard = 1
LEFT JOIN
(
    SELECT DISTINCT kArtikel, cName, kSprache, kPlattform
    FROM dbo.tArtikelBeschreibung
) AS tArtikelBeschreibung
    ON tArtikel.kArtikel = tArtikelBeschreibung.kArtikel
    AND dbo.tSpracheUsed.kSprache = tArtikelBeschreibung.kSprache
    AND tArtikelBeschreibung.kPlattform = 1  -- Wichtig!

LEFT JOIN
(
    SELECT
        SUM(ISNULL(tWarenLagerAusgang.fAnzahl, 0.0)) AS fAnzahl,
        tWarenLagerAusgang.kWarenLagerEingang
    FROM dbo.tWarenLagerAusgang
    WHERE ISNULL(tWarenLagerAusgang.dErstellt, GETDATE()) < DATEADD(dd, +1, @date)
    GROUP BY tWarenLagerAusgang.kWarenLagerEingang
) AS Warenausgang
    ON tWarenLagerEingang.kWarenLagerEingang = Warenausgang.kWarenLagerEingang

WHERE
    tWarenLager.kWarenLager = @warehouse
    AND tArtikel.cArtNr NOT LIKE '%brauchbar'
    AND tArtikel.cArtNr NOT LIKE '%defekt'
    AND tArtikel.cArtNr NOT LIKE '%verpackung'
GROUP BY
    tArtikel.cArtNr,
    tWarenLager.cName
HAVING
    -- Nur Bestände > 0, analog zur SMSS-Abfrage
    SUM(ISNULL(tWarenLagerEingang.fAnzahl, 0.0) - ISNULL(Warenausgang.fAnzahl, 0.0)) > 0
ORDER BY tArtikel.cArtNr;



Standardabfrage welche Artikel mit dem Zustand brauchbar, defekt und verpackung MIT einbezieht:
SQL:
/*
    Hinweis:
    Standardabfrage welche die folgenden Zustände MIT einbezieht:
    
    -- AND tArtikel.cArtNr NOT LIKE '%brauchbar'
    -- AND tArtikel.cArtNr NOT LIKE '%defekt'
    -- AND tArtikel.cArtNr NOT LIKE '%verpackung'
*/

SELECT
    tArtikel.cArtNr AS Artikelnummer,
    MAX(tArtikelBeschreibung.cName) AS Artikelname,

    -- Einkaufspreis Gesamt
    SUM(
        (ISNULL(tWarenLagerEingang.fAnzahl, 0.0) - ISNULL(Warenausgang.fAnzahl, 0.0))
        * ISNULL(tArtikel.fEKNetto, 0.0)
    ) AS [Einkaufspreis Gesamt],
    
    -- Durchschnittlicher EK pro Stück
    CASE
        WHEN SUM(ISNULL(tWarenLagerEingang.fAnzahl, 0.0) - ISNULL(Warenausgang.fAnzahl, 0.0)) <> 0
        THEN
            SUM(
                (ISNULL(tWarenLagerEingang.fAnzahl, 0.0) - ISNULL(Warenausgang.fAnzahl, 0.0))
                * ISNULL(tArtikel.fEKNetto, 0.0)
            )
            /
            SUM(ISNULL(tWarenLagerEingang.fAnzahl, 0.0) - ISNULL(Warenausgang.fAnzahl, 0.0))
        ELSE 0
    END AS [Durchschnittlicher EK Einzel],

    -- Bestand
    SUM(
        ISNULL(tWarenLagerEingang.fAnzahl, 0.0)
        - ISNULL(Warenausgang.fAnzahl, 0.0)
    ) AS Bestand,

    tWarenLager.cName AS Lager,
    MAX(tWarenLagerEingang.dGeliefertAm) AS [Letztes Lieferdatum]

FROM dbo.tWarenLagerPlatz
JOIN dbo.tWarenLager
    ON tWarenLagerPlatz.kWarenLager = tWarenLager.kWarenLager
LEFT JOIN dbo.tWarenLagerEingang
    ON tWarenLagerPlatz.kWarenLagerPlatz = tWarenLagerEingang.kWarenLagerPlatz
    AND tWarenLagerEingang.dErstellt < DATEADD(dd, +1, @date)
LEFT JOIN dbo.tArtikel
    ON tWarenLagerEingang.kArtikel = tArtikel.kArtikel
LEFT JOIN dbo.tSpracheUsed
    ON dbo.tSpracheUsed.nStandard = 1
LEFT JOIN
(
    SELECT DISTINCT kArtikel, cName, kSprache, kPlattform
    FROM dbo.tArtikelBeschreibung
) AS tArtikelBeschreibung
    ON tArtikel.kArtikel = tArtikelBeschreibung.kArtikel
    AND dbo.tSpracheUsed.kSprache = tArtikelBeschreibung.kSprache
    AND tArtikelBeschreibung.kPlattform = 1  -- Wichtig!

LEFT JOIN
(
    SELECT
        SUM(ISNULL(tWarenLagerAusgang.fAnzahl, 0.0)) AS fAnzahl,
        tWarenLagerAusgang.kWarenLagerEingang
    FROM dbo.tWarenLagerAusgang
    WHERE ISNULL(tWarenLagerAusgang.dErstellt, GETDATE()) < DATEADD(dd, +1, @date)
    GROUP BY tWarenLagerAusgang.kWarenLagerEingang
) AS Warenausgang
    ON tWarenLagerEingang.kWarenLagerEingang = Warenausgang.kWarenLagerEingang

WHERE
    tWarenLager.kWarenLager = @warehouse
    /*
    -- Die folgenden Zeilen sind auskommentiert, damit Artikel mit
    -- 'brauchbar', 'defekt' oder 'verpackung' in der ArtNr auch berücksichtigt werden.
    -- AND tArtikel.cArtNr NOT LIKE '%brauchbar'
    -- AND tArtikel.cArtNr NOT LIKE '%defekt'
    -- AND tArtikel.cArtNr NOT LIKE '%verpackung'
    */
GROUP BY
    tArtikel.cArtNr,
    tWarenLager.cName
HAVING
    -- Nur Bestände > 0
    SUM(ISNULL(tWarenLagerEingang.fAnzahl, 0.0) - ISNULL(Warenausgang.fAnzahl, 0.0)) > 0
ORDER BY tArtikel.cArtNr;


Die Werte Stimmen bei mir einwandfrei nach wirklich viel testen überein.
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Lagerbewertung Standard VK Preis User helfen Usern - Fragen zu JTL-Wawi 1
Neu Lagerbewertung nach Filter laden erfolgt Absturz JTL-Wawi - Fehler und Bugs 6
Gespeicherte Filter (Lagerbewertung) nach SQL Umzug nicht mehr abrufbar JTL-Wawi 1.9 0
Neu TL-Wawi 1.9.6.5: Nur 3 eBay-Angebote werden importiert Einrichtung und Installation von JTL-eazyAuction 0
Neu Problem mit der Verbindung von JTL-Wawi (1.5.48.2) und WooCommerce (Version 9.5.2) User helfen Usern - Fragen zu JTL-Wawi 0
JTL Wawi Druckvorlage Standard vs Layout 2 Allgemeine Fragen zu JTL-Vouchers 0
Neu Login in Wawi 1.9 nicht möglich User helfen Usern - Fragen zu JTL-Wawi 16
Neu JTL-WAWI API] - Trigger Sales Order Workflow Event - X-RunAs wird ignoriert JTL-Wawi - Fehler und Bugs 0
Neu Kindartikel fehlen in JTL-Wawi Einrichtung und Installation von JTL-eazyAuction 0
Mobile Produktpflege in JTL-Wawi JTL-Wawi 1.9 2
Neu Inhalt / Menge aus der Wawi im JTL Shop anzeigen / ohne Funktion ? Allgemeine Fragen zu JTL-Shop 2
Neu Die wichtigsten Shopify/JTL-Wawi Tipps für Anfänger (wie mich) Shopify-Connector 0
Neu Wawi 1.9.5.4, Ameise Preise glätten für Ebay Vorlagen und laufende Angebote?? User helfen Usern - Fragen zu JTL-Wawi 0
In Bearbeitung Keine Verbindung WaWi zu POS - Errod connect timed out JTL-POS - Fehler und Bugs 4
Neu Verwaltet Greyhound mit WaWi 1.9 auch die Lieferanten, oder nur Kunden? User helfen Usern - Fragen zu JTL-Wawi 0
Neu WAWI 1.9.6.5 Ameise freier Export von Rechnungen exportiert anstatt Oktober den Monat Dezember JTL-Ameise - Fehler und Bugs 15
Wawi Fehler beim Upload 1.9 JTL-Wawi 1.9 1
Neu Wawi und Shop vorerst vom anderen Rechner Installation von JTL-Wawi 1
Neu Wawi Statistik Versanddienstleister so nicht nutzbar JTL-Wawi - Ideen, Lob und Kritik 0
Neu XAMPP, JTL Wawi -> Artikel werden nicht im Shop angezeigt. Allgemeine Fragen zu JTL-Shop 1
Neu Zwei Wawi Dropshipping und Warenbestand Übertragung User helfen Usern - Fragen zu JTL-Wawi 4
Neu Was passiert wenn ich Amazon Aufträge, Lieferscheine und Rechnungen per SQL aus der WAWI-Datenbank lösche? User helfen Usern - Fragen zu JTL-Wawi 0
Neu Suchen Freelancer für Support JTL wawi und shop sowie Anbindung an die Markplätze Dienstleistung, Jobs und Ähnliches 1
Neu Update auf Wawi 1.9 - kein Zugriff mehr auf Produktionsmodul JTL-Plan&Produce - Fehler und Bugs 1
Neu Besten Hosting-Anbieter für Wawi und JTL-Shop Starten mit JTL: Projektabwicklung & Migration 6
Wawi Webshop Verknüpfung - JTL Worker, Bestelleingang bestätigen lassen JTL-Wawi 1.9 0
Unterstützung Update JTL Wawi JTL-Wawi 1.9 2
Neu Wawi verbindet sich nicht POS-Kassen User helfen Usern - Fragen zu JTL-Wawi 2
Neu DHL Retourenlabel Fehlermeldung in jtl wawi JTL-ShippingLabels - Fehler und Bugs 1
Neu Emails senden aus der Wawi an Bestellungen via Gastkonto (JTL Wawi 1.5.55.5 / JTL Shop 4.05) Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 1
Neu update Jtl Wawi User helfen Usern - Fragen zu JTL-Wawi 4
Neu GPSR Zuordnung in der Ameise Wawi Version 1.5 Probleme Funktionsattribut ID User helfen Usern - Fragen zu JTL-Wawi 3
Neu Berichte / Standard Analysen in der WaWi User helfen Usern - Fragen zu JTL-Wawi 0
Neu JTL POS gibt Bestände nicht an Wawi User helfen Usern - Fragen zu JTL-Wawi 0
In Diskussion Aufträge über WaWi App als bezahlt markieren JTL-Workflows - Ideen, Lob und Kritik 2
Änderung der Lieferadresse einer Verkaufsbestellung über die JTL-Wawi API JTL-Wawi 1.9 0
Probleme mit dem Abgleich von Amazon seit Update auf JTL-Wawi 1.964 JTL-Wawi 1.9 0
Gelöst JTL POS - mehrere Filialen - je Filiale eine Kasse im Dashboard in Wawi wird aber alles zusammen gefasst Allgemeine Fragen zu JTL-POS 1
Neu Änderung der Lieferadresse einer Verkaufsbestellung über die JTL-Wawi API User helfen Usern - Fragen zu JTL-Wawi 0
JTL Wawi Kunden Kommentar hinzufügen, der auch im JTL Pos erscheint. JTL-Wawi 1.9 0
Neu Lieferantenbestellung über Wawi via XML importieren Arbeitsabläufe in JTL-Wawi 0
WaWi 1.9.6.5 kann Auftragsnummern nicht richtig sortieren JTL-Wawi 1.9 4
Neu Lager Ampel Text Attribut ampel_text_gruen mit Shop 5.34 und Wawi 1.8.12.2 funktioniert nicht JTL-Wawi - Fehler und Bugs 1
Jtl Wawi 1.9.6.5 JTL-Wawi 1.9 13
Neu Bestellung nich in WAWI zeigt Onlineshop-Anbindung 3
Otto-Anbindung über JTL Wawi und Produkt-Upload JTL-Wawi 1.9 0
Neu Lagerort in Österreich, Versand in Österreich, Produktion in Deutschland, Vorgehensweise in Wawi User helfen Usern - Fragen zu JTL-Wawi 1
Neu Dropshipping Einstellungen in Wawi mit Händler, aber Versand geht von uns aus???? User helfen Usern - Fragen zu JTL-Wawi 4
Ebay JTL-Wawi "Hersteller" + "Verantwortliche Person" auf mehrere Artikel übertragen GPSR JTL-Wawi 1.9 7
Neu Umzug von SQL 2016 Express auf SQL 2019 Standard mit Wawi 1.8.12.2 Installation von JTL-Wawi 10

Ähnliche Themen