SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[jpk_V7czynsze] ( @OkrSpr nvarchar(20), @Kwartal bit=0, @Rej varchar(100)='', @BezRej varchar(100)='', @Wsp tinyint=0, --0 wszystko,1-bez wspólnot @UID_Rejonu uniqueidentifier=Null, @UID_Wspolnoty uniqueidentifier=Null, @RejWym varchar(100)='', -- rejestry z wymiarów - nie ma zneczenia czy są faktury @UID_GrupyWym uniqueidentifier=Null, @BezVat varchar(50)='NP' ) AS ------------ 19-04-2021----------------------------------------------------------------------------------------------- DECLARE @SQL varchar(4000), @SQL1 varchar(4000), @i int, @xx varchar(20), @OkrSprP nvarchar(20), @D1 varchar(8), @D2 varchar(8), @DataM datetime SET DATEFORMAT dmy create table #Rej ( NrRejestru int ) create table #BezRej ( NrRejestru int ) create table #WRej ( NrRejestru int ) create table #BVat ( Vat varchar(4) ) IF ((SELECT OBJECT_ID('tempdb..#czJPK')) IS NULL) begin create table #czJPK ( UID uniqueidentifier default newid(), OkrSpr nvarchar(20), Typ tinyint, Dok int, DataWyst datetime, DataDostawy datetime, Faktura nvarchar(30), NIP nvarchar(20), NazwaK nvarchar(250), KodKraju nvarchar(2), P_10 money, P_11 money, P_12 Money, P_13 money, P_14 money, P_15 Money, P_16 money, P_17 money, P_18 Money, P_19 money, P_20 money, P_21 Money, P_22 money, P_23 money, P_24 Money, P_25 Money, P_26 Money, P_27 Money, P_28 Money, P_29 Money, P_30 Money, P_31 Money, P_32 Money, P_33 Money, P_34 Money, P_35 Money, P_36 Money, SprzedazVAT_Marza money, P_40 Money, P_41 Money, P_42 Money, P_43 Money, P_44 Money, P_45 Money, P_46 Money, P_47 Money, P_49 Money, P_50 Money, ZakupVAT_Marza money, UID_Decyzji uniqueidentifier, NrNajemcy varchar(10), Bez tinyint, TypJPK tinyint NOT NULL DEFAULT (0), SW bit NOT NULL DEFAULT (0), EE bit NOT NULL DEFAULT (0), TP bit NOT NULL DEFAULT (0), TT_WNT bit NOT NULL DEFAULT (0), TT_D bit NOT NULL DEFAULT (0), MR_T bit NOT NULL DEFAULT (0), MR_UZ bit NOT NULL DEFAULT (0), I42 bit NOT NULL DEFAULT (0), I63 bit NOT NULL DEFAULT (0), B_SPV bit NOT NULL DEFAULT (0), B_SPV_DOSTAWA bit NOT NULL DEFAULT (0), B_MPV_PROWIZJA bit NOT NULL DEFAULT (0), MPP bit NOT NULL DEFAULT (0), IMP bit NOT NULL DEFAULT (0), GTU_01 bit NOT NULL DEFAULT (0), GTU_02 bit NOT NULL DEFAULT (0), GTU_03 bit NOT NULL DEFAULT (0), GTU_04 bit NOT NULL DEFAULT (0), GTU_05 bit NOT NULL DEFAULT (0), GTU_06 bit NOT NULL DEFAULT (0), GTU_07 bit NOT NULL DEFAULT (0), GTU_08 bit NOT NULL DEFAULT (0), GTU_09 bit NOT NULL DEFAULT (0), GTU_10 bit NOT NULL DEFAULT (0), GTU_11 bit NOT NULL DEFAULT (0), GTU_12 bit NOT NULL DEFAULT (0), GTU_13 bit NOT NULL DEFAULT (0), KorP bit NOT NULL DEFAULT (0) ) end create table #czJPK_wym ( UID_Decyzji uniqueidentifier, Okr nvarchar(20), DataWyst datetime, Faktura nvarchar(30), Netto money, stVat varchar(4), Vat money, TypJPK tinyint ) SET @OkrSprP=@okrSpr SELECT @D2 = convert(varchar(8),DataDo,112), @DataM=DataDo FROM fksOkresySpraw WHERE Symbol = @OkrSpr if @Kwartal=1 begin SET @i=Month(@DataM) if (@i=3) OR (@i=6) OR (@i=9) OR (@i=12) begin SET @i=@i-2 SELECT TOP 1 @OkrSprP=Symbol FROM fksOkresySpraw WHERE (Year(DataDo)=Year(@DataM)) AND (month(DataDo)=@i) ORDER BY DataDo DESC end end SELECT @D1 = convert(varchar(8),DataOd,112) FROM fksOkresySpraw WHERE Symbol = @OkrSprP -- tylko rejestry SET @SQL='INSERT INTO #Rej (NrRejestru) SELECT NrRejestru FROM czsRejestryVAT ' SET @Rej=Rtrim(IsNull(@Rej,'')) if len(@Rej)>0 begin SET @SQL1='' SET @i=PATINDEX('%,%',@Rej) while @i>0 begin SET @xx=Substring(@Rej,1,@i-1) SET @Rej=Substring(@Rej,@i+1,Len(@Rej)-@i) SET @i=PATINDEX('%-%',@xx) if @i>0 SET @SQL1= @SQL1+' OR ((NrRejestru>='+Substring(@xx,1,@i-1)+') AND (NrRejestrur<='+Substring(@xx,@i+1,Len(@xx)-@i)+'))' else SET @SQL1= @SQL1+' OR (NrRejestru='+@xx+')' SET @i=PATINDEX('%,%',@Rej) end if len(@Rej)>0 begin SET @xx=@Rej SET @i=PATINDEX('%-%',@xx) if @i>0 SET @SQL1= @SQL1+' OR ((NrRejestru>='+Substring(@xx,1,@i-1)+') AND (NrRejestru<='+Substring(@xx,@i+1,Len(@xx)-@i)+'))' else SET @SQL1= @SQL1+' OR (NrRejestru='+@xx+')' end if len(@SQL1)>4 SET @SQL=@SQL+' WHERE '+Substring(@SQL1,5,len(@SQL1)-4) end EXEC(@SQL) -- bez rejestrów SET @Rej=Rtrim(IsNull(@BezRej,'')) if len(@Rej)>0 begin SET @SQL='INSERT INTO #BezRej (NrRejestru) SELECT NrRejestru FROM czsRejestryVAT ' SET @SQL1='' SET @i=PATINDEX('%,%',@Rej) while @i>0 begin SET @xx=Substring(@Rej,1,@i-1) SET @Rej=Substring(@Rej,@i+1,Len(@Rej)-@i) SET @i=PATINDEX('%-%',@xx) if @i>0 SET @SQL1= @SQL1+' OR ((NrRejestru>='+Substring(@xx,1,@i-1)+') AND (NrRejestrur<='+Substring(@xx,@i+1,Len(@xx)-@i)+'))' else SET @SQL1= @SQL1+' OR (NrRejestru='+@xx+')' SET @i=PATINDEX('%,%',@Rej) end if len(@Rej)>0 begin SET @xx=@Rej SET @i=PATINDEX('%-%',@xx) if @i>0 SET @SQL1= @SQL1+' OR ((NrRejestru>='+Substring(@xx,1,@i-1)+') AND (NrRejestru<='+Substring(@xx,@i+1,Len(@xx)-@i)+'))' else SET @SQL1= @SQL1+' OR (NrRejestru='+@xx+')' end if len(@SQL1)>4 begin SET @SQL=@SQL+' WHERE '+Substring(@SQL1,5,len(@SQL1)-4) EXEC(@SQL) end end -- rejestry z wymiarów SET @Rej=Rtrim(IsNull(@RejWym,'')) if len(@Rej)>0 begin SET @SQL='INSERT INTO #WRej (NrRejestru) SELECT NrRejestru FROM czsRejestryVAT ' SET @SQL1='' SET @i=PATINDEX('%,%',@Rej) while @i>0 begin SET @xx=Substring(@Rej,1,@i-1) SET @Rej=Substring(@Rej,@i+1,Len(@Rej)-@i) SET @i=PATINDEX('%-%',@xx) if @i>0 SET @SQL1= @SQL1+' OR ((NrRejestru>='+Substring(@xx,1,@i-1)+') AND (NrRejestrur<='+Substring(@xx,@i+1,Len(@xx)-@i)+'))' else SET @SQL1= @SQL1+' OR (NrRejestru='+@xx+')' SET @i=PATINDEX('%,%',@Rej) end if len(@Rej)>0 begin SET @xx=@Rej SET @i=PATINDEX('%-%',@xx) if @i>0 SET @SQL1= @SQL1+' OR ((NrRejestru>='+Substring(@xx,1,@i-1)+') AND (NrRejestru<='+Substring(@xx,@i+1,Len(@xx)-@i)+'))' else SET @SQL1= @SQL1+' OR (NrRejestru='+@xx+')' end if len(@SQL1)>4 begin SET @SQL=@SQL+' WHERE '+Substring(@SQL1,5,len(@SQL1)-4) EXEC(@SQL) end end -- bez stawek VAT z wymiarów SET @Rej=Rtrim(IsNull(@BezVat,'')) if len(@Rej)>0 begin SET @i=PATINDEX('%,%',@Rej) while @i>0 begin SET @xx=Rtrim(Substring(@Rej,1,@i-1)) SET @Rej=Substring(@Rej,@i+1,Len(@Rej)-@i) SET @xx=UPPER(@xx) if (SELECT COUNT(*) FROM #BVat WHERE VAT=@xx)=0 begin INSERT INTO #BVat (VAT) Values(@xx) end SET @i=PATINDEX('%,%',@Rej) end if len(@Rej)>0 begin SET @xx=UPPER(Rtrim(@Rej)) if (SELECT COUNT(*) FROM #BVat WHERE VAT=@xx)=0 begin INSERT INTO #BVat (VAT) Values(@xx) end end end SET @SQL='INSERT INTO #czJPK (UID,OkrSpr,Typ,Dok,Faktura,DataWyst,DataDostawy,NIP,NazwaK,UID_Decyzji,NrNajemcy,Bez, TypJPK,SW,EE,TP,TT_WNT,TT_D,MR_T,MR_UZ,I42,I63,B_SPV,B_SPV_DOSTAWA,B_MPV_PROWIZJA,MPP,IMP, GTU_01,GTU_02,GTU_03,GTU_04,GTU_05,GTU_06,GTU_07,GTU_08,GTU_09,GTU_10,GTU_11,GTU_12,GTU_13,KorP) SELECT f.UID, f.OkresSpraw,1,f.NrDokumentu, Faktura=Substring(IsNull(f.Prefix,'''')+CASE WHEN IsNull(rr.Faktura0,0)>0 THEN RIGHT(REPLICATE(''0'',rr.Faktura0)+convert(varchar,f.NrDokumentu),rr.Faktura0) ELSE convert(varchar,f.NrDokumentu) END+IsNull(f.Suffix,''''),1,30), f.DataWystawienia,f.DataSprzedazy, NIP= Substring(CASE WHEN f.UID_Decyzji Is Null THEN IsNull(n.NIP,'''') ELSE IsNull(a.NIP,'''') END,1,20), NazwaK = CASE WHEN f.UID_Decyzji Is Null THEN n.Nazwa ELSE (CASE WHEN len(IsNull(a.Adresat,''''))>0 THEN a.Adresat ELSE d.Najemca END) END, f.UID_Decyzji,f.NrNajemcy,0, TypJPK,SW,EE,TP,TT_WNT,TT_D,MR_T,MR_UZ,I42,I63,B_SPV,B_SPV_DOSTAWA,B_MPV_PROWIZJA,MPP,IMP, GTU_01,GTU_02,GTU_03,GTU_04,GTU_05,GTU_06,GTU_07,GTU_08,GTU_09,GTU_10,GTU_11,GTU_12,GTU_13,KorP FROM cztFakturyW f INNER JOIN cztRejony rr ON f.UID_Rejonu=rr.UID INNER JOIN fksOkresySpraw o ON f.OkresSpraw=o.Symbol INNER JOIN #Rej r ON f.NrRejestru=r.NrRejestru LEFT OUTER JOIN #BezRej r1 ON f.NrRejestru=r1.NrRejestru LEFT OUTER JOIN cztDecyzje d ON f.UID_Decyzji=d.UID LEFT OUTER JOIN cztLokale l ON d.UID_Lokalu=l.UID LEFT OUTER JOIN cztAdresyDoKorespondencji a ON f.UID_Decyzji=a.UID_Decyzji LEFT OUTER JOIN cztNajemcy n ON f.NrNajemcy=n.NrEwid WHERE (r1.NrRejestru Is Null) AND (o.DataOd BETWEEN '''+@D1+''' AND '''+@D2+''')' if @UID_Rejonu Is Not Null SET @SQL=@SQl+' AND (f.UID_Rejonu='''+convert(varchar(40),@UID_Rejonu)+''')' EXEC(@SQL) -- bez wspólnot if @Wsp=1 begin -- decyzja nie ma wspólnoty UPDATE #czJPK SET Bez=1 FROM #czJPK a INNER JOIN (SELECT j.UID_Decyzji,UID_Wspolnoty=(SELECT TOP 1 UID_Wspolnoty FROM cztKartotekaDecyzji WHERE (UID_Decyzji=j.UID_Decyzji) AND (DataZmiany<=j.DataWyst) ORDER BY DataZmiany DESC) FROM #czJPK j WHERE j.UID_Decyzji Is Not NUll) kd ON a.UID_Decyzji=kd.UID_Decyzji WHERE kd.UID_Wspolnoty Is Not Null -- żadna z decyzji majemcy nie ma wspólnoty UPDATE #czJPK SET Bez=1 FROM #czJPK a INNER JOIN (SELECT kd.NrNajemcy FROM (SELECT j.NrNajemcy,d.UID,UID_Wspolnoty=(SELECT TOP 1 UID_Wspolnoty FROM cztKartotekaDecyzji WHERE (UID_Decyzji=d.UID) AND (DataZmiany<=j.DataWyst) ORDER BY DataZmiany DESC) FROM #czJPK j INNER JOIN cztDecyzje d ON j.NrNajemcy=d.NrNajemcy WHERE j.UID_Decyzji Is NUll) kd WHERE kd.UID_Wspolnoty Is Not Null GROUP BY kd.NrNajemcy ) b ON a.NrNajemcy=b.NrNajemcy end -- wybrana wspólnota if @UID_Wspolnoty Is Not Null begin -- decyzja ma daną wspónote UPDATE #czJPK SET Bez=1 FROM #czJPK a INNER JOIN (SELECT j.UID_Decyzji,UID_Wspolnoty=(SELECT TOP 1 UID_Wspolnoty FROM cztKartotekaDecyzji WHERE (UID_Decyzji=j.UID_Decyzji) AND (DataZmiany<=j.DataWyst) ORDER BY DataZmiany DESC) FROM #czJPK j WHERE j.UID_Decyzji Is Not NUll) kd ON a.UID_Decyzji=kd.UID_Decyzji WHERE (kd.UID_Wspolnoty Is Null) OR (kd.UID_Wspolnoty<>@UID_Wspolnoty) -- wszystkie decyzje najemcy maja daną wspólnote UPDATE #czJPK SET Bez=1 FROM #czJPK a INNER JOIN (SELECT kd.NrNajemcy FROM (SELECT j.NrNajemcy,d.UID,UID_Wspolnoty=(SELECT TOP 1 UID_Wspolnoty FROM cztKartotekaDecyzji WHERE (UID_Decyzji=d.UID) AND (DataZmiany<=j.DataWyst) ORDER BY DataZmiany DESC) FROM #czJPK j INNER JOIN cztDecyzje d ON j.NrNajemcy=d.NrNajemcy WHERE j.UID_Decyzji Is NUll) kd WHERE (kd.UID_Wspolnoty Is Null) OR (kd.UID_Wspolnoty<>@UID_Wspolnoty) GROUP BY kd.NrNajemcy ) b ON a.NrNajemcy=b.NrNajemcy end DELETE FROM #czJPK WHERE Bez=1 UPDATE #czJPK SET P_10=b.P_10,P_13=b.P_13,P_15=b.P_15,P_16=b.P_16,P_17=b.P_17,P_18=b.P_18,P_19=b.P_19,P_20=b.P_20 FROM #czJPK a INNER JOIN (SELECT f.UID, P_10=SUM(CASE WHEN UPPER(s.stVat)='ZW' THEN s.Wsk*s.Netto ELSE 0.0 END), P_13=SUM(CASE WHEN s.stVat='0' THEN s.Wsk*s.Netto ELSE 0.0 END), P_15=SUM(CASE WHEN stVAT='5' THEN s.Wsk*s.Netto ELSE 0.0 END), P_16=SUM(CASE WHEN stVAT='5' THEN s.Wsk*s.Vat ELSE 0.0 END), P_17=SUM(CASE WHEN (stVAT='8') OR (stVAT='7') THEN s.Wsk*s.Netto ELSE 0.0 END), P_18=SUM(CASE WHEN (stVAT='8') OR (stVAT='7') THEN s.Wsk*s.Vat ELSE 0.0 END), P_19=SUM(CASE WHEN (stVAT='23') OR (stVAT='22') THEN s.Wsk*s.Netto ELSE 0.0 END), P_20=SUM(CASE WHEN (stVAT='23') OR (stVAT='22') THEN s.Wsk*s.Vat ELSE 0.0 END) FROM #czJPK f INNER JOIN cztFakturyW_szcz s ON f.UID=s.UID_cztFakturyW GROUP BY f.UID) b ON a.UID=b.UID -- wymiary if (select count(*) FROM #WRej)>0 begin SET @SQL='INSERT INTO #czJPK_wym (UID_Decyzji,DataWyst,Okr,Faktura,Netto,stVat,Vat,TypJPK) SELECT f.UID_Decyzji,DataWyst=DateAdd(d,9,o.DataOd), f.OkresSpraw,d.NrEwid, Netto=SUM(f.Wartosc),stVat=IsNull(f.Vat,''''),Vat=SUM(f.KwotaVAT), CASE WHEN f.DataDokFisk Is NUll THEN 2 ELSE 0 END FROM cztWymiary f INNER JOIN fksOkresySpraw o ON f.OkresSpraw=o.Symbol INNER JOIN (SELECT d1.*,UIDkd=(SELECT TOP 1 UID From cztKartotekaDecyzji WHERE (UID_Decyzji=d1.UID) AND (DataZmiany<='''+@D2+''') ORDER By DataZmiany DESC) FROM cztDecyzje d1 ) d ON f.UID_Decyzji=d.UID LEFT OUTER JOIN cztLokale l ON d.UID_Lokalu=l.UID INNER JOIN cztKartotekaDecyzji kd ON d.UIDkd=kd.UID INNER JOIN #WRej r ON kd.NrRejestru=r.NrRejestru' if @UID_Rejonu Is Not Null SET @SQL=@SQl+' INNER JOIN cztBudynki b ON l.UID_Budynku=b.UID' if @UID_GrupyWym Is Not Null SET @SQL=@SQl+' LEFT OUTER JOIN (SELECT * FROM cztGrupySkladnikow WHERE UID_Grupy='''+convert(Varchar(40),@UID_GrupyWym)+''') g ON f.UID_Skladnika=g.UID_Skladnika' if len(isNull(@BezVat,''))>0 SET @SQL=@SQl+' LEFT OUTER JOIN #BVat v ON UPPER(IsNull(f.VAT,''''))=v.VAT ' SET @SQL=@SQL+' WHERE (o.DataOd BETWEEN '''+@D1+''' AND '''+@D2+''')' if @UID_Rejonu Is Not Null SET @SQL=@SQl+' AND (b.UID_Rejonu='''+convert(varchar(40),@UID_Rejonu)+''')' -- bez składników z podanej grupy if @UID_GrupyWym Is Not Null SET @SQL=@SQl+' AND (g.UID Is Null)' -- bez stawek VAT if len(isNull(@BezVat,''))>0 SET @SQL=@SQl+' AND (v.VAT Is Null)' -- bez wspólnot if @Wsp=1 SET @SQL=@SQl+' AND (kd.UID_Wspolnoty Is Null)' if @UID_Wspolnoty Is Not Null SET @SQL=@SQl+' AND (kd.UID_Wspolnoty='''+convert(varchar(40),@UID_Wspolnoty)+''')' SET @SQL=@SQl+' GROUP BY f.UID_Decyzji,kd.UID_Wspolnoty,f.OkresSpraw,o.DataOd,IsNull(f.Vat,''''),d.NrEwid,f.DataDokFisk' EXEC(@SQL) INSERT INTO #czJPK (Typ,Dok,OkrSpr,Faktura,DataWyst,DataDostawy,NIP,NazwaK,UID_Decyzji,P_10,P_13,P_15,P_16,P_17,P_18,P_19,P_20,Bez,TypJPK) SELECT Typ=1,Dok=90000,f.Okr, --Faktura=f.Faktura+'/'+substring(f.Okr,1,4)+'/'+substring(f.Okr,5,2), Faktura=f.Faktura+'/'+Convert(varchar(4),Year(f.DataWyst))+'/'+right('0'+Convert(varchar(2),Month(f.DataWyst)),2), f.DataWyst, f.DataWyst, NIP=Substring(IsNull(a.NIP,''),1,20), NazwaK =CASE WHEN len(IsNull(a.Adresat,''))>0 THEN a.Adresat ELSE d.Najemca END, f.UID_Decyzji, P_10=SUM(CASE WHEN UPPER(f.stVat)='ZW' THEN f.Netto ELSE 0.0 END), P_13=SUM(CASE WHEN f.stVat='0' THEN f.Netto ELSE 0.0 END), P_15=SUM(CASE WHEN f.stVAT='5' THEN f.Netto ELSE 0.0 END), P_16=SUM(CASE WHEN f.stVAT='5' THEN f.Vat ELSE 0.0 END), P_17=SUM(CASE WHEN (f.stVAT='8') OR (stVAT='7') THEN f.Netto ELSE 0.0 END), P_18=SUM(CASE WHEN (f.stVAT='8') OR (stVAT='7') THEN f.Vat ELSE 0.0 END), P_19=SUM(CASE WHEN (f.stVAT='23') OR (stVAT='22') THEN f.Netto ELSE 0.0 END), P_20=SUM(CASE WHEN (f.stVAT='23') OR (stVAT='22') THEN f.Vat ELSE 0.0 END),2,f.TypJPK FROM #czJPK_wym f INNER JOIN cztDecyzje d ON f.UID_DECYZJI=d.UID INNER JOIN cztLokale l ON d.UID_Lokalu=l.UID LEFT OUTER JOIN cztAdresyDoKorespondencji a ON f.UID_Decyzji=a.UID_Decyzji GROUP BY f.UID_Decyzji,f.Faktura,f.DataWyst,f.Okr,CASE WHEN len(IsNull(a.Adresat,''))>0 THEN a.Adresat ELSE d.Najemca END, IsNull(a.NIP,''),f.TypJPK end -- faktury bez kwot DELETE FROM #czJPK WHERE (IsNull(P_10,0)=0) AND (IsNull(P_13,0)=0) AND (IsNull(P_15,0)=0) AND (IsNull(P_16,0)=0) AND (IsNull(P_17,0)=0) AND (IsNull(P_18,0)=0) AND (IsNull(P_19,0)=0) AND (IsNull(P_20,0)=0) UPDATE #czJPK SET NIP=Replace(Replace(NIP,'-',''),' ','') WHERE NIP Is Not Null UPDATE #czJPK SET KodKraju=Substring(IsNull(NIP,''),1,2),NIP=Rtrim(Substring(NIP,3,18)) WHERE (IsNumeric(Substring(IsNull(NIP,''),1,1))=0) OR (IsNumeric(Substring(IsNull(NIP,''),2,1))=0 ) SELECT * FROM #czJPK WHERE OkrSpr=@OkrSpr ORDER BY Typ,DataWyst,DataDostawy,Dok,Faktura,UID