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

  • Hinweis: Am 25.02.2025 zwischen 21:30 u. 22:30 Uhr - Einschränkungen beim Login und Erreichen folgender Dienste: FFN, Kundencenter, Admin, JTL-Shop, JTL-Wawi, Lizenzserver, ISI Gateway, Vouchers, Kassensysteme, Plan&Produce, Versand. Grund dafür ist ein Major Upgrade des OAuth-Dienstes. Vielen Dank für euer Verständnis!

overfl0w23

Gut bekanntes Mitglied
19. Oktober 2020
67
29
Celle
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
158
6
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
158
6
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: 8

overfl0w23

Gut bekanntes Mitglied
19. Oktober 2020
67
29
Celle
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
158
6
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

Gut bekanntes Mitglied
19. Oktober 2020
67
29
Celle
- 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
158
6
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

Gut bekanntes Mitglied
19. Oktober 2020
67
29
Celle
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

Gut bekanntes Mitglied
19. Oktober 2020
67
29
Celle

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

Gut bekanntes Mitglied
19. Oktober 2020
67
29
Celle
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.
 

arich001

Sehr aktives Mitglied
21. April 2021
239
30
  • Gefällt mir
Reaktionen: overfl0w23

overfl0w23

Gut bekanntes Mitglied
19. Oktober 2020
67
29
Celle
Hallo arich,
danke für deine Rückmeldung. Kannst Du das etwas genauer definieren? Wenn Du einen anderen Mandanten wählst nach einem Durchlauf findet er keine Läger? Hast Du nochmal auf Verbindung testen geklickt? Kann sein, dass ich da was vergessen habe zu implementieren da ich es nur mit einem Mandanten getestet habe.

LG
 
  • Gefällt mir
Reaktionen: arich001

arich001

Sehr aktives Mitglied
21. April 2021
239
30
Hallo arich,
danke für deine Rückmeldung. Kannst Du das etwas genauer definieren? Wenn Du einen anderen Mandanten wählst nach einem Durchlauf findet er keine Läger? Hast Du nochmal auf Verbindung testen geklickt? Kann sein, dass ich da was vergessen habe zu implementieren da ich es nur mit einem Mandanten getestet habe.

LG
Der Hauptmandant steht ja als erstes in der Liste, bei Lager stehen alle zugehörigen Lager. Wechsle ich jetzt auf einen anderen Mandanten ändert sich unter Lager absolut nix....da sind weiterhin nur die Läger vom ersten Mandanten zu sehen. Bei neu Verbinden springt die Ansicht wieder auf den ersten Mandanten, die Lagerauswahl bleibt auch beim erneuten Mandantenwechseln so stehen.
 

overfl0w23

Gut bekanntes Mitglied
19. Oktober 2020
67
29
Celle
Die Abfrage wird um 00:00h gemacht.
Ich habe dir eine PN geschrieben. Magst Du die überarbeitete Version einmal testen? Dann brauchen wir hier nicht alles zuspammen und ich kann die Version hochladen sobald sie funktioniert. :)
 
Ä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
Wawi 1.9 - Connector ändert MWST in Shopware 5 bei Lieferantenbestellungen JTL-Wawi 1.9 0
WaWi Shop JTL-Wawi 1.9 1
Neu JTL-Wawi 1.10.8.0 - Artikel bearbeiten = oft Wawi-Absturz JTL-Wawi - Fehler und Bugs 0
WAWI bzw. Shop-Kategorien nach Datum ein- bzw. Auszublenden JTL-Wawi 1.9 1
Neu Amazon Bestellung RA nicht freigeschaltet! Keine Übernahme in die Wawi möglich Amazon-Anbindung - Fehler und Bugs 10
Neu Merkmale aus Globalen Angebotsvorlagen werden bei erstellen über Ameise nicht übernommen Wawi 1.10 eBay-Anbindung - Fehler und Bugs 0
Neu JTL-Wawi 1.10.8.0 - Aufträge "Zusammenfassen [ist] deaktiviert" JTL-Wawi - Fehler und Bugs 12
Neu JTL Wawi REST-API - globale Schreibrechte Schnittstellen Import / Export 0
Neu Erneuter Komplettabgleich von Gambio zu Wawi Gambio-Connector 5
JTL WAWI GUI Internationalisierung JTL-Wawi 1.9 0
Neu Kein Zugriff von Wawi auf JTL-Shop, auf lokalem Apache-Server gehostet Installation / Updates von JTL-Shop 8
Rechnungsstellung in WAWI bei split / gemischter Mehrwertsteuer beim Versand falsch - workaround JTL-Wawi 1.9 0
Neu Alle Artikel eines WaWi Standardlagers komplett in ein neu angelegtes WMS Lager umlagern User helfen Usern - Fragen zu JTL-Wawi 2
Neu JTL Wawi REST API – „Ø Einkaufspreis (netto)“ aktualisieren? User helfen Usern - Fragen zu JTL-Wawi 3
Neu Suchen Schnittstelle zwischen JTL Wawi und Mercateo Schnittstellen Import / Export 1
Neu 👉 JTL-Wawi Open Beta-Release 1.10 Releaseforum 0
Neu Freelancer für Amazon-Account-Management & JTL-Wawi gesucht Dienstleistung, Jobs und Ähnliches 2
Neu Mapping der Versandarten Shop, WMS und Wawi Allgemeine Fragen zu JTL-Shop 0
Neu HINWEIS: Wawi 1.9 - Eigenes Feld Kunde Typ Ganzzahl speichert nicht korrekt Werte <= 0 JTL-Wawi - Fehler und Bugs 16
Neu Alten Shop in der Wawi löschen... Onlineshop-Anbindung 0
In Diskussion JTL Wawi Workflow: Automatische Etikettenerstellung und E-Mail-Versand JTL-Workflows - Ideen, Lob und Kritik 10
Neu Artikel Upload Probleme mit Wawi Version 1.9.6.5 und B2B Market Plugin WooCommerce-Connector 6
Neu Suche Kenner der MS SQL Datenbanken und JTL-WaWi vorzugsweise Raum Aachen Dienstleistung, Jobs und Ähnliches 1
Neu Fehler: Eine Bestellung wird nicht mit Wawi synchronisiert JTL-Shop - Fehler und Bugs 2
Wawi-Version wurde geändert, sollte nicht sein... Wie komme ich zurück? JTL-Wawi 1.9 1
JTL WaWi - Kunde - eigenes Feld - dotliquid - neue Variablen JTL-Wawi 1.9 1
Neu JTL WaWi Client unter Linux User helfen Usern - Fragen zu JTL-Wawi 15
Neu Massen Import Wawi Download Artikel - Lösung verfügbar, Ameise kann es nicht Schnittstellen Import / Export 0
In Bearbeitung Auftrag in WaWi via POS abrechnen ohne Rechnung nur Kassenbon Allgemeine Fragen zu JTL-POS 9
Neu Schweiz - Probleme mit Netto-/Bruttobeträgen und Steuerhandling bei Amazon Marketplace Facilitator in JTL-Wawi Amazon-Anbindung - Fehler und Bugs 11
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 21
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 11
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 4
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

Ähnliche Themen