Forum Użytkownikow Subiekt GT
InsERT GT => Dodatki - zestawienia - sfera => Wątek zaczęty przez: kubare w Marzec 03, 2014, 14:39:04
-
Witam
Znalazłem na forum takie zestawienie ,które sumuje wydane palety jak i przyjęte i robi z tego różnicę. Troszkę je pozmieniałem pod siebie ale głównie chodzi mi o dodatnie możliwości wyboru daty w sposób : data dzisiejsza - 40 dni oraz - 60 dni . W tej chwili muszę wybierać z przedziału od do . Czy jest taka możliwość ?
Zestawienie :
SELECT
SUM(CASE WHEN dok__Dokument.dok_Typ=10 THEN dok_Pozycja.ob_Ilosc END) AS [Suma Palet przyjętych],
COUNT(CASE WHEN dok__Dokument.dok_Typ=10 THEN dok__Dokument.dok_Typ END) AS [Liczba PZ],
SUM(CASE WHEN dok__Dokument.dok_Typ=11 THEN dok_Pozycja.ob_Ilosc END) AS [Suma Palet wydanych],
COUNT(CASE WHEN dok__Dokument.dok_Typ=11 THEN dok__Dokument.dok_Typ END) AS [Liczba WZ],
SUM(CASE WHEN dok__Dokument.dok_Typ=10 THEN dok_Pozycja.ob_Ilosc ELSE 0 END) -
SUM(CASE WHEN dok__Dokument.dok_Typ=11 THEN dok_Pozycja.ob_Ilosc ELSE 0 END) AS [Różnica],
adr__Ewid.adr_Nazwa AS [Kontrahent],
adr__Ewid.adr_Telefon AS [Telefon]
FROM
dok__Dokument,
adr__Ewid,
dok_Pozycja,
tw__Towar
WHERE
(dok__Dokument.dok_Typ=10 OR dok__Dokument.dok_Typ=11)
and dok_DataWyst BETWEEN {D: Data od:} and {D: do:}
and dok__Dokument.dok_MagId=3
and tw__Towar.tw_IdGrupa=1
and tw__Towar.tw_Rodzaj=4
and dok_Pozycja.ob_DokMagId=dok__Dokument.dok_Id
and dok_Pozycja.ob_TowId = tw__Towar.tw_Id
and dok__Dokument.dok_PlatnikId=adr__Ewid.adr_IdObiektu
and adr__Ewid.adr_TypAdresu=1
AND (adr__Ewid.adr_Nazwa LIKE '%{T: Kontrahent}%')
GROUP BY adr__Ewid.adr_Nazwa, adr__Ewid.adr_Telefon
-
Warunek na datę wystawienia zamień na:
and dok_DataWyst between DATEADD(d, DATEDIFF(d, 0, GETDATE()), 0) - {I:Data dzisiejsza - dni:40} and DATEADD(d, DATEDIFF(d, 0, GETDATE()), 0)
-
Dziękuje bardzo :) o to mi chodziło .Mam jeszcze jedno pytanie : Mam w opakowaniach zwrotnych dwie palety ,paleta zwykła i paleta euro czy można zrobić wybór żeby liczyło albo dla jednej albo dla drugiej palety ?
-
Można, dodaj na przykład taki warunek:
and tw_Id = {DB:select tw_Id, tw_Symbol + ' - ' + tw_Nazwa from tw__Towar where tw_Zablokowany = 0 and tw_Rodzaj = 4:opakowanie}
-
Pana rozwiązanie jest super ale nie można wybrać wszystkich rodzajów palet . Jest taka możliwość ? Zrobiłem troszkę inaczej ,ale przy wyborze muszę pisać z ręki dokładnie jaką paletę chce i to troszkę nie wygodne proszę zobaczyć :
SELECT
SUM(CASE WHEN dok__Dokument.dok_Typ=10 THEN dok_Pozycja.ob_Ilosc END) AS [Suma Palet przyjętych],
COUNT(CASE WHEN dok__Dokument.dok_Typ=10 THEN dok__Dokument.dok_Typ END) AS [Liczba PZ],
SUM(CASE WHEN dok__Dokument.dok_Typ=11 THEN dok_Pozycja.ob_Ilosc END) AS [Suma Palet wydanych],
COUNT(CASE WHEN dok__Dokument.dok_Typ=11 THEN dok__Dokument.dok_Typ END) AS [Liczba WZ],
SUM(CASE WHEN dok__Dokument.dok_Typ=10 THEN dok_Pozycja.ob_Ilosc ELSE 0 END) -
SUM(CASE WHEN dok__Dokument.dok_Typ=11 THEN dok_Pozycja.ob_Ilosc ELSE 0 END) AS [Różnica],
adr__Ewid.adr_Nazwa AS [Kontrahent],
tw__Towar.tw_Nazwa AS Rodzaj,
adr__Ewid.adr_Telefon AS [Telefon]
FROM
dok__Dokument,
adr__Ewid,
dok_Pozycja,
tw__Towar
WHERE
(dok__Dokument.dok_Typ=10 OR dok__Dokument.dok_Typ=11)
and dok_DataWyst between DATEADD(d, DATEDIFF(d, 0, GETDATE()), 0) - {I:Data dzisiejsza - dni:40} and DATEADD(d, DATEDIFF(d, 0, GETDATE()), 0)
AND (tw__Towar.tw_Nazwa LIKE '%{T: Rodzaj}%')
and dok__Dokument.dok_MagId=3
and tw__Towar.tw_IdGrupa=1
and tw__Towar.tw_Rodzaj=4
and dok_Pozycja.ob_DokMagId=dok__Dokument.dok_Id
and dok_Pozycja.ob_TowId = tw__Towar.tw_Id
and dok__Dokument.dok_PlatnikId=adr__Ewid.adr_IdObiektu
and adr__Ewid.adr_TypAdresu=1
AND (adr__Ewid.adr_Nazwa LIKE '%{T: Kontrahent}%')
GROUP BY adr__Ewid.adr_Nazwa, adr__Ewid.adr_Telefon,tw__Towar.tw_Nazwa
-
Pana rozwiązanie jest super ale nie można wybrać wszystkich rodzajów palet . Jest taka możliwość ? Zrobiłem troszkę inaczej ,ale przy wyborze muszę pisać z ręki dokładnie jaką paletę chce i to troszkę nie wygodne proszę zobaczyć :
Przed chwilą chciałeś coś innego i do tego się ustosunkowałem. Zmień kontrolkę wyboru opakowania z listy ma multiwybór, podstawę już masz... Możliwości tworzenia zestawień SQL i budowy filtrów są duże, filtry są opisane w pomocy do programu, zachęcam do lektury.
-
zamieniłem kontrolkę na multiwybor i działa możliwość zaznaczania ale jak zaznaczę więcej jak jedną to wywala "błąd wykonania zapytanie" przy zaznaczonym jednym opakowaniu zestawienie działa dobrze .Nie mogę dojść dlaczego . Całość zestawienia :
SELECT
SUM(CASE WHEN dok__Dokument.dok_Typ=10 THEN dok_Pozycja.ob_Ilosc END) AS [Suma Palet przyjętych],
COUNT(CASE WHEN dok__Dokument.dok_Typ=10 THEN dok__Dokument.dok_Typ END) AS [Liczba PZ],
SUM(CASE WHEN dok__Dokument.dok_Typ=11 THEN dok_Pozycja.ob_Ilosc END) AS [Suma Palet wydanych],
COUNT(CASE WHEN dok__Dokument.dok_Typ=11 THEN dok__Dokument.dok_Typ END) AS [Liczba WZ],
SUM(CASE WHEN dok__Dokument.dok_Typ=10 THEN dok_Pozycja.ob_Ilosc ELSE 0 END) -
SUM(CASE WHEN dok__Dokument.dok_Typ=11 THEN dok_Pozycja.ob_Ilosc ELSE 0 END) AS [Różnica],
adr__Ewid.adr_Nazwa AS [Kontrahent],
tw__Towar.tw_Nazwa AS Rodzaj,
adr__Ewid.adr_Telefon AS [Telefon]
FROM
dok__Dokument,
adr__Ewid,
dok_Pozycja,
tw__Towar
WHERE
(dok__Dokument.dok_Typ=10 OR dok__Dokument.dok_Typ=11)
and dok_DataWyst between DATEADD(d, DATEDIFF(d, 0, GETDATE()), 0) - {I:Data dzisiejsza - dni:40} and DATEADD(d, DATEDIFF(d, 0, GETDATE()), 0)
and tw_Id = {CHL_DB:select tw_Id, tw_Symbol + ' - ' + tw_Nazwa from tw__Towar where tw_Zablokowany = 0 and tw_Rodzaj = 4:opakowanie}
and dok__Dokument.dok_MagId=3
and tw__Towar.tw_IdGrupa=1
and tw__Towar.tw_Rodzaj=4
and dok_Pozycja.ob_DokMagId=dok__Dokument.dok_Id
and dok_Pozycja.ob_TowId = tw__Towar.tw_Id
and dok__Dokument.dok_PlatnikId=adr__Ewid.adr_IdObiektu
and adr__Ewid.adr_TypAdresu=1
AND (adr__Ewid.adr_Nazwa LIKE '%{T: Kontrahent}%')
GROUP BY adr__Ewid.adr_Nazwa, adr__Ewid.adr_Telefon,tw__Towar.tw_Nazwa
-
zamieniłem kontrolkę na multiwybor i działa możliwość zaznaczania ale jak zaznaczę więcej jak jedną to wywala "błąd wykonania zapytanie" przy zaznaczonym jednym opakowaniu zestawienie działa dobrze .Nie mogę dojść dlaczego .
Bo nie skorzystałeś z mojej rady i nie zapoznałeś się z pomocą do programu, cytat z tematu "Zestawienia własne SQL":
Dla zaznaczonych na liście CHL typów dokumentów do zapytania zostanie przekazany zbiór ich identyfikatorów. Z tych względów parametr ten powinien występować z takimi słowami kluczowymi języka T-SQL jak: IN, EXISTS, ANY.
-
skorzystałem z Twojej rady :) nawet sobie wydrukowałem pomoc ale mimo zastosowania słowa kluczowego "in" umknęły mi nawiasy i dlatego nie mogłem sobie poradzić ale jeszcze raz przeczytałem dokładnie i dałem radę :) dziękuje za pomoc . Mam nadzieję ,że zestawienie spełni oczekiwania ale to wyjdzie w praniu :) . Jeszcze raz dzięki .
Zestawienie :
SELECT
SUM(CASE WHEN dok__Dokument.dok_Typ=10 THEN dok_Pozycja.ob_Ilosc END) AS [Suma Palet przyjętych],
COUNT(CASE WHEN dok__Dokument.dok_Typ=10 THEN dok__Dokument.dok_Typ END) AS [Liczba PZ],
SUM(CASE WHEN dok__Dokument.dok_Typ=11 THEN dok_Pozycja.ob_Ilosc END) AS [Suma Palet wydanych],
COUNT(CASE WHEN dok__Dokument.dok_Typ=11 THEN dok__Dokument.dok_Typ END) AS [Liczba WZ],
SUM(CASE WHEN dok__Dokument.dok_Typ=10 THEN dok_Pozycja.ob_Ilosc ELSE 0 END) -
SUM(CASE WHEN dok__Dokument.dok_Typ=11 THEN dok_Pozycja.ob_Ilosc ELSE 0 END) AS [Różnica],
adr__Ewid.adr_Nazwa AS [Kontrahent],
tw__Towar.tw_Nazwa AS Rodzaj,
adr__Ewid.adr_Telefon AS [Telefon]
FROM
dok__Dokument,
adr__Ewid,
dok_Pozycja,
tw__Towar
WHERE
(dok__Dokument.dok_Typ=10 OR dok__Dokument.dok_Typ=11)
and dok_DataWyst between DATEADD(d, DATEDIFF(d, 0, GETDATE()), 0) - {I:Data dzisiejsza - dni:40} and DATEADD(d, DATEDIFF(d, 0, GETDATE()), 0)
and (tw_Id in ({CHL_DB:select tw_Id, tw_Symbol + ' - ' + tw_Nazwa from tw__Towar where tw_Zablokowany = 0 and tw_Rodzaj = 4:opakowanie}))
and dok__Dokument.dok_MagId=3
and tw__Towar.tw_IdGrupa=1
and tw__Towar.tw_Rodzaj=4
and dok_Pozycja.ob_DokMagId=dok__Dokument.dok_Id
and dok_Pozycja.ob_TowId = tw__Towar.tw_Id
and dok__Dokument.dok_PlatnikId=adr__Ewid.adr_IdObiektu
and adr__Ewid.adr_TypAdresu=1
AND (adr__Ewid.adr_Nazwa LIKE '%{T: Kontrahent}%')
GROUP BY adr__Ewid.adr_Nazwa, adr__Ewid.adr_Telefon,tw__Towar.tw_Nazwa
-
Mam jeszcze jedną zagwozdkę, jak zrobić żeby pokazywał wyniki tylko z dokumentów które zostały wystawione 60 dni temu i starsze jak 60 dni . Jest taka możliwość ?
-
Mam jeszcze jedną zagwozdkę, jak zrobić żeby pokazywał wyniki tylko z dokumentów które zostały wystawione 60 dni temu i starsze jak 60 dni . Jest taka możliwość ?
Wystarczy zmienić warunek na datę:
and dok_DataWyst <= DATEADD(d, DATEDIFF(d, 0, GETDATE()), 0) - {I:Data dzisiejsza - dni:60}
-
ok ,dzięki wszystko działa .
-
Lub po prostu:
and dok_DataWyst <= GETDATE() - {I:Data dzisiejsza - dni:60}