PRCUST_SET_JSON_INVOICE_DATA: Komplette Überarbeitung durch copilot

This commit is contained in:
2026-02-26 11:45:14 +01:00
parent b5166e6783
commit 2802cc20b0

View File

@@ -1,396 +1,517 @@
CREATE OR ALTER PROCEDURE PRCUST_SET_JSON_INVOICE_DATA SET ANSI_NULLS ON
@json NVARCHAR(MAX) GO
AS SET QUOTED_IDENTIFIER ON
BEGIN GO
SET NOCOUNT ON;
-- [PRCUST_SET_JSON_INVOICE_DATA]
PRINT 'Starte Verarbeitung von JSON-Daten...'; -- =================================================================
-- Imports invoice JSON payload into relational tables and returns
--------------------------------------------------------- -- normalized JSON response for all imported documents.
-- JSON VALIDIEREN --
--------------------------------------------------------- -- Returns: RESULTSET; success/message/data
IF dbo.FN_VALIDATE_JSON_INVOICE_DATA(@json) = 0 -- =================================================================
BEGIN -- Copyright (c) 2026 by Digital Data GmbH
PRINT 'JSON-Validierung fehlgeschlagen.'; --
SELECT -- Digital Data GmbH • Ludwig-Rinn-Strasse 16 • D-35452 Heuchelheim
success = 0 -- Tel.: 0641/202360 • E-Mail: info-flow@digitaldata.works
, message = 'Ungültige JSON-Struktur.' -- =================================================================
, data = NULL; -- Creation Date / Author: 26.02.2026 / MK
RETURN; -- Version Date / Editor: 26.02.2026 / MK
END -- Version Number: 1.0.0.0
-- =================================================================
PRINT 'JSON-Validierung erfolgreich.'; -- History:
-- 26.02.2026 / MK - Initial version based on JSON invoice import
BEGIN TRY -- 26.02.2026 / MK - Style harmonized to PRDEX convention
DECLARE @docs TABLE (doc NVARCHAR(MAX));
DECLARE @doc NVARCHAR(MAX); CREATE OR ALTER PROCEDURE [dbo].[PRCUST_SET_JSON_INVOICE_DATA](
DECLARE @DocumentID INT; @json NVARCHAR(MAX)
)
PRINT 'Extrahiere purchaseDocuments...'; AS
BEGIN TRY
INSERT INTO @docs(doc)
SELECT value SET NOCOUNT ON;
FROM OPENJSON(@json, '$.purchaseDocuments'); SET XACT_ABORT ON;
DECLARE doc_cursor CURSOR FOR SELECT doc FROM @docs; -- declare runtime vars
OPEN doc_cursor; DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID),
FETCH NEXT FROM doc_cursor INTO @doc; @RETURN_STATUS INT = 0,
@RETURN_STATUS_TEXT NVARCHAR(MAX) = CONCAT('START PROCEDURE [',OBJECT_NAME(@@PROCID),'] @ ',CONVERT(VARCHAR(50),GETDATE(),120)),
WHILE @@FETCH_STATUS = 0 @RETURN_ERROR_TEXT NVARCHAR(MAX) = N'';
BEGIN
PRINT 'Füge PurchaseDocument ein...'; DECLARE @doc NVARCHAR(MAX),
@line NVARCHAR(MAX),
--------------------------------------------------------- @DocumentID INT,
-- PurchaseDocument einfügen (zeilenweise) @LineID INT,
--------------------------------------------------------- @output NVARCHAR(MAX);
INSERT INTO PurchaseDocument (
DocumentType DECLARE @docs TABLE (doc NVARCHAR(MAX));
, No_ DECLARE @lines TABLE (line NVARCHAR(MAX));
, NoSeries DECLARE @InsertedDocuments TABLE (DocumentID INT PRIMARY KEY);
, ProcessIDTransfer
, BuyFromVendorNo PRINT '====================================================================================================';
, PayToVendorNo PRINT @RETURN_STATUS_TEXT;
, PostingDate PRINT '';
, PaymentTermsCode
, PaymentTermsCodeIR --==============================================-- Validate JSON payload --==============================================--
, DueDate IF dbo.FN_VALIDATE_JSON_INVOICE_DATA(@json) = 0 BEGIN
, PmtDiscountDate
, PaymentDiscount SET @RETURN_STATUS = 40001;
, CurrencyCode SET @RETURN_STATUS_TEXT = N'JSON validation failed.';
, InvoiceDiscCode SET @RETURN_ERROR_TEXT = N'Ungültige JSON-Struktur.';
, PostingDescription
, PaymentMethodCode PRINT 'ERROR: ' + @RETURN_ERROR_TEXT;
, VendorInvoiceNo
, VendorCrMemoNo SELECT
, PhrVendorBankAccountCode success = 0
, PhrBankBranchNo , message = @RETURN_ERROR_TEXT
, PhrBankAccountNo , data = NULL;
, PhrIBAN
, PhrSWIFTCode RETURN;
, PhrBankName END;
, PhrBankAccountEntryPriority -----------------------------------------------------------------------------------------------------------------------------------
, PhrRMCashDiscountReceived
, PhrRMAmountIncludingVAT PRINT 'INFO: JSON-Validierung erfolgreich.';
, PhrRMAmountLessDiscount
) BEGIN TRANSACTION;
SELECT
DocumentType --===========================================-- Extract purchaseDocuments array --===========================================--
, No INSERT INTO @docs(doc)
, NoSeries SELECT [value]
, ProcessIDTransfer FROM OPENJSON(@json, '$.purchaseDocuments');
, BuyFromVendorNo -----------------------------------------------------------------------------------------------------------------------------------
, PayToVendorNo
, PostingDate DECLARE doc_cursor CURSOR LOCAL FAST_FORWARD FOR SELECT doc FROM @docs;
, PaymentTermsCode OPEN doc_cursor;
, PaymentTermsCodeIR FETCH NEXT FROM doc_cursor INTO @doc;
, DueDate
, PmtDiscountDate WHILE @@FETCH_STATUS = 0 BEGIN
, PaymentDiscount
, CurrencyCode PRINT 'INFO: Füge PurchaseDocument ein...';
, InvoiceDiscCode
, PostingDescription --=============================================-- Insert PurchaseDocument row --=============================================--
, PaymentMethodCode INSERT INTO dbo.PurchaseDocument (
, VendorInvoiceNo DocumentType
, VendorCrMemoNo , No_
, PhrVendorBankAccountCode , NoSeries
, PhrBankBranchNo , ProcessIDTransfer
, PhrBankAccountNo , BuyFromVendorNo
, PhrIBAN , PayToVendorNo
, PhrSWIFTCode , PostingDate
, PhrBankName , PaymentTermsCode
, PhrBankAccountEntryPriority , PaymentTermsCodeIR
, PhrRMCashDiscountReceived , DueDate
, PhrRMAmountIncludingVAT , PmtDiscountDate
, PhrRMAmountLessDiscount , PaymentDiscount
FROM OPENJSON(@doc) , CurrencyCode
WITH ( , InvoiceDiscCode
DocumentType INT , PostingDescription
, No NVARCHAR(50) , PaymentMethodCode
, NoSeries NVARCHAR(50) , VendorInvoiceNo
, ProcessIDTransfer NVARCHAR(50) , VendorCrMemoNo
, BuyFromVendorNo NVARCHAR(50) , PhrVendorBankAccountCode
, PayToVendorNo NVARCHAR(50) , PhrBankBranchNo
, PostingDate DATE , PhrBankAccountNo
, PaymentTermsCode NVARCHAR(20) , PhrIBAN
, PaymentTermsCodeIR NVARCHAR(20) , PhrSWIFTCode
, DueDate DATE , PhrBankName
, PmtDiscountDate DATE , PhrBankAccountEntryPriority
, PaymentDiscount DECIMAL(10,2) , PhrRMCashDiscountReceived
, CurrencyCode NVARCHAR(10) , PhrRMAmountIncludingVAT
, InvoiceDiscCode NVARCHAR(50) , PhrRMAmountLessDiscount
, PostingDescription NVARCHAR(250) )
, PaymentMethodCode NVARCHAR(20) SELECT
, VendorInvoiceNo NVARCHAR(50) DocumentType
, VendorCrMemoNo NVARCHAR(50) , No
, PhrVendorBankAccountCode NVARCHAR(50) , NoSeries
, PhrBankBranchNo NVARCHAR(50) , ProcessIDTransfer
, PhrBankAccountNo NVARCHAR(50) , BuyFromVendorNo
, PhrIBAN NVARCHAR(50) , PayToVendorNo
, PhrSWIFTCode NVARCHAR(50) , PostingDate
, PhrBankName NVARCHAR(100) , PaymentTermsCode
, PhrBankAccountEntryPriority BIT , PaymentTermsCodeIR
, PhrRMCashDiscountReceived BIT , DueDate
, PhrRMAmountIncludingVAT DECIMAL(18,2) , PmtDiscountDate
, PhrRMAmountLessDiscount DECIMAL(18,2) , PaymentDiscount
, purchaseLines NVARCHAR(MAX) AS JSON , CurrencyCode
); , InvoiceDiscCode
, PostingDescription
SET @DocumentID = SCOPE_IDENTITY(); , PaymentMethodCode
, VendorInvoiceNo
PRINT 'PurchaseDocument eingefügt. DocumentID = ' + CAST(@DocumentID AS NVARCHAR(20)); , VendorCrMemoNo
, PhrVendorBankAccountCode
--------------------------------------------------------- , PhrBankBranchNo
-- purchaseLines extrahieren , PhrBankAccountNo
--------------------------------------------------------- , PhrIBAN
PRINT 'Extrahiere purchaseLines...'; , PhrSWIFTCode
, PhrBankName
DECLARE @lines TABLE (line NVARCHAR(MAX)); , PhrBankAccountEntryPriority
INSERT INTO @lines(line) , PhrRMCashDiscountReceived
SELECT value , PhrRMAmountIncludingVAT
FROM OPENJSON(@doc, '$.purchaseLines'); , PhrRMAmountLessDiscount
FROM OPENJSON(@doc)
DECLARE @line NVARCHAR(MAX); WITH (
DECLARE @LineID INT; DocumentType INT
, No NVARCHAR(50)
DECLARE line_cursor CURSOR FOR SELECT line FROM @lines; , NoSeries NVARCHAR(50)
OPEN line_cursor; , ProcessIDTransfer NVARCHAR(50)
FETCH NEXT FROM line_cursor INTO @line; , BuyFromVendorNo NVARCHAR(50)
, PayToVendorNo NVARCHAR(50)
WHILE @@FETCH_STATUS = 0 , PostingDate DATE
BEGIN , PaymentTermsCode NVARCHAR(20)
PRINT 'Füge PurchaseLine ein...'; , PaymentTermsCodeIR NVARCHAR(20)
, DueDate DATE
INSERT INTO PurchaseLine ( , PmtDiscountDate DATE
DocumentID , PaymentDiscount DECIMAL(10,2)
, AttachedToLineNo , CurrencyCode NVARCHAR(10)
, Type , InvoiceDiscCode NVARCHAR(50)
, No_ , PostingDescription NVARCHAR(250)
, Description , PaymentMethodCode NVARCHAR(20)
, Description2 , VendorInvoiceNo NVARCHAR(50)
, LocationCode , VendorCrMemoNo NVARCHAR(50)
, VariantCode , PhrVendorBankAccountCode NVARCHAR(50)
, Quantity , PhrBankBranchNo NVARCHAR(50)
, UnitOfMeasureCode , PhrBankAccountNo NVARCHAR(50)
, DirectUnitCost , PhrIBAN NVARCHAR(50)
, LineDiscount , PhrSWIFTCode NVARCHAR(50)
, AbleToDiscount , PhrBankName NVARCHAR(100)
, DiscountCalculated , PhrBankAccountEntryPriority BIT
, WorkOrderNo , PhrRMCashDiscountReceived BIT
, GenBusPostingGroup , PhrRMAmountIncludingVAT DECIMAL(18,2)
, GenProdPostingGroup , PhrRMAmountLessDiscount DECIMAL(18,2)
, VatBusPostingGroup , purchaseLines NVARCHAR(MAX) AS JSON
, VatProdPostingGroup );
, ApplToItemEntry -----------------------------------------------------------------------------------------------------------------------------------
, PostingWithoutApply
, AnticipatedPayment SET @DocumentID = SCOPE_IDENTITY();
, ReceiptNo INSERT INTO @InsertedDocuments (DocumentID) VALUES (@DocumentID);
, ReceiptLineNo
, IrOrderNo PRINT 'INFO: PurchaseDocument eingefügt. DocumentID = ' + CAST(@DocumentID AS NVARCHAR(20));
, IrOrderLineNo
) --=============================================-- Extract purchaseLines array --==============================================--
SELECT DELETE FROM @lines;
@DocumentID INSERT INTO @lines(line)
, AttachedToLineNo SELECT [value]
, Type FROM OPENJSON(@doc, '$.purchaseLines');
, No -----------------------------------------------------------------------------------------------------------------------------------
, Description
, Description2 DECLARE line_cursor CURSOR LOCAL FAST_FORWARD FOR SELECT line FROM @lines;
, LocationCode OPEN line_cursor;
, VariantCode FETCH NEXT FROM line_cursor INTO @line;
, Quantity
, UnitOfMeasureCode WHILE @@FETCH_STATUS = 0 BEGIN
, DirectUnitCost
, LineDiscount PRINT 'INFO: Füge PurchaseLine ein...';
, AbleToDiscount
, DiscountCalculated INSERT INTO dbo.PurchaseLine (
, WorkOrderNo DocumentID
, GenBusPostingGroup , AttachedToLineNo
, GenProdPostingGroup , Type
, VatBusPostingGroup , No_
, VatProdPostingGroup , Description
, ApplToItemEntry , Description2
, PostingWithoutApply , LocationCode
, AnticipatedPayment , VariantCode
, ReceiptNo , Quantity
, ReceiptLineNo , UnitOfMeasureCode
, IrOrderNo , DirectUnitCost
, IrOrderLineNo , LineDiscount
FROM OPENJSON(@line) , AbleToDiscount
WITH ( , DiscountCalculated
AttachedToLineNo INT , WorkOrderNo
, Type INT , GenBusPostingGroup
, No NVARCHAR(50) , GenProdPostingGroup
, Description NVARCHAR(250) , VatBusPostingGroup
, Description2 NVARCHAR(250) , VatProdPostingGroup
, LocationCode NVARCHAR(50) , ApplToItemEntry
, VariantCode NVARCHAR(50) , PostingWithoutApply
, Quantity DECIMAL(18,4) , AnticipatedPayment
, UnitOfMeasureCode NVARCHAR(20) , ReceiptNo
, DirectUnitCost DECIMAL(18,4) , ReceiptLineNo
, LineDiscount DECIMAL(18,4) , IrOrderNo
, AbleToDiscount BIT , IrOrderLineNo
, DiscountCalculated BIT )
, WorkOrderNo NVARCHAR(50) SELECT
, GenBusPostingGroup NVARCHAR(20) @DocumentID
, GenProdPostingGroup NVARCHAR(20) , AttachedToLineNo
, VatBusPostingGroup NVARCHAR(20) , Type
, VatProdPostingGroup NVARCHAR(20) , No
, ApplToItemEntry INT , Description
, PostingWithoutApply BIT , Description2
, AnticipatedPayment DECIMAL(18,2) , LocationCode
, ReceiptNo NVARCHAR(50) , VariantCode
, ReceiptLineNo INT , Quantity
, IrOrderNo NVARCHAR(50) , UnitOfMeasureCode
, IrOrderLineNo INT , DirectUnitCost
, dimSetEntries NVARCHAR(MAX) AS JSON , LineDiscount
, itemChargeAssignmentLines NVARCHAR(MAX) AS JSON , AbleToDiscount
); , DiscountCalculated
, WorkOrderNo
SET @LineID = SCOPE_IDENTITY(); , GenBusPostingGroup
, GenProdPostingGroup
PRINT 'PurchaseLine eingefügt. LineID = ' + CAST(@LineID AS NVARCHAR(20)); , VatBusPostingGroup
, VatProdPostingGroup
--------------------------------------------------------- , ApplToItemEntry
-- dimSetEntries , PostingWithoutApply
--------------------------------------------------------- , AnticipatedPayment
PRINT 'Füge dimSetEntries ein...'; , ReceiptNo
, ReceiptLineNo
INSERT INTO DimSetEntry ( , IrOrderNo
LineID , IrOrderLineNo
, DimensionCode FROM OPENJSON(@line)
, DimensionValueCode WITH (
) AttachedToLineNo INT
SELECT , Type INT
@LineID , No NVARCHAR(50)
, DimensionCode , Description NVARCHAR(250)
, DimensionValueCode , Description2 NVARCHAR(250)
FROM OPENJSON(@line, '$.dimSetEntries') , LocationCode NVARCHAR(50)
WITH ( , VariantCode NVARCHAR(50)
DimensionCode NVARCHAR(50) , Quantity DECIMAL(18,4)
, DimensionValueCode NVARCHAR(50) , UnitOfMeasureCode NVARCHAR(20)
); , DirectUnitCost DECIMAL(18,4)
, LineDiscount DECIMAL(18,4)
--------------------------------------------------------- , AbleToDiscount BIT
-- itemChargeAssignmentLines , DiscountCalculated BIT
--------------------------------------------------------- , WorkOrderNo NVARCHAR(50)
PRINT 'Füge itemChargeAssignmentLines ein...'; , GenBusPostingGroup NVARCHAR(20)
, GenProdPostingGroup NVARCHAR(20)
INSERT INTO ItemChargeAssignment ( , VatBusPostingGroup NVARCHAR(20)
LineID , VatProdPostingGroup NVARCHAR(20)
, ItemChargeNo , ApplToItemEntry INT
, UnitCost , PostingWithoutApply BIT
, AppliesToDocType , AnticipatedPayment DECIMAL(18,2)
, AppliesToDocNo , ReceiptNo NVARCHAR(50)
, AppliesToDocLineNo , ReceiptLineNo INT
, ItemNo , IrOrderNo NVARCHAR(50)
, Description , IrOrderLineNo INT
, QtyToAssign , dimSetEntries NVARCHAR(MAX) AS JSON
, QtyAssigned , itemChargeAssignmentLines NVARCHAR(MAX) AS JSON
, AmountToAssign );
, AppliesToDocLineAmount
) SET @LineID = SCOPE_IDENTITY();
SELECT PRINT 'INFO: PurchaseLine eingefügt. LineID = ' + CAST(@LineID AS NVARCHAR(20));
@LineID
, ItemChargeNo --===============================================-- Insert dimSetEntries --===============================================--
, UnitCost INSERT INTO dbo.DimSetEntry (LineID, DimensionCode, DimensionValueCode)
, AppliesToDocType SELECT @LineID, DimensionCode, DimensionValueCode
, AppliesToDocNo FROM OPENJSON(@line, '$.dimSetEntries')
, AppliesToDocLineNo WITH (
, ItemNo DimensionCode NVARCHAR(50)
, Description , DimensionValueCode NVARCHAR(50)
, QtyToAssign );
, QtyAssigned -----------------------------------------------------------------------------------------------------------------------------------
, AmountToAssign
, AppliesToDocLineAmount --=========================================-- Insert itemChargeAssignmentLines --==========================================--
FROM OPENJSON(@line, '$.itemChargeAssignmentLines') INSERT INTO dbo.ItemChargeAssignment (
WITH ( LineID
ItemChargeNo NVARCHAR(50) , ItemChargeNo
, UnitCost DECIMAL(18,4) , UnitCost
, AppliesToDocType INT , AppliesToDocType
, AppliesToDocNo NVARCHAR(50) , AppliesToDocNo
, AppliesToDocLineNo INT , AppliesToDocLineNo
, ItemNo NVARCHAR(50) , ItemNo
, Description NVARCHAR(250) , Description
, QtyToAssign DECIMAL(18,4) , QtyToAssign
, QtyAssigned DECIMAL(18,4) , QtyAssigned
, AmountToAssign DECIMAL(18,4) , AmountToAssign
, AppliesToDocLineAmount DECIMAL(18,4) , AppliesToDocLineAmount
); )
SELECT
FETCH NEXT FROM line_cursor INTO @line; @LineID
END , ItemChargeNo
, UnitCost
CLOSE line_cursor; , AppliesToDocType
DEALLOCATE line_cursor; , AppliesToDocNo
, AppliesToDocLineNo
FETCH NEXT FROM doc_cursor INTO @doc; , ItemNo
END , Description
, QtyToAssign
CLOSE doc_cursor; , QtyAssigned
DEALLOCATE doc_cursor; , AmountToAssign
, AppliesToDocLineAmount
PRINT 'Erzeuge JSON-Ausgabe...'; FROM OPENJSON(@line, '$.itemChargeAssignmentLines')
WITH (
--------------------------------------------------------- ItemChargeNo NVARCHAR(50)
-- JSON-Ausgabe exakt wie Upload-Datei , UnitCost DECIMAL(18,4)
--------------------------------------------------------- , AppliesToDocType INT
DECLARE @output NVARCHAR(MAX); , AppliesToDocNo NVARCHAR(50)
, AppliesToDocLineNo INT
SELECT @output = , ItemNo NVARCHAR(50)
( , Description NVARCHAR(250)
SELECT , QtyToAssign DECIMAL(18,4)
( , QtyAssigned DECIMAL(18,4)
SELECT , AmountToAssign DECIMAL(18,4)
( , AppliesToDocLineAmount DECIMAL(18,4)
SELECT );
pd.* -----------------------------------------------------------------------------------------------------------------------------------
, (
SELECT FETCH NEXT FROM line_cursor INTO @line;
pl.* END;
, (
SELECT * CLOSE line_cursor;
FROM DimSetEntry d DEALLOCATE line_cursor;
WHERE d.LineID = pl.LineID
FOR JSON PATH FETCH NEXT FROM doc_cursor INTO @doc;
) AS dimSetEntries END;
, (
SELECT * CLOSE doc_cursor;
FROM ItemChargeAssignment ia DEALLOCATE doc_cursor;
WHERE ia.LineID = pl.LineID
FOR JSON PATH PRINT 'INFO: Erzeuge JSON-Ausgabe...';
) AS itemChargeAssignmentLines
FROM PurchaseLine pl --===============================================-- Build output JSON result --===============================================--
WHERE pl.DocumentID = pd.DocumentID SELECT @output =
FOR JSON PATH (
) AS purchaseLines SELECT
FROM PurchaseDocument pd JSON_QUERY(
WHERE pd.DocumentID = @DocumentID COALESCE(
FOR JSON PATH (
) AS purchaseDocuments SELECT
FOR JSON PATH pd.DocumentType
) , [No] = pd.No_
); , pd.NoSeries
, pd.ProcessIDTransfer
PRINT 'JSON-Ausgabe erstellt.'; , pd.BuyFromVendorNo
, pd.PayToVendorNo
--------------------------------------------------------- , pd.PostingDate
-- Erfolgsmeldung + strukturierte JSON-Ausgabe , pd.PaymentTermsCode
--------------------------------------------------------- , pd.PaymentTermsCodeIR
SELECT , pd.DueDate
success = 1 , pd.PmtDiscountDate
, message = 'Daten erfolgreich verarbeitet.' , pd.PaymentDiscount
, data = @output; , pd.CurrencyCode
, pd.InvoiceDiscCode
PRINT 'Verarbeitung erfolgreich abgeschlossen.'; , pd.PostingDescription
, pd.PaymentMethodCode
END TRY , pd.VendorInvoiceNo
BEGIN CATCH , pd.VendorCrMemoNo
PRINT 'FEHLER: ' + ERROR_MESSAGE(); , pd.PhrVendorBankAccountCode
, pd.PhrBankBranchNo
SELECT , pd.PhrBankAccountNo
success = 0 , pd.PhrIBAN
, message = ERROR_MESSAGE() , pd.PhrSWIFTCode
, data = NULL; , pd.PhrBankName
END CATCH , pd.PhrBankAccountEntryPriority
END , pd.PhrRMCashDiscountReceived
, pd.PhrRMAmountIncludingVAT
, pd.PhrRMAmountLessDiscount
, purchaseLines = JSON_QUERY(
COALESCE(
(
SELECT
pl.AttachedToLineNo
, pl.Type
, [No] = pl.No_
, pl.Description
, pl.Description2
, pl.LocationCode
, pl.VariantCode
, pl.Quantity
, pl.UnitOfMeasureCode
, pl.DirectUnitCost
, pl.LineDiscount
, pl.AbleToDiscount
, pl.DiscountCalculated
, pl.WorkOrderNo
, pl.GenBusPostingGroup
, pl.GenProdPostingGroup
, pl.VatBusPostingGroup
, pl.VatProdPostingGroup
, pl.ApplToItemEntry
, pl.PostingWithoutApply
, pl.AnticipatedPayment
, pl.ReceiptNo
, pl.ReceiptLineNo
, pl.IrOrderNo
, pl.IrOrderLineNo
, dimSetEntries = JSON_QUERY(
COALESCE(
(
SELECT
d.DimensionCode
, d.DimensionValueCode
FROM dbo.DimSetEntry d
WHERE d.LineID = pl.LineID
FOR JSON PATH
)
, '[]'
)
)
, itemChargeAssignmentLines = JSON_QUERY(
COALESCE(
(
SELECT
ia.ItemChargeNo
, ia.UnitCost
, ia.AppliesToDocType
, ia.AppliesToDocNo
, ia.AppliesToDocLineNo
, ia.ItemNo
, ia.Description
, ia.QtyToAssign
, ia.QtyAssigned
, ia.AmountToAssign
, ia.AppliesToDocLineAmount
FROM dbo.ItemChargeAssignment ia
WHERE ia.LineID = pl.LineID
FOR JSON PATH
)
, '[]'
)
)
FROM dbo.PurchaseLine pl
WHERE pl.DocumentID = pd.DocumentID
FOR JSON PATH
)
, '[]'
)
)
FROM dbo.PurchaseDocument pd
INNER JOIN @InsertedDocuments id ON id.DocumentID = pd.DocumentID
ORDER BY pd.DocumentID
FOR JSON PATH
)
, '[]'
)
) AS purchaseDocuments
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
);
-----------------------------------------------------------------------------------------------------------------------------------
COMMIT TRANSACTION;
SET @RETURN_STATUS = 0;
SET @RETURN_STATUS_TEXT = CONCAT('END PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120));
PRINT '';
PRINT @RETURN_STATUS_TEXT;
PRINT '====================================================================================================';
SELECT
success = 1
, message = N'Daten erfolgreich verarbeitet.'
, data = @output;
END TRY BEGIN CATCH
--====================================================-- exception / error --====================================================--
IF (@@TRANCOUNT > 0) BEGIN
ROLLBACK TRANSACTION;
END;
SET @RETURN_STATUS = 50000;
SET @RETURN_STATUS_TEXT = CONCAT('END PROCEDURE [',OBJECT_NAME(@@PROCID),'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120));
SET @RETURN_ERROR_TEXT = CONCAT('ERROR MESSAGE: ',CONVERT(NVARCHAR(500),ERROR_MESSAGE()));
PRINT 'ERROR IN PROCEDURE: [' + OBJECT_NAME(@@PROCID) + ']' + CHAR(13) + @RETURN_ERROR_TEXT;
PRINT @RETURN_STATUS_TEXT;
PRINT '====================================================================================================';
-----------------------------------------------------------------------------------------------------------------------------------
SELECT
success = 0
, message = ERROR_MESSAGE()
, data = NULL;
END CATCH;
GO GO