### Create SQL Function for Unsplitting Amazon Positions Source: https://wawi-db.jtl-software.de/functions This SQL function, Amazon.ifUnsplitAmazonPositionen, is designed to process and aggregate positions from Amazon orders. It joins order and position tables to sum quantities based on order number and user ID, filtering for valid article numbers. The function returns a table with article numbers and their total quantities. It requires the dbo schema and specific tables like pf_amazon_bestellung and pf_amazon_bestellungpos. ```sql CREATE FUNCTION [Amazon].[ifUnsplitAmazonPositionen] (@ExterneAuftragsnummer AS VARCHAR(50), @kUser INT) RETURNS TABLE AS RETURN ( SELECT pf_amazon_bestellungpos.cArtNr, SUM(pf_amazon_bestellungpos.nQuantityPurchased) AS fAnzahl FROM dbo.pf_amazon_bestellung JOIN dbo.pf_amazon_bestellungpos ON pf_amazon_bestellung.kAmazonBestellung = pf_amazon_bestellungpos.kAmazonBestellung WHERE LEN(pf_amazon_bestellungpos.cArtNr) > 0 AND pf_amazon_bestellung.kUser = @kUser AND pf_amazon_bestellung.cOriginalOrderId = @ExterneAuftragsnummer GROUP BY pf_amazon_bestellungpos.cArtNr ) ``` -------------------------------- ### SQL Stored Procedure for Category Shop Visibility Management Source: https://wawi-db.jtl-software.de/procedures/1.9 This stored procedure, `spKategorieShopsichtbarkeitFuerKindartikelVererben`, manages the visibility settings of categories and their associated articles within different shops. It handles enabling visibility (setting 'Y') and disabling/deleting visibility based on the `@nLoeschen` parameter. The procedure utilizes temporary tables to store intermediate results and MERGE statements for efficient updates and insertions into `tKategorieShop` and `tArtikelShop` tables. ```sql CREATE PROCEDURE [Abgleich].[spKategorieShopsichtbarkeitFuerKindartikelVererben] @kShop INT, @kKategorie INT, @nLoeschen INT AS BEGIN SET NOCOUNT ON; SET ANSI_NULLS ON; SET ANSI_NULL_DFLT_ON ON; SET ANSI_PADDING ON; SET CONCAT_NULL_YIELDS_NULL ON; SET XACT_ABORT OFF; DELETE dbo.tQueue WHERE tQueue.kPlattform = 0 AND tQueue.cName = 'tKategorie' AND tQueue.nAction = 2 AND tQueue.kOption1 = 0 AND tQueue.kOption2 = 0 AND tQueue.kShop = @kShop AND tQueue.kWert = @kKategorie; CREATE TABLE #tkategorieArtikel ( kArtikel INT ); INSERT INTO #tkategorieArtikel (kArtikel) SELECT DISTINCT tArtikel.kArtikel FROM dbo.tkategorieartikel JOIN dbo.tArtikel ON tArtikel.kArtikel = tkategorieartikel.kArtikel LEFT JOIN ( -- Normale Variationen nicht bei Kassen-Shops aktivieren SELECT tArtikel.kArtikel FROM dbo.tArtikel JOIN dbo.teigenschaft ON tArtikel.kArtikel = teigenschaft.kArtikel JOIN dbo.tShop ON tShop.kShop = @kShop WHERE tArtikel.nIstVater = 0 AND tShop.nTyp = 4 ) AS NichtAktivieren ON tArtikel.kArtikel = NichtAktivieren.kArtikel WHERE tkategorieartikel.kKategorie = @kKategorie AND tArtikel.cAktiv = 'Y' AND NichtAktivieren.kArtikel IS NULL; IF (@nLoeschen = 0) BEGIN -- tKategorieShop MERGE INTO dbo.tKategorieShop USING ( SELECT DISTINCT kKategorie FROM dbo.tkategorieShop WHERE kKategorie = @kKategorie ) AS Source(kKategorie) ON tKategorieShop.kKategorie = Source.kKategorie AND kShop = @kShop WHEN MATCHED THEN UPDATE SET cInet = 'Y' WHEN NOT MATCHED BY TARGET THEN INSERT (kKategorie, kShop, cInet, cDelInet, nInBearbeitung) VALUES (@kKategorie, @kShop, 'Y', '', 0); -- tArtikelShop MERGE INTO dbo.tArtikelShop USING ( SELECT kArtikel FROM #tkategorieArtikel ) AS Source(kArtikel) ON tArtikelShop.kArtikel = Source.kArtikel AND tArtikelShop.kShop = @kShop WHEN MATCHED THEN UPDATE SET cInet = 'Y', nAktion = 1 WHEN NOT MATCHED BY TARGET THEN INSERT (kArtikel, kShop, cInet, cDelInet) VALUES (Source.kArtikel, @kShop, 'Y', 'N'); -- tArtikelBildPlattform UPDATE dbo.tArtikelbildPlattform SET nInet = 1 FROM dbo.tArtikelbildPlattform JOIN dbo.tArtikel ON tArtikel.kArtikel = tArtikelbildPlattform.kArtikel JOIN dbo.tkategorieartikel ON tkategorieartikel.kArtikel = tArtikel.kArtikel WHERE tArtikel.cAktiv = 'Y' AND tkategorieartikel.kKategorie = @kKategorie AND tArtikelbildPlattform.kPlattform = 2 AND tArtikelbildPlattform.nInet = 0 AND tArtikelbildPlattform.kShop = @kShop; -- tEigenschaftWertPict UPDATE dbo.tEigenschaftWertPict SET nInet = 1 FROM dbo.tEigenschaftWertPict JOIN dbo.tEigenschaftWert ON tEigenschaftWert.kEigenschaftWert = tEigenschaftWertPict.kEigenschaftWert JOIN dbo.tEigenschaft ON tEigenschaft.kEigenschaft = tEigenschaftWert.kEigenschaft JOIN dbo.tArtikel ON tArtikel.kArtikel = tEigenschaft.kArtikel JOIN dbo.tkategorieartikel ON tkategorieartikel.kArtikel = tArtikel.kArtikel WHERE tkategorieartikel.kKategorie IN (SELECT kKategorie FROM dbo.ifKategoriebaum(@kKategorie)) AND tEigenschaftWertPict.nInet = 0 AND tEigenschaftWertPict.kShop = @kShop; END; ELSE BEGIN CREATE TABLE #KategorieArtikelNotToDelete ( kArtikel INT ); INSERT INTO #KategorieArtikelNotToDelete ( kArtikel ) SELECT #tKategorieArtikel.kArtikel FROM dbo.tkategorieartikel JOIN dbo.tKategorieShop ON tKategorieShop.kKategorie = tkategorieartikel.kKategorie JOIN #tKategorieArtikel ON #tKategorieArtikel.kArtikel = tkategorieartikel.kArtikel WHERE tKategorieShop.kKategorie != @kKategorie; DELETE FROM dbo.tkategorieShop WHERE tkategorieShop.kKategorie = @kKategorie AND tKategorieShop.kShop = @kShop; DELETE dbo.tArtikelShop FROM dbo.tArtikelShop LEFT JOIN dbo.tArtikel ON tArtikel.kArtikel = tArtikelShop.kArtikel LEFT JOIN dbo.tkategorieartikel ON tkategorieartikel.kArtikel = tArtikelShop.kArtikel WHERE tArtikelShop.kShop = @kShop AND tkategorieartikel.kKategorie = @kKategorie AND tArtikelShop.kArtikel NOT IN ( SELECT #KategorieArtikelNotToDelete.kArtikel FROM #KategorieArtikelNotToDelete ); DROP TABLE #KategorieArtikelNotToDelete; END; DROP TABLE #tkategorieArtikel; END; ``` -------------------------------- ### SQL Stored Procedure for Category Shop Visibility Inheritance Source: https://wawi-db.jtl-software.de/procedures This SQL stored procedure, 'spKategorieShopsichtbarkeitFuerKindartikelVererben', manages the visibility of categories and their associated articles within specific shops. It handles updates, insertions, and deletions based on the '@nLoeschen' parameter, ensuring that child articles inherit correct shop visibility settings. It uses temporary tables to efficiently process article lists and MERGE statements for updating existing records or inserting new ones in 'tKategorieShop' and 'tArtikelShop' tables. ```sql CREATE PROCEDURE [Abgleich].[spKategorieShopsichtbarkeitFuerKindartikelVererben] @kShop INT, @kKategorie INT, @nLoeschen INT AS BEGIN SET NOCOUNT ON; SET ANSI_NULLS ON; SET ANSI_NULL_DFLT_ON ON; SET ANSI_PADDING ON; SET CONCAT_NULL_YIELDS_NULL ON; SET XACT_ABORT OFF; DELETE dbo.tQueue WHERE tQueue.kPlattform = 0 AND tQueue.cName = 'tKategorie' AND tQueue.nAction = 2 AND tQueue.kOption1 = 0 AND tQueue.kOption2 = 0 AND tQueue.kShop = @kShop AND tQueue.kWert = @kKategorie; CREATE TABLE #tkategorieArtikel ( kArtikel INT ); INSERT INTO #tkategorieArtikel (kArtikel) SELECT DISTINCT tArtikel.kArtikel FROM dbo.tkategorieartikel JOIN dbo.tArtikel ON tArtikel.kArtikel = tkategorieartikel.kArtikel LEFT JOIN ( -- Normale Variationen nicht bei Kassen-Shops aktivieren SELECT tArtikel.kArtikel FROM dbo.tArtikel JOIN dbo.teigenschaft ON tArtikel.kArtikel = teigenschaft.kArtikel JOIN dbo.tShop ON tShop.kShop = @kShop WHERE tArtikel.nIstVater = 0 AND tShop.nTyp = 4 ) AS NichtAktivieren ON tArtikel.kArtikel = NichtAktivieren.kArtikel WHERE tkategorieartikel.kKategorie = @kKategorie AND tArtikel.cAktiv = 'Y' AND NichtAktivieren.kArtikel IS NULL; IF (@nLoeschen = 0) BEGIN -- tKategorieShop MERGE INTO dbo.tKategorieShop USING ( SELECT DISTINCT kKategorie FROM dbo.tkategorieShop WHERE kKategorie = @kKategorie ) AS Source(kKategorie) ON tKategorieShop.kKategorie = Source.kKategorie AND kShop = @kShop WHEN MATCHED THEN UPDATE SET cInet = 'Y' WHEN NOT MATCHED BY TARGET THEN INSERT (kKategorie, kShop, cInet, cDelInet, nInBearbeitung) VALUES (@kKategorie, @kShop, 'Y', '', 0); -- tArtikelShop MERGE INTO dbo.tArtikelShop USING ( SELECT kArtikel FROM #tkategorieArtikel ) AS Source(kArtikel) ON tArtikelShop.kArtikel = Source.kArtikel AND tArtikelShop.kShop = @kShop WHEN MATCHED THEN UPDATE SET cInet = 'Y', nAktion = 1 WHEN NOT MATCHED BY TARGET THEN INSERT (kArtikel, kShop, cInet, cDelInet) VALUES (Source.kArtikel, @kShop, 'Y', 'N'); -- tArtikelBildPlattform UPDATE dbo.tArtikelbildPlattform SET nInet = 1 FROM dbo.tArtikelbildPlattform JOIN dbo.tArtikel ON tArtikel.kArtikel = tArtikelbildPlattform.kArtikel JOIN dbo.tkategorieartikel ON tkategorieartikel.kArtikel = tArtikel.kArtikel WHERE tArtikel.cAktiv = 'Y' AND tkategorieartikel.kKategorie = @kKategorie AND tArtikelbildPlattform.kPlattform = 2 AND tArtikelbildPlattform.nInet = 0 AND tArtikelbildPlattform.kShop = @kShop; -- tEigenschaftWertPict UPDATE dbo.tEigenschaftWertPict SET nInet = 1 FROM dbo.tEigenschaftWertPict JOIN dbo.tEigenschaftWert ON tEigenschaftWert.kEigenschaftWert = tEigenschaftWertPict.kEigenschaftWert JOIN dbo.tEigenschaft ON tEigenschaft.kEigenschaft = tEigenschaftWert.kEigenschaft JOIN dbo.tArtikel ON tArtikel.kArtikel = tEigenschaft.kArtikel JOIN dbo.tkategorieartikel ON tkategorieartikel.kArtikel = tArtikel.kArtikel WHERE tkategorieartikel.kKategorie IN (SELECT kKategorie FROM dbo.ifKategoriebaum(@kKategorie)) AND tEigenschaftWertPict.nInet = 0 AND tEigenschaftWertPict.kShop = @kShop; END; ELSE BEGIN CREATE TABLE #KategorieArtikelNotToDelete ( kArtikel INT ); INSERT INTO #KategorieArtikelNotToDelete ( kArtikel ) SELECT #tKategorieArtikel.kArtikel FROM dbo.tkategorieartikel JOIN dbo.tKategorieShop ON tKategorieShop.kKategorie = tkategorieartikel.kKategorie JOIN #tKategorieArtikel ON #tKategorieArtikel.kArtikel = tkategorieartikel.kArtikel WHERE tKategorieShop.kKategorie != @kKategorie; DELETE FROM dbo.tkategorieShop WHERE tkategorieShop.kKategorie = @kKategorie AND tKategorieShop.kShop = @kShop; DELETE dbo.tArtikelShop FROM dbo.tArtikelShop LEFT JOIN dbo.tArtikel ON tArtikel.kArtikel = tArtikelShop.kArtikel LEFT JOIN dbo.tkategorieartikel ON tkategorieartikel.kArtikel = tArtikelShop.kArtikel WHERE tArtikelShop.kShop = @kShop AND tkategorieartikel.kKategorie = @kKategorie AND tArtikelShop.kArtikel NOT IN ( SELECT #KategorieArtikelNotToDelete.kArtikel FROM #KategorieArtikelNotToDelete ); DROP TABLE #KategorieArtikelNotToDelete; END; DROP TABLE #tkategorieArtikel; END; ``` -------------------------------- ### SQL: Check if Document Number Exists (Amazon.ifBelegnummerVergeben) Source: https://wawi-db.jtl-software.de/functions/1.10 This SQL function checks if a provided document number already exists within the 'Rechnung', 'Gutschrift', or 'ExternerBeleg' tables. It returns 1 (true) if the number exists and 0 (false) otherwise. It requires no external dependencies beyond the database schema. ```sql CREATE FUNCTION [Amazon].[ifBelegnummerVergeben] (@cBelegnummer AS NVARCHAR(50)) RETURNS BIT AS BEGIN IF EXISTS( SELECT tRechnung.cRechnungsnr AS cBeleg FROM Rechnung.tRechnung WHERE tRechnung.cRechnungsnr = @cBelegnummer UNION SELECT tgutschrift.cGutschriftNr AS cBeleg FROM dbo.tgutschrift WHERE tgutschrift.cGutschriftNr = @cBelegnummer UNION SELECT tExternerBeleg.cBelegnr AS cBeleg FROM Rechnung.tExternerBeleg WHERE tExternerBeleg.cBelegnr = @cBelegnummer) BEGIN RETURN 1; END RETURN 0; END ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.