Powiadomienia dla klientów/opiekunów

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

Lilpri
Posty: 127
Rejestracja: 13 maja 2019, 11:04
Rola: Administrator CDN XL

Powiadomienia dla klientów/opiekunów

Post autor: Lilpri »

Hej,
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?

Swiety_M
Posty: 381
Rejestracja: 19 lip 2012, 13:05
Rola: Administrator CDN XL
Wersja: 8.0
Lokalizacja: Poznań, Września, Konin
Kontakt:

Re: Powiadomienia dla klientów/opiekunów

Post autor: Swiety_M »

Hej,
Myślę, że wystarczy połączyć TraPlat z TraNag gdzie Trp_Rozliczona=0

A co do wysyłki, to łatwiej i szybciej będzie jak znajdziesz przykład paru linijek w c# i tak to będziesz wysyłał.
Z tym Sql Agentem bym odpuścił, zwłaszcza że jak zaczniesz wysyłać powiadomienia to zaraz będziesz miał pewnie następne podobne "zlecenia" od handlowców i się zajedziesz z agentem mssql... ;)
Marek Michałowski
www.tecado.pl
ERP/WMS/SFA
POZNAŃ - WRZEŚNIA

ODPOWIEDZ