Autor Wątek: Zestawienie sprzedaż wg asortymentu data zakończenia sprzedaży - problem  (Przeczytany 1756 razy)

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

Offline peter1031

  • Nowy użytkownik
  • *
  • Wiadomości: 16
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4
Witam wszystkich! Próbuję napisać zestawienie pokazujące sprzedaż wg asortymentu na podstawie zadanej daty zakończenia sprzedaży. Niestety nie liczy jak należy i rozjeżdża się z tym co jest zapisane na kontach w rewizorze. Ma może ktoś pomysł co może tu nie grać. Na razie skupiam się tylko na netto. Oto kod

SELECT
dok__Dokument.dok_DataZakonczenia AS [data sprz],
dok__Dokument.dok_DataWyst AS [data wyst],
dok__Dokument.dok_NrPelny AS [nr],
tw__Towar.tw_Nazwa AS [nazwa],
tw__Towar.tw_Symbol AS [symbol],
sl_GrupaTw.grt_Nazwa AS [grupa],
dok_Pozycja.ob_Ilosc AS [ilość],
dok_Pozycja.ob_Jm AS [j.m.],
dok_Pozycja.ob_WartBrutto AS [brutto],
dok_Pozycja.ob_WartNetto * dok_Pozycja.ob_Znak AS [netto],
dok_Pozycja.ob_WartMag AS [koszt],
(dok_Pozycja.ob_WartNetto-dok_Pozycja.ob_WartMag) AS [zysk netto],
CASE dok_Pozycja.ob_WartMag
   WHEN 0 THEN 100
   ELSE ((dok_Pozycja.ob_WartNetto/dok_Pozycja.ob_WartMag-1)*100)
   END AS [marża %]


FROM dok__Dokument, dok_Pozycja, tw__Towar, sl_GrupaTw
WHERE
(dok__Dokument.dok_Typ=2 OR dok__Dokument.dok_Typ=6) AND
(dok__Dokument.dok_DataZakonczenia BETWEEN {DR: Data}) AND
dok_MagId IN ({CHL_DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn:Magazyn:0:(nie podano wartości)}) AND
(dok__Dokument.dok_KatId IN ({CHL_DB: SELECT kat_Id, kat_Nazwa FROM sl_Kategoria:Kategoria:0:(nie podano wartości)})) AND
dok_Pozycja.ob_DokHanId=dok__Dokument.dok_Id AND
tw__Towar.tw_Id=dok_Pozycja.ob_TowId AND
sl_GrupaTw.grt_Id=tw__Towar.tw_IdGrupa

Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1249
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie sprzedaż wg asortymentu data zakończenia sprzedaży - problem
« Odpowiedź #1 dnia: Sierpień 08, 2019, 21:54:34 »
Raczej odpuść sobie pisanie od zera bo zajmie Ci to kupę czasu. Nie żeby nie dało się tego zrobić - da się napisać takie zapytanie całkiem od zera ale to droga przez mękę.

Odpal Profilera, przechwyć sobie fabryczne zestawienie sprzedaży wg asortymentu i zmodyfikuj zapytanie, które Ci wypluje Profiler.

sl_GrupaTw.grt_Id=tw__Towar.tw_IdGrupaStaraj się unikać takiej notacji - łatwo zrobić potężnego babola pt. iloczyn kartezjański jak zapomnisz napisać warunek dla którejś z tabel. Plus na dłuższą metę jest to mniej czytelne - litania do wszystkich świętych w WHERE się z tego robi. Pisz JOINy a konkretnie LEFT OUTER JOINy w takich przypadkach:  towar czy dokument może nie mieć żadnej grupy czy kategorii przypisanej i już na starcie będziesz miał złe wyniki bo ci odfiltruje takie rekordy. Filtry trzeba napisać tak żeby mogły obsłużyć NULLe wynikające z left joina. I korzystaj z aliasów.

dok_Pozycja.ob_WartMag AS [koszt],
(dok_Pozycja.ob_WartNetto-dok_Pozycja.ob_WartMag) AS [zysk netto],
CASE dok_Pozycja.ob_WartMag
   WHEN 0 THEN 100
   ELSE ((dok_Pozycja.ob_WartNetto/dok_Pozycja.ob_WartMag-1)*100)
   END AS [marża %]

Zysku ani marży w ten sposób nie policzysz dobrze. No chyba, że nie masz żadnych korekt cen zakupu ale nie dam za to głowy. Do policzenia tego jak należy potrzebne są jeszcze tabele dok_magruch i dok_magwart.

A tak na koniec - czemu ma służyć to zapytanie?
« Ostatnia zmiana: Sierpień 08, 2019, 22:00:56 wysłana przez yemet »

Offline peter1031

  • Nowy użytkownik
  • *
  • Wiadomości: 16
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4
Odp: Zestawienie sprzedaż wg asortymentu data zakończenia sprzedaży - problem
« Odpowiedź #2 dnia: Sierpień 08, 2019, 23:03:38 »
Księgowa sobie zażyczyła takie zestawienie. Przechwycałem zapytanie profilerem. Fabryczne bierze większość informacji z widoku w którym nie widnieje data zakończenia sprzedaży a coś mi nie wychodzi żeby ją dodać bez edycji widoku i muszę jeszcze dodać filtrowanie kategoriami.

Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1249
  • Reputacja +46/-1
  • Wersja programu: Navireo
Odp: Zestawienie sprzedaż wg asortymentu data zakończenia sprzedaży - problem
« Odpowiedź #3 dnia: Sierpień 08, 2019, 23:14:25 »
Księgowa sobie zażyczyła takie zestawienie. Przechwycałem zapytanie profilerem. Fabryczne bierze większość informacji z widoku w którym nie widnieje data zakończenia sprzedaży a coś mi nie wychodzi żeby ją dodać bez edycji widoku i muszę jeszcze dodać filtrowanie kategoriami.

Na tym co przechwyciłeś zrób jeszcze jednego joina na dok__dokument z aliasem i już masz dostęp do tej daty. Nie jest to może najpiękniejsze rozwiązanie ale będzie działać.
« Ostatnia zmiana: Sierpień 08, 2019, 23:21:26 wysłana przez yemet »

Offline peter1031

  • Nowy użytkownik
  • *
  • Wiadomości: 16
  • Reputacja +0/-0
  • Wersja programu: 1.66 SP4
Odp: Zestawienie sprzedaż wg asortymentu data zakończenia sprzedaży - problem
« Odpowiedź #4 dnia: Sierpień 09, 2019, 23:54:17 »
Tak zrobiłem i jest dobrze. Jeszcze muszę trochę zmodyfikować kod i najwyżej w razie problemów zwrócę się po pomoc. Dzięki

Forum Użytkownikow Subiekt GT

Odp: Zestawienie sprzedaż wg asortymentu data zakończenia sprzedaży - problem
« Odpowiedź #4 dnia: Sierpień 09, 2019, 23:54:17 »