149 lines
4.6 KiB
Transact-SQL
149 lines
4.6 KiB
Transact-SQL
/****** Object: UserDefinedFunction [dbo].[FNDD_GET_ALL_MACROSUBARTICLE] Script Date: 08.06.2021 13:03:32 ******/
|
|
SET ANSI_NULLS ON
|
|
GO
|
|
|
|
SET QUOTED_IDENTIFIER ON
|
|
GO
|
|
|
|
|
|
-- =================================================================
|
|
-- FNDD_GET_ALL_MACROSUBARTICLE
|
|
-- =================================================================
|
|
-- Die Funktion läd für einen Makro-Artikel alle im VK-Makro enthaltenen
|
|
-- Makro-Sub-Artikel inklusive Menge und dem Bundlepreis.
|
|
--
|
|
-- Die Funktion soll aus einem Web-Shop aufgerufen werden können.
|
|
--
|
|
-- Returns: Tabelle mit den Spalten
|
|
-- LaufendeNummer INT Wert aus t326.c009 Expl: 1
|
|
-- MakroSubArtikelnummer VARCHAR(30) Wert aus t326.c006 Expl: 'GT0674001'
|
|
-- MakroMenge INT Berechneter Wert aus Aktion, Wert und Expl: 1
|
|
-- Bestellter Menge
|
|
-- MakroPreis FLOAT Der Bundlepreis für diesen Sub-Artikel Expl: 123.45
|
|
--
|
|
-- Hinweise:
|
|
-- - Wenn der Preis = -999.00 ist, dann wurde kein Bundlepreis gefunden
|
|
-- - Wenn die Menge = 0 ist, dann konnte keine menge berchnet werden, z.B. weil es sich um einen Textbaustein handelt!
|
|
--
|
|
-- =================================================================
|
|
-- Copyright (c) 2021 by Digital Data GmbH
|
|
--
|
|
-- Digital Data GmbH • Ludwig-Rinn-Strasse 16 • D-35452 Heuchelheim
|
|
-- Tel.: 0641/202360 • E-Mail: info-flow@digitaldata.works
|
|
-- =================================================================
|
|
-- Creation Date / Author: 26.05.2021 / MP
|
|
-- Version Date / Editor: 27.05.2021 / MP
|
|
-- Version Number: 1.0.0.1
|
|
-- =================================================================
|
|
-- History:
|
|
-- 01.01.202X / XX - DESCRIPTION
|
|
|
|
CREATE FUNCTION [dbo].[FNDD_GET_ALL_MACROSUBARTICLE]
|
|
(
|
|
-- Add the parameters for the function here
|
|
@WinLineYear INT -- Mandatory Parameter, for the WinLine Year (yyyy) Expl: 1440 (= 2020)
|
|
,@WinLineMandator VARCHAR(4) -- Mandatory Parameter, for the WinLine Mandator (~~~~) Expl: '500M'
|
|
,@MakroArtikelnummer VARCHAR(30) -- Hauptartikelnummer des Makro-Artikels (T026.C003) Expl: 'XX1000001'
|
|
,@BestellteMenge INT -- Die bestellte Menge, als Basis für die Anzahl der Sub-Artikel Expl: 1
|
|
)
|
|
RETURNS @Table TABLE
|
|
(
|
|
-- Add the column definitions for the TABLE variable here
|
|
LaufendeNummer INT
|
|
,MakroSubArtikelnummer VARCHAR(30) NOT NULL DEFAULT ''
|
|
,MakroMenge INT NOT NULL DEFAULT 0
|
|
,MakroPreis FLOAT NOT NULL DEFAULT 0.00
|
|
)
|
|
AS
|
|
BEGIN
|
|
DECLARE
|
|
@LaufendeNummer INT
|
|
,@MakroSubArtikelnummer VARCHAR(30)
|
|
,@MakroMenge INT
|
|
,@MakroPreis FLOAT
|
|
,@MakroWert INT
|
|
,@MakroAktion INT
|
|
,@VKMakroName VARCHAR(20)
|
|
,@LastMengeKonstante INT
|
|
|
|
SELECT DISTINCT
|
|
@VKMakroName = t.c037
|
|
FROM v021 t
|
|
WHERE t.c002 = @MakroArtikelnummer
|
|
AND t.mesocomp = @WinLineMandator
|
|
AND t.mesoyear = @WinLineYear
|
|
|
|
IF Len(@VKMakroName) <= 0
|
|
BEGIN
|
|
-- Kein VKMakroName definiert, dann gibt es auch keine Sub-Artikel
|
|
RETURN
|
|
END
|
|
|
|
DECLARE cursMacroSubArticles CURSOR FOR
|
|
SELECT
|
|
t.c009 -- Zeile
|
|
,t.c006 -- Artikelnummer
|
|
,t.c008 -- Wert
|
|
,t.c007 -- Aktion
|
|
FROM t326 t
|
|
WHERE t.c002 like @VKMakroName + '%'
|
|
AND t.mesocomp = @WinLineMandator
|
|
AND t.mesoyear = @WinLineYear
|
|
OPEN cursMacroSubArticles
|
|
FETCH NEXT FROM cursMacroSubArticles INTO @LaufendeNummer, @MakroSubArtikelnummer, @MakroWert, @MakroAktion
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
-- Hole MakroPreis über die Skalarfunktion FNDD_GET_MACROSUBARTICLE_PRICE
|
|
Select @MakroPreis = [dbo].[FNDD_GET_MACROSUBARTICLE_PRICE] (@WinLineYear, @WinLineMandator, @MakroArtikelnummer, @MakroSubArtikelnummer)
|
|
|
|
-- Berechne die MakroMenge anhand der Aktion, des Wert und der bestellten Menge
|
|
IF @MakroAktion = 1
|
|
BEGIN
|
|
-- Mengeneingabe
|
|
SET @MakroMenge = @BestellteMenge
|
|
SET @LastMengeKonstante = @BestellteMenge
|
|
END
|
|
ELSE IF @MakroAktion = 2
|
|
BEGIN
|
|
-- Mengenkonstante
|
|
SET @MakroMenge = @MakroWert
|
|
SET @LastMengeKonstante = @MakroWert
|
|
END
|
|
ELSE IF @MakroAktion = 3
|
|
BEGIN
|
|
-- Mengenmutliplikation
|
|
SET @MakroMenge = @BestellteMenge * @MakroWert
|
|
END
|
|
ELSE IF @MakroAktion = 4
|
|
BEGIN
|
|
-- Mengenaddition = Addition des Werts zur letzten Konstante
|
|
SET @MakroMenge = @LastMengeKonstante + @MakroWert
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SET @MakroMenge = 0
|
|
END
|
|
|
|
|
|
INSERT INTO @Table (
|
|
LaufendeNummer
|
|
,MakroSubArtikelnummer
|
|
,MakroMenge
|
|
,MakroPreis
|
|
) VALUES (
|
|
@LaufendeNummer
|
|
,@MakroSubArtikelnummer
|
|
,@MakroMenge
|
|
,@MakroPreis
|
|
)
|
|
FETCH NEXT FROM cursMacroSubArticles INTO @LaufendeNummer, @MakroSubArtikelnummer, @MakroWert, @MakroAktion
|
|
END
|
|
CLOSE cursMacroSubArticles
|
|
DEALLOCATE cursMacroSubArticles
|
|
|
|
RETURN
|
|
END
|
|
GO
|
|
|
|
|