księgowość wpadła na genialny pomysł, aby wykorzystać "Automatyczne rozliczanie" w sposób jaki Comarch nie ogarnął XD
Mianowicie chcą, żeby rozliczenia zrobiły się po konkretnych kontach 840/842 które ze sobą się sparują.
Znalazłem procedurę która to robi:
[CDN].[KsiRozrachunekAuto_Lista]
I zastanawiałem się jak to ogarnąć i wpadłem na coś takiego:
- jeśli w opis wpiszą "konta 840", wtedy uaktywniony zostanie tryb specjalny:
Kod: Zaznacz cały
DECLARE @TrybSpecjalny BIT = 0
-- Jeśli w filtrze opisu wpisano "konta 840", włączamy tryb specjalny
IF @p_Opis LIKE '%konta 840%'
BEGIN
SET @TrybSpecjalny = 1
SET @p_Opis = ''
ENDKod: Zaznacz cały
--początek jest standardem
if @p_KKSNumer <> 0
set @sql1 = @sql1 +
' and DT_KKSNumer in ( ' +
' select KLI_PoprzNumer ' +
' from cdn.KontaNastLinki ' +
' where KLI_NastNumer = '+convert(varchar,@p_KKSNumer) +
' union all ' +
' select KLI_NastNumer ' +
' from cdn.KontaNastLinki ' +
' where KLI_PoprzNumer = '+convert(varchar,@p_KKSNumer)+')'
-- a to dopisujemy
IF @TrybSpecjalny = 1
BEGIN
SET @sql1 = @sql1 + ' AND DT_KKSNumer IN (SELECT Kks_GIDNumer FROM CDN.Konta WHERE ( Kks_kont LIKE ''840%'' OR Knt_konto LIKE ''842%'') and kks_aktywny=1) '
ENDKod: Zaznacz cały
WHERE DTKKSNumer in (
select KLI_PoprzNumer
from cdn.KontaNastLinki
where KLI_NastNumer = @DTKKSNumer
union all
select KLI_NastNumer
from cdn.KontaNastLinki
where KLI_PoprzNumer = @DTKKSNumer
)
and not (DTGIDNumer = @DTGIDNumer and DTGIDLp = @DTGIDLp and DTDC = @DTDC and DTWalutaObca = @DTWalutaObca)
and DTZnak <> @DTZnak
and DTDoRozliczenia <> 0
and Poziom = 1
and (@p_Kryterium = 1 and DTNumerDokumentu = @DTNumerDokumentu
or @p_Kryterium = 2 and abs(DTDoRozliczenia) = abs(@DTDoRozliczenia)
or @p_Kryterium = 3 and
((rtrim(@p_Opis)='' and (@p_OpisOperator=1 and DTOpis = @DTOpis or @p_OpisOperator=2 and (DTOpis like '%'+@DTOpis+'%' or @DTOpis like '%'+DTOpis+'%')))
or (rtrim(@p_Opis)<>'' and (@p_OpisOperator=1 and DTOpis = @p_Opis or @p_OpisOperator=2 and DTOpis like '%'+@p_Opis+'%')))
or @p_Kryterium = 4)na to:
Kod: Zaznacz cały
WHERE
(
(@TrybSpecjalny = 0 AND DTKKSNumer IN (
SELECT KLI_PoprzNumer FROM cdn.KontaNastLinki WHERE KLI_NastNumer = @DTKKSNumer
UNION ALL
SELECT KLI_NastNumer FROM cdn.KontaNastLinki WHERE KLI_PoprzNumer = @DTKKSNumer
))
OR
(@TrybSpecjalny = 1 AND DTKKSNumer IN (
SELECT Kks_GIDNumer FROM CDN.Konta WHERE (kks_konto LIKE '840%' OR kks_konto LIKE '842%') and kks_aktywny=1
))
)
AND NOT (DTGIDNumer = @DTGIDNumer AND DTGIDLp = @DTGIDLp AND DTDC = @DTDC AND DTWalutaObca = @DTWalutaObca)
AND DTZnak <> @DTZnak
AND DTDoRozliczenia <> 0
AND Poziom = 1
AND (
(@p_Kryterium = 1 AND DTNumerDokumentu = @DTNumerDokumentu)
OR
(@p_Kryterium = 2 AND ABS(DTDoRozliczenia) = ABS(@DTDoRozliczenia))
OR
(@p_Kryterium = 3 AND (
(@TrybSpecjalny = 1 AND (
DTOpis LIKE '%' + @DTOpis + '%' OR
@DTOpis LIKE '%' + DTOpis + '%'
))
OR
(@TrybSpecjalny = 0 AND (
(RTRIM(@p_Opis)='' AND (@p_OpisOperator=1 AND DTOpis = @DTOpis OR @p_OpisOperator=2 AND (DTOpis LIKE '%'+@DTOpis+'%' OR @DTOpis LIKE '%'+DTOpis+'%')))
OR
(RTRIM(@p_Opis)<>'' AND (@p_OpisOperator=1 AND DTOpis = @p_Opis OR @p_OpisOperator=2 AND DTOpis LIKE '%'+@p_Opis+'%'))
))
))
OR
@p_Kryterium = 4
)
I zastanawiam się czy coś takiego ma rację bytu, czy gdzieś nie walnąłem bubla i się wypierdzieli?