Autor Wątek: Zestawienie SQL Subiekt GT Sprzedaż wg. asortymentu  (Przeczytany 10117 razy)

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

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9210
  • Reputacja +1304/-21
  • Wersja programu: Najnowsza
Odp: Zestawienie SQL Subiekt GT Sprzedaż wg. asortymentu
« Odpowiedź #15 dnia: Lipiec 24, 2018, 16:38:45 »
Zapomniałem już jak strasznie powolne są fabryczne zestawienia :) Ponad minuta na przeliczenie jednego miecha vs 5s :)

Wszystko zależy co chcemy policzyć. Jeżeli nie chcemy dokładnego wyliczenia kosztu sprzedaży to zestawienie może być rzeczywiście bardzo odchudzone.
Sławek, Zduńska Wola

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4876
  • Reputacja +172/-11
Odp: Zestawienie SQL Subiekt GT Sprzedaż wg. asortymentu
« Odpowiedź #16 dnia: Lipiec 24, 2018, 16:39:01 »
Zapomniałem już jak strasznie powolne są fabryczne zestawienia :) Ponad minuta na przeliczenie jednego miecha vs 5s :)
Porównujesz fabryczne zestawienie, które pokazuje wszystkie warianty ze swoim, które nie uwzględnia m.in. faktur zbiorczych?
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9210
  • Reputacja +1304/-21
  • Wersja programu: Najnowsza
Odp: Zestawienie SQL Subiekt GT Sprzedaż wg. asortymentu
« Odpowiedź #17 dnia: Lipiec 24, 2018, 16:43:41 »
Ale ktoś słabego matrixa napisał :)

Słabego, bo.... ?
Sławek, Zduńska Wola

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17056
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Zestawienie SQL Subiekt GT Sprzedaż wg. asortymentu
« Odpowiedź #18 dnia: Lipiec 24, 2018, 16:44:49 »
Jeśli nie ma loginu i hasła do bazy to się nie dostanie. Nie trzeba przecież znać tych rzeczy żeby móc pracować w Subiekcie.

Kolego ja nie jestem administratorem serwera i nie mam bezpośredniego dostępu do miejsca lokalizacji bazy SQL, mam dostęp normalnego użytkownika do samego programu. Jeśli da się to zrobić z poziomu mojego komputera i tego co na nim jest nie łącząc się z serwerem to proszę o podpowiedź z czego skorzystać, ewentualnie podesłać tutorial który to pokazuje. Nie chcę aby ktoś mi pisał zestawienie chcę tylko pomoc w zdobyciu kodu zestawienia już zawartego w Subiekcie.

Powtórzę raz jeszcze - nic nie poradzę na to, że komuś nie chce i usilnie szuka wymówek, zamiast skorzystać z banalnie prostego rozwiązania - każdy może zostać administratorem - można pobrać program ze strony Insertu, zainstalować, założyć podmiot demo i podejrzeć działanie programu...

Przypominam też, że zestawienia w programie są budowane inaczej niż zestawienia SQL, kod jest budowany dynamicznie w zależności od wybranych filtrów zestawienia...
Daniel, Białystok.

Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1250
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie SQL Subiekt GT Sprzedaż wg. asortymentu
« Odpowiedź #19 dnia: Lipiec 24, 2018, 17:05:11 »
Zapomniałem już jak strasznie powolne są fabryczne zestawienia :) Ponad minuta na przeliczenie jednego miecha vs 5s :)
Porównujesz fabryczne zestawienie, które pokazuje wszystkie warianty ze swoim, które nie uwzględnia m.in. faktur zbiorczych?

Tak to było porównanie mojego zestawienia do fabrycznego. A co nie wolno mi dokonać takiego porównania?


Zapomniałem już jak strasznie powolne są fabryczne zestawienia :) Ponad minuta na przeliczenie jednego miecha vs 5s :)


Wszystko zależy co chcemy policzyć. Jeżeli nie chcemy dokładnego wyliczenia kosztu sprzedaży to zestawienie może być rzeczywiście bardzo odchudzone.
Jak puszczę sprzedaż wg asortymentu i wezmę całą sprzedaż to moje zestawienie da dokładnie taki sam wynik (uwzględni korekty zakupu zmieniające ceny zakupu towarów). Fakt nie obejmuje ono wszystkich możliwych sytuacji handlowych a tylko wyłącznie te, które zachodzą u nas ale robi to dokładnie tak jak chcemy.


Ale ktoś słabego matrixa napisał :)
To głównie przez wykorzystanie funkcji fnZestSub_KosztSpr w zestawieniu. Takie funkcje często wymuszają wykonanie zapytania wiersz po wierszu a takie coś się zawsze wlecze.

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9210
  • Reputacja +1304/-21
  • Wersja programu: Najnowsza
Odp: Zestawienie SQL Subiekt GT Sprzedaż wg. asortymentu
« Odpowiedź #20 dnia: Lipiec 24, 2018, 17:13:35 »
Fakt nie obejmuje ono wszystkich możliwych sytuacji handlowych a tylko wyłącznie te, które zachodzą u nas ale robi to dokładnie tak jak chcemy.

A prawie robi czasami wielką różnicę. Jak napiszesz zestawienie obejmujące wszystkie sytuacje, które obejmuje zestawienie fabryczne i będzie działało szybciej to wtedy się pochwal, bo tak to brzmi jak "mój rower jeździ szybciej, ale tylko wtedy jak ma z górki".
Sławek, Zduńska Wola

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17056
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Zestawienie SQL Subiekt GT Sprzedaż wg. asortymentu
« Odpowiedź #21 dnia: Lipiec 24, 2018, 17:20:33 »
Ale ktoś słabego matrixa napisał :)
To głównie przez wykorzystanie funkcji fnZestSub_KosztSpr w zestawieniu. Takie funkcje często wymuszają wykonanie zapytania wiersz po wierszu a takie coś się zawsze wlecze.

To kompletnie nie tak... Funkcja nie wpływa na czas wykonania zapytania (nie jest wyliczana dla każdego wiersza) do momentu, kiedy nie znajduje się w kryteriach zapytania... Funkcje nie zawsze się wleką, tak się dzieje niestety ze wszystkimi funkcjami w Microsofcie, ale inne silniki SQL potrafią indeksować funkcje deterministyczne, na niedeterministyczne dobrego sposobu nie ma.
Daniel, Białystok.

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4876
  • Reputacja +172/-11
Odp: Zestawienie SQL Subiekt GT Sprzedaż wg. asortymentu
« Odpowiedź #22 dnia: Lipiec 24, 2018, 18:23:08 »


Porównujesz fabryczne zestawienie, które pokazuje wszystkie warianty ze swoim, które nie uwzględnia m.in. faktur zbiorczych?

Tak to było porównanie mojego zestawienia do fabrycznego. A co nie wolno mi dokonać takiego porównania?
Ależ oczywiście że wolno.
Jeśli widzisz w tym sens...
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1250
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie SQL Subiekt GT Sprzedaż wg. asortymentu
« Odpowiedź #23 dnia: Lipiec 24, 2018, 18:59:46 »
To kompletnie nie tak... Funkcja nie wpływa na czas wykonania zapytania (nie jest wyliczana dla każdego wiersza) do momentu, kiedy nie znajduje się w kryteriach zapytania... Funkcje nie zawsze się wleką, tak się dzieje niestety ze wszystkimi funkcjami w Microsofcie, ale inne silniki SQL potrafią indeksować funkcje deterministyczne, na niedeterministyczne dobrego sposobu nie ma.

Funkcja fnZestSub_KosztSpr jest jak najbardziej funkcją skalarną wymuszająco osobne wyliczenia dla każdego wiersza, który zostanie zgarnięty przez warunki spełnione w zapytaniu. Według skryptów, które mam funkcja przyjmuje dokładnie dwie pojedyncze wartości: datę i identyfikator pozycji i zwraca pojedynczą wartość money. Jakby to napisane z użyciem funkcji typu TVF zwracająca tablicę to może mogłoby to pracować szybciej. Obejrzałem sobie plan tego  zapytania - tona hash matchy z unionami a w nich pełno nested loopów. Takie coś będzie się wlekło.


Jasne Oracle może w jakimś stopniu indeksować po funkcjach, Postgres ma indeksy typu trigram do super szybkiego wyszukiwania tekstowego a MySQL potrafi się położyć wydajnościowo na zwykłym joinie jak nie ma indeksu podczas gdy przy identycznym zapytaniu SQL Server będzie śmigał ale co to ma do rzeczy?

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17056
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Zestawienie SQL Subiekt GT Sprzedaż wg. asortymentu
« Odpowiedź #24 dnia: Lipiec 24, 2018, 19:40:25 »
To kompletnie nie tak... Funkcja nie wpływa na czas wykonania zapytania (nie jest wyliczana dla każdego wiersza) do momentu, kiedy nie znajduje się w kryteriach zapytania... Funkcje nie zawsze się wleką, tak się dzieje niestety ze wszystkimi funkcjami w Microsofcie, ale inne silniki SQL potrafią indeksować funkcje deterministyczne, na niedeterministyczne dobrego sposobu nie ma.

Funkcja fnZestSub_KosztSpr jest jak najbardziej funkcją skalarną wymuszająco osobne wyliczenia dla każdego wiersza,

Ale każde obliczenie to wymusza, funkcja nie jest żądnym wyjątkiem.

..., który zostanie zgarnięty przez warunki spełnione w zapytaniu.

O tym wcześniej nie wspomniałeś.

Jasne Oracle może w jakimś stopniu indeksować po funkcjach, Postgres ma indeksy typu trigram do super szybkiego wyszukiwania tekstowego a MySQL potrafi się położyć wydajnościowo na zwykłym joinie jak nie ma indeksu podczas gdy przy identycznym zapytaniu SQL Server będzie śmigał ale co to ma do rzeczy?

No to, że tak ogólna wypowiedź nie była prawdziwa.
Daniel, Białystok.

Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1250
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie SQL Subiekt GT Sprzedaż wg. asortymentu
« Odpowiedź #25 dnia: Lipiec 24, 2018, 20:21:28 »
To kompletnie nie tak... Funkcja nie wpływa na czas wykonania zapytania (nie jest wyliczana dla każdego wiersza) do momentu, kiedy nie znajduje się w kryteriach zapytania... Funkcje nie zawsze się wleką, tak się dzieje niestety ze wszystkimi funkcjami w Microsofcie, ale inne silniki SQL potrafią indeksować funkcje deterministyczne, na niedeterministyczne dobrego sposobu nie ma.

Funkcja fnZestSub_KosztSpr jest jak najbardziej funkcją skalarną wymuszająco osobne wyliczenia dla każdego wiersza,

Ale każde obliczenie to wymusza, funkcja nie jest żądnym wyjątkiem.
Nie, nie każde. Np. obliczenia SUM i AVG albo x+y  czy nawet jakieś sum(x*y+z), nawet z jakimś nieprzesadnie rozbudowanym case'm nie robią takich sieczek jak to zapytanie od Insertu. Jak się wrzuca funkcje, która wywołuje kolejną funkcję (fnZestSub_KosztSpr wywołuje fnSub_CenaSerii) to nie ma co oczekiwać cudów.


..., który zostanie zgarnięty przez warunki spełnione w zapytaniu.

O tym wcześniej nie wspomniałeś.
Bo to jest oczywiste dla każdego z jako-taką znajomością SQLa?

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17056
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Zestawienie SQL Subiekt GT Sprzedaż wg. asortymentu
« Odpowiedź #26 dnia: Lipiec 24, 2018, 20:59:07 »
To kompletnie nie tak... Funkcja nie wpływa na czas wykonania zapytania (nie jest wyliczana dla każdego wiersza) do momentu, kiedy nie znajduje się w kryteriach zapytania... Funkcje nie zawsze się wleką, tak się dzieje niestety ze wszystkimi funkcjami w Microsofcie, ale inne silniki SQL potrafią indeksować funkcje deterministyczne, na niedeterministyczne dobrego sposobu nie ma.

Funkcja fnZestSub_KosztSpr jest jak najbardziej funkcją skalarną wymuszająco osobne wyliczenia dla każdego wiersza,

Ale każde obliczenie to wymusza, funkcja nie jest żądnym wyjątkiem.
Nie, nie każde. Np. obliczenia SUM i AVG albo x+y  czy nawet jakieś sum(x*y+z), nawet z jakimś nieprzesadnie rozbudowanym case'm nie robią takich sieczek jak to zapytanie od Insertu. Jak się wrzuca funkcje, która wywołuje kolejną funkcję (fnZestSub_KosztSpr wywołuje fnSub_CenaSerii) to nie ma co oczekiwać cudów.

Nie prawda, każde - jak niby SQL ma zwrócić wynik bez wykonania obliczenia ? :o Nie mieszaj problemów - była mowa o obliczeniach dla każdego wiersza, a nie ich wydajności, jeśli funkcja będzie prosta "x+y" to nie zauważysz różnic w czasie wykonania - problemem nie jest wykorzystanie funkcji tylko obliczenia, które wykonuje.

..., który zostanie zgarnięty przez warunki spełnione w zapytaniu.

O tym wcześniej nie wspomniałeś.

Bo to jest oczywiste dla każdego z jako-taką znajomością SQLa?

Z "jako-taką" - nie żartuj już więcej... Dla takiej osoby tak samo samo powinno być oczywiste jak odczytać treść zapytania z programu, który pracuje na SQL'owej bazie danych (nie ważne jakiej), a co pokazał ten wątek - nawet jak podałem rozwiązanie to nie zostało wykorzystane...
Daniel, Białystok.

Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1250
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie SQL Subiekt GT Sprzedaż wg. asortymentu
« Odpowiedź #27 dnia: Lipiec 27, 2018, 16:14:46 »
Po wymianie PW z OP-em takie cuś nam z tego wyszło:

SELECT
'Symbol'=tt.tw_Symbol
   ,'Nr. Kat'=tt.tw_DostSymbol
   ,'Nazwa' = CASE
      WHEN tt.tw_Nazwa = ''
         THEN '(Brak nazwy towaru)'
      ELSE CASE
            WHEN tt.tw_Nazwa IS NULL
               THEN '(Usługa jednorazowa)'
            ELSE tt.tw_Nazwa
            END
      END
   ,'Grupa'=slg.grt_Nazwa
   ,'Sprzedane_SUM'=SUM(z.ob_IloscMag * z.ob_Znak)

   ,'Brutto_Sum'=SUM(z.ob_WartBrutto * z.ob_Znak)
   ,'Netto_Sum'=SUM(z.ob_WartNetto * z.ob_Znak)
                ,'Dost_T'=SUM(ts1.st_Stan-ts1.st_StanRez)
   ,'Dost_D'=SUM(ts2.st_Stan-ts2.st_StanRez)
                ,'Sum_Dost'=SUM((ts1.st_Stan-ts1.st_StanRez)+(ts2.st_Stan-ts2.st_StanRez))
   ,'Koszt'=SUM(CASE
         WHEN (z.ob_TowRodzaj & 6) > 0
            THEN 0
         ELSE dbo.fnZestSub_KosztSpr({D:Data OD:SELECT convert(date,getdate())}, z.ob_Id) * z.ob_Znak
         END)
   ,'Zysk'=SUM((
         z.ob_WartNetto - CASE
            WHEN (z.ob_TowRodzaj & 6) > 0
               THEN 0
            ELSE dbo.fnZestSub_KosztSpr({D:Data OD:SELECT convert(date,getdate())}, z.ob_Id)
            END
         ) * z.ob_Znak)
   ,'Marża' = CONVERT(MONEY, CASE
         WHEN SUM(z.ob_WartNetto * z.ob_Znak) <> 0
            THEN (
                  SUM((
                        z.ob_WartNetto - CASE
                           WHEN (z.ob_TowRodzaj & 6) > 0
                              THEN 0.0000
                           ELSE dbo.fnZestSub_KosztSpr({D:Data OD:SELECT convert(date,getdate())}, z.ob_Id)
                           END
                        ) * z.ob_Znak) / SUM(z.ob_WartNetto * z.ob_Znak)
                  ) * 100
         ELSE 0.0000
         END)

FROM vwZstSprzWgKhnt z
LEFT JOIN tw__Towar  tt ON ob_TowId = tt.tw_Id AND ((z.dok_DataWyst >= {D:Data OD:SELECT convert(date,getdate())}) AND (z.dok_DataWyst <= {D:Data DO:SELECT convert(date,getdate())}))
LEFT JOIN sl_GrupaTw slg ON tt.tw_IdGrupa = slg.grt_Id
left join tw_Stan ts1 on tt.tw_Id=ts1.st_TowId and ts1.st_MagId={DB:select m1.mag_Id,m1.mag_Nazwa from sl_Magazyn m1 order by m1.mag_Nazwa:magazyn 1:1:TAM Sklep Tamka 37 }
left join tw_Stan ts2 on tt.tw_Id=ts2.st_TowId and ts2.st_MagId={DB:select m2.mag_Id,m2.mag_Nazwa from sl_Magazyn m2 order by m2.mag_Nazwa:magazyn 2:2:MDG Sklep Dzielna 5}
WHERE dok_Status <> 2


AND ((z.dok_DataWyst >= {D:Data OD:SELECT convert(date,getdate())}) AND (z.dok_DataWyst <= {D:Data DO:SELECT convert(date,getdate())}))
     
and ((z.dok_Podtyp & 0xffff) | ((z.dok_typ & 0xffff) * 65536)) in ({CHL_DB:select convert(int,0x020000),'Faktura sprzedaży' union all select convert(int,0x020001),'Faktura sprzedaży detaliczna'  union all select convert(int,0x020002),'Faktura sprzedaży zbiorcza'  union all select convert(int,0x020003),'Faktura zaliczkowa'  union all select convert(int,0x040000),'Rachunek sprzedaży'  union all select convert(int,0x060000),'Korekta faktury sprzedaży'   union all select convert(int,0x060001),'Korekta faktury sprzedaży do nieistniejącego'  union all select convert(int,0x0E0000),'Zwrot detaliczny'  union all select convert(int,0x0E0001),'Zwrot detaliczny do nieistniejącego'  union all select convert(int,0x150000),'Paragon'  union all select convert(int,0x150002),'Paragon imienny'  union all select convert(int,0x150003),'Paragon odebrany z kasy'  union all select convert(int,0x150001),'Dokument fiskalny'  union all select convert(int,0x020004),'FSzc Faktura sprzedaży zaliczkowa częściowa'  union all select convert(int,0x020005),'FSzk Faktura sprzedaży zaliczkowa końcowa'  union all select convert(int,0x060002),'KFSzc Korekta całkowita faktury zaliczkowej cząstkowej':typ dokumentu:131072,131074,131075,262144,393216,393217,917504,917505,1376256,1376258,1376259,1376257,131076,131077,393218:bez faktur detalicznych})
     
AND (z.dok_MagId IN  ({CHL_DB: select distinct dd.dok_MagId, slm.mag_Nazwa from dok__Dokument dd inner join sl_Magazyn slm on dd.dok_MagId=slm.mag_Id and dd.dok_Typ in (2,6,14,21) UNION ALL SELECT     -1, ' [dowolny magazyn]' order by slm.mag_Nazwa:magazyn:-1:dowolny})
or -1 IN ({CHL_DB: select distinct dd.dok_MagId, slm.mag_Nazwa from dok__Dokument dd inner join sl_Magazyn slm on dd.dok_MagId=slm.mag_Id and dd.dok_Typ in (2,6,14,21) UNION ALL SELECT     -1, ' [dowolny magazyn]' order by slm.mag_Nazwa:magazyn:-1:dowolny}))
   
     
AND z.ob_TowRodzaj & 15 > 0
 
and (z.dok_KatId IN ({CHL_DB: select distinct dd.dok_KatId, slk.kat_Nazwa from dok__Dokument dd inner join sl_Kategoria slk on dd.dok_KatId=slk.kat_Id and dd.dok_Typ in (2,6,14,21) UNION ALL SELECT     -1, ' [brak kategorii]'  UNION ALL SELECT     - 2, ' (wszystkie kategorie)' order by kat_Nazwa:kategoria dokumentu:-2:wszystkie kategorie})
or -2 in ({CHL_DB: select distinct dd.dok_KatId, slk.kat_Nazwa from dok__Dokument dd inner join sl_Kategoria slk on dd.dok_KatId=slk.kat_Id and dd.dok_Typ in (2,6,14,21) UNION ALL SELECT     -1, ' [brak kategorii]'  UNION ALL SELECT     - 2, ' (wszystkie kategorie)' order by kat_Nazwa:kategoria dokumentu:-2:wszystkie kategorie}))


and (z.dok_RodzajOperacjiVat IN ({CHL_DB: SELECT -1 AS operacja_id, '(wszystkie transakcje)' AS operacja_nazwa UNION ALL SELECT  0, 'S - sprzedaż krajowa' UNION ALL SELECT     1, 'EX - eskport poza kraje EU' UNION ALL SELECT     2, 'WDT - wewnętrzspólnotowa dostawa towarów'  UNION ALL SELECT     3, 'WTTD - transakcja trójstronna (dostawa)' UNION ALL SELECT     4, 'EXU - eksport usług' UNION ALL SELECT     6, 'OOS - odwrotne obciążenie (sprzedaż)' UNION ALL SELECT     12, 'SPTK - sprzedaż poza terytorium kraju' UNION ALL SELECT 21, 'OOU - odwrotne obciążenie świadczenie usług':rodzaj transakcji VAT:-1:wszystkie rodzaje})
or -1 in({CHL_DB: SELECT -1 AS operacja_id, '(wszystkie transakcje)' AS operacja_nazwa UNION ALL SELECT  0, 'S - sprzedaż krajowa' UNION ALL SELECT     1, 'EX - eskport poza kraje EU' UNION ALL SELECT     2, 'WDT - wewnętrzspólnotowa dostawa towarów'  UNION ALL SELECT     3, 'WTTD - transakcja trójstronna (dostawa)' UNION ALL SELECT     4, 'EXU - eksport usług' UNION ALL SELECT     6, 'OOS - odwrotne obciążenie (sprzedaż)' UNION ALL SELECT     12, 'SPTK - sprzedaż poza terytorium kraju' UNION ALL SELECT 21, 'OOU - odwrotne obciążenie świadczenie usług':rodzaj transakcji VAT:-1:wszystkie rodzaje}))

and (tt.tw_IdGrupa  IN ({CHL_DB:select distinct grupa_id=tt.tw_IdGrupa, grupa_nazwa=slg.grt_Nazwa from tw__Towar tt inner join sl_GrupaTw slg on tt.tw_IdGrupa=slg.grt_Id union all select -1, ' [wszystkie grupy]' order by grt_nazwa:z grupy:2:Zabawki})
 or -1 in ({CHL_DB:select distinct grupa_id=tt.tw_IdGrupa, grupa_nazwa=slg.grt_Nazwa from tw__Towar tt inner join sl_GrupaTw slg on tt.tw_IdGrupa=slg.grt_Id union all select -1, ' [wszystkie grupy]' order by grt_nazwa:z grupy:2:Zabawki}))


and (z.ob_TowRodzaj  IN ({CHL_DB: select -1 as rodzaj_id, '(dowolny)' as rodzaj_nazwa union all select 1, 'towar' union all select 8, 'komplet' union all select 2, 'usługa' union all select 4, 'opakowanie zwrotne':rodzaj elementu:-1:dowolny})
 or -1 in ({CHL_DB: select -1 as rodzaj_id, '(dowolny)' as rodzaj_nazwa union all select 1, 'towar' union all select 8, 'komplet' union all select 2, 'usługa' union all select 4, 'opakowanie zwrotne':rodzaj elementu:-1:dowolny}))

and z.ob_towid IN ({LM:TW:Towar:(select tw_id from tw__towar):wszystkie})
and isnull(z.dok_platnikid,-1) IN ({LM:KH:Klient:(select kh_id from kh__kontrahent union all select -1):wszyscy})   
   
and
(tw_Zablokowany IN  ({LI:Dowolny#-1#Aktywny#0#Nieaktywny#1#:Towary o statusie:-1:dowolny})  or -1 IN ({LI:Dowolny#-1#Aktywny#0#Nieaktywny#1#:Towary o statusie:-1:dowolny}))

GROUP BY tt.tw_DostSymbol
   ,tt.tw_Nazwa
   ,tt.tw_Symbol
   ,slg.grt_Nazwa


Forum Użytkownikow Subiekt GT

Odp: Zestawienie SQL Subiekt GT Sprzedaż wg. asortymentu
« Odpowiedź #27 dnia: Lipiec 27, 2018, 16:14:46 »