Zgadza się, rozbija się o agregację. To zestawienie korzysta z widoku wspólnego dla wielu różnych zestawień, które są mutacjami wielu fabrycznych zestawień. W widoku sekcja cenowo-ilościowa wygląda tak
,iloscmag=isnull(sum(dp.ob_IloscMag* case when dd.dok_Typ=14 then -1 else dp.ob_Znak end),0)
,netto=isnull(sum(dp.ob_WartNetto * case when dd.dok_Typ=14 then -1 else dp.ob_Znak end),0)
,brutto=isnull(sum(dp.ob_WartBrutto * case when dd.dok_Typ=14 then -1 else dp.ob_Znak end),0)
,koszt_z_pozycji=sum((CASE dd.dok_typ WHEN 14 THEN - 1 ELSE dp.ob_Znak END) * ISNULL(koszt_pozycji.koszt, 0))
,zysk_z_pozycji=(isnull(sum(dp.ob_WartNetto * case when dd.dok_Typ=14 then -1 else dp.ob_Znak end),0))-(sum((CASE dd.dok_typ WHEN 14 THEN - 1 ELSE dp.ob_Znak END) * ISNULL(koszt_pozycji.koszt, 0)))
Koszt pozycji jest joinowany z CTE, które przemiata przez dok_magruch i dok_magwart. Przyjmuję zawsze finalny koszt serii, po wszystkich korektach.
W zestawieniu końcowym netto, brutto, koszt i zysk lecą na wprost przez SUM() a marżę wyliczam formułką (też z sumowaniem), która bierze poprawki na pozycje z zerową wartością netto.