Zastanawiam się jak najbezpieczniej ogarnąć temat wysyłania powiadomień dla klientów, np. z przeterminowanymi płatnościami, nowo założonymi pozycjami.
Np. przy nowo założonych pozycjach w okresie, samo zapytanie nie jest problemem. Problem mam z ogarnięciem już samej unikalnej wysyłki przez SQL Mail Agent. Jak przekazać adresy do wysyłki, aby nie były widoczne przez kontrahentów?
Przeterminowane płatności, tutaj ogólnie mam zapytanie stworzone, tylko zastanawiam się jak je wywoływać, aby były generowane dla każdego klienta indywidualnie.
Zapytanie w XL'u wygląda jak niżej:
Kod: Zaznacz cały
DECLARE @KnT_GIDNumer INT
SET @KnT_GIDNumer=(SELECT Knt_GIDNumer FROM CDN.KntKarty where {filtrSQL})
BEGIN
SELECT [1]=1,DANE.Dokument,DANE.Termin,CAST(DANE.Limit AS VARCHAR) AS [Limit],SUM(DANE.Wykorzystano) AS [Limit wykorzystany],CAST(DANE.Pozostaje AS VARCHAR) AS [Pozostaje]
FROM
(
SELECT
CDN.NumerDokumentuTRN(TrN_GIDTyp,TrN_SpiTyp,TrN_TrnTyp,TrN_TrnNumer,TrN_TrnRok,TrN_TrnSeria) AS [Dokument]
,ISNULL(CONVERT(VARCHAR,DATEADD(D,TrP_Termin,'18001228'),102),'') AS [Termin]
,Knt_MaxLimitWart AS [Limit]
,Knt_MaxLimitWart-CAST(CDN.SumaWartosciKredytuKontrahenta(DATEDIFF(S,CONVERT(DATETIME,'1990-01-01'),CONVERT(DATETIME,CURRENT_TIMESTAMP)),Knt_GIDNumer,0,0,1,0,0) AS DECIMAL (28,2)) AS [Pozostaje]
,CAST((CASE TrP_Typ WHEN 1 THEN -TrP_Pozostaje ELSE TrP_Pozostaje END *ISNULL((SELECT TOP 1 WaE_KursL/WaE_KursM FROM CDN.WalElem WHERE WaE_Symbol=TrP_Waluta AND WaE_Lp=TrP_NrKursu AND WaE_KursTS<=DATEDIFF(S,CONVERT(DATETIME,'1990-01-01'),CONVERT(DATETIME,CURRENT_TIMESTAMP)) ORDER BY -WaE_KursTS),1)) AS DECIMAL (28,2)) AS [Wykorzystano]
FROM CDN.TraPlat
JOIN CDN.TraNag ON TrN_GIDTyp=TrP_GIDTyp AND TrN_GIDNumer=TrP_GIDNumer
JOIN CDN.KntKarty ON KnT_GIDTyp=TrN_KntTyp AND KnT_GIDNumer=TrN_KntNumer
WHERE TrP_KntTyp=32 AND TrP_Rozliczona=0
AND TrP_KntNumer=@KnT_GIDNumer
UNION ALL
SELECT
CDN.NumerDokumentuTRN(TrN_GIDTyp,TrN_SpiTyp,TrN_TrnTyp,TrN_TrnNumer,TrN_TrnRok,TrN_TrnSeria) AS [Dokument]
,ISNULL(CONVERT(VARCHAR,DATEADD(D,TrP_Termin,'18001228'),102),'') AS [Termin]
,Knt_MaxLimitWart AS [Limit]
,Knt_MaxLimitWart-CAST(CDN.SumaWartosciKredytuKontrahenta(DATEDIFF(S,CONVERT(DATETIME,'1990-01-01'),CONVERT(DATETIME,CURRENT_TIMESTAMP)),Knt_GIDNumer,0,0,1,0,0) AS DECIMAL (28,2)) AS [Pozostaje]
,CAST((CASE TrP_Typ WHEN 1 THEN -TrP_Pozostaje ELSE TrP_Pozostaje END *ISNULL((SELECT TOP 1 WaE_KursL/WaE_KursM FROM CDN.WalElem WHERE WaE_Symbol=TrP_Waluta AND WaE_Lp=TrP_NrKursu AND WaE_KursTS<=DATEDIFF(S,CONVERT(DATETIME,'1990-01-01'),CONVERT(DATETIME,CURRENT_TIMESTAMP)) ORDER BY -WaE_KursTS),1)) AS DECIMAL (28,2)) AS [Wykorzystano]
FROM CDN.TraPlat
JOIN CDN.TraNag ON TrN_GIDTyp=TrP_GIDTyp AND TrN_GIDNumer=TrP_GIDNumer
JOIN CDN.KntKarty ON KnT_GIDTyp=TrN_KntTyp AND KnT_GIDNumer=TrN_KntNumer
WHERE KnT_KnpParam=0 AND KnT_GIDNumer<>KnT_KnpNumer AND KnT_GIDTyp=KnT_KnpTyp
AND TrP_KntTyp=32 AND TrP_KntNumer=KnT_KnpNumer AND TrP_Rozliczona=0
AND TrN_KntNumer=@KnT_GIDNumer
UNION ALL
SELECT
CDN.NumerDokumentuTRN(TrN_GIDTyp,TrN_SpiTyp,TrN_TrnTyp,TrN_TrnNumer,TrN_TrnRok,TrN_TrnSeria) AS [Dokument]
,'' AS [Termin]
,Knt_MaxLimitWart AS [Limit]
,Knt_MaxLimitWart-CAST(CDN.SumaWartosciKredytuKontrahenta(DATEDIFF(S,CONVERT(DATETIME,'1990-01-01'),CONVERT(DATETIME,CURRENT_TIMESTAMP)),Knt_GIDNumer,0,0,1,0,0) AS DECIMAL (28,2)) AS [Pozostaje]
,ISNULL(CASE WHEN TrN_GIDTyp IN (2001,2005,2009,2013) THEN ROUND(TrN_NettoR+TrN_VatR,2) WHEN TrN_GIDTyp IN (1489,1497) THEN ROUND(-TrN_NettoP-TrN_VatP,2) ELSE 0 END,0) AS [Wykorzystano]
FROM CDN.TraNag
JOIN CDN.KntKarty ON KnT_GIDTyp=TrN_KntTyp AND KnT_GIDNumer=TrN_KntNumer
WHERE TrN_KnpTyp=32 AND TrN_Platnosci=0 AND TrN_SpiNumer=0 AND TrN_GIDTyp IN (2001,2009,1489,1497,2005,2013)
AND TrN_KnpNumer=@KnT_GIDNumer
) AS DANE
GROUP BY DANE.Dokument,DANE.Termin,DANE.Limit,DANE.Pozostaje
ORDER BY 3
END
Teraz muszę to zaadaptować dla SQL Mail Agent, czy @KnT_GidNumer wrzucić jako tablicę i w pętli dla każdego kontrahenta generować zapytanie? Czy może jeszcze jakiś inny sposób na to?