Przypomnienie o płatnościach, windykacja

Problemy i pomysły związane z funkcjonowaniem modułu Księgowość

Moderator: mikey

Tyriado
Posty: 33
Rejestracja: 07 kwie 2023, 09:30
Rola: Użytkownik CDN XL
Wersja: 2023

Przypomnienie o płatnościach, windykacja

Post autor: Tyriado »

Witam,
Chciałbym Was zapytać jak macie rozwiązany problem z przypominaniem o płatnościach, windykację. Chciałbym uzyskać coś na wzór wysyłki maili do klienta jak pozostanie powiedzmy tydzień do końca terminu płatności. Coś na zasadzie "przypominajki".

Jakieś dodatkowe programy, jobem SQL, jakieś pomysły jak można to zorganizować.

Maila teoretycznie możemy chyba wysłać nawet z SQL, więc można by coś od tej strony pokombinować, ale mam w głowie jedynie zarys takiego pomysłu. Może ktoś używa jakiegoś sprawdzonego rozwiązania i może coś wspomnieć. Będę wdzięczny.

Pozdrawiam

Awatar użytkownika
praiser
Posty: 720
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Przypomnienie o płatnościach, windykacja

Post autor: praiser »

Ja używam procedury SQL + logowanie wysyłek mailowych do tabeli własnej (żeby nie spamować klienta) + (ewentualnie) job SQL dla automatyzacji
--------------------------------
Pozdrawiam
WW

Tyriado
Posty: 33
Rejestracja: 07 kwie 2023, 09:30
Rola: Użytkownik CDN XL
Wersja: 2023

Re: Przypomnienie o płatnościach, windykacja

Post autor: Tyriado »

Podzielisz się szczegółami? Oczywiście rozumiem, że nie dasz mi gotowego rozwiązania, bo nie po to je sobie zrobiłeś, ale jak rozumiem masz zapytanie "wyłapujące" te faktury? Bo ja to tak luźno myślałem nad stworzeniem jakiegoś zapytania, czy jakiejś dodatkowej tabeli, która będzie zawierała jakieś podstawowe dane jak powiedzmy mail z karty kontrahenta, nazwę firmy, numer dokumentu, kwotę i termin płatności i potem wysyłać to jobem ewentualnie. I jakiś automat "czyszczący" tę tabelę i wysyłający te maile powiedzmy raz w tygodniu. To taki luźny jakiś "system" chodzący mi po głowie. Zastanawiałem się nad wykorzystaniem widoku "Płatności" z XLa w celu "znalezienia" faktur z tym terminem i do tego powiązania jakoś kontrahenta i wyciągnięcia stamtąd adresu email nawet nazwy.
Szczerze SQL jakoś nie jest mi szczególnie obcy i mam bazę do testów tych zapytań, ale nie do końca znam powiązania tych tabel i sposobu na powiązanie tych danych, stąd pytanie jak userzy tutaj to mają rozwiązane.

Awatar użytkownika
praiser
Posty: 720
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Przypomnienie o płatnościach, windykacja

Post autor: praiser »

Tak jak piszesz. Generalnie wykorzystuje preliminarz (cdn.PreliminarzView) i joiny do tabel które potrzebuje

Z tym że ja nie mam przypominajek przed płatnością a upomnienia po przeterminowanych.

Zbieram w procedurze tabelą tymczasową dane płatników spełniających kryteria (czy to odbiorca, czy istnieją przeterminowane faktury sprzedaży np. 7 dni i starsze, saldo niezerowe itd...)

join do karty płatnika:
FROM CDN.PreliminarzView
JOIN CDN.KntKarty on PRLV_KnpNumer=Knt_GidNumer

i tyle mi właściwie wystarczy. Dołączam w sumie jeszcze atrybuty karty klienta ale tylko po to, bo adresy mailowe do wezwań przechowuje w atrybutach. Nie korzystam z pól e-mail karty klienta do tego.

w kursorze wysyłam spreparowany mail procedurą [msdb].[dbo].[sp_send_dbmail] i
wrzucam potem do własnej tabeli gid płatnika, date wysyłki przypomnienia,czego dotyczyła,kwoty (żeby warunkować później w tabeli tymczasowej wspomnianej wyżej, żeby nie bombardować klienta codziennie wezwaniem)

jobem wywołuje procedurę.
--------------------------------
Pozdrawiam
WW

Tyriado
Posty: 33
Rejestracja: 07 kwie 2023, 09:30
Rola: Użytkownik CDN XL
Wersja: 2023

Re: Przypomnienie o płatnościach, windykacja

Post autor: Tyriado »

Ok, zacząłem coś skrobać i nie jest chyba tak źle. Mam jednak pytanie, bo w preliminarzu mam zobowiązania i należności. Która kolumna to filtruje w jakiś sposób? Bo na razie pomyślałem o warunku PRLV_Rozliczony=0, bo pewnie 0 to nierozliczony, a 1 rozliczony. Jets kolumna prlv_NaleznosciZobowiazania i chyba tu mógłbym odfiltrować tylko należności, ale nie wiem jaka wartość jest należnością, a jaka zobowiązaniem. "1" to należności, a "2" to zobowiązania?

Awatar użytkownika
praiser
Posty: 720
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Przypomnienie o płatnościach, windykacja

Post autor: praiser »

prócz sprawdzania gidtypu dla faktur sprzedaży i flagi rozliczenia w warunku selecta to przy komponowaniu zawartości powiadomienia u siebie mam tak

WHEN PRLV_NaleznosciZobowiazania = 1 AND PRLV_GIDTyp<>784 THEN PRLV_Pozostaje -- faktury sprzedaży
WHEN PRLV_NaleznosciZobowiazania = 2 AND PRLV_GIDTyp<>784 THEN -PRLV_Pozostaje --korekty sprzedaży

-- PRLV_NaleznosciZobowiazania BYTE 1-należności, 2-zobowiązania, 0-zapis kasowy
--------------------------------
Pozdrawiam
WW

Tyriado
Posty: 33
Rejestracja: 07 kwie 2023, 09:30
Rola: Użytkownik CDN XL
Wersja: 2023

Re: Przypomnienie o płatnościach, windykacja

Post autor: Tyriado »

Wiem, że to głupie, ale jak rozwiązałeś problem pętli przy wysyłce maili?
Bo pojedynczo ok, zrobiłem jakby "schemat" wiadomośći, tylko, że o statycznej treści, ale tabela ma rekordy i chciałbym coś na wzór pętli while czy for, że bierze adres i po kolei podstawia zmienne z kolumn. I tego jakoś nie moge ogarnąć. Nigdy nie robiłem wysyłki przez SQL, więc pewnie w tym problem.

Awatar użytkownika
praiser
Posty: 720
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Przypomnienie o płatnościach, windykacja

Post autor: praiser »

kursora używam.

Przykład:

Kod: Zaznacz cały

declare @tabela_pod_kursor table (
	gid int,
	dane varchar(100),
	mail varchar(100)
	)

insert into @tabela_pod_kursor values
(1, 'dane1','mail1'),
(2, 'dane2','mail2'),
(3, 'dane3','mail3')

DECLARE @id_kursora int

DECLARE petla CURSOR FOR   
SELECT gid FROM @tabela_pod_kursor

OPEN petla
FETCH NEXT FROM petla INTO @id_kursora

WHILE @@FETCH_STATUS = 0  
BEGIN  
	select 'wysyłka maila pod adres: ' + mail from @tabela_pod_kursor where gid=@id_kursora -- (exec wysyłki)
	FETCH NEXT FROM petla INTO @id_kursora
END
CLOSE petla
DEALLOCATE petla
--------------------------------
Pozdrawiam
WW

Tyriado
Posty: 33
Rejestracja: 07 kwie 2023, 09:30
Rola: Użytkownik CDN XL
Wersja: 2023

Re: Przypomnienie o płatnościach, windykacja

Post autor: Tyriado »

Dzięki, bardzo mi pomogłeś. Właściwie jak mam cały kod i go wywołam to dostaję maila, jakiego sobie wymyśliłem. Muszę to teraz jakoś właściwie tylko "ubrać" i jakoś zautomatyzować i będzie chyba działało. Pozostają mi dokładniejsze testy :)

Znalazłem jednak jeden błąd i może to głupie, ale mam problem z rozwiązaniem tego. Mam taki fragment:

,format(dateadd(d,PRLV_Data,'18001228'), 'dd.MM.yyyy') as DataWystawienia
,format(dateadd(d,PRLV_Termin,'18001228'), 'dd.MM.yyyy') as DataTermin
,DATEDIFF(day,PRLV_Data,PRLV_Termin )[/code]

Tylko ta różnica dat jets jak tera zauważyłem cbyba pomiędyz datą wystawienia, a datą terminu płatności, czyli zawsze będzie stała, nie zmieni się. A powinienem mieć co jest logiczne odwołanie do daty dzisiejszej, więc wpałem na taki pomył:

Kod: Zaznacz cały

,format(dateadd(d,PRLV_Data,'18001228'), 'dd.MM.yyyy') as  DataWystawienia
,format(dateadd(d,PRLV_Termin,'18001228'), 'dd.MM.yyyy') as DataTermin
,FORMAT (getdate(), 'dd.MM.yyyy') as DataDzis
I nie wiem... jak to dobrze odjąć. Próbowałem:

Kod: Zaznacz cały

,DATEDIFF(day,FORMAT (getdate(), 'dd.MM.yyyy'),PRLV_Termin )
, ale wtedy mam wynik rzędu 34572

Jakoś nie ogarniam tych dat w SQLu, zawsze z tym miałem problem.

Awatar użytkownika
praiser
Posty: 720
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Przypomnienie o płatnościach, windykacja

Post autor: praiser »

Musisz zamienić datę na format liczbowy clarion, różnica dni od 1800-12-28 do dzisiaj

DECLARE @Today int = 0; SELECT @Today = datediff(day, '18001228',getdate())

i można odejmować integery:

,@Today - PRLV_Termin as [Różnica Dni od Terminu do dziś]

albo jak u ciebie bez deklaracji zmiennej

,DATEDIFF(day,(SELECT datedifF(day, '18001228',getdate())),PRLV_Termin )
--------------------------------
Pozdrawiam
WW

ODPOWIEDZ