Ich möchte gerne die Artikelpositiones Auftrag nach Erstellung über einen Custom Workflow neu sortieren.
Leider sind die Aufträge danach "Fehlerhaft" obwohl ich sowohl tbestellpos als auch Verkauf.tAuftragPosition korrigieren.
Hat jemand eine Idee?
Leider sind die Aufträge danach "Fehlerhaft" obwohl ich sowohl tbestellpos als auch Verkauf.tAuftragPosition korrigieren.
Hat jemand eine Idee?
SQL:
USE [eazybusiness]
GO
/****** Object: StoredProcedure [CustomWorkflows].[spAuftragSortieren] Script Date: 26.06.2024 07:22:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [CustomWorkflows].[spAuftragSortieren] @kAuftrag INT AS
BEGIN
-- Temporäre Tabelle erstellen, um die sortierten Daten zu speichern
CREATE TABLE #AuftragSortiert (
kBestellPos INT,
kBestellung INT,
cArtNr VARCHAR(255),
nType INT,
SortOrder INT
);
-- Daten in die temporäre Tabelle einfügen, sortiert nach Artikelnummer, wobei nType = 1 bevorzugt wird
INSERT INTO #AuftragSortiert (kBestellPos, kBestellung, cArtNr, nType, SortOrder)
SELECT
kBestellPos,
tBestellung_kBestellung,
cArtNr,
nType,
CASE
WHEN nType = 1 THEN ROW_NUMBER() OVER (ORDER BY cArtNr ASC)
ELSE 0
END AS SortOrder
FROM
tbestellpos
WHERE
tBestellung_kBestellung = @kAuftrag;
-- Zusätzliche temporäre Tabelle für Positionen mit nType = 0 erstellen
CREATE TABLE #AuftragSortiert_0 (
kBestellPos INT,
SortOrder INT
);
DECLARE @MaxSortOrder INT;
SELECT @MaxSortOrder = MAX(SortOrder) FROM #AuftragSortiert WHERE nType = 1;
-- SortOrder für Positionen mit nType = 2 berechnen und in die temporäre Tabelle einfügen
INSERT INTO #AuftragSortiert_0 (kBestellPos, SortOrder)
SELECT
kBestellPos,
@MaxSortOrder + ROW_NUMBER() OVER (ORDER BY kBestellPos)
FROM
#AuftragSortiert
WHERE
nType <> 1;
-- SortOrder in der ursprünglichen temporären Tabelle für nType = 2 aktualisieren
UPDATE a
SET a.SortOrder = b.SortOrder
FROM
#AuftragSortiert a
INNER JOIN
#AuftragSortiert_0 b
ON
a.kBestellPos = b.kBestellPos;
-- Ursprüngliche Sortierreihenfolge aktualisieren
UPDATE bp
SET bp.nSort = ass.SortOrder
FROM
tbestellpos bp
INNER JOIN
#AuftragSortiert ass
ON
bp.kBestellPos = ass.kBestellPos;
UPDATE ap
SET ap.nSort = ass.SortOrder
FROM
Verkauf.tAuftragPosition ap
INNER JOIN
#AuftragSortiert ass
ON
ap.kAuftragPosition = ass.kBestellPos;
-- Temporäre Tabellen löschen
DROP TABLE #AuftragSortiert;
DROP TABLE #AuftragSortiert_0;
END