Skocz do zawartości


Close Open
Close Open
Zdjęcie

Zestawienie SQL: Rozrachunki przeterminowane


  • Please log in to reply
11 replies to this topic

#1 - Tektron -

- Tektron -

    Adept

  • Forumowicze
  • Pip
  • 18 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Pniewy, Polska

Napisany 05 February 2010 - 20:21 PM

Witam,

poszukuję zestawienia (zapytania SQL), które by dawało w rezultacie efekt identyczny jak moduły:
Rozrachunki wg. Kontrahentów lub Rozrachunki wg. Dokumentów
z włączonym filtrem przeterminowane.

Chciałbym rozwinąć nieco zakres zestawienia - np. o kolumnę region. Na tą chwilę skomponowałem coś takiego:

SELECT nzf_Id, nzf_Wartosc, nzf_Tytulem, nzf_Flaga from nz__Finanse t1
WHERE nzf_Wartosc=(select min(nzf_Wartosc) from nz__Finanse t2 where t1.nzf_Id = t2.nzf_Id) 
AND nzf_Wartosc > 0 AND nzf_IdWaluty = 'PLN' AND (nzf_Tytulem LIKE 'PA%' OR nzf_Tytulem LIKE 'FS%') 
ORDER BY nzf_Id

Ale niestety pokazuje również płatności rozliczone...
Dzięki,

#2 Demerzel

Demerzel

    Bywalec

  • Forumowicze
  • PipPipPipPipPip
  • 351 Postów:
  • Płeć:Kobieta

Napisany 05 February 2010 - 20:44 PM

Możesz czekać aż trafi się ktoś kto zna samego SUBIEKTA albo podać MySQL description dla łączonych tabel i przykład co dają tamte moduły.
Wiesz jak w bazie odznaczane są płatności rozliczone? Znaleźć i uwzględnić w zapytaniu.

#3 - Tektron -

- Tektron -

    Adept

  • Forumowicze
  • Pip
  • 18 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Pniewy, Polska

Napisany 05 February 2010 - 21:34 PM

Możesz czekać aż trafi się ktoś kto zna samego SUBIEKTA albo podać MySQL description dla łączonych tabel i przykład co dają tamte moduły.
Wiesz jak w bazie odznaczane są płatności rozliczone? Znaleźć i uwzględnić w zapytaniu.


Zgodnie z opisem udostępnianym przez Insert:
- nzf_Wartosc - ta kolumna zawiera wartośc dokumentu pozostałą do spłaty
- nzf_IdObiektu - identyfikator dokumentu generującego zobowiązanie klienta
- nzf_Id - identyfikator wpisu do tabeli rozliczeń

Z tego co rozumiem logikę zapisu do tabeli:
- dana transakcja jest zapisywana tak często jak następują zmiany w wartości pozostałej do zapłaty
- po końcowym rozliczeniu nzf_Wartosc ustawiana jest na 0

Problem polega jednak na tym, że nie bardzo wiem, jak rozbudować to zapytanie w sposób, by pokazywało tylko takie dokumenty (definiowane przez nzf_IdObiektu) dla których nzf_Wartosc > 0, a jednocześnie nie występuje żaden wpis w tabeli rozliczeń dla tego samego nzf_IdObiektu, dla którego nzf_Wartosc = 0

Mówiąc po ludzku - rozrachunek nie jest rozliczony do końca.

#4 Demerzel

Demerzel

    Bywalec

  • Forumowicze
  • PipPipPipPipPip
  • 351 Postów:
  • Płeć:Kobieta

Napisany 05 February 2010 - 22:19 PM

1. Czy na pewno rozliczone są oznaczane 0?
2. Jeżeli powyższe jest prawdziwe to sam sobie odpowiedziałeś. Z jakiegoś powodu wartość ta nie jest ustawiana.
3. Chyba że łączenie LEFT JOIN kh__Kontrahent ON kh_Id = nzf_IdObiektu jest źle ustawione? Przypadkiem w kh__Kontrahent niema nzf_Id? Łączenie może nie iść po kluczach głównych w obu tabelach.

#5 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 05 February 2010 - 22:42 PM

A może skorzystaj z tego co już zrobili inni ?

Sprawdź co Ci daje widok:

select * from vwFinanseRozDokumenty

Sławek

#6 - Tektron -

- Tektron -

    Adept

  • Forumowicze
  • Pip
  • 18 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Pniewy, Polska

Napisany 07 February 2010 - 22:35 PM

Piękne dzięki :-) Czy w bazie jest zapisana lista takich gotowych modułów?

Żeby spłacić dług wdzięczności wobec forum wrzucam zestawienie finalne:

select kh_Symbol AS Symbol, t2.nzf_Wartosc AS 'Kwota brutto', t1.nzf_NumerPelny AS 'Dokument', t2.nzf_TerminPlatnosci AS 'Termin', t2.DniSpoznienia AS 'Spóźnienie', reg_Nazwa AS 'Region'
FROM vwFinanseRozDokumenty AS t2
LEFT JOIN kh__Kontrahent ON kh_Id = nzf_IdObiektu
LEFT JOIN nz__Finanse AS t1 ON t1.nzf_Id = t2.nzf_Id
LEFT JOIN sl_CrmRegion ON kh_IdRegion = reg_Id
WHERE  t1.nzf_Typ<>'40'
AND ( kh__Kontrahent.kh_IdRegion IN ({CHL_DB: SELECT reg_Id, reg_Nazwa FROM  sl_CrmRegion:Oddział}))
AND (t2.DniSpoznienia >= {M:Minimalne spóźnienia w dniach dla dokumentu:1})

Jedyne nad czym się głowię jeszcze - to jak zmusić Subiekta, żeby dla CHL_DB wziął pod uwagę jako domyślne również wyniki z kh__Kontrahent.kh_IdRegion = NULL...

Pozdrowienia

Dodano 07-02-2010 22:35:18:

Czy w bazie jest zapisana lista takich gotowych modułów?


Jest - Schemas -> VIEWS :-)

#7 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 08 February 2010 - 00:10 AM

Jedyne nad czym się głowię jeszcze - to jak zmusić Subiekta, żeby dla CHL_DB wziął pod uwagę jako domyślne również wyniki z kh__Kontrahent.kh_IdRegion = NULL...


A może coś takiego (bez sprawdzania) ?
( isnull(kh__Kontrahent.kh_IdRegion,0) IN ({CHL_DB: SELECT reg_Id, reg_Nazwa FROM  sl_CrmRegion Union select (0), '(brak)' ORDER BY reg_Nazwa:Oddział}))

Sławek

#8 - Tektron -

- Tektron -

    Adept

  • Forumowicze
  • Pip
  • 18 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Pniewy, Polska

Napisany 08 February 2010 - 00:43 AM

A może coś takiego (bez sprawdzania) ?

( isnull(kh__Kontrahent.kh_IdRegion,0) IN ({CHL_DB: SELECT reg_Id, reg_Nazwa FROM  sl_CrmRegion Union select (0), '(brak)' ORDER BY reg_Nazwa:Oddział}))


Efekt ten sam - dopiero po wybraniu parametrów dodatkowych innych niż "brak" w pierwszym polu wyboru i wyliczeniu/odświeżeniu - pojawiają się wyniki. Trudno mi zabrać głos w tej sprawie, bo zapytanie przekracza moją wiedzę, ok. 2x ;-)

#9 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 08 February 2010 - 07:33 AM

Efekt ten sam - dopiero po wybraniu parametrów dodatkowych innych niż "brak" w pierwszym polu wyboru i wyliczeniu/odświeżeniu - pojawiają się wyniki. Trudno mi zabrać głos w tej sprawie, bo zapytanie przekracza moją wiedzę, ok. 2x ;-)


Jak to w pierwszym polu wyboru ?

Rozumiem, że Twoje:
AND ( kh__Kontrahent.kh_IdRegion IN ({CHL_DB: SELECT reg_Id, reg_Nazwa FROM  sl_CrmRegion:Oddział}))
zastąpiłeś moim
AND ( isnull(kh__Kontrahent.kh_IdRegion,0) IN ({CHL_DB: SELECT reg_Id, reg_Nazwa FROM  sl_CrmRegion Union select (0), '(brak)' ORDER BY reg_Nazwa:Oddział}))

Wg mnie powinno być tak, że jak w liście wyboru zaznaczysz (brak) to pokaże również firmy, które nie mają wpisanego regionu.
Sławek

#10 - Tektron -

- Tektron -

    Adept

  • Forumowicze
  • Pip
  • 18 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Pniewy, Polska

Napisany 09 February 2010 - 08:26 AM

Tak zrobiłem i jest prawie idealnie. Po zaznaczenie pola multiwyboru wyświetla dane prawidłowo. Dzięki :-)

Brakuje jedynie wartości domyślnej dla tego warunku i stąd błąd zapytania.

#11 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 09 February 2010 - 10:37 AM

AND ( isnull(kh__Kontrahent.kh_IdRegion,0) IN ({CHL_DB: SELECT reg_Id, reg_Nazwa FROM  sl_CrmRegion Union select (0), '(brak)' ORDER BY reg_Nazwa:Oddział:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20:(dowolny)}))
Wartości od 1 do ... to kolejne reg_Id

Przydałoby się jako argument domyślny mieć jakieś "all" do zaznaczenia wszystkich opcji, bo przy dużej ilości identyfikatorów jest problem.
(To było do Panów z InsERT'u ;) )
Sławek

#12 - Tektron -

- Tektron -

    Adept

  • Forumowicze
  • Pip
  • 18 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Pniewy, Polska

Napisany 11 February 2010 - 21:03 PM

AND ( isnull(kh__Kontrahent.kh_IdRegion,0) IN ({CHL_DB: SELECT reg_Id, reg_Nazwa FROM  sl_CrmRegion Union select (0), '(brak)' ORDER BY reg_Nazwa:Oddział:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20:(dowolny)}))
Wartości od 1 do ... to kolejne reg_Id

Przydałoby się jako argument domyślny mieć jakieś "all" do zaznaczenia wszystkich opcji, bo przy dużej ilości identyfikatorów jest problem.
(To było do Panów z InsERT'u ;) )


Fantastycznie :-) Wielkie dzięki za nauki!




0 Użytkowników czyta ten temat

0 użytkowników, 0 gości, 0 anonimowych użytkowników