Autor Wątek: Zestawienie SQL - Stan towarów na dany dzień  (Przeczytany 7018 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline hezer

  • Aktywny użytkownik
  • ***
  • Wiadomości: 153
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4 HF1
Zestawienie SQL - Stan towarów na dany dzień
« dnia: Lipiec 19, 2018, 15:41:19 »
Witam,
dysponuje ktoś zestawieniem, które zwraca listę towarów ( Symbol, Nazwa, Stan ) z danego dnia i magazynu? Coś w rodzaju remanentu na dzień dowolny.

A jak nie to podpowie ktoś jak je napisać?

Ja próbowałem poprzez sumowanie w dok_MagRuch i w zasadzie gdyby nie przesunięcia między magazynowe to by wyszło, a później poprzez sumowanie w dok_pozycja i tam też się poddałem. Jakieś wskazówki?

Online yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1249
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie SQL - Stan towarów na dany dzień
« Odpowiedź #1 dnia: Lipiec 19, 2018, 16:13:42 »
Dobrze kombinujesz tylko musisz coś zrobić właśnie z MM-kami. Odfiltrowanie ich odpada jeśli chcesz, żeby zestawienie działało dla różnych magazynów bo ci się wszystko rozjedzie. Możesz zrobić tak, że w głównej części zapytania robisz sobie tak, że MM-ki ściągają towar z magazynu źródłowego i potem przez union all zbierasz te same MM-ki ale tym razem robiąc z nich wejście na magazyn docelowy.

Offline Biniew

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4095
  • Reputacja +275/-17
  • Wersja programu: GT i Nexo
Odp: Zestawienie SQL - Stan towarów na dany dzień
« Odpowiedź #2 dnia: Lipiec 19, 2018, 16:26:45 »
a co jest nie tak z remantem na dowolny dzien?

Online yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1249
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie SQL - Stan towarów na dany dzień
« Odpowiedź #3 dnia: Lipiec 19, 2018, 16:49:03 »
Np. brak filtrowania po polach własnych?

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17051
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Zestawienie SQL - Stan towarów na dany dzień
« Odpowiedź #4 dnia: Lipiec 19, 2018, 16:54:40 »
Powtarzamy na forum do znudzenia - zobacz jak robi to program - po co się męczyć i zgadywać ?
Daniel, Białystok.

Offline Biniew

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4095
  • Reputacja +275/-17
  • Wersja programu: GT i Nexo
Odp: Zestawienie SQL - Stan towarów na dany dzień
« Odpowiedź #5 dnia: Lipiec 19, 2018, 17:13:25 »
a gdzie on pisal o polach wlasnych?

Offline hezer

  • Aktywny użytkownik
  • ***
  • Wiadomości: 153
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4 HF1
Odp: Zestawienie SQL - Stan towarów na dany dzień
« Odpowiedź #6 dnia: Lipiec 20, 2018, 07:19:54 »
Nie chodzi o pola własne. To co opisywałem poniżej to w zasadzie część zestawienia SQL, której nie potrafię zrobić, a nie całe zestawienie.

Finalnie chce otrzymać zestawienie, które pokazuje towary z danego dnia na danym magazynie o stanie 0 i obok tych towarów ich stany na dzień obecny jeżeli jest większy od 0.

To takie zestawienie, które 1-2 razy w tygodniu robię dla szefa, ale w excelu właśnie z użyciem Remanentu na dzień dowolny i Towary i usługi. Teraz kombinuje, żeby zapytanie SQL robiło to za mnie, ale trochę mnie to przerasta.

Dlaczego nie remanent na dzień dowolny? - Głównie właśnie dlatego, że potrzebuje towary o stanie 0, a remanent właśnie ich nie zwraca. 

Offline hezer

  • Aktywny użytkownik
  • ***
  • Wiadomości: 153
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4 HF1
Odp: Zestawienie SQL - Stan towarów na dany dzień
« Odpowiedź #7 dnia: Lipiec 20, 2018, 10:57:05 »
Znalazłem na forum kogoś zestawienie SQL, które zawierało stan towarów na dany dzień i trochę przerobiłem.

Obecnie zwraca ono stan na dany dzień oraz stan na dzień obecny, ale problem jest taki, że jak chce je przerobić by pokazywało tylko stany 0 z danego dnia to całe zestawienie się sypie...

Jakieś podpowiedzi?

Cytuj
SELECT
       t.tw_symbol as Symbol,
       t.tw_nazwa as Nazwa,
       SUM(a.mr_ilosc - Isnull(r.mr_ilosc, 0))AS 'Ilość dzień',
st_stan as 'Stan obecny'
FROM
dok_magruch a
INNER JOIN tw__towar t ON a.mr_towid = t.tw_id
INNER JOIN tw_Stan ON t.tw_Id = tw_Stan.st_TowId
LEFT JOIN ((SELECT Isnull(SUM(c.mr_ilosc), 0) mr_ilosc, c.mr_doid FROM   dok_magruch c WHERE  c.mr_data <={D: Na dzień} GROUP  BY c.mr_doid)) r ON r.mr_doid = a.mr_id

WHERE
a.mr_data <={D: Na dzień}
AND st_stan > 0
AND tw_Stan.st_MagId = 1
AND a.mr_ilosc > Isnull(r.mr_ilosc, 0)
AND a.mr_magid = 1
GROUP  BY
t.tw_id,
t.tw_symbol,
t.tw_nazwa,
st_stan
ORDER BY
tw_id

Online yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1249
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie SQL - Stan towarów na dany dzień
« Odpowiedź #8 dnia: Lipiec 20, 2018, 11:27:03 »
Przerobione na kolanie, sprawdź

SELECT
       t.tw_symbol as Symbol,
       t.tw_nazwa as Nazwa,
       SUM(a.mr_ilosc - Isnull(r.mr_ilosc, 0))AS 'Ilość dzień',
st_stan as 'Stan obecny'
FROM
dok_magruch a
INNER JOIN tw__towar t ON a.mr_towid = t.tw_id
INNER JOIN tw_Stan ON t.tw_Id = tw_Stan.st_TowId
LEFT JOIN ((SELECT Isnull(SUM(c.mr_ilosc), 0) mr_ilosc, c.mr_doid FROM   dok_magruch c WHERE  c.mr_data <={D: Na dzień}  GROUP  BY c.mr_doid)) r ON r.mr_doid = a.mr_id

WHERE
a.mr_data <={D: Na dzień}
AND tw_Stan.st_MagId = 1
/*AND a.mr_ilosc > Isnull(r.mr_ilosc, 0)*/
AND a.mr_magid = 1
GROUP  BY
t.tw_id,
t.tw_symbol,
t.tw_nazwa,
st_stan
having isnull(SUM(a.mr_ilosc - Isnull(r.mr_ilosc, 0)),0)=0
ORDER BY
tw_id

Offline hezer

  • Aktywny użytkownik
  • ***
  • Wiadomości: 153
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4 HF1
Odp: Zestawienie SQL - Stan towarów na dany dzień
« Odpowiedź #9 dnia: Lipiec 20, 2018, 11:48:24 »
Przerobione na kolanie, sprawdź

SELECT
       t.tw_symbol as Symbol,
       t.tw_nazwa as Nazwa,
       SUM(a.mr_ilosc - Isnull(r.mr_ilosc, 0))AS 'Ilość dzień',
st_stan as 'Stan obecny'
FROM
dok_magruch a
INNER JOIN tw__towar t ON a.mr_towid = t.tw_id
INNER JOIN tw_Stan ON t.tw_Id = tw_Stan.st_TowId
LEFT JOIN ((SELECT Isnull(SUM(c.mr_ilosc), 0) mr_ilosc, c.mr_doid FROM   dok_magruch c WHERE  c.mr_data <={D: Na dzień}  GROUP  BY c.mr_doid)) r ON r.mr_doid = a.mr_id

WHERE
a.mr_data <={D: Na dzień}
AND tw_Stan.st_MagId = 1
/*AND a.mr_ilosc > Isnull(r.mr_ilosc, 0)*/
AND a.mr_magid = 1
GROUP  BY
t.tw_id,
t.tw_symbol,
t.tw_nazwa,
st_stan
having isnull(SUM(a.mr_ilosc - Isnull(r.mr_ilosc, 0)),0)=0
ORDER BY
tw_id

Zapomniałeś o warunku, że stan obecny jest większy niż 0 ( st_stan > 0 ).

Dodałem i działa dokładnie tak jak miało! WIELKIE DZIĘKI ZA POMOC

Zastanawiam się nad jedną rzeczą. Porównałem sobie wynik zestawienia z jednym z moich wcześniejszych zestawień, które robiłem za pomocą Excela ( żeby zobaczyć czy dostanę te same wyniki ) i faktycznie dało prawie, że identyczny efekt.

Zestawienia różniły się 1 pozycją. Sprawdziłem skąd ta różnica i okazało się, że ta jedna pozycja to nowy towar, którego kartoteka została stworzona pomiędzy datą z zestawienia, a bieżącym dniem. Oznacza to, że subiekt traktuje ten towar jakby wcale go nie było ( no bo faktycznie w wybranym dniu jeszcze takiego towaru nie było ), a nie, że był on, ale ze stanem 0. Zakładam, że nie idzie zrobić w łatwy sposób tego by pokazywało również towary, które zostały dodane po wybranej dacie? 

Online yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1249
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie SQL - Stan towarów na dany dzień
« Odpowiedź #10 dnia: Lipiec 20, 2018, 12:03:02 »
Cytuj
Zapomniałeś o warunku, że stan obecny jest większy niż 0 ( st_stan > 0 ).

Śniadania nie jadłem jeszcze to mi się warunek zjadł ;)

Przerobić na pewno się da.

Online yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1249
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie SQL - Stan towarów na dany dzień
« Odpowiedź #11 dnia: Lipiec 20, 2018, 12:42:19 »
Sprawdź

SELECT
       t.tw_symbol as Symbol,
       t.tw_nazwa as Nazwa,
       SUM(a.mr_ilosc - Isnull(r.mr_ilosc, 0))AS 'Ilość dzień',
st_stan as 'Stan obecny'
FROM
tw__towar t
INNER JOIN tw_Stan ON t.tw_Id = tw_Stan.st_TowId
LEFT JOIN dok_magruch a ON a.mr_towid = t.tw_id AND a.mr_magid = 1 and a.mr_data <={D: Na dzień}
LEFT JOIN ((SELECT Isnull(SUM(c.mr_ilosc), 0) mr_ilosc, c.mr_doid FROM   dok_magruch c WHERE  c.mr_data <={D: Na dzień}  GROUP  BY c.mr_doid)) r ON r.mr_doid = a.mr_id

WHERE
tw_Stan.st_MagId = 1
AND st_stan > 0

GROUP  BY
t.tw_id,
t.tw_symbol,
t.tw_nazwa,
st_stan
having isnull(SUM(a.mr_ilosc - Isnull(r.mr_ilosc, 0)),0)=0
ORDER BY
tw_id

Offline hezer

  • Aktywny użytkownik
  • ***
  • Wiadomości: 153
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4 HF1
Odp: Zestawienie SQL - Stan towarów na dany dzień
« Odpowiedź #12 dnia: Lipiec 20, 2018, 12:52:05 »
Działa :).
Teraz mam identyczny wynik co z zestawieniem w Excelu.

Całkiem ciekawe - Ten towar, którego brakowało bo jego kartoteki jeszcze wtedy nie było, to się pojawił w zestawieniu z pustym stanem z wybranego dnia ( nie ze stanem 0, a z pustą komórką ).

Online yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1249
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie SQL - Stan towarów na dany dzień
« Odpowiedź #13 dnia: Lipiec 20, 2018, 12:54:47 »
Specjalnie to tak zostawiłem, żeby taka pozycja się wyróżniała. Jak Ci to przeszkadza to zamień

SUM(a.mr_ilosc - Isnull(r.mr_ilosc, 0))AS 'Ilość dzień'
na

isnull(SUM(a.mr_ilosc - Isnull(r.mr_ilosc, 0)),0)AS 'Ilość dzień'

Offline hezer

  • Aktywny użytkownik
  • ***
  • Wiadomości: 153
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4 HF1
Odp: Zestawienie SQL - Stan towarów na dany dzień
« Odpowiedź #14 dnia: Lipiec 20, 2018, 13:08:21 »
Bardzo dobrze pomyślane, nawet lepiej, że się wyróżnia :)

Dziękuję za pomoc. Temat do zamknięcia.

Forum Użytkownikow Subiekt GT

Odp: Zestawienie SQL - Stan towarów na dany dzień
« Odpowiedź #14 dnia: Lipiec 20, 2018, 13:08:21 »