Projektstand 30.03.2026
This commit is contained in:
@@ -0,0 +1,195 @@
|
||||
USE [DD_ECM]
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
-- TSQL Table function for "Kontierungstabelle"
|
||||
|
||||
-- MK // 24.02.2025
|
||||
-- 24.02.2025 Initial
|
||||
|
||||
CREATE OR ALTER FUNCTION [dbo].[FNCUST_GET_INVOICE_POS] (
|
||||
@pEMAIL_MESSAGE_ID NVARCHAR(900),
|
||||
@pDATA_SEPERATOR NVARCHAR(1) = '~',
|
||||
@pDATA_SEPERATOR_TAX NVARCHAR(3) = ' - '
|
||||
)
|
||||
RETURNS @vTB_INVOICE_POS TABLE ([GUID] INT IDENTITY(1,1) NOT NULL,
|
||||
[CONTENT_CONCAT] NVARCHAR(max) NOT NULL,
|
||||
[ORDER_POSITION_ARTICLE] NVARCHAR(50) NULL,
|
||||
[INVOICE_POSITION_ARTICLE] NVARCHAR(50) NULL)
|
||||
AS
|
||||
BEGIN
|
||||
|
||||
-- declare new vars because of parameter sniffing
|
||||
DECLARE @MandatorShortName NVARCHAR(5) = 'SWE',
|
||||
@EMAIL_MESSAGE_ID NVARCHAR(900) = UPPER(LTRIM(RTRIM(@pEMAIL_MESSAGE_ID))),
|
||||
@DATA_SEPERATOR NVARCHAR(1) = UPPER(LTRIM(RTRIM(@pDATA_SEPERATOR))),
|
||||
@DATA_SEPERATOR_TAX NVARCHAR(3) = ISNULL(@pDATA_SEPERATOR_TAX,' - ');
|
||||
|
||||
DECLARE @INVOICE_POS_COUNTER INT,
|
||||
@REFERENCE_GUID NVARCHAR(900),
|
||||
@ITEM_DESCRIPTION NVARCHAR(900),
|
||||
@ITEM_VALUE NVARCHAR(900),
|
||||
@GROUP_COUNTER INT,
|
||||
@COUNTER INT = 0,
|
||||
@ACCOUNTING VARCHAR(900),
|
||||
@ARTICLE_NR_EXT NVARCHAR(50),
|
||||
@POS_AMOUNT DECIMAL(20,2),
|
||||
@POS_SUM_NETTO DECIMAL(20,2),
|
||||
@POS_TAX_CODE NVARCHAR(25),
|
||||
@POS_TAX_RATE DECIMAL(20,2),
|
||||
@POS_SUM_BRUTTO DECIMAL(20,2);
|
||||
|
||||
DECLARE @ARTICLE_NR NVARCHAR(50),
|
||||
@ORDER_NR NVARCHAR(50),
|
||||
@ORDER_NR_FALLBACK NVARCHAR(50) = 'EB9999999', -- Dummy nr für Rechnungen ohne Bestellung
|
||||
@WORK_ORDER_NR NVARCHAR(25),
|
||||
@WORK_ORDER_NR_FALLBACK NVARCHAR(25) = 'A-99999999', -- Dummy nr für Lagerbestellungen
|
||||
@POS_TAX_CODE_NAV_VAT19 NVARCHAR(25) = '19 - INL - 19.00%'; -- Standardwert aus NAV für 19% MwSt Inland
|
||||
|
||||
SET @INVOICE_POS_COUNTER = (SELECT (MAX([GROUP_COUNTER])-1) as 'INVOICE_POS_COUNTER' FROM [TBEDMI_ITEM_VALUE] (NOLOCK) WHERE [REFERENCE_GUID] = LTRIM(RTRIM(@EMAIL_MESSAGE_ID)))
|
||||
IF (@INVOICE_POS_COUNTER > 0) BEGIN
|
||||
|
||||
SELECT @ORDER_NR = ITEM_VALUE
|
||||
FROM dbo.TBEDMI_ITEM_VALUE (NOLOCK)
|
||||
WHERE [SPEC_NAME] = 'INVOICE_REFERENCE'
|
||||
AND [REFERENCE_GUID] = @EMAIL_MESSAGE_ID;
|
||||
|
||||
DECLARE CURSOR_INVOICE_POS CURSOR
|
||||
LOCAL FAST_FORWARD FOR
|
||||
SELECT DISTINCT [REFERENCE_GUID], [GROUP_COUNTER]
|
||||
FROM [TBEDMI_ITEM_VALUE] (NOLOCK)
|
||||
WHERE [SPEC_NAME] IN ('INVOICE_POSITION_ARTICLE','INVOICE_POSITION_AMOUNT','INVOICE_POSITION_TAX_AMOUNT','INVOICE_TAXPOS_TAX_RATE')
|
||||
AND [GROUP_COUNTER] > 1
|
||||
AND [REFERENCE_GUID] = @EMAIL_MESSAGE_ID;
|
||||
-- OR [REFERENCE_GUID] = 'ERw202512091413384620257svcdigitaldata' -- TEST
|
||||
|
||||
OPEN CURSOR_INVOICE_POS;
|
||||
FETCH NEXT FROM CURSOR_INVOICE_POS INTO @REFERENCE_GUID, @GROUP_COUNTER;
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------------------------
|
||||
SET @COUNTER += 1
|
||||
SET @ACCOUNTING = NULL;
|
||||
SET @POS_AMOUNT = NULL;
|
||||
SET @POS_SUM_NETTO = NULL;
|
||||
SET @POS_TAX_CODE = NULL;
|
||||
SET @POS_SUM_BRUTTO = NULL;
|
||||
|
||||
SET @ARTICLE_NR = NULL;
|
||||
SET @WORK_ORDER_NR = NULL;
|
||||
-----------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
--==================================================-- PositionsArtikel --==================================================--
|
||||
SET @ARTICLE_NR_EXT = ISNULL((SELECT CASE WHEN LEN(LTRIM(RTRIM(convert(nvarchar(200),[ITEM_VALUE])))) = 0
|
||||
THEN ''
|
||||
ELSE CAST([ITEM_VALUE] AS NVARCHAR(50))
|
||||
END as 'ITEM_VALUE'
|
||||
FROM [TBEDMI_ITEM_VALUE] (NOLOCK)
|
||||
WHERE [REFERENCE_GUID] = @REFERENCE_GUID
|
||||
AND [GROUP_COUNTER] = @GROUP_COUNTER
|
||||
AND [SPEC_NAME] = 'INVOICE_POSITION_ARTICLE'),'');
|
||||
-----------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
--===================================================-- PositionsMenge --===================================================--
|
||||
SET @POS_AMOUNT = ISNULL((SELECT CASE WHEN LEN(LTRIM(RTRIM(convert(nvarchar(200),[ITEM_VALUE])))) = 0
|
||||
THEN 0
|
||||
ELSE CAST(REPLACE([ITEM_VALUE],',','.') AS DECIMAL(20,2))
|
||||
END as 'ITEM_VALUE'
|
||||
FROM [TBEDMI_ITEM_VALUE] (NOLOCK)
|
||||
WHERE [REFERENCE_GUID] = @REFERENCE_GUID
|
||||
AND [GROUP_COUNTER] = @GROUP_COUNTER
|
||||
AND [SPEC_NAME] = 'INVOICE_POSITION_AMOUNT'),0);
|
||||
-----------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
--===================================================-- PositionsSumme --===================================================--
|
||||
SET @POS_SUM_NETTO = ISNULL((SELECT CASE WHEN LEN(LTRIM(RTRIM(convert(nvarchar(200),[ITEM_VALUE])))) = 0
|
||||
THEN 0
|
||||
ELSE CAST(REPLACE([ITEM_VALUE],',','.') AS DECIMAL(20,2))
|
||||
END as 'ITEM_VALUE'
|
||||
FROM [TBEDMI_ITEM_VALUE] (NOLOCK)
|
||||
WHERE [REFERENCE_GUID] = @REFERENCE_GUID
|
||||
AND [GROUP_COUNTER] = @GROUP_COUNTER
|
||||
AND [SPEC_NAME] = 'INVOICE_POSITION_TAX_AMOUNT'),0);
|
||||
-----------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
--=================================================-- PositionsSteuersatz --================================================--
|
||||
SET @POS_TAX_RATE = ISNULL((SELECT CASE WHEN LEN(LTRIM(RTRIM(convert(NVARCHAR(200),[ITEM_VALUE])))) = 0
|
||||
THEN 0
|
||||
ELSE CAST(REPLACE([ITEM_VALUE],',','.') AS DECIMAL(20,2))
|
||||
END as 'ITEM_VALUE'
|
||||
FROM [TBEDMI_ITEM_VALUE] (NOLOCK)
|
||||
WHERE [REFERENCE_GUID] = @REFERENCE_GUID
|
||||
AND [GROUP_COUNTER] = @GROUP_COUNTER
|
||||
AND [SPEC_NAME] = 'INVOICE_TAXPOS_TAX_RATE'),0);
|
||||
|
||||
SET @POS_TAX_CODE = CASE WHEN @POS_TAX_RATE = 19.00
|
||||
THEN @POS_TAX_CODE_NAV_VAT19
|
||||
|
||||
ELSE '0'
|
||||
|
||||
END;
|
||||
-----------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
--======================================================-- ERP Daten --=====================================================--
|
||||
SELECT TOP 1 @ARTICLE_NR = [No_],
|
||||
@WORK_ORDER_NR = [Work Order No_]
|
||||
FROM [dbo].[FNCUST_GET_MS-DYN365BC_ORDER_DATA_POS](@MandatorShortName,@ORDER_NR,@DATA_SEPERATOR)
|
||||
WHERE [GUID] = @COUNTER
|
||||
AND ([Description] IS NOT NULL OR [Description 2] IS NOT NULL)
|
||||
OR (UPPER([Description]) = @ARTICLE_NR_EXT
|
||||
OR UPPER([Description]) like '%' + @ARTICLE_NR_EXT + '%'
|
||||
OR UPPER([Description 2]) = @ARTICLE_NR_EXT
|
||||
OR UPPER([Description 2]) like '%' + @ARTICLE_NR_EXT + '%');
|
||||
--TEST: select * from [FNCUST_GET_MS-DYN365BC_ORDER_DATA_POS]('SWE','EB00017529','~')
|
||||
|
||||
|
||||
SELECT TOP 1 @POS_TAX_RATE = [VAT _]
|
||||
FROM [dbo].[FNCUST_GET_MS-DYN365BC_VAT_LIST](@MandatorShortName,@ORDER_NR,@DATA_SEPERATOR_TAX)
|
||||
WHERE [CONTENT_CONCAT] = @POS_TAX_CODE;
|
||||
SET @POS_TAX_RATE = ISNULL(@POS_TAX_RATE,0); -- Failsafe
|
||||
-----------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------------
|
||||
SET @POS_SUM_BRUTTO = @POS_SUM_NETTO * (100.00 + @POS_TAX_RATE) / 100;
|
||||
SET @ACCOUNTING = concat(@COUNTER, @DATA_SEPERATOR,
|
||||
ISNULL(@WORK_ORDER_NR,@WORK_ORDER_NR_FALLBACK), @DATA_SEPERATOR,
|
||||
NULL, @DATA_SEPERATOR,
|
||||
REPLACE(@POS_AMOUNT,',','.'), @DATA_SEPERATOR,
|
||||
REPLACE(@POS_SUM_NETTO,',','.'), @DATA_SEPERATOR,
|
||||
@POS_TAX_CODE, @DATA_SEPERATOR,
|
||||
REPLACE(@POS_SUM_BRUTTO,',','.'), @DATA_SEPERATOR,
|
||||
'false', @DATA_SEPERATOR,
|
||||
@ARTICLE_NR);
|
||||
|
||||
IF ((@POS_AMOUNT > 0) AND (@POS_SUM_NETTO > 0)) BEGIN
|
||||
|
||||
INSERT INTO @vTB_INVOICE_POS([CONTENT_CONCAT],[ORDER_POSITION_ARTICLE],[INVOICE_POSITION_ARTICLE])
|
||||
VALUES (@ACCOUNTING, @ARTICLE_NR, @ARTICLE_NR_EXT)
|
||||
|
||||
END;
|
||||
-----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
FETCH NEXT FROM CURSOR_INVOICE_POS INTO @REFERENCE_GUID, @GROUP_COUNTER;
|
||||
END;
|
||||
CLOSE CURSOR_INVOICE_POS;
|
||||
DEALLOCATE CURSOR_INVOICE_POS;
|
||||
|
||||
END;
|
||||
|
||||
RETURN;
|
||||
|
||||
END;
|
||||
|
||||
/***
|
||||
-- Test
|
||||
|
||||
SELECT * FROM [FNCUST_GET_INVOICE_POS]('ERw202603031419486748168lfelsburg','~',' - ') --WHERE
|
||||
SELECT * FROM [FNCUST_GET_INVOICE_POS]('ERw202603121044356088460lfelsburg','~',' - ') --WHERE
|
||||
|
||||
***/
|
||||
GO
|
||||
Reference in New Issue
Block a user