Autor Wątek: Zestawienie własne SQL - Pozycje na dokumentach  (Przeczytany 3468 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 własne SQL - Pozycje na dokumentach
« dnia: Czerwiec 24, 2020, 08:45:02 »
Witam,
napisałem sobie zestawienie, które miało działać mniej więcej jak sprzedaż według dokumentów i asortymentu. Generalnie chodzi o to by zwracało mi jakie towary sprzedały się w danym okresie i dodatkowo by był do nich dopisany numer dokumentu na jakim dana pozycja jest.

Zestawienie działa dokładnie tak jak miało, ale potrzebuje małej przeróbki i nie mam pomysłu jak to wykonać.

Chodzi o to, że przykładowo jak na fakturze XXX sprzedadzą się dwie sztuki towaru YYY to otrzymuje wiersz z numerem faktury, nazwą towaru, symbolem i ilością 2, a chciałbym otrzymać w takim przypadku dwa wiersze z ilością 1. Tak by wierszy było tyle ile sztuk. Sprzeda mi się 10 sztuk jakiegoś towaru to chce 10 takich samych wierszy itd.

Czy mogę prosić o podpowiedź jak to zrobić?

SELECT
d.dok_nrpelny AS numer,
t.tw_symbol AS symbol,
t.tw_nazwa AS nazwa,
p.ob_ilosc AS ilosc,
d.dok_uwagi AS uwagi
FROM
dok__dokument d
LEFT JOIN dok_pozycja p ON d.dok_id = p.ob_dokhanid
LEFT JOIN tw__towar t ON p.ob_towid = t.tw_id
WHERE d.dok_Typ IN ({CHL:faktura zakupu#1#faktura sprzedaży#2#korekta faktury zakupu#5#korekta faktury sprzedaży#6#zwrot detaliczny#14#paragon#21#:Typ dokumentu})
AND d.dok_DataWyst BETWEEN {DR: data wystawienia}

Online yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1253
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie własne SQL - Pozycje na dokumentach
« Odpowiedź #1 dnia: Czerwiec 24, 2020, 08:58:50 »
A po co ci taki cudak? Rekursywnym zapytaniem może da się coś takiego zrobić ale ... po co :o

Przykład:
https://stackoverflow.com/questions/47993001/multiply-rows-in-single-query

A i to zapytanie twoje nie poradzi sobie z fakturam zbiorczymi.
« Ostatnia zmiana: Czerwiec 24, 2020, 09:01:16 wysłana przez yemet »

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4876
  • Reputacja +172/-11
Zestawienie własne SQL - Pozycje na dokumentach
« Odpowiedź #2 dnia: Czerwiec 24, 2020, 09:53:04 »
A jak zapytanie ma się zachować jeśli ilość na fakturze będzie wynosiła 1.75?
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Online yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1253
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie własne SQL - Pozycje na dokumentach
« Odpowiedź #3 dnia: Czerwiec 24, 2020, 09:57:46 »
Na jak to jak? Wyświetli 1,75 wiersza  ;D

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4876
  • Reputacja +172/-11
Zestawienie własne SQL - Pozycje na dokumentach
« Odpowiedź #4 dnia: Czerwiec 24, 2020, 10:50:38 »
Takie proste, a nie pomyślałem.
Ale mi wstyd
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
Odp: Zestawienie własne SQL - Pozycje na dokumentach
« Odpowiedź #5 dnia: Czerwiec 24, 2020, 12:55:01 »
Dobra ogarnięte!

Zestawienie było mi potrzebne do tego by je porównać do takiego samego zestawienia wygenerowanego z naszego systemu do realizacji zamówień, a tamten program zwracał mi właśnie w takim rozbiciu 1 sztuka = 1 wiersz.

I tak te zestawienia porównywałem w excelu i nie pomyślałem, że łatwiej mi będzie zsumować sztuki w tamtym drugim zestawieniu niż rozbijać w tym Subiektowym (jak zwykle najprostsze rozwiązania mi jakoś umykają).

Jeżeli chodzi o faktury zbiorcze lub sztuki typu 1,75 to u nas takich nie ma, ale faktycznie nie pomyślałem o tym :)

Offline hezer

  • Aktywny użytkownik
  • ***
  • Wiadomości: 153
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4 HF1
Odp: Zestawienie własne SQL - Pozycje na dokumentach
« Odpowiedź #6 dnia: Czerwiec 24, 2020, 13:13:27 »
Mimo rozwiązania problemu to narodziło mi się jedno pytanie odnośnie napisanego przeze mnie zestawienia.

Zauważyłem, że w przypadku faktur gdzie dany towar jest rozbity na kilka pozycji to wyświetli się kilka wierszy. Jak należy je przerobić by sumowało ilość sztuk tej samej pozycji na tym samym dokumencie?

Dziś to sobie zsumowałem w excelu, ale na przyszłość by mi się przydało zsumowane już w subiekcie.

Online yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1253
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie własne SQL - Pozycje na dokumentach
« Odpowiedź #7 dnia: Czerwiec 24, 2020, 13:54:13 »
Pokaż kod, pokaż przykładowy wynik.

Offline hezer

  • Aktywny użytkownik
  • ***
  • Wiadomości: 153
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4 HF1
Odp: Zestawienie własne SQL - Pozycje na dokumentach
« Odpowiedź #8 dnia: Czerwiec 25, 2020, 08:41:47 »
Kod był w pierwszym poście, ale podsyłam jeszcze raz.

SELECT
d.dok_nrpelny AS numer,
t.tw_symbol AS symbol,
t.tw_nazwa AS nazwa,
p.ob_ilosc AS ilosc,
d.dok_uwagi AS uwagi
FROM
dok__dokument d
LEFT JOIN dok_pozycja p ON d.dok_id = p.ob_dokhanid
LEFT JOIN tw__towar t ON p.ob_towid = t.tw_id
WHERE d.dok_Typ IN ({CHL:faktura zakupu#1#faktura sprzedaży#2#korekta faktury zakupu#5#korekta faktury sprzedaży#6#zwrot detaliczny#14#paragon#21#:Typ dokumentu})
AND d.dok_DataWyst BETWEEN {DR: data wystawienia}

Jeżeli chodzi o przykładowy wynik to chodzi mi o to, że np pozycje z załączonego obrazka były zsumowane (kiedy jest ta sama FV i ta sama pozycja).

Online yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1253
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie własne SQL - Pozycje na dokumentach
« Odpowiedź #9 dnia: Czerwiec 25, 2020, 08:55:23 »
A gdzie w tym zapytaniu co podesłałeś tabele z tego twojego programu od zamówień? To pole ilość jest z Subiekta czy z tego twojego softu?

Ogólnie rzecz ujmując musisz zrobić agregację SUM na kolumnie ilości z tego twojego softu i pogrupować po reszcie kolumn. Nie wiem jaką masz specyfikę tego softu, sprzedaży i nie dałeś całego zapytania ale jak będziesz miał przypadki gdzie będziesz miał ten sam asortyment w dwóch pozycjach na fakturze (np. w różnych cenach) to dojdzie do cudownego rozmnożenia ilości. Wtedy będziesz musiał najpierw zagregować po stronie tabel Subiekta i dopiero zrobić joinować do tabel od swojego softu (wykorzystanie CTE może poprawić czytelność takiego zapytania).

Offline hezer

  • Aktywny użytkownik
  • ***
  • Wiadomości: 153
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4 HF1
Odp: Zestawienie własne SQL - Pozycje na dokumentach
« Odpowiedź #10 dnia: Czerwiec 25, 2020, 11:43:37 »
Pytałem już konkretnie o to Subiektowe zapytanie nie łącząc tego z tym moim drugim softem, z którym sprawdzam poprawność danych.

Chodziło mi o to by otrzymać coś typu sprzedaż według asortymentu i dokumentów + uwagi do dokumentu i dodatkowo by w przypadku tej samej pozycji na tym samym dokumencie wyświetliło sumę ilości tej pozycji zamiast każdej osobno.

Nie wiem czy nie mówię teraz czegoś głupiego, ale nie wystarczy zamienić

p.ob_ilosc AS ilosc,

na

SUM(p.ob_ilosc) as Ilosc,

i dodać

GROUP BY t.tw_symbol,t.tw_nazwa, d.dok_uwagi, d.dok_nrpelny

Czy pominąłem coś istotnego?

Online yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1253
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie własne SQL - Pozycje na dokumentach
« Odpowiedź #11 dnia: Czerwiec 25, 2020, 11:50:19 »
Na oko wszystko dobrze ale jak chcesz zrobić swój wariant sprzedaży wg asortymentu z zyskiem, marżą etc. to zdecydowanie łatwiej Ci to pójdzie jak za podstawę weźmiesz sobie zapytanie z fabrycznych zestawień. Można je łatwo przechwycić Profilerem.

Forum Użytkownikow Subiekt GT

Odp: Zestawienie własne SQL - Pozycje na dokumentach
« Odpowiedź #11 dnia: Czerwiec 25, 2020, 11:50:19 »