USE [DEV] GO /****** Object: StoredProcedure [dbo].[fk_RozdzielnikPlac] Script Date: 11.10.2016 13:43:29 ******/ SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER OFF GO -- rozdzielnik płac -- w jednym stanowisku wiele komórek kosztów - jeżeli <100 procent to reszta na komórki z list płac -- płace - nie uwzględniam osób, do których Uz ma ograniczony dostęp -- Ewa Stachowicz 11-10-2016 ALTER PROCEDURE [dbo].[fk_RozdzielnikPlac] @JK smallint, @Skad tinyint=0, -- 0 z płac, 1 z FK @RokObr nvarchar(10), @Typ tinyint, @RokOd smallint, @MiesOd tinyint, @RokDo smallint, @MiesDo tinyint, @DataWyplOd datetime, @DataWyplDo datetime, @Zatw bit, @Listy varchar(200), @TylkoKwoty bit=1, @Sumowac bit=0, @Uz varchar(20)='', @TakSta bit=0, -- 0 - komórki z list płac, 1- komórki z rozbicia stanowisk, jeżeli nie ma z list płac @TakKomorka bit=0 -- 1 pokazywać komórke AS --------------------------------------------------------------------------------------------------------------------------------------------------------------------- DECLARE @SQL varchar(4000), @SQLw varchar(1000), @UID uniqueidentifier, @Komorka varchar(10), @Algorytm varchar(1000), @i int, @xx varchar(20), @xxA varchar(50), @xx1 varchar(50), @x1 varchar(15), @x2 varchar(10), @x3 varchar(10), @x4 varchar(10), @kwota money, @Tak tinyint, @UID_kdtListy_pozycje uniqueidentifier, @UID_tblPracownicy uniqueidentifier, @Skl varchar(20), @TypZ tinyint ----------------------------------------------------------------------------------------- SET DATEFORMAT dmy create table #Kwota ( kw Money ) create table #Osoby ( UID uniqueidentifier, NrEto int, Tak int ) -- wykaz pozycji z list create table #Tym ( UID_kdtListy_pozycje uniqueidentifier, -- pozycja listy UID_tblPracownicy uniqueidentifier, NrEto int, Rok smallint, Miesiac tinyint, Komorka varchar(10), TypPodatku varchar(1), Numer smallint, Procent money ) create table #Zar ( UID uniqueidentifier default newid(), UID_kdtListy_pozycje uniqueidentifier, -- pozycja listy UID_tblPracownicy uniqueidentifier, NrEto int, Rok smallint, Miesiac tinyint, Komorka varchar(10), TypPodatku varchar(1), Numer smallint, Procent money, Skl varchar(20), Typ tinyint, Kwota money, Kw money ) -- wiele komórek na jedno stanowisko create table #TymS ( UID_tblPracownicy uniqueidentifier, Rok smallint, Miesiac tinyint, Komorka varchar(10), Procent money, DataOd datetime, DataDo datetime, k1 tinyint, k2 tinyint, k3 tinyint, Zatr bit, Zw bit ) if IsNull(@Skad,0)=0 begin -- płace create table #Rozdzielnik ( UID uniqueidentifier, Lp int, Komorka varchar(10), Algorytm varchar(2000), Konto varchar(30), Strona tinyint, Opis varchar(100), Kwota money ) end /* -- tabele w programie FK -- @Skad=1 create table #Rozdzielnik ( UID uniqueidentifier, Lp int, Komorka varchar(10), Algorytm varchar(2000), Konto varchar(30), Strona tinyint, Opis varchar(100), Kwota money, UID_konta uniqueidentifier, Rozrachunki smallint, ROR nvarchar(3), UID_tblPracownicy uniqueidentifier, Faktura nvarchar(30), DataWystawienia datetime, DataWplywu datetime, DataSprzedazy datetime, SposobZaplaty nvarchar(30), TerminZaplaty datetime, DataZaplaty datetime, IDKontrahenta int, IDUrzedu int ) */ SET @Tak=0 -- osoby if len(IsNull(@Uz,''))=0 begin INSERT INTO #Osoby (UID,NrEto) SELECT UID,NrEto FROM tblPracownicy o WHERE JK=@JK end else begin INSERT INTO #Osoby (UID,NrEto,Tak) SELECT UID,NrEto,dbo.pl_PracTak(o.JK,@Uz,Jedn,Komorka,NrListy) FROM tblPracownicy o WHERE (JK=@JK) if (SELECT count(*) FROM #Osoby WHERE IsNull(Tak,0)=0)>0 begin -- są osoby do których nie ma uprawnien SET @Tak=1 DELETE FROM #Osoby WHERE IsNull(Tak,0)=0 end end -- rozdzielnik if IsNull(@Skad,0)=0 begin -- płace INSERT INTO #Rozdzielnik (UID,Lp,Komorka,Algorytm,Konto,Strona,Opis) SELECT UID,IsNull(Lp,0),Komorka,IsNull(Algorytm,'0'),Konto,Strona,Opis FROM kdsAlgorytmyRozdzielnika WHERE (JK=@JK) AND (Typ=@Typ) ORDER BY Lp end else begin -- FK INSERT INTO #Rozdzielnik (UID,Lp,Komorka,Algorytm,Konto,Strona,Opis,UID_konta,Rozrachunki) SELECT r.UID,IsNull(r.Lp,0),r.Komorka,IsNull(r.Algorytm,'0'),r.Konto,r.Strona,r.Opis,k.UID,k.Rozrachunki FROM kdsAlgorytmyRozdzielnika r INNER JOIN fktPlanKont k ON (r.JK=k.JK) AND (Rtrim(r.Konto)=Rtrim(k.Konto)) WHERE (r.JK=@JK) AND (r.Typ=@Typ) AND (k.RokObr=@RokObr) ORDER BY r.Lp end UPDATE #Rozdzielnik SET Komorka=Replace(Replace(Komorka,'*','%'),'?','_') WHERE Len(IsNull(Komorka,''))>0 -- wybór z list SET @SQLw='' if @RokDo Is Null begin if @RokOd Is Not Null begin SET @SQLw= @SQLw+' AND (w.Rok='+convert(varchar(4),@RokOd)+') AND (w.Miesiac='+convert(varchar(2),@MiesOd)+')' end end else begin SET @SQLw= @SQLw+' AND ((w.Rok>'+convert(varchar(4),@RokOd)+') OR ((w.Rok='+convert(varchar(4),@RokOd)+') AND (w.Miesiac>='+convert(varchar(2),@MiesOd)+'))) AND ((w.Rok<'+convert(varchar(4),@RokDo)+') OR ((w.Rok='+convert(varchar(4),@RokDo)+') AND (w.Miesiac<='+convert(varchar(2),@MiesDo)+')))' end if @DataWyplDo Is Null begin if @DataWyplOd Is Not Null SET @SQLw= @SQLw+' AND (w.DataWyplaty='''+convert(varchar(10),@DataWyplOd,105)+''')' end else begin SET @SQLw= @SQLw+' AND (w.DataWyplaty>='''+convert(varchar(10),@DataWyplOd,105)+''') AND (w.DataWyplaty<='''+convert(varchar(10),@DataWyplDo,105)+''')' end if @Zatw=1 SET @SQLw= @SQLw+' AND (w.DataZatw Is Not Null)' SET @Listy=Rtrim(IsNull(@listy,'')) if len(@listy)>0 begin SET @SQL='' SET @i=PATINDEX('%,%',@Listy) while @i>0 begin SET @xx=Substring(@Listy,1,@i-1) SET @Listy=Substring(@Listy,@i+1,Len(@Listy)-@i) SET @i=PATINDEX('%-%',@xx) if @i>0 SET @SQL= @SQL+' OR ((w.Numer>='+Substring(@xx,1,@i-1)+') AND (w.Numer<='+Substring(@xx,@i+1,Len(@xx)-@i)+'))' else SET @SQL= @SQL+' OR (w.Numer='+@xx+')' SET @i=PATINDEX('%,%',@Listy) end if len(@Listy)>0 begin SET @xx=@Listy SET @i=PATINDEX('%-%',@xx) if @i>0 SET @SQL= @SQL+' OR ((w.Numer>='+Substring(@xx,1,@i-1)+') AND (w.Numer<='+Substring(@xx,@i+1,Len(@xx)-@i)+'))' else SET @SQL= @SQL+' OR (w.Numer='+@xx+')' end if len(@SQL)>4 SET @SQLw=@SQLw+' AND ('+Substring(@SQL,5,len(@SQL)-4)+')' end if len(@SQLw)>5 SET @SQLw=' WHERE '+Substring(@SQLw,6,len(@SQLw)-5) -- wykaz pozycji z list płac z danego okresu SET @SQL='INSERT INTO #Tym (UID_kdtListy_pozycje,UID_tblPracownicy,NrEto,Rok,Miesiac,Komorka,TypPodatku,Numer,Procent) SELECT p.UID,p.UID_tblPracownicy,o.NrEto,w.Rok,w.Miesiac,p.Komorka,p.TypPodatku,w.Numer,100 FROM kdtListy_wykaz w INNER JOIN kdtListy_pozycje p ON w.UID=p.UID_kdtListy_wykaz INNER JOIN #Osoby o ON p.UID_tblPracownicy=o.UID '+@SQLw EXEC(@SQL) if IsNull(@TakSta,0)=1 begin -- jeżeli jest podzial stanowisk INSERT INTO #TymS (UID_tblPracownicy,Rok,Miesiac,Komorka,Procent,DataOd,DataDo,Zatr,Zw,k1,k2) SELECT a.UID_tblPracownicy,a.Rok,a.Miesiac,k.Komorka,k.Procent,s.DataOd,s.DataDo,IsNull(s.Zatrudnienie,0), CASE WHEN (s.DataDo Is Not Null) AND (s.SposobZwolnienia Is Not Null) THEN 1 ELSE 0 END,0,0 FROM (SELECT UID_tblPracownicy, Rok,Miesiac FROM #Tym GROUP BY UID_tblPracownicy, Rok,Miesiac) a INNER JOIN kdtStanowiska s ON (a.UID_tblPracownicy=s.UID_tblPracownicy) AND ((YEAR(s.DataOd)a.Rok) OR ((YEAR(s.DataDo)=a.Rok) AND (Month(s.DataDo)>=a.Miesiac)))) INNER JOIN kdtStanowiskaMPK k ON s.UID=k.UID_kdtStanowiska -- dzień końca miesiąca UPDATE #TymS SET k3=CASE WHEN (Miesiac=2) THEN Day(DATEADD(d,-1,CONVERT(datetime,convert(varchar(4),Rok)+'0301'))) WHEN (Miesiac=4) OR (Miesiac=6) OR (Miesiac=9) OR (Miesiac=11) THEN 30 ELSE 31 END -- początek stanowiska w miesiącu UPDATE #TymS SET k1=1 WHERE (YEAR(DataOd)=Rok) AND (Month(DataOd)=Miesiac)And (DAY(DataOd)>1) -- zatrudnienie w miesiącu nie pomniejsza procentów podziału -- jeżeli nie ma poprzedniego zatrudnienia w tym miesiącu UPDATE #TymS SET k1=0 FROM #TymS t INNER JOIN (SELECT s.UID_tblPracownicy,s.DataOd FROM #TymS s WHERE (s.k1=1) AND (s.Zatr=1) AND ((SELECT COUNT(*) FROM kdtStanowiska WHERE (UID_tblPracownicy=s.UID_tblPracownicy) AND (DataDo=DATEADD(d,-1,s.DataOd)))=0) )a ON (t.UID_tblPracownicy=a.UID_tblPracownicy) AND (t.DataOd=a.DataOd) WHERE t.k1=1 -- koniec stanowiska UPDATE #TymS SET k2=1 WHERE (DataDo Is Not Null) AND (YEAR(DataDo)=Rok) AND (Month(DataDo)=Miesiac)And (DAY(DataDo)100 if IsNull(@TakSta,0)=1 begin -- jeżeli jest podzial stanowisk DECLARE CR0 CURSOR LOCAL FOR SELECT UID_kdtListy_pozycje,UID_tblPracownicy,Typ,Skl, kwS=IsNull(Kwota,0)-IsNull(SUM(Kw),0) FROM #Zar GROUP BY UID_kdtListy_pozycje,UID_tblPracownicy,Typ,Skl, Kwota HAVING IsNull(Kwota,0)<>Isnull(SUM(Kw),0) OPEN CR0 FETCH CR0 INTO @UID_kdtListy_pozycje,@UID_tblPracownicy,@TypZ,@Skl, @kwota WHILE @@FETCH_STATUS >= 0 BEGIN SELECT TOP 1 @UID=UID FROM #Zar WHERE (UID_kdtListy_pozycje=@UID_kdtListy_pozycje) AND (UID_tblPracownicy=@UID_tblPracownicy) AND (Typ=@TypZ) AND (Skl=@Skl) ORDER BY IsNull(Kw,0) DESC,Komorka UPDATE #Zar SET Kw=ISNULL(Kw,0)+@kwota WHERE UID=@UID FETCH CR0 INTO @UID_kdtListy_pozycje,@UID_tblPracownicy,@TypZ,@Skl, @kwota END CLOSE CR0 DEALLOCATE CR0 end DECLARE CR1 CURSOR LOCAL FOR SELECT UID,Komorka,Algorytm FROM #Rozdzielnik ORDER BY Lp OPEN CR1 FETCH CR1 INTO @UID,@Komorka, @Algorytm WHILE @@FETCH_STATUS >= 0 BEGIN SET @Algorytm=RTrim(@Algorytm) -- par(parametr) - kwota parametru SET @xx='%par(%' SET @xxA='par(' SET @i=PATINDEX(@xx,@Algorytm) while @i>0 begin SET @kwota=0 SET @xx1=Substring(@Algorytm,@i+4,20) SET @i=PATINDEX('%)%',@xx1) SET @xx1=substring(@xx1,1,@i-1) SELECT @kwota=Kwota FROM kdsParametryPlac WHERE (Jk=@JK) AND (Parametr=@xx1) SET @xx1=Rtrim(@xxA)+Rtrim(@xx1)+')' SET @Algorytm=Replace(@Algorytm,@xx1,convert(nvarchar(20),IsNull(@kwota,0))) SET @i=PATINDEX(@xx,@Algorytm) end -- ilOs(typ podatku) - ilość z listami z typem podatku -- typ podatku: spacja - podstawowy, pusty wszystkie SET @xx='%ilOs(%' SET @xxA='ilOs(' SET @i=PATINDEX(@xx,@Algorytm) while @i>0 begin SET @kwota=0 SET @xx1=Substring(@Algorytm,@i+5,20) SET @i=PATINDEX('%)%',@xx1) if @i=1 SET @xx1='' else begin SET @xx1=Ltrim(substring(@xx1,1,@i-1)) if len(@xx1)=0 SET @xx1='UST' end DELETE FROM #Kwota SET @SQL='INSERT INTO #Kwota (kw) SELECT count(*) FROM (SELECT UID_tblPracownicy FROM #Tym' if len(@xx1)>0 begin if @xx1='UST' SET @SQL=@SQL+' WHERE ((IsNull(TypPodatku,'''')='''') OR (IsNull(TypPodatku,'''')='' ''))' else SET @SQL=@SQL+' WHERE (IsNull(TypPodatku,'''')='''+Rtrim(@xx1)+''')' end SET @SQL=@SQL+' GROUP BY UID_tblPracownicy) a' EXEC(@SQL) SELECT @kwota=kw FROM #Kwota SET @xx1=Rtrim(@xxA)+Rtrim(@xx1)+')' SET @Algorytm=Replace(@Algorytm,@xx1,convert(nvarchar(20),IsNull(@kwota,0))) SET @i=PATINDEX(@xx,@Algorytm) end -- sklK(symbol składnika,typ podatku,nr listy) -suma podanego skladnika -- typ podatku opcjonalanie - spacja to podatek ustawowy, puste to wszysto -- nr listy - opcjonalnie SET @xx='%sklK(%' SET @xxA='sklK(' SET @i=PATINDEX(@xx,@Algorytm) while @i>0 begin SET @kwota=0 SET @xx1=Substring(@Algorytm,@i+5,20) SET @i=PATINDEX('%)%',@xx1) SET @xx1=substring(@xx1,1,@i-1) SET @i=PATINDEX('%,%',@xx1) if @i>0 begin SET @x1=substring(@xx1,1,@i-1)-- składnik płac SET @x2=substring(@xx1,@i+1,len(@xx1)-@i) SET @i=PATINDEX('%,%',@x2) if @i>0 begin SET @x3=substring(@x2,@i+1,len(@x2)-@i) -- lista --SET @x2=substring(@x2,1,@i-1)-- podatek if @i=1 SET @x2='' else begin SET @x2=Substring(Ltrim(@x2),1,1) if @x2=',' SET @x2='UST' end end else begin SET @x3='' end end else begin SET @x1=@xx1 SET @x2='' SET @x3='' end DELETE FROM #Kwota SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=2) AND (Skl='''+Rtrim(@x1)+''')' if len(IsNull(@Komorka,''))>0 SET @SQL=@SQL+' AND (Komorka LIKE '''+@Komorka+''')' if len(@x2)>0 begin if @x2='UST' SET @SQL=@SQL+' AND ((IsNull(TypPodatku,'''')='''') OR (IsNull(TypPodatku,'''')='' ''))' else SET @SQL=@SQL+' AND (IsNull(TypPodatku,'''')='''+Rtrim(@x2)+''')' end if len(@x3)>0 SET @SQL=@SQL+' AND (Numer ='+@x3+')' EXEC(@SQL) SELECT @kwota=kw FROM #Kwota SET @xx1=Rtrim(@xxA)+Rtrim(@xx1)+')' SET @Algorytm=Replace(@Algorytm,@xx1,convert(nvarchar(20),IsNull(@kwota,0))) SET @i=PATINDEX(@xx,@Algorytm) end -- sklS(typ składników,typ podatku,nr listy) -suma podanego skladnika -- typ podatku opcjonalanie - spacja to podatek ustawowy, puste to wszysto -- nr listy - opcjonalnie SET @xx='%sklS(%' SET @xxA='sklS(' SET @i=PATINDEX(@xx,@Algorytm) while @i>0 begin SET @kwota=0 SET @xx1=Substring(@Algorytm,@i+5,20) SET @i=PATINDEX('%)%',@xx1) SET @xx1=substring(@xx1,1,@i-1) SET @i=PATINDEX('%,%',@xx1) if @i>0 begin SET @x1=substring(@xx1,1,@i-1)-- typ składnik płac SET @x2=substring(@xx1,@i+1,len(@xx1)-@i) SET @i=PATINDEX('%,%',@x2) if @i>0 begin SET @x3=substring(@x2,@i+1,len(@x2)-@i) -- lista --SET @x2=substring(@x2,1,@i-1)-- podatek if @i=1 SET @x2='' else begin SET @x2=Substring(Ltrim(@x2),1,1) if @x2=',' SET @x2='UST' end end else begin SET @x3='' end end else begin SET @x1=@xx1 SET @x2='' SET @x3='' end DELETE FROM #Kwota SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=2) AND (Substring(Skl,1,1)='''+Rtrim(@x1)+''')' if len(IsNull(@Komorka,''))>0 SET @SQL=@SQL+' AND (Komorka LIKE '''+@Komorka+''')' if len(@x2)>0 begin if @x2='UST' SET @SQL=@SQL+' AND ((IsNull(TypPodatku,'''')='''') OR (IsNull(TypPodatku,'''')='' ''))' else SET @SQL=@SQL+' AND (IsNull(TypPodatku,'''')='''+Rtrim(@x2)+''')' end if len(@x3)>0 SET @SQL=@SQL+' AND (Numer ='+@x3+')' EXEC(@SQL) SELECT @kwota=kw FROM #Kwota SET @xx1=Rtrim(@xxA)+Rtrim(@xx1)+')' SET @Algorytm=Replace(@Algorytm,@xx1,convert(nvarchar(20),IsNull(@kwota,0))) SET @i=PATINDEX(@xx,@Algorytm) end -- sklE(składnik płac,numer pracownika) -suma podanego skladnika dla danej osoby SET @xx='%sklE(%' SET @xxA='sklE(' SET @i=PATINDEX(@xx,@Algorytm) while @i>0 begin SET @kwota=0 SET @xx1=Substring(@Algorytm,@i+5,20) SET @i=PATINDEX('%)%',@xx1) SET @xx1=substring(@xx1,1,@i-1) SET @i=PATINDEX('%,%',@xx1) if @i>0 begin SET @x1=substring(@xx1,1,@i-1)-- składnik płac SET @x2=substring(@xx1,@i+1,len(@xx1)-@i) -- osoba end else begin SET @x1=@xx1 SET @x2='0' end DELETE FROM #Kwota SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=2) AND (Skl='''+Rtrim(@x1)+''') AND (NrEto='+@x2+')' if len(IsNull(@Komorka,''))>0 SET @SQL=@SQL+' AND (Komorka LIKE '''+@Komorka+''')' EXEC(@SQL) SELECT @kwota=kw FROM #Kwota SET @xx1=Rtrim(@xxA)+Rtrim(@xx1)+')' SET @Algorytm=Replace(@Algorytm,@xx1,convert(nvarchar(20),IsNull(@kwota,0))) SET @i=PATINDEX(@xx,@Algorytm) end -- sklP(zmienna,typ podatku,nr listy,numer pracownika) -suma podanej zmiennej -- typ podatku opcjonalanie - spacja to podatek ustawowy, puste to wszysto -- nr listy - opcjonalnie -- numer pracownika - opcjonalnie SET @xx='%sklP(%' SET @xxA='sklP(' SET @i=PATINDEX(@xx,@Algorytm) while @i>0 begin SET @kwota=0 SET @xx1=Substring(@Algorytm,@i+5,20) SET @i=PATINDEX('%)%',@xx1) SET @xx1=substring(@xx1,1,@i-1) SET @i=PATINDEX('%,%',@xx1) if @i>0 begin SET @x1=substring(@xx1,1,@i-1)-- zmienna SET @x2=substring(@xx1,@i+1,len(@xx1)-@i) SET @i=PATINDEX('%,%',@x2) if @i>0 begin SET @x3=substring(@x2,@i+1,len(@x2)-@i) if @i=1 begin SET @x2='' end else begin SET @x2=Substring(Ltrim(@x2),1,1) if @x2=',' SET @x2='UST' end SET @i=PATINDEX('%,%',@x3) if @i>0 begin SET @x4=substring(@x3,@i+1,len(@x3)-@i) -- nr eto SET @x3=substring(@x3,1,@i-1) -- lista end else begin SET @x4='' end end else begin SET @x3='' SET @x4='' end end else begin SET @x1=@xx1 SET @x2='' SET @x3='' SET @x4='' end SET @SQLw='' if len(IsNull(@Komorka,''))>0 begin SET @SQLw=' AND (Komorka LIKE '''+@Komorka+''')' end if len(@x2)>0 begin if @x2='UST' SET @SQLw=@SQLw+' AND ((IsNull(TypPodatku,'''')='''') OR (IsNull(TypPodatku,'''')='' ''))' else SET @SQLw=@SQLw+' AND (IsNull(TypPodatku,'''')='''+Rtrim(@x2)+''')' end if len(@x3)>0 SET @SQLw=@SQLw+' AND (Numer ='+@x3+')' if len(@x4)>0 SET @SQLw=@SQLw+' AND (NrEto='+@x4+')' --if len(@SQLw)>0 SET @SQLw=' WHERE '+substring(@SQLw,6,len(@SQLw)-5) DELETE FROM #Kwota if @x1='Brutto' begin SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=2) AND (Substring(Skl,1,1)<>''P'') AND (Substring(Skl,1,1)<>''B'')'+@SQLw EXEC(@SQL) SELECT @kwota=kw FROM #Kwota end else if @x1='Place' begin SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=2) AND (Substring(Skl,1,1)=''W'')'+@SQLw EXEC(@SQL) SELECT @kwota=kw FROM #Kwota end else if @x1='Swiadczenia' begin SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=2) AND (Substring(Skl,1,1)=''S'')'+@SQLw EXEC(@SQL) SELECT @kwota=kw FROM #Kwota end else if @x1='Pozostale' begin SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=2) AND (Substring(Skl,1,1)=''N'')'+@SQLw EXEC(@SQL) SELECT @kwota=kw FROM #Kwota end else if @x1='Potracenia' begin SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=2) AND (Substring(Skl,1,1)=''P'')'+@SQLw EXEC(@SQL) SELECT @kwota=kw FROM #Kwota end else if @x1='Przelewy' begin SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=2) AND (Substring(Skl,1,1)=''B'')'+@SQLw EXEC(@SQL) SELECT @kwota=kw FROM #Kwota end else if @x1='Ubezpieczenia' begin SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=1) AND ((Skl=''SklEm'') OR (Skl=''SklRe'') OR (Skl=''SklCh'') OR (Skl=''SklZdr'')) '+@SQLw EXEC(@SQL) SELECT @kwota=kw FROM #Kwota end else if @x1='Ubezp1' begin SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=1) AND ((Skl=''SklEm'') OR (Skl=''SklRe'') OR (Skl=''SklCh'')) '+@SQLw EXEC(@SQL) SELECT @kwota=kw FROM #Kwota end else if @x1='UbezpPracodawca' begin SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=1) AND ((Skl=''SklEm1'') OR (Skl=''SklRe1'') OR (Skl=''SklWy'') OR (Skl=''SklFP'') OR (Skl=''SklFG'') OR (Skl=''SklFEP'')) '+@SQLw EXEC(@SQL) SELECT @kwota=kw FROM #Kwota end else if @x1='UbezpPrac1' begin SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=1) AND ((Skl=''SklEm1'') OR (Skl=''SklRe1'') OR (Skl=''SklWy'') ) '+@SQLw EXEC(@SQL) SELECT @kwota=kw FROM #Kwota end else if @x1='UbezpPrac2' begin SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=1) AND ((Skl=''SklFP'') OR (Skl=''SklFG'') OR (Skl=''SklFEP'')) '+@SQLw EXEC(@SQL) SELECT @kwota=kw FROM #Kwota end else if @x1='Netto' begin SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=-SUM(Kw) FROM #Zar WHERE (Typ=1) AND ((Skl=''SklEm'') OR (Skl=''SklRe'') OR (Skl=''SklCh'') OR (Skl=''SklZdr'') OR (Skl=''ZalPod'')) '+@SQLw EXEC(@SQL) SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=2) AND (Substring(Skl,1,1)<>''P'') AND (Substring(Skl,1,1)<>''B'')'+@SQLw EXEC(@SQL) SELECT @kwota=SUM(kw) FROM #Kwota end else if @x1='DoWyplaty' begin SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=-SUM(Kw) FROM #Zar WHERE (Typ=1) AND ((Skl=''SklEm'') OR (Skl=''SklRe'') OR (Skl=''SklCh'') OR (Skl=''SklZdr'') OR (Skl=''ZalPod'')) '+@SQLw EXEC(@SQL) SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=2) AND (Substring(Skl,1,1)<>''P'') AND (Substring(Skl,1,1)<>''B'')'+@SQLw EXEC(@SQL) SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=-SUM(Kw) FROM #Zar WHERE (Typ=2) AND (Substring(Skl,1,1)=''P'') '+@SQLw EXEC(@SQL) SELECT @kwota=SUM(kw) FROM #Kwota end else if @x1='Kasa' begin SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=-SUM(Kw) FROM #Zar WHERE (Typ=1) AND ((Skl=''SklEm'') OR (Skl=''SklRe'') OR (Skl=''SklCh'') OR (Skl=''SklZdr'') OR (Skl=''ZalPod'')) '+@SQLw EXEC(@SQL) SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=2) AND (Substring(Skl,1,1)<>''P'') AND (Substring(Skl,1,1)<>''B'')'+@SQLw EXEC(@SQL) SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=-SUM(Kw) FROM #Zar WHERE (Typ=2) AND ((Substring(Skl,1,1)=''P'') OR (Substring(Skl,1,1)=''B''))'+@SQLw EXEC(@SQL) SELECT @kwota=SUM(kw) FROM #Kwota end else begin SET @SQL='INSERT INTO #Kwota (kw) SELECT Kwota=SUM(Kw) FROM #Zar WHERE (Typ=1) AND (Skl='''+@x1+''') '+@SQLw EXEC(@SQL) SELECT @kwota=kw FROM #Kwota end SET @xx1=Rtrim(@xxA)+Rtrim(@xx1)+')' SET @Algorytm=Replace(@Algorytm,@xx1,convert(nvarchar(20),IsNull(@kwota,0))) SET @i=PATINDEX(@xx,@Algorytm) end SET @Algorytm=Replace(@Algorytm,'--','+') SET @Algorytm=Replace(@Algorytm,'++','+') SET @Algorytm=Replace(@Algorytm,'+-','-') SET @Algorytm=Replace(@Algorytm,'-+','-') SET @SQL='UPDATE #Rozdzielnik SET Kwota='+@Algorytm+' WHERE UID='''+convert(varchar(40),@UID)+'''' EXEC(@SQL) FETCH CR1 INTO @UID,@Komorka, @Algorytm END CLOSE CR1 DEALLOCATE CR1 if @TylkoKwoty=1 DELETE FROM #Rozdzielnik WHERE IsNull(Kwota,0)=0 -- podstawianie zmiennych SET @xx1='' if @RokOd Is Not Null SET @xx1=convert(varchar(4),@RokOd) UPDATE #Rozdzielnik SET Opis=Rtrim(Substring(Replace(Opis,'%Rko',@xx1),1,100)) SET @xx1='' if @RokDo Is Not Null SET @xx1=convert(varchar(4),@RokDo) UPDATE #Rozdzielnik SET Opis=Rtrim(Substring(Replace(Opis,'%Rkd',@xx1),1,100)) SET @xx1='' if @MiesOd Is Not Null SET @xx1=Rtrim(convert(varchar(2),@MiesOd)) UPDATE #Rozdzielnik SET Opis=Rtrim(Substring(Replace(Opis,'%Mko',@xx1),1,100)) SET @xx1='' if @MiesDo Is Not Null SET @xx1=Rtrim(convert(varchar(2),@MiesDo)) UPDATE #Rozdzielnik SET Opis=Rtrim(Substring(Replace(Opis,'%Mkd',@xx1),1,100)) SET @xx1='' if @DataWyplOd Is Null begin UPDATE #Rozdzielnik SET Opis=Rtrim(Substring(Replace(Opis,'%Rpo',@xx1),1,100)) UPDATE #Rozdzielnik SET Opis=Rtrim(Substring(Replace(Opis,'%Mpo',@xx1),1,100)) UPDATE #Rozdzielnik SET Opis=Rtrim(Substring(Replace(Opis,'%Dwo',@xx1),1,100)) end else begin SET @xx1=convert(varchar(4),Year(@DataWyplOd)) UPDATE #Rozdzielnik SET Opis=Rtrim(Substring(Replace(Opis,'%Rpo',@xx1),1,100)) SET @xx1=Rtrim(convert(varchar(2),Month(@DataWyplOd))) UPDATE #Rozdzielnik SET Opis=Rtrim(Substring(Replace(Opis,'%Mpo',@xx1),1,100)) SET @xx1=convert(varchar(10),@DataWyplOd,105) UPDATE #Rozdzielnik SET Opis=Rtrim(Substring(Replace(Opis,'%Dwo',@xx1),1,100)) end -- kwoty z dwoma miejscami po przecinku UPDATE #Rozdzielnik SET Kwota=ROUND(IsNull(Kwota,0)*100,0)/100 if IsNull(@Skad,0)=0 begin -- płace if IsNull(@TakKomorka,0)=1 begin if @Sumowac=1 SELECT Tak=@Tak,Lp=MIN(Lp),Komorka,Konto,Strona,Opis,Kwota=SUM(Kwota), Wn=SUM(CASE WHEN Strona=1 THEN Kwota ELSE 0 END), Ma=SUM(CASE WHEN Strona=0 THEN Kwota ELSE 0 END) FROM #Rozdzielnik GROUP BY Konto,Strona,Opis,Komorka ORDER BY MIN(Lp) else SELECT Tak=@Tak,Lp,Komorka,Konto,Strona,Opis,Kwota, Wn=CASE WHEN Strona=1 THEN Kwota ELSE 0 END, Ma=CASE WHEN Strona=0 THEN Kwota ELSE 0 END FROM #Rozdzielnik ORDER BY Lp end else begin if @Sumowac=1 SELECT Tak=@Tak,Lp=MIN(Lp),Konto,Strona,Opis,Kwota=SUM(Kwota), Wn=SUM(CASE WHEN Strona=1 THEN Kwota ELSE 0 END), Ma=SUM(CASE WHEN Strona=0 THEN Kwota ELSE 0 END) FROM #Rozdzielnik GROUP BY Konto,Strona,Opis ORDER BY MIN(Lp) else SELECT Tak=@Tak,Lp,Konto,Strona,Opis,Kwota, Wn=CASE WHEN Strona=1 THEN Kwota ELSE 0 END, Ma=CASE WHEN Strona=0 THEN Kwota ELSE 0 END FROM #Rozdzielnik ORDER BY Lp end end else begin -- FK SELECT il=count(*) FROM #Rozdzielnik end GO