/****** Object: UserDefinedFunction [dbo].[tvf_planB_LagerbestandHistorisch] Script Date: 09.08.2021 11:01:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[tvf_planB_LagerbestandHistorisch]
(@Bestandsdatum Datetime
)
RETURNS TABLE
AS
--DECLARE @Bestandsdatum Datetime
--SET @Bestandsdatum = '20210806';
RETURN (
With Lagerplatzbuchungen AS (
Select
Mandant,Artikelnummer, HerkunftsLPKennung AS Lagerplatz, Bestandswirkung * MengeLager AS Menge, Bewegungsdatum
FROM [dbo].[KHKLagerplatzbuchungen]
WHERE HerkunftsLPKennung<>0 AND ZielLPKennung=0 AND Intern=0
UNION ALL
Select
Mandant,Artikelnummer, ZielLPKennung AS Lagerplatz, Bestandswirkung * MengeLager AS Menge ,Bewegungsdatum
FROM [dbo].[KHKLagerplatzbuchungen]
WHERE ZielLPKennung<>0 AND HerkunftsLPKennung=0 AND Intern=0
UNION ALL
Select
Mandant,Artikelnummer, HerkunftsLPKennung AS Lagerplatz, -1 * MengeLager AS Menge, Bewegungsdatum
FROM [dbo].[KHKLagerplatzbuchungen]
WHERE HerkunftsLPKennung<>0 AND ZielLPKennung<>0 AND Intern=0
UNION ALL
Select
Mandant,Artikelnummer, ZielLPKennung AS Lagerplatz, +1 * MengeLager AS Menge ,Bewegungsdatum
FROM [dbo].[KHKLagerplatzbuchungen]
WHERE HerkunftsLPKennung<>0 AND ZielLPKennung<>0 AND Intern=0
),
MEKHistorie as (
Select
Mandant,
Artikelnummer,
Max(Datum) AS Datum
FROM KHKArtikelbewertungMEKHistorie
WHERE Datum<=@Bestandsdatum
GROUP BY Mandant, Artikelnummer
),
MEKHistorisch as (
Select MH.[Mandant],MH.[Artikelnummer],MH.MittlererEK
FROM [dbo].[KHKArtikelbewertungMEKHistorie] MH
INNER JOIN MEKHistorie ON MEKHistorie.Mandant=MH.Mandant AND MEKHistorie.Artikelnummer=MH.Artikelnummer AND MEKHistorie.Datum=MH.Datum
),
Bestandhistorisch AS (
Select
LPB.Mandant,
LPB.Artikelnummer,
LPB.Lagerplatz,
Sum(LPB.Menge) AS Bestand
FROM LagerPlatzBuchungen LPB
WHERE LPB.Bewegungsdatum<=@Bestandsdatum
GROUP BY
LPB.Mandant,
LPB.Artikelnummer,
LPB.Lagerplatz
HAVING Sum(LPB.Menge)>0
),
MEK as (
Select
AV.Mandant,
AV.Artikelnummer,
Case
WHEN Isnull(MEKHistorisch.MittlererEK,0)=0 THEN AV.MittlererEK
ELSE MEKHistorisch.MittlererEK
END AS MittlererEK,
Case
WHEN Isnull(MEKHistorisch.MittlererEK,0)=0 THEN 'Artikelstamm'
ELSE 'Historie'
END AS MEKQuelle
FROM KHKArtikelVarianten AV
Left JOIN MEKHistorisch
ON AV.Mandant=MEKHistorisch.Mandant AND AV.Artikelnummer=MEKHistorisch.Artikelnummer AND AV.AuspraegungID=0
)
SELECT
@Bestandsdatum AS Bestandsdatum,
BH.Mandant,
BH.Artikelnummer,
A.HArtikelnummer AS Herstellerartikel,
A.Matchcode,
LP.Platzbezeichnung,
BH.Bestand,
A.Lagermengeneinheit,
MEK.MittlererEK AS MEK,
MEK.MEKQuelle,
BH.Bestand*MEK.MittlererEK AS Lagerwert,
BS.Prozentsatz AS Bewertungssatz,
BH.Bestand*MEK.MittlererEK*(BS.Prozentsatz/100) AS Lagerwertgewichtet
FROM Bestandhistorisch BH
LEFT JOIN MEK ON MEK.Mandant=BH.Mandant AND MEK.Artikelnummer=BH.Artikelnummer
INNER JOIN KHKArtikel A ON BH.Mandant=A.Mandant AND BH.Artikelnummer=A.Artikelnummer
INNER JOIN KHKArtikelVarianten AV ON AV.Mandant=A.Mandant AND AV.Artikelnummer=A.Artikelnummer AND AV.AuspraegungID=0
INNER JOIN KHKLagerplaetze LP ON LP.Mandant=BH.Mandant AND LP.PlatzID=BH.Lagerplatz
LEFT JOIN KHKBewertungssaetze BS ON A.Mandant = BS.Mandant AND A.Bewertungssatz = BS.Kennung
)
GO