KalkÜbersicht für Rezepturen bei EKPreisänderungen

Mehr
11 Jahre 1 Monat 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.
Code:
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 um der Konversation beizutreten.

Signum Warenwirtschaftssysteme GmbH
Kasinostraße 2
DE-64293 Darmstadt

Tel: +49 (6151) 15 18 - 0
Fax: +49 (6151) 15 18 - 100
team@signum.info