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
Kyniu
P.S. Zachęcam do testowania. Taki prosty SELECT nie gryzie