KalkÜbersicht für Rezepturen bei EKPreisänderungen

Mehr
4 Jahre 11 Monate her #1326 von uwa
Ändern sich in der Gastronomie Einkaufspreise eines Produktes kann das je nach Wareneinsatz gravierende Auswirkungen auf den gesamten Rohertrag des Unternehmens haben. Die Übersicht hier soll helfen, das Risiko vorab zu kalkulieren bzw. erforderliche VK-Preisänderungen in Betracht zu ziehen.
Der User erfasst dazu den kalkulatorischen EKPreis in ein Multifeld. Mit diesem EK werden alle Rezepturen neu berechnet und der Rohertragsverlust/-gewinn für die Verkaufsmenge einer Periode, die in einem zweiten Multifeld gewählt werden kann, ausgewiesen.



Hier der Aufruf. Die UserQuery wird aktualisierbar am Artikel eingebunden.
Funktioniert nur bis zur 2. Hierarchie.
ALTER procedure [dbo].[UserQueryInRezepturKalk] (@Artikel#ArtikelNr varchar(20)) AS
Select InRezArt.Kurztext 
, InRezArt.ArtikelNr
, Einheit.Kürzel AS RezEinheit
, InRezArt.EKPRez
, InRezArt.LetzteÄnderung
, InRezArt.Artikel
, Einheit2.Kürzel AS UEinheit
, CONVERT(money,InRezArt.RezMenge) AS RezMenge
, InRezArt.EKP
, CONVERT(money,InRezArt.EKWert) AS EKWert
, CONVERT(money,InRezArt.EKPNeu) AS EKPNeu
, CONVERT(money,InRezArt.EKWertNeu) AS EKWertNeu
, CONVERT(money,(InRezArt.EKWertNeu/ EKWert*100)-100) AS AbwProz
, CONVERT(money,InRezArt.EKWertNeu-EKWert) AS AbwAbs
, CONVERT(money,InRezArt.EKPRez+(InRezArt.EKWertNeu-EKWert)) AS EKPRezNeu
, AFS.Periode
, AFS.VerkaufMenge
, AFS.VerkaufBetrag
, CONVERT(money,AFS.VerkaufBetrag - (AFS.VerkaufMenge*InRezArt.EKPRez)) AS Rohertrag
, CONVERT(money,AFS.VerkaufMenge*(InRezArt.EKWertNeu-EKWert)*-1) AS AendRE
, CASE WHEN COALESCE(AFS.VerkaufBetrag,0) = 0 THEN '' ELSE CONVERT(money,(AFS.VerkaufBetrag - (AFS.VerkaufMenge*InRezArt.EKPRez)) / AFS.VerkaufBetrag * 100) END AS SpanneIst
, CASE WHEN COALESCE(AFS.VerkaufBetrag,0) = 0 THEN '' ELSE CONVERT(money,(AFS.VerkaufBetrag - (AFS.VerkaufMenge*(InRezArt.EKPRez+(InRezArt.EKWertNeu-EKWert))))/ AFS.VerkaufBetrag * 100) END AS SpanneNEU

FROM
(
SELECT dbo.Artikel.Kurztext
, dbo.Stückliste.ArtikelNr
, Stückliste.Einheit AS RezEinheit
, dbo.UserFunktionEKPreis(0,dbo.Stückliste.ArtikelNr,Stückliste.Einheit,0,'NULL') AS EKPRez
, LetzteÄnderung
, Stückliste.UArtikelNr AS Artikel
, Stückliste.UEinheit
, dbo.Stückliste.Menge AS RezMenge
, dbo.UserFunktionEKPreis(0,@Artikel#ArtikelNr,Stückliste.UEinheit,0,'NULL') AS EKP
, dbo.Stückliste.Menge*dbo.UserFunktionEKPreis(0,@Artikel#ArtikelNr,Stückliste.UEinheit,0,'NULL') AS EKWert
, CONVERT(money,REPLACE(AHM208.Inhalt,',','.'))/CASE WHEN Umrechnung.Umrechnungsfaktor is NULL THEN 1 ELSE Umrechnung.Umrechnungsfaktor END AS EKPNeu 
, dbo.Stückliste.Menge*CONVERT(money,REPLACE(AHM208.Inhalt,',','.'))/CASE WHEN Umrechnung.Umrechnungsfaktor is NULL THEN 1 ELSE Umrechnung.Umrechnungsfaktor END AS EKWertNeu

FROM  Stückliste Left Join Artikel ON Stückliste.ArtikelNr = Artikel.ArtikelNr 

LEFT JOIN (Select * FROM ArtikelHatMultiFeld WHERE Feldnummer = 208) AHM208
ON Stückliste.UArtikelNr = AHM208.ArtikelNr 

LEFT JOIN Umrechnung ON Umrechnung.ArtikelNr = Stückliste.UArtikelNr AND Umrechnung.VonEinheit = Stückliste.UEinheit

WHERE (UArtikelNr = @Artikel#ArtikelNr) 
AND Stückliste.Einheit = Artikel.StdEinheit

UNION

SELECT dbo.Artikel.Kurztext
, dbo.Stückliste.ArtikelNr
, Stückliste.Einheit AS RezEinheit
, dbo.UserFunktionEKPreis(0,dbo.Stückliste.ArtikelNr,Stückliste.Einheit,0,'NULL') AS EKPRez
, LetzteÄnderung
, Hilfe_1.Artikel AS Artikel
, Hilfe_1.UEinheit AS UEinheit
, dbo.Stückliste.Menge/CASE WHEN UmrechnungInRez.Umrechnungsfaktor is NULL THEN 1 ELSE UmrechnungInRez.Umrechnungsfaktor END * Hilfe_1.Menge AS RezMenge
, dbo.UserFunktionEKPreis(0,@Artikel#ArtikelNr,Hilfe_1.UEinheit,0,'NULL') AS EKP
, (dbo.Stückliste.Menge/CASE WHEN UmrechnungInRez.Umrechnungsfaktor is NULL THEN 1 ELSE UmrechnungInRez.Umrechnungsfaktor END) * Hilfe_1.Menge*dbo.UserFunktionEKPreis(0,@Artikel#ArtikelNr,Hilfe_1.UEinheit,0,'NULL') AS EKWert
, CONVERT(money,REPLACE(AHM208.Inhalt,',','.'))/CASE WHEN Umrechnung.Umrechnungsfaktor is NULL THEN 1 ELSE Umrechnung.Umrechnungsfaktor END AS EKPNeu
, (dbo.Stückliste.Menge/UmrechnungInRez.Umrechnungsfaktor * Hilfe_1.Menge)*CONVERT(money,REPLACE(AHM208.Inhalt,',','.'))/CASE WHEN Umrechnung.Umrechnungsfaktor is NULL THEN 1 ELSE Umrechnung.Umrechnungsfaktor END AS EKWertNeu

FROM  Stückliste Left Join Artikel ON Stückliste.ArtikelNr = Artikel.ArtikelNr 

LEFT JOIN Umrechnung UmrechnungInRez ON UmrechnungInRez.ArtikelNr = UArtikelNr AND UmrechnungInRez.VonEinheit = UEinheit
INNER JOIN
(
SELECT dbo.Stückliste.ArtikelNr
, Stückliste.Einheit
, @Artikel#ArtikelNr AS Artikel
, Stückliste.UEinheit
, dbo.Stückliste.Menge
, dbo.Stückliste.Menge*dbo.UserFunktionEKPreis(0,@Artikel#ArtikelNr,Stückliste.UEinheit,0,'NULL') AS EKWert
FROM  Stückliste Left Join Artikel ON Stückliste.ArtikelNr = Artikel.ArtikelNr 
WHERE (UArtikelNr = @Artikel#ArtikelNr) 
AND Stückliste.Einheit = Artikel.StdEinheit
) AS Hilfe_1
ON Stückliste.UArtikelNr = Hilfe_1.ArtikelNr AND UmrechnungInRez.InEinheit = Hilfe_1.Einheit

LEFT JOIN (Select * FROM ArtikelHatMultiFeld WHERE Feldnummer = 208) AHM208
ON AHM208.ArtikelNr = Hilfe_1.Artikel 

LEFT JOIN Umrechnung ON Umrechnung.ArtikelNr =  Hilfe_1.Artikel AND Umrechnung.VonEinheit = Hilfe_1.UEinheit

WHERE UArtikelNr in 
(SELECT dbo.Stückliste.ArtikelNr
FROM  Stückliste Left Join Artikel ON Stückliste.ArtikelNr = Artikel.ArtikelNr 
INNER JOIN Einheit ON Stückliste.UEinheit = Einheit.Einheit
WHERE (UArtikelNr = @Artikel#ArtikelNr) AND Stückliste.Einheit = Artikel.StdEinheit) 

AND Stückliste.Einheit = Artikel.StdEinheit
) InRezArt

INNER JOIN Einheit ON InRezArt.RezEinheit = Einheit.Einheit
INNER JOIN Einheit Einheit2 ON InRezArt.UEinheit = Einheit2.Einheit

--Auslesen Periode
LEFT JOIN 
(Select * FROM ArtikelHatMultiFeld WHERE Feldnummer = 209) AHM209
ON InRezArt.Artikel = AHM209.ArtikelNr 

--AbsatzMenge einer Periode
LEFT JOIN 
(Select ArtikelFilialStatistik.* FROM ArtikelFilialStatistik WHERE FilialNummer = 0) AS AFS
ON AFS.ArtikelNr = InRezArt.ArtikelNr AND AFS.Einheit = InRezArt.RezEinheit AND AFS.Periode = AHM209.Inhalt

ORDER BY InRezArt.ArtikelNr DESC
Anhänge:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.