diff --git a/test/DBBrowserForSQLite/test.db b/test/DBBrowserForSQLite/test.db new file mode 100644 index 0000000..ecfd80a Binary files /dev/null and b/test/DBBrowserForSQLite/test.db differ diff --git a/test/DBBrowserForSQLite/test.sqbpro b/test/DBBrowserForSQLite/test.sqbpro new file mode 100644 index 0000000..20445b8 --- /dev/null +++ b/test/DBBrowserForSQLite/test.sqbpro @@ -0,0 +1,308 @@ +
DROP TABLE IF EXISTS TMP_CODES_CASE_12_OR_13; +CREATE TABLE TMP_CODES_CASE_12_OR_13 (KOMPTEILENR TEXT NOT NULL, PRIMARY KEY (KOMPTEILENR)); + +WITH combined_bom AS ( + SELECT C.KOMPTEILENR, COALESCE(C.LAENGE, 0) AS LAENGE + FROM COMP C + WHERE C.UEBTEILENR = '000000372' + + UNION ALL + + SELECT ChildCode, Uebergabelaenge + FROM RD_COMP + WHERE ParentCode = '000000372' +) + +INSERT INTO TMP_CODES_CASE_12_OR_13 +SELECT DISTINCT KOMPTEILENR +FROM ( + SELECT KOMPTEILENR, LAENGE, COUNT(*) AS ANZAHL + FROM combined_bom + GROUP BY KOMPTEILENR, LAENGE +) +WHERE ANZAHL = 1; + +SELECT * FROM TMP_CODES_CASE_12_OR_13DROP TABLE IF EXISTS TMP_CODES_CASE_13; +CREATE TABLE TMP_CODES_CASE_13 (KOMPTEILENR TEXT NOT NULL, PRIMARY KEY(KOMPTEILENR)); + +WITH combined_bom AS ( + SELECT KOMPTEILENR, POSNR + FROM COMP + WHERE UEBTEILENR = '000000372' + AND KOMPTEILENR IN (SELECT * FROM TMP_CODES_CASE_12_OR_13) + + UNION ALL + + SELECT ChildCode, Positionsnummer + FROM RD_COMP + WHERE ParentCode = '000000372' + AND ChildCode IN (SELECT * FROM TMP_CODES_CASE_12_OR_13) +) + +INSERT INTO TMP_CODES_CASE_13 (KOMPTEILENR) +SELECT DISTINCT KOMPTEILENR +FROM ( + SELECT KOMPTEILENR, COUNT(*) AS ANZAHL + FROM combined_bom + GROUP BY KOMPTEILENR, POSNR +) +WHERE ANZAHL = 1; + +SELECT * FROM TMP_CODES_CASE_13DROP TABLE IF EXISTS TMP_POSNRS_CASE_11; +CREATE TABLE TMP_POSNRS_CASE_11 (UEBTEILENR TEXT NOT NULL, + POS_ALT INTEGER NOT NULL, + POS_NEU INTEGER NOT NULL, + PRIMARY KEY(POS_NEU)); + +INSERT INTO TMP_POSNRS_CASE_11 (UEBTEILENR, POS_ALT, POS_NEU) + +SELECT C.UEBTEILENR, C.POSNR AS POS_ALT, RD.Positionsnummer AS POS_NEU +FROM RD_COMP RD + +LEFT JOIN TMP_CODES_CASE_12_OR_13 TMP + ON RD.ChildCode = TMP.KOMPTEILENR + +LEFT JOIN COMP C + ON RD.ParentCode = C.UEBTEILENR + AND RD.ChildCode = C.KOMPTEILENR + AND RD.Uebergabelaenge = COALESCE(C.LAENGE, 0) + +WHERE RD.ParentCode = '000000372' + AND TMP.KOMPTEILENR IS NULL; + +SELECT * FROM TMP_POSNRS_CASE_11DROP TABLE IF EXISTS TMP_POSNRS_CASE_12; +CREATE TABLE TMP_POSNRS_CASE_12 (UEBTEILENR TEXT NOT NULL, + POS_ALT INTEGER NOT NULL, + POS_NEU INTEGER NOT NULL, + PRIMARY KEY(POS_NEU)); + +INSERT INTO TMP_POSNRS_CASE_12 (UEBTEILENR, POS_ALT, POS_NEU) + +SELECT C.UEBTEILENR, C.POSNR AS POS_ALT, RD.Positionsnummer AS POS_NEU +FROM RD_COMP RD + +LEFT JOIN TMP_CODES_CASE_13 TMP + ON RD.ChildCode = TMP.KOMPTEILENR + +LEFT JOIN COMP C + ON RD.ParentCode = C.UEBTEILENR +AND RD.ChildCode = C.KOMPTEILENR +AND RD.Positionsnummer = C.POSNR + +WHERE RD.ParentCode = '000000372' +AND TMP.KOMPTEILENR IS NULL +AND RD.Positionsnummer NOT IN (SELECT POSNR FROM TMP_POSNRS_CASE_11); + +SELECT * FROM TMP_POSNRS_CASE_12;DROP TABLE IF EXISTS TMP_POSNRS_CASE_131; +CREATE TABLE TMP_POSNRS_CASE_131 (POSNR INTEGER NOT NULL, PRIMARY KEY(POSNR)); + +INSERT INTO TMP_POSNRS_CASE_131 + +SELECT RD.Positionsnummer AS POSNR +FROM RD_COMP RD + +LEFT JOIN COMP C + ON RD.ParentCode = C.UEBTEILENR + AND RD.ChildCode = C.KOMPTEILENR + AND RD.Uebergabelaenge = COALESCE(C.LAENGE, 0) + +WHERE RD.ParentCode = '000000372' + AND RD.ChildCode IN (SELECT * FROM TMP_CODES_CASE_13) + AND C.KOMPTEILENR IS NULL; + +SELECT * FROM TMP_POSNRS_CASE_131;DROP TABLE IF EXISTS TMP_POSNRS_CASE_132; +CREATE TABLE TMP_POSNRS_CASE_132 (UEBTEILENR TEXT NOT NULL, + POS_ALT INTEGER NOT NULL, + POS_NEU INTEGER NOT NULL, + PRIMARY KEY(POS_NEU)); + +INSERT INTO TMP_POSNRS_CASE_132 (UEBTEILENR, POS_ALT, POS_NEU) + +SELECT C.UEBTEILENR, C.POSNR AS POS_ALT, RD.Positionsnummer AS POS_NEU +FROM RD_COMP RD + +INNER JOIN COMP C + ON RD.ParentCode = C.UEBTEILENR + AND RD.ChildCode = C.KOMPTEILENR + AND RD.Uebergabelaenge = COALESCE(C.LAENGE, 0) + +WHERE RD.ParentCode = '000000372' + AND RD.ChildCode IN (SELECT * FROM TMP_CODES_CASE_13); + +SELECT * FROM TMP_POSNRS_CASE_132;WITH COMBINED_UPDATE_DATA AS ( + SELECT * FROM TMP_POSNRS_CASE_11 + UNION + SELECT * FROM TMP_POSNRS_CASE_12 + UNION + SELECT * FROM TMP_POSNRS_CASE_132 +) +--INSERT INTO TMP_IDS_TO_DELETE + +SELECT C.ROWID AS COMP_ROWID, B.ROWID AS BED_ROWID, R.ROWID AS REG_ROWID +FROM COMP C + +LEFT JOIN COMBINED_UPDATE_DATA CUD + ON C.UEBTEILENR = CUD.UEBTEILENR + AND C.POSNR = CUD.POS_ALT + +LEFT JOIN VAR_TEIL_BEDINGUNG_2 B + ON C.UEBTEILENR = B.UEBTEILENR + AND C.POSNR = B.POSNR + +LEFT JOIN STKL_REGEL R + ON C.UEBTEILENR = R.UEBTEILENR + AND C.POSNR = R.POSNR + +WHERE C.UEBTEILENR = '000000372' + AND CUD.UEBTEILENR IS NULLDROP TABLE IF EXISTS TMP_UPDATE_DATA; +CREATE TABLE TMP_UPDATE_DATA (ROWID INTEGER NOT NULL, + POS_ALT INTEGER NOT NULL, + POS_NEU INTEGER NOT NULL, + ABW_ANZAHL INTEGER, + MENGE REAL, + LAENGE REAL, + ZUSCHNITT REAL, + DISPO_AKTIV_JN TEXT, + RUESTCODE TEXT, + BED_ROWID INTEGER, + REG_ROWID INTEGER, + UEB_LEISTEN_NR INTEGER, + LFD_NR INTEGER); + +WITH ALL_POSNRS_TO_UPDATE AS ( + SELECT * FROM TMP_POSNRS_CASE_11 + UNION + SELECT * FROM TMP_POSNRS_CASE_12 + UNION + SELECT * FROM TMP_POSNRS_CASE_132 +) +INSERT INTO TMP_UPDATE_DATA (ROWID, POS_ALT, POS_NEU, ABW_ANZAHL, MENGE, LAENGE, ZUSCHNITT, DISPO_AKTIV_JN, RUESTCODE, BED_ROWID, REG_ROWID, UEB_LEISTEN_NR, LFD_NR) + +SELECT C.ROWID, + P.POS_ALT, + RD.Positionsnummer AS POS_NEU, + + -- Bestimmt Wert für Spalte 'ABW_ANZAHL': NULL, wenn Pos. nicht längenabhängig, sonst Wert 'Menge' aus CSV + CASE + WHEN RD.Uebergabelaenge = 0 THEN NULL + ELSE RD.Menge + END AS ABW_ANZAHL, + + -- Bestimmt Wert für Spalte 'MENGE': Berechnung Dezimalwert, wenn Pos. längenabhängig, sonst Wert 'Menge' aus CSV + CASE + WHEN RD.Uebergabelaenge = 0 THEN RD.Menge + ELSE RD.Menge * (RD.Uebergabelaenge + COALESCE(C.ZUSCHNITT, 0)) / 1000 + END AS MENGE, + + -- Bestimmt Wert für Spalte 'LAENGE': NULL, wenn Pos. nicht längenabhängig, sonst Wert 'Uebergabelaenge' aus CSV + CASE + WHEN RD.Uebergabelaenge = 0 THEN NULL + ELSE RD.Uebergabelaenge + END AS LAENGE, + + C.ZUSCHNITT, + C.DISPO_AKTIV_JN, + C.RUESTCODE, + B.ROWID, + R.ROWID, + B.UEB_LEISTEN_NR, + R.LFD_NR + +FROM ALL_POSNRS_TO_UPDATE P + INNER JOIN COMP C + ON P.UEBTEILENR = C.UEBTEILENR + AND P.POS_ALT = C.POSNR + + INNER JOIN RD_COMP RD + ON P.UEBTEILENR = RD.ParentCode + AND P.POS_NEU = RD.Positionsnummer + + LEFT JOIN VAR_TEIL_BEDINGUNG_2 B + ON P.UEBTEILENR = B.UEBTEILENR + AND P.POS_ALT = B.POSNR + + LEFT JOIN STKL_REGEL R + ON P.UEBTEILENR = R.UEBTEILENR + AND P.POS_ALT = R.POSNR; + +SELECT * FROM TMP_UPDATE_DATASELECT C.POSNR, C.KOMPTEILENR + +FROM COMP C +LEFT JOIN VAR_TEIL_BEDINGUNG_2 B + ON C.UEBTEILENR = B.UEBTEILENR + AND C.POSNR = B.POSNR + +LEFT JOIN STKL_REGEL R + ON C.UEBTEILENR = R.UEBTEILENR + AND C.POSNR = R.POSNR + +WHERE C.UEBTEILENR = '000000382' +AND ( + B.UEB_LEISTEN_NR IS NOT NULL + OR R.LFD_NR IS NOT NULL +) + +ORDER BY C.POSNR--längenabhängige Teilenummern herausfinden, die in beiden Stücklisten vorliegen +WITH laengenabh_codes_in_both_boms AS ( + SELECT DISTINCT ChildCode + FROM RD_COMP + WHERE ParentCode = '000000382' + AND ChildCode in ( + SELECT DISTINCT KOMPTEILENR + FROM COMP + WHERE UEBTEILENR = '000000382' + AND COALESCE(LAENGE, 0) != 0 + ) +) + +SELECT C.POSNR, C.KOMPTEILENR +FROM COMP C + +LEFT JOIN RD_COMP RD + ON C.UEBTEILENR = RD.ParentCode + AND C.KOMPTEILENR = RD.ChildCode + AND COALESCE(C.LAENGE, 0) = RD.Uebergabelaenge + +INNER JOIN PARTS P + ON C.KOMPTEILENR = P.TEILENR + +WHERE C.UEBTEILENR = '000000382' + AND C.KOMPTEILENR IN laengenabh_codes_in_both_boms -- Nur längenabhängige Teilenummern berücksichtigen, die in beiden Stücklisten vorliegen + AND RD.ParentCode IS NULL -- Nur Positionen berücksichtigen, deren Länge ausschließlich in der alten Stückliste vorliegt + AND P.INFO2_JN = "N" -- Nur Positionen berücksichtigen, deren zugehörige Teilenummer keinen Haken bei "Halbzeug ohne Sägeliste" im Teilestamm aufweist + AND ( -- Nur Positionen berücksichtigen, auf die min. eines der nachfolgenden Kriterien zutrifft: + C.ZUSCHNITT IS NOT NULL -- Zuschnittswert liegt vor + OR C.RUESTCODE != P.RUESTCODE -- Rüstcode der Position in der Stammstückliste ist abweichend zum Rüstcode der zugehörigen Teilenummer im Teilestamm + OR C.DISPO_AKTIV_JN = "N" -- Stücklistenpositionen besitzt keinen Haken in der Spalte "Dispoaktiv" + ) + +ORDER BY C.POSNRSELECT C.UEBTEILENR, C.POSNR, C.KOMPTEILENR, C.DISPO_AKTIV_JN, C.ZUSCHNITT, C.RUESTCODE, P.INFO2_JN, P.TEILENR, P.RUESTCODE AS P_RUESTCODE +FROM COMP C +INNER JOIN PARTS P +ON C.KOMPTEILENR = P.TEILENR + +INNER JOIN RD_COMP RD +ON C.UEBTEILENR = RD.ParentCode +AND C.KOMPTEILENR = RD.ChildCode + +WHERE C.UEBTEILENR = '000000369' +AND P.INFO2_JN = 'N' +AND +( +C.ZUSCHNITT IS NOT NULL +OR C.RUESTCODE != P.RUESTCODE +OR C.DISPO_AKTIV_JN = "N" +) + +GROUP BY C.POSNRSELECT * +FROM COMP C +LEFT JOIN RD_COMP RD + ON C.UEBTEILENR = RD.ParentCode + AND C.KOMPTEILENR = RD.ChildCode + AND COALESCE(C.LAENGE, 0) = RD.Uebergabelaenge + +WHERE C.UEBTEILENR = '000000371' +AND C.LAENGE IS NOT NULL -- Wenn es sich um eine längenabhängige Teilenummer handelt +AND RD.ParentCode IS NULL -- UND nicht alle Längenvarianten aus der alten Stückliste in der neuen Stückliste vorliegen + +