Automatyczne rozliczanie

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

Moderator: mikey

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

Automatyczne rozliczanie

Post autor: Lilpri »

Hej,
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 = ''
    END
- dodawany jest kod do zapytania:

Kod: 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) '
END
- i zamieniamy ten kod:

Kod: 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?

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

Re: Automatyczne rozliczanie

Post autor: praiser »

takie rzeczy to najlepiej testować na kopii bazy.
--------------------------------
Pozdrawiam
WW

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

Re: Automatyczne rozliczanie

Post autor: Lilpri »

Nie no, nie mam zamiaru tego testować na produkcji, weź to później wycofaj :D
Bardziej sama idea mnie zastanawiała czy jest w dobrą stronę.

ODPOWIEDZ