/*
FORUMWUNSCH - feuershow.de
- basiert auf "ALLE Zustände"
- stichtagsbezogener Bestand + EK
- zusätzlich VK Netto + VK Netto Gesamt
Hinweis:
VK wird bevorzugt aus tPreis/tPreisDetail (Shop=0, Kundengruppe=1) gezogen.
Wenn dort nichts existiert: Fallback auf tArtikel.fVKNetto.
Parameter:
@date (DATE)
@warehouse (INT)
*/
SELECT
tArtikel.cArtNr AS Artikelnummer,
MAX(tArtikelBeschreibung.cName) AS Artikelname,
MAX(ESVerk.cName) AS Verkaufseinheit,
MAX(ISNULL(tArtikel.fMassMenge,1)) AS InhaltMenge,
MAX(MES.cName) AS InhaltEinheit,
SUM( (ISNULL(Ein.fAnzahl,0) - ISNULL(Aus.fAnzahl,0)) * ISNULL(tArtikel.fEKNetto,0) ) AS [Einkaufspreis Gesamt],
CASE
WHEN SUM(ISNULL(Ein.fAnzahl,0) - ISNULL(Aus.fAnzahl,0)) <> 0
THEN SUM( (ISNULL(Ein.fAnzahl,0) - ISNULL(Aus.fAnzahl,0)) * ISNULL(tArtikel.fEKNetto,0) )
/ SUM(ISNULL(Ein.fAnzahl,0) - ISNULL(Aus.fAnzahl,0))
ELSE 0
END AS [Durchschnittlicher EK Einzel],
SUM(ISNULL(Ein.fAnzahl,0) - ISNULL(Aus.fAnzahl,0)) AS Bestand,
tWarenLager.cName AS Lager,
MAX(Ein.dGeliefertAm) AS [Letztes Lieferdatum],
-- VK Netto (bevorzugt aus tPreis/tPreisDetail; sonst tArtikel.fVKNetto)
MAX(COALESCE(VKP.VKNetto, tArtikel.fVKNetto, 0)) AS [VK Netto],
-- VK Netto Gesamt (Bestand * VK Netto)
SUM(ISNULL(Ein.fAnzahl,0) - ISNULL(Aus.fAnzahl,0))
* MAX(COALESCE(VKP.VKNetto, tArtikel.fVKNetto, 0)) AS [VK Netto Gesamt]
FROM dbo.tWarenLagerPlatz
JOIN dbo.tWarenLager
ON tWarenLagerPlatz.kWarenLager = tWarenLager.kWarenLager
LEFT JOIN dbo.tWarenLagerEingang Ein
ON tWarenLagerPlatz.kWarenLagerPlatz = Ein.kWarenLagerPlatz
AND Ein.dErstellt < DATEADD(day,1,@date)
LEFT JOIN dbo.tArtikel
ON Ein.kArtikel = tArtikel.kArtikel
LEFT JOIN dbo.tSpracheUsed
ON tSpracheUsed.nStandard = 1
LEFT JOIN (
SELECT DISTINCT kArtikel,cName,kSprache,kPlattform
FROM dbo.tArtikelBeschreibung
) tArtikelBeschreibung
ON tArtikel.kArtikel = tArtikelBeschreibung.kArtikel
AND tSpracheUsed.kSprache = tArtikelBeschreibung.kSprache
AND tArtikelBeschreibung.kPlattform = 1
LEFT JOIN dbo.tEinheit EVerk
ON tArtikel.kVerkaufsEinheit = EVerk.kEinheit
LEFT JOIN dbo.tEinheitSprache ESVerk
ON EVerk.kEinheit = ESVerk.kEinheit
AND ESVerk.kSprache = 1
LEFT JOIN dbo.tMassEinheit ME
ON tArtikel.kMassEinheit = ME.kMassEinheit
LEFT JOIN dbo.tMassEinheitSprache MES
ON ME.kMassEinheit = MES.kMassEinheit
AND MES.kSprache = 1
LEFT JOIN (
SELECT
SUM(ISNULL(fAnzahl,0)) AS fAnzahl,
kWarenLagerEingang
FROM dbo.tWarenLagerAusgang
WHERE ISNULL(dErstellt,GETDATE()) < DATEADD(day,1,@date)
GROUP BY kWarenLagerEingang
) Aus
ON Ein.kWarenLagerEingang = Aus.kWarenLagerEingang
-- VK aus Preis-Tabelle (kleinste Staffel)
OUTER APPLY (
SELECT TOP(1)
CONVERT(decimal(18,4), pd.fNettoPreis) AS VKNetto
FROM dbo.tPreis p
JOIN dbo.tPreisDetail pd
ON pd.kPreis = p.kPreis
WHERE p.kArtikel = tArtikel.kArtikel
AND ISNULL(p.kShop,0) = 0
AND ISNULL(p.kKundengruppe, 1) = 1 -- Standard-Kundengruppe (Fallback)
ORDER BY pd.nAnzahlAb ASC
) VKP
WHERE tWarenLager.kWarenLager = @warehouse
GROUP BY
tArtikel.cArtNr,
tWarenLager.cName
HAVING SUM(ISNULL(Ein.fAnzahl,0) - ISNULL(Aus.fAnzahl,0)) > 0
ORDER BY
tArtikel.cArtNr;