Analiza sprzedaży + płatności

Problemy i pomysły związane z funkcjonowaniem modułu Sprzedaż

Moderator: mikey

Kyniu
Posty: 417
Rejestracja: 21 mar 2008, 10:10
Rola: Administrator CDN XL
Lokalizacja: Świętokrzyskie, Kielce

Analiza sprzedaży + płatności

Post autor: Kyniu »

Hej,

Na prośbę koleżanki wyklikałem takie coś więc dzielę się i z wami. Podpinamy pod wykresy, zaznaczamy że tylko tabela, na liście dokumentów SPRZEDAŻ/FA. Uwaga - ponieważ dokumenty nierozliczone mają datę 0 to wyświetla się dla nich rok 1800 jako data rozliczenia co ignorujemy (a jak kogoś razi niech sobie weryfikuje czy TrN_DataRoz =0 i podmienia na co innego). Uwaga dwa - analiza płatności nie bierze pod uwagę dokumentów w buforze (uwzględnia je wybranie opcji WSZYSTKIE).

Kod: Zaznacz cały

@PAR ?@D17|DataOd|&Data Od:REG={DateClwFirstDay('m')} @? PAR@
@PAR ?@D17|DataDo|&Data Do:REG={DateClwLastDay('m')} @? PAR@
@PAR ?@ABC('UWAGA - poprawne daty tylko dla dokumentów rozliczonych. Zignorować rok 1800 !!!')@? PAR@
@PAR ?@O(Nierozliczony:3|W trakcie:4|Rozliczony:5|Wszystkie:1,2,3,4,5)|StanDokumentu|&Stan dokumentu (tylko dokumenty zamknięte).:REG=1,2,3,4,5 @? PAR@

SELECT
  1 AS Lp,
  Tra2.TrN_DokumentObcy AS 'Dokument',
  CONVERT( char(10),DATEADD(dd, Tra2.TrN_Data2, '18001228' ), 104 ) AS 'Data',
-- Wyświetlamy datę w strawny sposób
  SUM(TrE_KsiegowaNetto) AS 'Wartość netto',
-- Obliczamy wartość netto sprzedaży z elementów transakcji
  SUM(TrE_KosztKsiegowy) AS 'Koszt zakupu',
-- Obliczamy koszt zakupu towarów na tej transakcji z elementów transakcji
  (SUM(CDN.TraElem.TrE_KsiegowaNetto) - SUM(CDN.TraElem.TrE_KosztKsiegowy)) AS 'Marża Kwota',
-- Obliczamy kwotę marży jako różnicę wartości naetto i kosztu zakupu
  CASE WHEN SUM(CDN.TraElem.TrE_KosztKsiegowy)=0 THEN 0
-- Zabezpieczamy się przed dzieleniem przez 0 gdy koszt nieustalony
  ELSE STR(
        ROUND(
        ((SUM(CDN.TraElem.TrE_KsiegowaNetto) - SUM(CDN.TraElem.TrE_KosztKsiegowy))/SUM(CDN.TraElem.TrE_KosztKsiegowy))*100,0))       
  END AS 'Marża Procent',
-- Obliczamy procent marży
  CONVERT( char(10),DATEADD(dd, Tra2.TrN_DataRoz, '18001228' ), 104 ) AS 'Data rozliczenia'
FROM
  CDN.TraNag Tra1
  INNER JOIN CDN.TraNag Tra2 ON
  (Tra1.TrN_SpiTyp = Tra2.TrN_GIDTyp) AND (Tra1.TrN_SpiNumer = Tra2.TrN_GIDNumer)
  LEFT OUTER JOIN CDN.TraElem ON
  Tra1.TrN_GIDNumer=TrE_GIDNumer AND Tra1.TrN_GIDTyp=TrE_GIDTyp
  WHERE
  Tra1.TrN_GIDTyp IN (2001,2033) AND
-- Wybieramy faktury sprzedaży FS i dokumenty WZ
  Tra1.TrN_SpiTyp <> 0 AND Tra1.TrN_SpiNumer <> 0 AND
-- Ale wykluczamy spinacze
  Tra1.TrN_Stan <> 6 AND
-- Wykluczamy anlulowane FS i WZ
  Tra2.TrN_GIDTyp = 2033 AND
  Tra2.TrN_Stan IN (??StanDokumentu) AND
-- Wykluczamy anulowane (S)FS 
  Tra2.TrN_Data2 >= ??DataOd AND Tra2.TrN_Data2 <= ??DataDo
GROUP BY
  Tra2.TrN_GIDNumer,
  Tra2.TrN_DokumentObcy,
  Tra2.TrN_Data2,
  Tra1.TrN_SpiNumer,
  Tra2.TrN_DataRoz
Tradycyjnie czekam na uwagi, wskazówki, może ktoś coś jeszcze dopisze czy ulepszy. Planowałem użyć CHECKBOX'ów zamiast RADIO BUTTON ale nie wiem jak pogodzić potem np. IF ... ELSE z warunkiem WHERE. Jakieś propozycje rozwiązania tego problemu mile widziane.

Kyniu

P.S. Zachęcam do testowania. Taki prosty SELECT nie gryzie ;-)

ODPOWIEDZ