Neu Custom Sortierung eigener View auf Lieferschein bringen

quattroformatee

Aktives Mitglied
20. Juli 2022
73
12
Hallo,

wir haben unsere eigene View in der Datenbank angelegt, um so eine bessere Übersicht unserer Produkte auf unseren Lieferscheinen zu haben. Wir haben den SQL Code auch bereits mit einem Testauftrag direkt in der Datenbank getestet und er nimmt die Artikelnummern, checkt das hintere Kürzel und sortiert die einzelnen Bestellpositionen auch nach unseren Kriterien. Das Problem ist jetzt aber, dass wir unsere eigene View nicht auf den Lieferschein bekommen. Anscheinend kann man in der Datenquelle keine eigenen Views abfragen und über die Sortierung haben wir bereits die wildesten Versuche probiert, aber leider ohne Erfolg. Hat vielleicht jemand eine Idee wie wir unsere Sortierung auf den Lieferschein bekommen? Im Screenshot unsere SQL Query in der Sortierung. Die gibt auch die richtigen Schlüssel aus mit denen dann sortiert wird das haben wir auch bereits getestet. Anbei der SQL Code mit dem wir die View erstellt haben:


SQL:
/*--------------------------------------------------------------
  alte View weg
----------------------------------------------------------------*/
IF OBJECT_ID('dbo.v_LieferscheinSort','V') IS NOT NULL
    DROP VIEW dbo.v_LieferscheinSort;
GO

/*--------------------------------------------------------------
  neue View (für beliebig viele Positionen je Auftrag)
----------------------------------------------------------------*/
CREATE VIEW dbo.v_LieferscheinSort AS
/* 1) alle Artikel-Positionen */
WITH Pos AS (
    SELECT  p.kAuftrag,               -- Auftrags-ID
            p.kAuftragPosition,       -- Positions-ID
            p.cArtNr                  -- SKU
    FROM    Verkauf.tAuftragPosition p
    WHERE   p.nType = 1               -- 1 = Artikel
),
/* 2) SKU zerlegen */
Tokens AS (
    SELECT  p.kAuftrag,
            p.kAuftragPosition,
            p.cArtNr,
            s.value,
            ROW_NUMBER() OVER (PARTITION BY p.kAuftrag, p.kAuftragPosition
                               ORDER BY (SELECT 0))                       AS idx,
            COUNT(*)    OVER (PARTITION BY p.kAuftrag, p.kAuftragPosition) AS cnt
    FROM    Pos p
    CROSS APPLY STRING_SPLIT(
        CASE WHEN p.cArtNr LIKE '%-P'         -- „-P“ (Personalisierung) abtrennen
             THEN LEFT(p.cArtNr, LEN(p.cArtNr)-2)
             ELSE p.cArtNr END
        , '-') s
),
/* 3) Produkt-, Farb-, Größencode herausziehen */
SkuParts AS (
    SELECT  kAuftrag,
            kAuftragPosition,
            cArtNr,
            MAX(CASE WHEN idx = cnt-2 THEN value END) AS ProdCode,
            MAX(CASE WHEN idx = cnt-1 THEN value END) AS ColorCode,
            MAX(CASE WHEN idx = cnt   THEN value END) AS SizeCode
    FROM    Tokens
    GROUP BY kAuftrag, kAuftragPosition, cArtNr
)
/* 4) Sortfelder + zusammengesetzter Schlüssel */
SELECT
    s.kAuftrag,
    s.kAuftragPosition,
    s.cArtNr,

    SortPersonal = CASE WHEN s.cArtNr LIKE '%-P' THEN 0 ELSE 1 END,

    SortProduct  = CASE s.ProdCode
                     WHEN 'M'  THEN 1 WHEN 'F'  THEN 2 WHEN 'K'  THEN 3
                     WHEN 'P'  THEN 4 WHEN 'H'  THEN 5 WHEN 'KP' THEN 6
                     WHEN 'BB' THEN 7 WHEN 'BL' THEN 8 ELSE 99 END,

    SortColor    = CASE s.ColorCode
                     WHEN 'S'   THEN 1 WHEN 'NAV' THEN 2 WHEN 'BUR' THEN 3
                     WHEN 'B'   THEN 4 WHEN 'R'   THEN 5 WHEN 'GR'  THEN 6
                     WHEN 'N'   THEN 7 WHEN 'W'   THEN 8 WHEN 'PK'  THEN 9
                     WHEN 'HB'  THEN 10 ELSE 99 END,

    SortSize     = CASE s.SizeCode
                     WHEN '0/3'  THEN 1  WHEN '3/6'  THEN 2
                     WHEN '6/12' THEN 3  WHEN '12/18' THEN 4
                     WHEN '18/24' THEN 5 WHEN 'E'    THEN 6
                     WHEN 'S'    THEN 7  WHEN 'M'    THEN 8
                     WHEN 'L'    THEN 9  WHEN 'XL'   THEN 10
                     WHEN 'XXL'  THEN 11 WHEN '3XL'  THEN 12
                     WHEN '4XL'  THEN 13 WHEN '5XL'  THEN 14
                     WHEN '92'   THEN 15 WHEN '98'   THEN 16
                     WHEN '104'  THEN 17 WHEN '110'  THEN 18
                     WHEN '116'  THEN 19 WHEN '122'  THEN 20
                     WHEN '128'  THEN 21 WHEN '134'  THEN 22
                     WHEN '140'  THEN 23 WHEN '146'  THEN 24
                     WHEN '152'  THEN 25 WHEN '158'  THEN 26
                     WHEN '164'  THEN 27 ELSE 99 END,

    /* zusammengesetzter Sortierschlüssel */
    SortKey =
        (CASE WHEN s.cArtNr LIKE '%-P' THEN 0 ELSE 1 END) * 1000000 +
        (CASE s.ProdCode
              WHEN 'M'  THEN 1 WHEN 'F'  THEN 2 WHEN 'K'  THEN 3
              WHEN 'P'  THEN 4 WHEN 'H'  THEN 5 WHEN 'KP' THEN 6
              WHEN 'BB' THEN 7 WHEN 'BL' THEN 8 ELSE 99 END) * 10000 +
        (CASE s.ColorCode
              WHEN 'S'   THEN 1 WHEN 'NAV' THEN 2 WHEN 'BUR' THEN 3
              WHEN 'B'   THEN 4 WHEN 'R'   THEN 5 WHEN 'GR'  THEN 6
              WHEN 'N'   THEN 7 WHEN 'W'   THEN 8 WHEN 'PK'  THEN 9
              WHEN 'HB'  THEN 10 ELSE 99 END) * 100 +
        (CASE s.SizeCode
              WHEN '0/3'  THEN 1  WHEN '3/6'  THEN 2
              WHEN '6/12' THEN 3  WHEN '12/18' THEN 4
              WHEN '18/24' THEN 5 WHEN 'E'    THEN 6
              WHEN 'S'    THEN 7  WHEN 'M'    THEN 8
              WHEN 'L'    THEN 9  WHEN 'XL'   THEN 10
              WHEN 'XXL'  THEN 11 WHEN '3XL'  THEN 12
              WHEN '4XL'  THEN 13 WHEN '5XL'  THEN 14
              WHEN '92'   THEN 15 WHEN '98'   THEN 16
              WHEN '104'  THEN 17 WHEN '110'  THEN 18
              WHEN '116'  THEN 19 WHEN '122'  THEN 20
              WHEN '128'  THEN 21 WHEN '134'  THEN 22
              WHEN '140'  THEN 23 WHEN '146'  THEN 24
              WHEN '152'  THEN 25 WHEN '158'  THEN 26
              WHEN '164'  THEN 27 ELSE 99 END)
FROM SkuParts s;
GO

/*--------------------------------------------------------------
  Synonym im Report-Schema
----------------------------------------------------------------*/
IF OBJECT_ID(N'Report.v_LieferscheinSort','SN') IS NOT NULL
    DROP SYNONYM Report.v_LieferscheinSort;
GO
CREATE SYNONYM Report.v_LieferscheinSort FOR dbo.v_LieferscheinSort;
GO
 

Anhänge

  • Screenshot 2025-05-23 031034.png
    Screenshot 2025-05-23 031034.png
    100,5 KB · Aufrufe: 6
Zuletzt bearbeitet:

frankell

Sehr aktives Mitglied
9. September 2019
1.832
524
Flensburg
Hallo @quattroformatee,

das geht auch schlicht nicht so simpel. Die Datenbankabfragen zur Nutzung als Tabelle im Berichtscontainer sind allesamt vordefiniert.

Du kannst zwar eine Tabelle vom Typ "Freier Inhalt" nutzen und je Spalte abfragen, also den Code pro Spalte, aber nur mit der Ausgabe dieser einen Spalte. Das wiederum setzt aber eine einheitliche Sortierung voraus. Insoweit müsstest Du auf die Verwendung der View verzichten, da es dort ja kein ORDER BY gibt. Aber dann zapft man halt nicht die View an, sondern setzt den Code so als Query.

Ich hoffe, ich konnte es einigermaßen verständlich erklären.
 
Zuletzt bearbeitet: