Autor Wątek: Zestawienie SQL - Sprzedaż według asortymentu z podziałem na kraj i stawkę VAT  (Przeczytany 4388 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
Witam,
prześledziłem Profilerem subiektowe zestawienie sprzedaży według asortymentu i później starałem się dodać do niego warunki stawki VAT oraz kraju kontrahenta.
Problem w tym, że profiler zwrócił zapytanie z 'DECLARE    @dataDo DATETIME SET    @DataDo = '20170131' i później się do tego odwoływał. Obecnie miejsca, w których występowało @DataDo, zamieniłem na sztywną wartość '20170131', ale chciałbym żeby ta wartość nie znajdowała się w kodzie zestawienia, a była możliwa do wyboru z poziomu generowania zestawienia.

Czy ktoś byłby w stanie mi pomóc?

SELECT
tw_Nazwa = CASE WHEN tw_Nazwa = '' THEN '(Brak nazwy towaru)' ELSE CASE WHEN tw_Nazwa IS NULL THEN '(Usługa jednorazowa)' ELSE tw_Nazwa END END,
tw_Symbol as Symbol,
SUM(ob_IloscMag * ob_Znak) as Ilosc,
SUM(CASE WHEN (ob_TowRodzaj&16)>0 THEN 0 ELSE ob_WartBrutto * ob_Znak END) as Brutto,
SUM(CASE WHEN (ob_TowRodzaj&16)>0 THEN 0 ELSE ob_WartNetto * ob_Znak END) as Netto,
SUM(CASE WHEN (ob_TowRodzaj&22)>0 THEN 0 ELSE dbo.fnZestSub_KosztSpr('20170131', ob_Id)*ob_Znak END) as 'Zakup netto',
SUM(CASE WHEN (ob_TowRodzaj&16)>0 THEN 0 ELSE (ob_WartNetto-CASE WHEN (ob_TowRodzaj&6)>0 THEN 0 ELSE dbo.fnZestSub_KosztSpr('20170131', ob_Id) END) * ob_Znak END) as Zysk,
Marza = CONVERT(MONEY, CASE WHEN SUM(CASE WHEN (ob_TowRodzaj&16)>0 THEN 0.0000 ELSE ob_WartNetto * ob_Znak END)<>0 THEN (SUM(CASE WHEN (ob_TowRodzaj&16)>0 THEN 0.0000 ELSE (ob_WartNetto-CASE WHEN (ob_TowRodzaj&6)>0 THEN 0.0000 ELSE dbo.fnZestSub_KosztSpr('20170131', ob_Id) END) * ob_Znak END)/SUM(CASE WHEN (ob_TowRodzaj&16)>0 THEN 0.0000 ELSE ob_WartNetto * ob_Znak END))*100 ELSE 0.0000 END)
FROM vwZstSprzWgKhnt
LEFT JOIN tw__Towar ON ob_TowId = tw_Id
LEFT JOIN adr_Historia on dok_PlatnikAdreshId = adrh_Id
LEFT JOIN dok_Vat on dok_Id = vt_DokId
WHERE dok_Status<>2
and (dok_DataWyst between {DR:Data wystawienia:POPRZEDNI_MIESIAC})
and (dok_Typ in ({CHL:(dowolny)#-1#faktura sprzedaży#2#korekta faktury sprzedaży#6#:typ dokumentu:-1:(dowolny)}) or -1 in ({CHL:(dowolny)#-1#faktura sprzedaży#2#korekta faktury sprzedaży#6#:typ dokumentu:-1:(dowolny)}))
and (dok_MagId in ({CHL_DB:select -1, '(dowolny)' union all select mag_Id, mag_Symbol from sl_Magazyn order by 2:magazyn:-1:(dowolny)}) or -1 in ({CHL_DB:select -1, '(dowolny)' union all select mag_Id, mag_Symbol from sl_Magazyn order by 2:magazyn:-1:(dowolny)}))
and (adrh_IdPanstwo in ({CHL_DB:select -1, '(dowolne)' union all select pa_Id, pa_Nazwa from sl_Panstwo order by 2:państwo:-1:(dowolne)}) or -1 in ({CHL_DB:select -1, '(dowolne)' union all select pa_Id, pa_Nazwa from sl_Panstwo order by 2:państwo:-1:(dowolne)}))
and (vt_VatId in ({CHL_DB:select -1, '(dowolna)' union all select vat_Id, vat_Nazwa from sl_StawkaVAT where vat_CzyWidoczna = 1 order by 2:stawka VAT:-1:(dowolna)}) or -1 in ({CHL_DB:select -1, '(dowolna)' union all select vat_Id, vat_Nazwa from sl_StawkaVAT where vat_CzyWidoczna = 1 order by 2:stawka VAT:-1:(dowolna)}))
and ob_TowRodzaj in ({CHL:towar#1#usługa#2#opakowanie#4#komplet#8#:Rodzaj towaru:1,4,8:(towar, opakowanie,komplet)})
GROUP BY tw_Nazwa, tw_Symbol

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4876
  • Reputacja +172/-11
F1 -> zestawienia własne SQL i będziesz miał opisy i przykłady
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline hezer

  • Aktywny użytkownik
  • ***
  • Wiadomości: 153
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4 HF1
Zmieniłem we wszystkich miejscach '20170131' na {D:DataDo:} i mam możliwość wyboru tej daty, ale niezależnie co za datę tam wybiorę to zupełnie nic to nie zmienia w wyniku zapytania. Wyszedłem z założenia, że skoro nic się nie zmienia, a subiekt po coś tą datę tam umieszcza to coś zrobiłem źle..

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4876
  • Reputacja +172/-11
Zestawienie SQL - Sprzedaż według asortymentu z podziałem na kraj i stawkę VAT
« Odpowiedź #3 dnia: Sierpień 27, 2018, 10:34:48 »
Pominąłeś kluczowy warunek:
dok_DataWyst between {DR:Data wystawienia:POPRZEDNI_MIESIAC}
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline hezer

  • Aktywny użytkownik
  • ***
  • Wiadomości: 153
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4 HF1
and (dok_DataWyst between {DR:Data wystawienia:POPRZEDNI_MIESIAC})

A to?

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4876
  • Reputacja +172/-11
Zestawienie SQL - Sprzedaż według asortymentu z podziałem na kraj i stawkę VAT
« Odpowiedź #5 dnia: Sierpień 27, 2018, 11:02:09 »
A to, w połączeniu z poprzednim postem sugeruje że masz zestawienie w którym trzeba podać 3 daty, dwie w kontrolce DR i jedną w D, przy czym ta z D musi być powtórzeniem jednej z dat  DR.
Chyba nie o to Ci chodziło, prawda?
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline hezer

  • Aktywny użytkownik
  • ***
  • Wiadomości: 153
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4 HF1
W kontrolce DR mam jakiś zakres dat. W kontrolce D mam końcową datę z zakresu z DR ( bo tak profiler pokazał więc zrobiłem na wzór tego ).
Zastanawiał mnie powód tej daty w kontrolce D bo jak wywoływałem zapytanie to niezależnie co wsadziłem w kontrolkę D to otrzymywałem identyczne wyniki.

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9210
  • Reputacja +1304/-21
  • Wersja programu: Najnowsza
Miałeś identyczne wyniki, bo data którą wpisywałeś nie miała widocznie wpływu na koszt sprzedaży a tylko do tego ta data jest tam potrzebna. Dla uproszczenia zamiast tej kontrolki wpisz GETDATE() - dzięki temu pozbędziesz się kontrolki i będziesz miał koszt sprzedaży wyliczany na dziś.
Sławek, Zduńska Wola

Offline hezer

  • Aktywny użytkownik
  • ***
  • Wiadomości: 153
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4 HF1
Czyli jak dobrze rozumiem to te identyczne wyniki nie są jakimś błędem wynikającym ze złego napisania zapytania?

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9210
  • Reputacja +1304/-21
  • Wersja programu: Najnowsza
Czyli jak dobrze rozumiem to te identyczne wyniki nie są jakimś błędem wynikającym ze złego napisania zapytania?

Bardzo prawdopodobne, że nie. Aby się przekonać to dodaj korektę zakupu do towaru, który jest objęty analizą sprzedaży i wtedy zmieniając datę na przed i po wystawieniu faktury zakupu wyliczaj zestawienie. Będziesz widział czy się zmieniają kwoty.
Sławek, Zduńska Wola

Offline hezer

  • Aktywny użytkownik
  • ***
  • Wiadomości: 153
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4 HF1
Odp: Zestawienie SQL - Sprzedaż według asortymentu z podziałem na kraj i stawkę VAT
« Odpowiedź #10 dnia: Sierpień 27, 2018, 16:34:49 »
Zrobiłem korektę na 15zł ceny zakupu produktu sprzedanego w tamtym okresie i faktycznie zmieniając datę pod kontrolką D:, na dzisiejszą to zestawienie zmieniło się o 15zł także działa :)
Dzięki za pomoc

Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1250
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie SQL - Sprzedaż według asortymentu z podziałem na kraj i stawkę VAT
« Odpowiedź #11 dnia: Sierpień 27, 2018, 17:23:53 »
Zmieniłem we wszystkich miejscach '20170131' na {D:DataDo:} i mam możliwość wyboru tej daty, ale niezależnie co za datę tam wybiorę to zupełnie nic to nie zmienia w wyniku zapytania. Wyszedłem z założenia, że skoro nic się nie zmienia, a subiekt po coś tą datę tam umieszcza to coś zrobiłem źle..


Ewentualnie jeśli chcesz uzyskać efekt bliższy zestawieniu fabrycznemu (koszt zakupu wyliczany wg zakresu wybranych dat) to zamień warunek dat w where:
and (dok_DataWyst between {DR:Data wystawienia:POPRZEDNI_MIESIAC})


na:


and (dok_DataWyst between {D:DataOd:} and {D:DataDo:})

I już nie masz trzech dat do ogarniania tylko dwie. Efekt uboczny jest taki, filtr DataDo będzie przed filtrem DataOd ale da się to obejść np. wstawiając kontrolkę DataOd w komentarz przed pierwszym wystąpieniem filtru DataDo.

Forum Użytkownikow Subiekt GT

Odp: Zestawienie SQL - Sprzedaż według asortymentu z podziałem na kraj i stawkę VAT
« Odpowiedź #11 dnia: Sierpień 27, 2018, 17:23:53 »