<?xml version="1.0" standalone="yes"?>
<TabProckiDS>
  <TabProcki>
    <Id>8</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>1</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>Pr_DajProcedury</NzProc>
    <TextProc>
CREATE PROCEDURE Pr_DajProcedury
(@0 BIT)
AS
   DECLARE @CzyRelease BIT
   SET @CzyRelease=@0 

   --aktualizacja wersji
   EXECUTE Procki.dbo.Pr_TworzWersjeProc @CzyRelease

   --pobranie numeru wersji
   DECLARE @wersja1 INT
   DECLARE @wersja2 INT
   SELECT TOP 1 @wersja1=Wersja1,@wersja2=wersja2 
   FROM Procki.dbo.Wersja
   ORDER BY Id DESC

   --zwrócenie procedur z całą historią
   IF @CzyRelease=1
      SELECT * FROM Procki.dbo.ProckiText 
      WHERE Wersja1&lt;@wersja1
   ELSE
      SELECT * FROM Procki.dbo.ProckiText 
RETURN
   
</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>9</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>2</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>SP_ISZerujSyJmUzupWDokumIDeklar</NzProc>
    <TextProc>CREATE procedure SP_ISZerujSyJmUzupWDokumIDeklar
(
@0 bit,
@1 bit,
@2 int,
@3 int,
@4 int
)
AS

DECLARE @CzyDokumenty bit
DECLARE @CzyDeklaracje bit
DECLARE @OkresO int
DECLARE @Rok int
DECLARE @Miesiac int

SELECT @CzyDokumenty=@0,@CzyDeklaracje=@1, @OkresO=@2,@Rok=@3,@Miesiac=@4

DECLARE @IleRek int
DECLARE @Blad int
SELECT @IleRek=0,@Blad=0

IF (@CzyDokumenty=1)
BEGIN
	UPDATE  d SET d.jeMiUzup=null, d.iloUzup=0
	FROM iswntPozDok d 
	LEFT OUTER JOIN ISPCN pcn ON d.rok=pcn.rok and d.syPCN=pcn.syPCN
	WHERE
	d.okreso=@OkresO AND d.Rok=@Rok AND d.Mies=@Miesiac AND
	(pcn.syPCN IS NULL OR pcn.syJmUzu='' OR pcn.syJmUzu='-' OR pcn.syJmUzu='—')
	SELECT @IleRek=@IleRek+@@ROWCOUNT,@Blad=@@ERROR
END


IF (@CzyDeklaracje=1)
BEGIN
	UPDATE  d SET d.iloUzup=0
	FROM isPozDekl d 
	LEFT OUTER JOIN ISPCN pcn ON d.rok=pcn.rok and d.syPCN=pcn.syPCN
	WHERE
	d.Rok=@Rok AND d.Mies=@Miesiac AND
	(pcn.syPCN IS NULL OR pcn.syJmUzu='' OR pcn.syJmUzu='-' OR pcn.syJmUzu='—')
	SELECT @IleRek=@IleRek+@@ROWCOUNT,@Blad=@@ERROR
END



IF @Blad=0
BEGIN
	SELECT @IleRek
	RETURN @IleRek
END
ELSE
BEGIN
	SELECT -1
	RETURN -1
END

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>10</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>3</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlGminCzyJestLpPow</NzProc>
    <TextProc>

-- Procedura wyszukuje pierwszy rekord o podanym symbolu, zwraca 1 lub zero
CREATE PROCEDURE dbo.XSlGminCzyJestLpPow
	(
		@0 SMALLINT
	)
AS
DECLARE @jestsymbol INT
SELECT COUNT(*) AS jestsymbol
FROM (SELECT TOP 1 * FROM XSlGmin WHERE (LpPow = @0)) DERIVEDTBL
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>11</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>4</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlGminCzyJestSymbol</NzProc>
    <TextProc>

-- Procedura wyszukuje pierwszy rekord o podanym symbolu, zwraca 1 lub zero
CREATE PROCEDURE dbo.XSlGminCzyJestSymbol
	(
		@0 SMALLINT
	)
AS
DECLARE @jestsymbol INT
SELECT COUNT(*) AS jestsymbol
FROM (SELECT TOP 1 * FROM XSlGmin WHERE (LpGmina = @0)) DERIVEDTBL
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>12</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>5</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlGminDajFiltrowane</NzProc>
    <TextProc>
CREATE PROCEDURE dbo.XSlGminDajFiltrowane
	(
		@0 VARCHAR(1000)
	)
AS

DECLARE @filtrlppow int 
DECLARE @idoc int 

EXEC sp_xml_preparedocument @idoc OUTPUT, @0

SELECT @filtrlppow = LpPow
FROM OPENXML (@idoc, '/ FiltrXSlGmin / Powiat ', 1) 
WITH (LpPow smallint) 

EXEC sp_xml_removedocument @idoc

SELECT  XSlGmin.*, XSlPow.NPowiat
FROM XSlGmin
INNER JOIN XSlPow ON XSlPow.LpPow = XSlGmin.LpPow
WHERE (@filtrlppow IS NULL OR XSlGmin.LpPow=@filtrlppow)
ORDER BY XSlGmin.NGmina, XSlPow.NPowiat
RETURN

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>13</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>6</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlGminDajWszystko</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlGminDajWszystko
AS
SELECT  XSlGmin.*, XSlPow.NPowiat
FROM XSlGmin
INNER JOIN XSlPow ON XSlPow.LpPow = XSlGmin.LpPow
ORDER BY XSlGmin.NGmina, XSlPow.NPowiat
RETURN

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>14</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>7</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlGminDopisz</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlGminDopisz
	(
		@0 VARCHAR(50),
		@1 SMALLINT,
		@2 VARCHAR(3),
		@3 VARCHAR(10),
		@4 DATETIME
	)
AS
DECLARE @NowyNrGminy INT
SET @NowyNrGminy = (SELECT MAX(LpGmina)+1 FROM XSlGmin)
INSERT INTO XSlGmin (LpGmina,NGmina,LpPow,Status,Oper,DataCzas) VALUES(@NowyNrGminy,@0,@1,@2,@3,@4)
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>15</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>8</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlGminIleRekordow</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlGminIleRekordow
AS
DECLARE @IleRek INT
SELECT COUNT(*) AS IleRek FROM XSlGmin
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>16</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>9</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlGminModyfikuj</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlGminModyfikuj
	(
		@0 SMALLINT,
		@1 VARCHAR(50),
		@2 SMALLINT,
		@3 VARCHAR(3),
		@4 VARCHAR(10),
		@5 DATETIME
	)

AS
UPDATE XSlGmin
SET LpGmina=@0, NGmina=@1, LpPow=@2, Status=@3, Oper=@4, DataCzas=@5
WHERE LpGmina=@0
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>17</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>10</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlGminUsun</NzProc>
    <TextProc>
CREATE PROCEDURE dbo.XSlGminUsun
	(
		@0 SMALLINT
	)

AS
DELETE FROM XSlGmin
WHERE LpGmina=@0
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>18</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>11</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlGminWybierzRekordNazwa</NzProc>
    <TextProc>

-- Procedura zwraca pierwszy znaleziony rekord o podanej nazwie
CREATE PROCEDURE dbo.XSlGminWybierzRekordNazwa
	(
		@0 VARCHAR(50)
	)
AS
SELECT TOP 1 * FROM XSlGmin WHERE (NGmina = @0)
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>19</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>12</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlGminWybierzRekordSymbol</NzProc>
    <TextProc>

-- Procedura zwraca pierwszy znaleziony rekord o podanej nazwie
CREATE PROCEDURE dbo.XSlGminWybierzRekordSymbol
	(
		@0 SMALLINT
	)
AS
SELECT TOP 1 * FROM XSlGmin WHERE (LpGmina = @0)
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>20</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>13</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlMiastCzyJestLpgmina</NzProc>
    <TextProc>

-- Procedura wyszukuje pierwszy rekord o podanym symbolu, zwraca 1 lub zero
CREATE PROCEDURE dbo.XSlMiastCzyJestLpgmina
	(
		@0 SMALLINT
	)
AS
DECLARE @jestsymbol INT
SELECT COUNT(*) AS jestsymbol
FROM (SELECT TOP 1 * FROM XSlMiast WHERE (LpGmina = @0)) DERIVEDTBL
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>21</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>14</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlMiastCzyJestSymbol</NzProc>
    <TextProc>

-- Procedura wyszukuje pierwszy rekord o podanym symbolu, zwraca 1 lub zero
CREATE PROCEDURE dbo.XSlMiastCzyJestSymbol
	(
		@0 SMALLINT
	)
AS
DECLARE @jestsymbol INT
SELECT COUNT(*) AS jestsymbol
FROM (SELECT TOP 1 * FROM XSlMiast WHERE (NrMiasta = @0)) DERIVEDTBL
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>22</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>15</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlMiastDajFiltrowane</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlMiastDajFiltrowane
	(
		@0 VARCHAR(1000)
	)
AS

DECLARE @filtrlpgmina int 
DECLARE @idoc int 

EXEC sp_xml_preparedocument @idoc OUTPUT, @0

SELECT @filtrlpgmina = LpGmina
FROM OPENXML (@idoc, '/ FiltrXSlMiast / Gmina ', 1) 
WITH (LpGmina smallint) 

EXEC sp_xml_removedocument @idoc

SELECT  XSlMiast.*, XSlGmin.NGmina, XSlPow.NPowiat, XSlWoj.NWojew, XPanstwa.NaPL, PATINDEX('%PL%', XSlMiast.SyKraj) AS CzyPL
FROM  XSlMiast 
LEFT OUTER JOIN XSlGmin ON XSlGmin.LpGmina = XSlMiast.LpGmina 
LEFT OUTER JOIN XSlPow ON XSlGmin.LpPow = XSlPow.LpPow 
LEFT OUTER JOIN XSlWoj ON XSlPow.SyWoj = XSlWoj.SyWoj 
INNER JOIN XPanstwa ON XPanstwa.SyKraj = XSlMiast.SyKraj
WHERE (@filtrlpgmina IS NULL OR XSlMiast.LpGmina=@filtrlpgmina)
ORDER BY CzyPL DESC, XPanstwa.NaPL, XSlMiast.NMiasta
RETURN

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>23</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>16</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlMiastDajWszystko</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlMiastDajWszystko
AS

SELECT  XSlMiast.*, XSlGmin.NGmina, XSlPow.NPowiat, XSlWoj.NWojew, XPanstwa.NaPL, PATINDEX('%PL%', XSlMiast.SyKraj) AS CzyPL
FROM  XSlMiast 
LEFT OUTER JOIN XSlGmin ON XSlGmin.LpGmina = XSlMiast.LpGmina 
LEFT OUTER JOIN XSlPow ON XSlGmin.LpPow = XSlPow.LpPow 
LEFT OUTER JOIN XSlWoj ON XSlPow.SyWoj = XSlWoj.SyWoj 
INNER JOIN XPanstwa ON XPanstwa.SyKraj = XSlMiast.SyKraj
ORDER BY CzyPL DESC, XPanstwa.NaPL, XSlMiast.NMiasta
RETURN

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>24</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>17</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlMiastDopisz</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlMiastDopisz
	(
		@0 VARCHAR(50),
		@1 SMALLINT,
		@2 VARCHAR(2),
		@3 VARCHAR(10),
		@4 DATETIME
	)
AS
DECLARE @NowyNrMiasta INT
DECLARE @WartoscLpGmina INT
SET @NowyNrMiasta = (SELECT MAX(NrMiasta)+1 FROM XSlMiast)
IF @1 &gt; 0 SET @WartoscLpGmina = (@1)
ELSE SET @WartoscLpGmina = (NULL)
INSERT INTO XSlMiast (NrMiasta,NMiasta,LpGmina,SyKraj,Oper,DataCzas) VALUES(@NowyNrMiasta,@0,@WartoscLpGmina,@2,@3,@4)
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>25</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>18</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlMiastIleRekordow</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlMiastIleRekordow
AS
DECLARE @IleRek INT
SELECT COUNT(*) AS IleRek FROM XSlMiast
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>26</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>19</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlMiastModyfikuj</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlMiastModyfikuj
	(
		@0 SMALLINT,
		@1 VARCHAR(50),
		@2 SMALLINT,
		@3 VARCHAR(2),
		@4 VARCHAR(10),
		@5 DATETIME
	)

AS
UPDATE XSlMiast
SET NrMiasta=@0, NMiasta=@1, LpGmina=@2, SyKraj=@3, Oper=@4, DataCzas=@5
WHERE NrMiasta=@0
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>27</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>20</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlMiastUsun</NzProc>
    <TextProc>
CREATE PROCEDURE dbo.XSlMiastUsun
	(
		@0 SMALLINT
	)

AS
DELETE FROM XSlMiast
WHERE NrMiasta=@0
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>28</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>21</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlMiastWybierzRekordNazwa</NzProc>
    <TextProc>

-- Procedura zwraca pierwszy znaleziony rekord o podanej nazwie
CREATE PROCEDURE dbo.XSlMiastWybierzRekordNazwa
	(
		@0 VARCHAR(50)
	)
AS
SELECT TOP 1 * FROM XSlMiast WHERE (NMiasta = @0)
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>29</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>22</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlMiastWybierzRekordSymbol</NzProc>
    <TextProc>

-- Procedura zwraca pierwszy znaleziony rekord o podanej nazwie
CREATE PROCEDURE dbo.XSlMiastWybierzRekordSymbol
	(
		@0 SMALLINT
	)
AS
SELECT TOP 1 * FROM XSlMiast WHERE (NrMiasta = @0)
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>30</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>23</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlPowCzyJestSymbol</NzProc>
    <TextProc>

-- Procedura wyszukuje pierwszy rekord o podanym symbolu, zwraca 1 lub zero
CREATE PROCEDURE dbo.XSlPowCzyJestSymbol
	(
		@0 SMALLINT
	)
AS
DECLARE @jestsymbol INT
SELECT COUNT(*) AS jestsymbol
FROM (SELECT TOP 1 * FROM XSlPow WHERE (LpPow = @0)) DERIVEDTBL
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>31</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>24</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlPowCzyJestSywoj</NzProc>
    <TextProc>

-- Procedura wyszukuje pierwszy rekord o podanym symbolu, zwraca 1 lub zero
CREATE PROCEDURE dbo.XSlPowCzyJestSywoj
	(
		@0 VARCHAR(2)
	)
AS
DECLARE @jestsymbol INT
SELECT COUNT(*) AS jestsymbol
FROM (SELECT TOP 1 * FROM XSlPow WHERE (SyWoj = @0)) DERIVEDTBL
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>32</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>25</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlPowDajFiltrowane</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlPowDajFiltrowane
	(
		@0 VARCHAR(1000)
	)
AS

DECLARE @filtrsywoj varchar(2)
DECLARE @idoc int 

EXEC sp_xml_preparedocument @idoc OUTPUT, @0

SELECT @filtrsywoj = SyWoj
FROM OPENXML (@idoc, '/ FiltrXSlPow / Wojewodztwo ', 1) 
WITH ( SyWoj varchar(2)) 

EXEC sp_xml_removedocument @idoc

SELECT  XSlPow.*, XSlWoj.NWojew 
FROM XSlPow 
INNER JOIN XSlWoj ON XSlWoj.SyWoj = XSlPow.SyWoj
WHERE (@filtrsywoj IS NULL OR XSlPow.SyWoj=@filtrsywoj)
ORDER BY XSlPow.NPowiat, XSlWoj.NWojew
RETURN

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>33</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>26</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlPowDajWszystko</NzProc>
    <TextProc>
CREATE PROCEDURE dbo.XSlPowDajWszystko
AS
SELECT  XSlPow.*, XSlWoj.NWojew 
FROM XSlPow
INNER JOIN XSlWoj ON XSlWoj.SyWoj = XSlPow.SyWoj
ORDER BY XSlPow.NPowiat, XSlWoj.NWojew
RETURN

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>34</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>27</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlPowDopisz</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlPowDopisz
	(
		@0 VARCHAR(50),
		@1 VARCHAR(2),
		@2 VARCHAR(3),
		@3 VARCHAR(10),
		@4 DATETIME
	)
AS
DECLARE @NowyNrPowiatu INT
SET @NowyNrPowiatu = (SELECT MAX(LpPow)+1 FROM XSlPow)
INSERT INTO XSlPow (LpPow,NPowiat,SyWoj,Status,Oper,DataCzas) VALUES(@NowyNrPowiatu,@0,@1,@2,@3,@4)
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>35</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>28</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlPowIleRekordow</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlPowIleRekordow
AS
DECLARE @IleRek INT
SELECT COUNT(*) AS IleRek FROM XSlPow
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>36</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>29</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlPowModyfikuj</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlPowModyfikuj
	(
		@0 SMALLINT,
		@1 VARCHAR(50),
		@2 VARCHAR(2),
		@3 VARCHAR(3),
		@4 VARCHAR(10),
		@5 DATETIME
	)

AS
UPDATE XSlPow
SET LpPow=@0, NPowiat=@1, SyWoj=@2, Status=@3, Oper=@4, DataCzas=@5
WHERE LpPow=@0
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>37</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>30</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlPowUsun</NzProc>
    <TextProc>
CREATE PROCEDURE dbo.XSlPowUsun
	(
		@0 SMALLINT
	)

AS
DELETE FROM XSlPow
WHERE LpPow=@0
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>38</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>31</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlPowWybierzRekordNazwa</NzProc>
    <TextProc>

-- Procedura zwraca pierwszy znaleziony rekord o podanej nazwie
CREATE PROCEDURE dbo.XSlPowWybierzRekordNazwa
	(
		@0 VARCHAR(50)
	)
AS
SELECT TOP 1 * FROM XSlPow WHERE (NPowiat = @0)
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>39</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>32</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlPowWybierzRekordSymbol</NzProc>
    <TextProc>

-- Procedura zwraca pierwszy znaleziony rekord o podanej nazwie
CREATE PROCEDURE dbo.XSlPowWybierzRekordSymbol
	(
		@0 SMALLINT
	)
AS
SELECT TOP 1 * FROM XSlPow WHERE (LpPow = @0)
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>40</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>33</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlUSDajWszystko</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlUSDajWszystko
AS
SELECT  U.*, 
		RTRIM(ISNULL(U.NzUS1, ''))+' '+RTRIM(ISNULL(U.NzUS2, '')) AS NzUS, 
		RTRIM(M.NMiasta) AS Miejscowosc, 
		CASE 
			WHEN ISNull(U.NrMieszk, '') = '' 
			THEN RTRIM(ISNull(U.NrDomu, '')) 
			ELSE RTRIM(ISNull(U.NrDomu, '')) + '/' + RTRIM(IsNull(U.NrMieszk, '')) 
		END AS NrDomMieszk
FROM    XSlUS U 
		LEFT OUTER JOIN XSlMiast M ON U.NrMiasta = M.NrMiasta
RETURN 
</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>41</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>34</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlUSDopisz</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlUSDopisz
	(
		@0 VARCHAR(3),
		@1 VARCHAR(54),
		@2 VARCHAR(54),
		@3 VARCHAR(15),
		@4 SMALLINT,
		@5 VARCHAR(50),
		@6 VARCHAR(10),
		@7 VARCHAR(10),
		@8 VARCHAR(54),
		@9 VARCHAR(54),
		@10 VARCHAR(10),
		@11 DATETIME
	)
AS
INSERT INTO XSlUS VALUES(@0,@1,@2,@3,@4,@5,@6,@7,@8,@9,@10,@11)
RETURN 
</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>42</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>35</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlUSIleRekordow</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlUSIleRekordow
	(
		@0 VARCHAR(3) = ''
	)
AS
DECLARE @NrUS VARCHAR
DECLARE @IleRek INT
SELECT @NrUS=@0
SELECT COUNT(*) AS Ile FROM XSLUS WHERE NrUS=@NrUS
RETURN 
</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>43</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>36</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlUSModyfikuj</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlUSModyfikuj
	(
		@0 VARCHAR(3),
		@1 VARCHAR(3),
		@2 VARCHAR(54),
		@3 VARCHAR(54),
		@4 VARCHAR(15),
		@5 SMALLINT,
		@6 VARCHAR(50),
		@7 VARCHAR(10),
		@8 VARCHAR(10),
		@9 VARCHAR(54),
		@10 VARCHAR(54),
		@11 VARCHAR(10),
		@12 DATETIME
	)

AS
UPDATE XSLUS 
SET NrUS=@1, NzUS1=@2, NzUS2=@3, KodPoczt=@4, NrMiasta=@5, Ulica=@6, NrDomu=@7, NrMieszk=@8, KontoPDOF=@9,
    KontoPDOP=@10, Oper=@11, DataCzas=@12
WHERE NrUs=@0
RETURN 
  </TextProc>
  </TabProcki>  
  <TabProcki>
    <Id>45</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>38</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlWojCzyJestSymbol</NzProc>
    <TextProc>

-- Procedura wyszukuje pierwszy rekord o podanym symbolu, zwraca 1 lub zero
CREATE PROCEDURE dbo.XSlWojCzyJestSymbol
	(
		@0 VARCHAR(2)
	)
AS
DECLARE @jestsymbol INT
SELECT COUNT(*) AS jestsymbol
FROM (SELECT TOP 1 * FROM XSlWoj WHERE (SyWoj = @0)) DERIVEDTBL
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>46</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>39</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlWojDajWszystko</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlWojDajWszystko
AS
SELECT  * FROM XSlWoj
ORDER BY NWojew
RETURN 
</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>47</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>40</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlWojDopisz</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlWojDopisz
	(
		@0 VARCHAR(2),
		@1 VARCHAR(50),
		@2 VARCHAR(3),
		@3 VARCHAR(10),
		@4 DATETIME
	)
AS
INSERT INTO XSlWoj (SyWoj,NWojew,Status,Oper,DataCzas) VALUES(@0,@1,@2,@3,@4)
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>48</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>41</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlWojIleRekordow</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlWojIleRekordow
AS
DECLARE @IleRek INT
SELECT COUNT(*) AS IleRek FROM XSlWoj
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>49</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>42</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlWojModyfikuj</NzProc>
    <TextProc>

CREATE PROCEDURE dbo.XSlWojModyfikuj
	(
		@0 VARCHAR(2),
		@1 VARCHAR(50),
		@2 VARCHAR(3),
		@3 VARCHAR(10),
		@4 DATETIME
	)

AS
UPDATE XSlWoj
SET SyWoj=@0, NWojew=@1, Status=@2, Oper=@3, DataCzas=@4
WHERE SyWoj=@0
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>50</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>43</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlWojUsun</NzProc>
    <TextProc>
CREATE PROCEDURE dbo.XSlWojUsun
	(
		@0 VARCHAR(2)
	)

AS
DELETE FROM XSlWoj
WHERE SyWoj=@0
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>51</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>44</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlWojWybierzRekordNazwa</NzProc>
    <TextProc>

-- Procedura zwraca pierwszy znaleziony rekord o podanej nazwie
CREATE PROCEDURE dbo.XSlWojWybierzRekordNazwa
	(
		@0 VARCHAR(50)
	)
AS
SELECT TOP 1 * FROM XSlWoj WHERE (NWojew = @0)
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>52</Id>
    <NrLog>1</NrLog>
    <NrTab>6</NrTab>
    <NrProc>45</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XSlWojWybierzRekordSymbol</NzProc>
    <TextProc>

-- Procedura zwraca pierwszy znaleziony rekord o podanym symbolu
CREATE PROCEDURE dbo.XSlWojWybierzRekordSymbol
	(
		@0 VARCHAR(2)
	)
AS
SELECT TOP 1 * FROM XSlWoj WHERE (SyWoj = @0)
RETURN 

</TextProc>
  </TabProcki>
  <TabProcki>
    <Id>53</Id>
    <NrLog>1</NrLog>
    <NrTab>9</NrTab>
    <NrProc>0</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc />
    <TextProc />
  </TabProcki>
  <TabProcki>
    <Id>54</Id>
    <NrLog>1</NrLog>
    <NrTab>10</NrTab>
    <NrProc>0</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc />
    <TextProc />
  </TabProcki>
  <TabProcki>
    <Id>55</Id>
    <NrLog>1</NrLog>
    <NrTab>11</NrTab>
    <NrProc>0</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc />
    <TextProc />
  </TabProcki>
  <TabProcki>
    <Id>56</Id>
    <NrLog>1</NrLog>
    <NrTab>12</NrTab>
    <NrProc>0</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc />
    <TextProc />
  </TabProcki>
  <TabProcki>
    <Id>57</Id>
    <NrLog>1</NrLog>
    <NrTab>13</NrTab>
    <NrProc>0</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc />
    <TextProc />
  </TabProcki>
  <TabProcki>
    <Id>58</Id>
    <NrLog>1</NrLog>
    <NrTab>14</NrTab>
    <NrProc>0</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc />
    <TextProc />
  </TabProcki>
  <TabProcki>
    <Id>59</Id>
    <NrLog>1</NrLog>
    <NrTab>15</NrTab>
    <NrProc>46</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XKOPDajWolnyNrEwid</NzProc>
    <TextProc>
      CREATE PROCEDURE XKOPDajWolnyNrEwid
      AS

      DECLARE @nowy_nrewid INT
      DECLARE @zakres_od INT
      DECLARE @zakres_do INT


      SELECT @zakres_od =ZakresOd FROM XNagObEw WHERE syslow='XKP'
      SELECT @zakres_do =ZakresDo FROM XNagObEw WHERE syslow='XKP'

      SET @nowy_nrewid = @zakres_od

      WHILE @nowy_nrewid &lt;= @zakres_do
      BEGIN
        IF (SELECT COUNT(*) FROM XKOP WHERE NrEwid=@nowy_nrewid)&lt; 1
		      BREAK
	      ELSE
		      SET @nowy_nrewid = @nowy_nrewid+1
      END

      IF (@nowy_nrewid &lt; @zakres_od OR @nowy_nrewid &gt; @zakres_do)
          SET @nowy_nrewid=0

      SELECT @nowy_nrewid
      RETURN
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>60</Id>
    <NrLog>1</NrLog>
    <NrTab>16</NrTab>
    <NrProc>0</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc />
    <TextProc />
  </TabProcki>
  <TabProcki>
    <Id>61</Id>
    <NrLog>1</NrLog>
    <NrTab>17</NrTab>
    <NrProc>0</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc />
    <TextProc />
  </TabProcki>
  <TabProcki>
    <Id>61</Id>
    <NrLog>1</NrLog>
    <NrTab>18</NrTab>
    <NrProc>46</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc />
    <TextProc />
  </TabProcki>
  <TabProcki>
    <Id>62</Id>
    <NrLog>1</NrLog>
    <NrTab>19</NrTab>
    <NrProc>46</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc />
    <TextProc />
  </TabProcki>
  <TabProcki>
    <Id>63</Id>
    <NrLog>1</NrLog>
    <NrTab>20</NrTab>
    <NrProc>47</NrProc>
    <ProcFun>PROCEDURE</ProcFun><NzProc>XKOPBankPriorytetNumer</NzProc>
    <TextProc>
      CREATE PROCEDURE dbo.XKOPBankPriorytetNumer	(
      @0 VARCHAR(3),	-- SySlow
      @1 SMALLINT,	-- NrEwid
      @2 VARCHAR(60),	-- Rachunek do ustawienia nowej wartosci okreslonej w parametrze @3
      @3 SMALLINT		-- żądana wartość Priorytetu rachunku z parametru @2
      )
      AS

      DECLARE @biezacy_priorytet AS INT
      DECLARE @nowy_priorytet AS INT
      DECLARE @rachunek_modyf AS VARCHAR(60)
      DECLARE @rachunek_poprz AS VARCHAR(60)

      SET @biezacy_priorytet = -1
      SET @rachunek_poprz = ''

      IF ( SELECT COUNT(*) FROM XKOPBank WHERE SySlow=@0 AND NrEwid=@1 AND Rachunek = @2 ) &lt; 1 SET @3 = -1

      WHILE 1=1
      BEGIN
      SET @rachunek_modyf = (SELECT TOP 1 Rachunek FROM XKOPBank WHERE SySlow=@0 AND NrEwid=@1 AND Rachunek &lt;> @2 AND Rachunek &lt;> @rachunek_poprz AND Priorytet >= @biezacy_priorytet ORDER BY Priorytet)

      IF ISNULL(@rachunek_modyf,'|')='|' BREAK
      ELSE SET @rachunek_poprz = @rachunek_modyf

      SET @nowy_priorytet = @biezacy_priorytet + 1

      IF ( @nowy_priorytet = @3 )
      SET @nowy_priorytet = @3 + 1

      UPDATE XKOPBank SET Priorytet = @nowy_priorytet FROM XKOPBank WHERE SySlow=@0 AND NrEwid=@1 AND Rachunek = @rachunek_modyf

      SET @biezacy_priorytet = @nowy_priorytet

      END

      UPDATE XKOPBank SET Priorytet = @3 FROM XKOPBank WHERE SySlow=@0 AND NrEwid=@1 AND Rachunek = @2

      SELECT SySlow, NrEwid, Rachunek, Priorytet FROM XKOPBank WHERE SySlow=@0 AND NrEwid=@1 ORDER BY Priorytet

      RETURN
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>64</Id>
    <NrLog>1</NrLog>
    <NrTab>20</NrTab>
    <NrProc>48</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKObEwDUKonta</NzProc>
    <TextProc>
      create function FKObEwDUKonta
      (
      @OkresO smallint,
      @SySlow varchar(3)
      )
      RETURNS varchar(512)
      AS
      BEGIN

      declare @linia varchar(128);
      declare @opis varchar(512)
      select @opis='';

      DECLARE konta CURSOR FOR
      SELECT du.Konto + '      ' + opis.NzKonta + '
' AS Expr1
      FROM FKKontaDU AS du INNER JOIN XTPKOpis AS opis ON du.OkresO = opis.OkresO
      WHERE (du.OkresO = @OkresO) AND (du.SySlow = @SySlow) AND du.Konto=opis.Konto AND
      (du.Konto IN (SELECT Konto AS Expr1 FROM FKKontaDU WHERE (OkresO = @OkresO) AND (SySlow = @SySlow)));

      OPEN konta;

      FETCH NEXT FROM konta into @linia;
      WHILE @@FETCH_STATUS = 0
      BEGIN
      SET @opis=(@opis+@linia);
      FETCH NEXT FROM konta into @linia;
      END
      CLOSE konta;
      DEALLOCATE konta;
      return @opis;
      END
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>65</Id>
    <NrLog>1</NrLog>
    <NrTab>21</NrTab>
    <NrProc>49</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKObEwDUKonta</NzProc>
    <TextProc>
      create function FKObEwDUKonta
      (
      @OkresO smallint,
      @SySlow varchar(3)
      )
      RETURNS varchar(512)
      AS
      BEGIN

      declare @linia varchar(128);
      declare @opis varchar(512)
      select @opis='';

      DECLARE konta CURSOR FOR
      SELECT du.Konto + '      ' + opis.NzKonta + '
' AS Expr1
      FROM FKKontaDU AS du INNER JOIN XTPKOpis AS opis ON du.OkresO = opis.OkresO 
      WHERE (du.OkresO = @OkresO) AND (du.SySlow = @SySlow) AND du.Konto=opis.Konto AND
      (du.Konto IN (SELECT Konto AS Expr1 FROM FKKontaDU WHERE (OkresO = @OkresO) AND (SySlow = @SySlow)));

      OPEN konta;

      FETCH NEXT FROM konta into @linia;
      WHILE @@FETCH_STATUS = 0
      BEGIN
      SET @opis=(@opis+@linia);
      FETCH NEXT FROM konta into @linia;
      END
      CLOSE konta;
      DEALLOCATE konta;
      return @opis;
      END
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>66</Id>
    <NrLog>1</NrLog>
    <NrTab>21</NrTab>
    <NrProc>50</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKObEwObDUWydrukKonta</NzProc>
    <TextProc>
      create function FKObEwObDUWydrukKonta
      (
      @OkresO smallint,
      @SySlow varchar(3)
      )
      RETURNS varchar(512)
      AS
      BEGIN

      declare @linia varchar(128);
      declare @opis varchar(512)
      select @opis='';

      DECLARE konta CURSOR FOR
      SELECT     du.Konto + '
' AS Expr1
      FROM FKKontaDU as du
      WHERE du.OkresO=@OkresO AND du.SySlow=@SySlow ORDER BY du.Konto;

      OPEN konta;

      FETCH NEXT FROM konta into @linia;
      WHILE @@FETCH_STATUS = 0
      BEGIN
      SET @opis=(@opis+@linia);
      FETCH NEXT FROM konta into @linia;
      END
      CLOSE konta;
      DEALLOCATE konta;
      return @opis;
      END
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>67</Id>
    <NrLog>1</NrLog>
    <NrTab>21</NrTab>
    <NrProc>51</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKObEwObDUWydrukNazwy</NzProc>
    <TextProc>
      create function FKObEwObDUWydrukNazwy
      (
      @OkresO smallint,
      @SySlow varchar(3),
      @SyJezyka varchar(2)
      )
      RETURNS varchar(512)
      AS
      BEGIN

      declare @linia varchar(128);
      declare @liniaJez varchar(128);
      declare @opis varchar(512)
      select @opis='';

      DECLARE konta CURSOR FOR
      SELECT     opis.NzKonta + '
' AS Expr1
      FROM FKKontaDU as du LEFT OUTER JOIN XTPKOpis as opis ON opis.konto=du.Konto AND opis.OkresO=du.OkresO
      WHERE du.OkresO=@OkresO AND du.SySlow=@SySlow order by du.Konto;

      DECLARE kontaJez CURSOR FOR
      SELECT     opisJez.NzKontaJez + '
' AS Expr1
      FROM FKKontaDU as du LEFT OUTER JOIN (select * from XTPKOpisJez where SyJezyka=@SyJezyka) as opisJez ON opisJez.konto=du.Konto AND opisJez.OkresO=du.OkresO
      WHERE du.OkresO=@OkresO AND du.SySlow=@SySlow ORDER BY du.Konto;

      OPEN konta;
      OPEN kontaJez;

      FETCH NEXT FROM konta into @linia;
      FETCH NEXT FROM kontaJez into @liniaJez;
      WHILE @@FETCH_STATUS = 0
      BEGIN
      IF(@liniaJez IS NULL)
      BEGIN
      SET @opis=(@opis+@linia);
      END
      ELSE
      BEGIN
      SET @opis=(@opis+@liniaJez);
      END
      FETCH NEXT FROM konta into @linia;
      FETCH NEXT FROM kontaJez into @liniaJez;
      END
      CLOSE konta;
      DEALLOCATE konta;

      CLOSE kontaJez;
      DEALLOCATE kontaJez;
      return @opis;
      END

    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>68</Id>
    <NrLog>1</NrLog>
    <NrTab>21</NrTab>
    <NrProc>52</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKObEwObKonta</NzProc>
    <TextProc>
      create function FKObEwObKonta
      (
      @OkresO smallint,
      @SySlow varchar(3)
      )
      RETURNS varchar(512)
      AS
      BEGIN

      declare @linia varchar(128);
      declare @opis varchar(512)
      select @opis='';

      DECLARE konta CURSOR FOR
      SELECT opis.Konto + '      ' + opis2.NzKonta + '
' AS Expr1
      FROM XTPKOpis AS opis, XTPKOpis opis2
      WHERE (opis.OkresO = @OkresO) AND (opis.SySlow = @SySlow) AND (opis.KontoParent=opis2.Konto) AND (opis2.OkresO=@OkresO);

      OPEN konta;

      FETCH NEXT FROM konta into @linia;
      WHILE @@FETCH_STATUS = 0
      BEGIN
      SET @opis=(@opis+@linia);
      FETCH NEXT FROM konta into @linia;
      END
      CLOSE konta;
      DEALLOCATE konta;
      return @opis;
      END
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>69</Id>
    <NrLog>1</NrLog>
    <NrTab>21</NrTab>
    <NrProc>53</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKObEwObKontaWydrukKonta</NzProc>
    <TextProc>
      CREATE function FKObEwObKontaWydrukKonta
      (
      @OkresO smallint,
      @SySlow varchar(3)
      )
      RETURNS varchar(512)
      AS
      BEGIN

      declare @linia varchar(128);
      declare @opis varchar(512)
      select @opis='';

      DECLARE konta CURSOR FOR
      SELECT opis.Konto + '
' AS Expr1
      FROM XTPKOpis AS opis, XTPKOpis opis2
      WHERE (opis.OkresO = @OkresO) AND (opis.SySlow = @SySlow) AND (opis.KontoParent=opis2.Konto) AND (opis2.OkresO=@OkresO);

      OPEN konta;

      FETCH NEXT FROM konta into @linia;
      WHILE @@FETCH_STATUS = 0
      BEGIN
      SET @opis=(@opis+@linia);
      FETCH NEXT FROM konta into @linia;
      END
      CLOSE konta;
      DEALLOCATE konta;
      return @opis;
      END
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>70</Id>
    <NrLog>1</NrLog>
    <NrTab>21</NrTab>
    <NrProc>54</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKObEwObKontaWydrukNazwy</NzProc>
    <TextProc>
      create function FKObEwObKontaWydrukNazwy
      (
      @OkresO smallint,
      @SySlow varchar(3),
      @SyJezyka varchar(2)
      )
      RETURNS varchar(512)
      AS
      BEGIN

      declare @linia varchar(128);
      declare @liniaJez varchar(128);
      declare @opis varchar(512)
      select @opis='';

      DECLARE konta CURSOR FOR
      SELECT opis2.NzKonta + '
' AS Expr1
      FROM XTPKOpis AS opis, XTPKOpis opis2
      WHERE (opis.OkresO = @OkresO) AND (opis.SySlow = @SySlow) AND (opis.KontoParent=opis2.Konto) AND (opis2.OkresO=@OkresO);

      DECLARE kontaJez CURSOR FOR
      SELECT     opisJez.NzKontaJez + '
' AS Expr1
      FROM         XTPKOpis AS opis INNER JOIN
      XTPKOpis AS opis2 LEFT OUTER JOIN
      XTPKOpisJez AS opisJez ON opisJez.Konto = opis2.Konto AND opisJez.SyJezyka = @SyJezyka AND opisJez.Konto = opis2.Konto ON
      opis.KontoParent = opis2.Konto
      WHERE     (opis.OkresO = @OkresO) AND (opis.SySlow = @SySlow) AND (opis2.OkresO = @OkresO)

      OPEN konta;
      OPEN kontaJez;

      FETCH NEXT FROM konta into @linia;
      FETCH NEXT FROM kontaJez into @liniaJez;
      WHILE @@FETCH_STATUS = 0
      BEGIN
      IF(@liniaJez IS NULL)
      BEGIN
      SET @opis=(@opis+@linia);
      END
      ELSE
      BEGIN
      SET @opis=(@opis+@liniaJez);
      END
      FETCH NEXT FROM konta into @linia;
      FETCH NEXT FROM kontaJez into @liniaJez;
      END
      CLOSE konta;
      DEALLOCATE konta;

      CLOSE kontaJez;
      DEALLOCATE kontaJez;
      return @opis;
      END

    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>71</Id>
    <NrLog>1</NrLog>
    <NrTab>22</NrTab>
    <NrProc>54</NrProc>
    <ProcFun></ProcFun>
    <NzProc />
    <TextProc />
  </TabProcki>
  <TabProcki>
    <Id>72</Id>
    <NrLog>1</NrLog>
    <NrTab>23</NrTab>
    <NrProc>54</NrProc>
    <ProcFun></ProcFun>
    <NzProc />
    <TextProc />
  </TabProcki>
  <TabProcki>
    <Id>73</Id>
    <NrLog>1</NrLog>
    <NrTab>24</NrTab>
    <NrProc>55</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKObEwObKontaWydrukKonta</NzProc> />
    <TextProc>
      CREATE function FKObEwObKontaWydrukKonta
      (
      @OkresO smallint,
      @SySlow varchar(3)
      )
      RETURNS varchar(512)
      AS
      BEGIN

      declare @linia varchar(128);
      declare @opis varchar(512)
      select @opis='';

      DECLARE konta CURSOR FOR
      SELECT opis2.Konto + '
' AS Expr1
      FROM XTPKOpis AS opis, XTPKOpis AS opis2
      WHERE (opis.OkresO = @OkresO) AND (opis.SySlow = @SySlow) AND (opis.KontoParent=opis2.Konto) AND (opis2.OkresO=@OkresO);

      OPEN konta;

      FETCH NEXT FROM konta into @linia;
      WHILE @@FETCH_STATUS = 0
      BEGIN
      SET @opis=(@opis+@linia);
      FETCH NEXT FROM konta into @linia;
      END
      CLOSE konta;
      DEALLOCATE konta;
      return @opis;
      END
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>74</Id>
    <NrLog>1</NrLog>
    <NrTab>25</NrTab>
    <NrProc>56</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>XTpkOpis_AFTER_DELETE_UsunDefinicjeKontaBezSubkont</NzProc> />
    <TextProc>
      CREATE TRIGGER XTpkOpis_AFTER_DELETE_UsunDefinicjeKontaBezSubkont
      ON XTpkOpis
      AFTER DELETE
      AS
      Declare @ile int
      Declare @okresO smallint
      Declare @kontoParent varchar(30)

      select @kontoparent=kontoparent from deleted
      select @okresO=OkresO from deleted
      select @ile=count(*) from XTpkOpis where KontoParent=@kontoParent 
      and KontoParent&lt;>Konto

      if(@ile=0) 
         Delete from FKTpkDefinicjaKonta where konto=@kontoParent and OkresO=@okresO
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>75</Id>
    <NrLog>1</NrLog>
    <NrTab>25</NrTab>
    <NrProc>57</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>XTpkProjekty_AFTER_DELETE_UsunDefinicjeKontaBezSubkont</NzProc> />
    <TextProc>
      CREATE TRIGGER XTpkProjekty_AFTER_DELETE_UsunDefinicjeKontaBezSubkont
      ON XTpkProjekty
      AFTER DELETE
      AS
      Declare @ile int
      Declare @symbolProjektu smallint
      Declare @kontoParent varchar(30)

      select @kontoparent=kontoparent from deleted
      select @symbolProjektu=SymbolProjektu from deleted
      select @ile=count(*) from XTpkProjekty where KontoParent=@kontoParent  
      and KontoParent&lt;>Konto

      if(@ile=0) Delete from FKTpkDefinicjaKontaProjekty 
      where konto=@kontoParent and SymbolProjektu=@symbolProjektu
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>76</Id>
    <NrLog>1</NrLog>
    <NrTab>25</NrTab>
    <NrProc>58</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>XTpkWzorce_AFTER_DELETE_UsunDefinicjeKontaBezSubkont</NzProc> />
    <TextProc>
      CREATE TRIGGER XTpkWzorce_AFTER_DELETE_UsunDefinicjeKontaBezSubkont
      ON XTpkWzorce
      AFTER DELETE
      AS
      Declare @ile int
      Declare @symbolWzorca smallint
      Declare @kontoParent varchar(30)

      select @kontoparent=kontoparent from deleted
      select @symbolWzorca=SymbolWzorca from deleted
      select @ile=count(*) from XTpkWzorce where KontoParent=@kontoParent  
      and KontoParent&lt;>Konto

      if(@ile=0) Delete from FKTpkDefinicjaKontaWzorce 
      where konto=@kontoParent and SymbolWzorca=@symbolWzorca
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>77</Id>
    <NrLog>1</NrLog>
    <NrTab>26</NrTab>
    <NrProc>58</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc> />
    <TextProc>
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>78</Id>
    <NrLog>1</NrLog>
    <NrTab>27</NrTab>
    <NrProc>58</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc> />
    <TextProc>
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>79</Id>
    <NrLog>1</NrLog>
    <NrTab>28</NrTab>
    <NrProc>58</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc> />
    <TextProc>
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>80</Id>
    <NrLog>1</NrLog>
    <NrTab>29</NrTab>
    <NrProc>59</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>XTpkOpis_AFTER_DELETE_UsunDefinicjeKontaBezSubkont</NzProc> />
    <TextProc>
      CREATE TRIGGER XTpkOpis_AFTER_DELETE_UsunDefinicjeKontaBezSubkont
      ON XTpkOpis
      AFTER DELETE
      AS
      Declare @ile int
      Declare @okresO smallint
      Declare @kontoParent varchar(30)

      select @kontoparent=kontoparent from deleted
      select @okresO=OkresO from deleted
      select @ile=count(*) from XTpkOpis where KontoParent=@kontoParent
      and KontoParent&lt;>Konto

      if(@ile=0)
      Delete from FKTpkDefinicjaKonta where konto=@kontoParent and OkresO=@okresO
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>81</Id>
    <NrLog>1</NrLog>
    <NrTab>29</NrTab>
    <NrProc>60</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>XTpkProjekty_AFTER_DELETE_UsunDefinicjeKontaBezSubkont</NzProc> />
    <TextProc>
      CREATE TRIGGER XTpkProjekty_AFTER_DELETE_UsunDefinicjeKontaBezSubkont
      ON XTpkProjekty
      AFTER DELETE
      AS
      Declare @ile int
      Declare @symbolProjektu smallint
      Declare @kontoParent varchar(30)

      select @kontoparent=kontoparent from deleted
      select @symbolProjektu=SymbolProjektu from deleted
      select @ile=count(*) from XTpkProjekty where KontoParent=@kontoParent
      and KontoParent&lt;>Konto

      if(@ile=0) Delete from FKTpkDefinicjaKontaProjekty
      where konto=@kontoParent and SymbolProjektu=@symbolProjektu
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>82</Id>
    <NrLog>1</NrLog>
    <NrTab>29</NrTab>
    <NrProc>61</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>XTpkWzorce_AFTER_DELETE_UsunDefinicjeKontaBezSubkont</NzProc> />
    <TextProc>
      CREATE TRIGGER XTpkWzorce_AFTER_DELETE_UsunDefinicjeKontaBezSubkont
      ON XTpkWzorce
      AFTER DELETE
      AS
      Declare @ile int
      Declare @symbolWzorca smallint
      Declare @kontoParent varchar(30)

      select @kontoparent=kontoparent from deleted
      select @symbolWzorca=SymbolWzorca from deleted
      select @ile=count(*) from XTpkWzorce where KontoParent=@kontoParent
      and KontoParent&lt;>Konto

      if(@ile=0) Delete from FKTpkDefinicjaKontaWzorce
      where konto=@kontoParent and SymbolWzorca=@symbolWzorca
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>83</Id>
    <NrLog>1</NrLog>
    <NrTab>30</NrTab>
    <NrProc>61</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc> 
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>84</Id>
    <NrLog>1</NrLog>
    <NrTab>31</NrTab>
    <NrProc>62</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>85</Id>
    <NrLog>1</NrLog>
    <NrTab>32</NrTab>
    <NrProc>63</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>KPMinDate</NzProc> />
    <TextProc>
      CREATE FUNCTION KPMinDate
      (
      @0 DATETIME,	-- data 1
      @1 DATETIME 	-- data 2
      )
      RETURNS DATETIME
      AS
      BEGIN

      DECLARE @date1 AS DATETIME
      DECLARE @date2 AS DATETIME

      SET @date1 = ISNULL(@0,'9999-12-31')
      SET @date2 = ISNULL(@1,'9999-12-31')

      IF ( @date1 &lt;= @date2 ) RETURN ( @date1 )

      RETURN ( @date2 )

      END
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>86</Id>
    <NrLog>1</NrLog>
    <NrTab>32</NrTab>
    <NrProc>64</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>XKOPDajWolnyNrEwid</NzProc> />
    <TextProc>
      CREATE PROCEDURE XKOPDajWolnyNrEwid (
      @0 VARCHAR(3))	-- SySlow
      AS

      DECLARE @nowy_nrewid INT
      DECLARE @zakres_od INT
      DECLARE @zakres_do INT


      SELECT @zakres_od =ZakresOd FROM XNagObEw WHERE syslow=@0
      SELECT @zakres_do =ZakresDo FROM XNagObEw WHERE syslow=@0

      SET @nowy_nrewid = @zakres_od

      WHILE @nowy_nrewid &lt;= @zakres_do
      BEGIN
      IF (SELECT COUNT(*) FROM XKOP WHERE SySlow=@0 AND NrEwid=@nowy_nrewid) &lt; 1
      BREAK
      ELSE
      SET @nowy_nrewid = @nowy_nrewid+1
      END

      IF (@nowy_nrewid &lt; @zakres_od OR @nowy_nrewid &gt; @zakres_do)
      SET @nowy_nrewid=0

      SELECT @nowy_nrewid

      RETURN
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>87</Id>
    <NrLog>1</NrLog>
    <NrTab>33</NrTab>
    <NrProc>64</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>88</Id>
    <NrLog>1</NrLog>
    <NrTab>34</NrTab>
    <NrProc>64</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>89</Id>
    <NrLog>1</NrLog>
    <NrTab>35</NrTab>
    <NrProc>65</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKTPKDefinicjaKontaDlugoscKonta</NzProc>
    <TextProc>
      create function FKTPKDefinicjaKontaDlugoscKonta
      (
      @OkresO smallint,
      @Konto varchar(30)
      )
      RETURNS int
      AS
      BEGIN
      declare @ret int
      declare @rodzDefAnal char(1)
      declare @poziom int
      declare @dlsymb int
      declare @kontoparent varchar(30)

      select @rodzdefanal=rodzdefanal, @poziom=poziom, @dlsymb=dlsymb
      from fktpkdefinicjakonta where konto=@konto and okreso=@okreso

      if  @poziom=0
      begin
      select @ret=len(@konto)+1+@dlsymb
      end
      else
      begin
      select @kontoparent=kontoparent from xtpkopis
      where okreso=@okreso and konto=@konto
      select @ret=dbo.FKTPKDefinicjaKontaDlugoscKonta(@okreso, @kontoparent)+1+@dlsymb
      end

      return @ret
      end
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>90</Id>
    <NrLog>1</NrLog>
    <NrTab>35</NrTab>
    <NrProc>66</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKTPKDefinicjaKontaProjektyDlugoscKonta</NzProc>
    <TextProc>
      create function FKTPKDefinicjaKontaProjektyDlugoscKonta
      (
      @SymbolProjektu smallint,
      @Konto varchar(30)
      )
      RETURNS int
      AS
      BEGIN
      declare @ret int
      declare @rodzDefAnal char(1)
      declare @poziom int
      declare @dlsymb int
      declare @kontoparent varchar(30)

      select @rodzdefanal=rodzdefanal, @poziom=poziom, @dlsymb=dlsymb
      from fktpkdefinicjakontaProjekty where konto=@konto and symbolprojektu=@SymbolProjektu

      if  @poziom=0
      begin
      select @ret=len(@konto)+1+@dlsymb
      end
      else
      begin
      select @kontoparent=kontoparent from xtpkprojekty
      where symbolprojektu=@symbolprojektu and konto=@konto
      select @ret=dbo.FKTPKDefinicjaKontaProjektyDlugoscKonta(@symbolprojektu, @kontoparent)+1+@dlsymb
      end

      return @ret
      end
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>91</Id>
    <NrLog>1</NrLog>
    <NrTab>35</NrTab>
    <NrProc>67</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKTPKDefinicjaKontaWzorceDlugoscKonta</NzProc>
    <TextProc>
      create function FKTPKDefinicjaKontaWzorceDlugoscKonta
      (
      @Symbolwzorca smallint,
      @Konto varchar(30)
      )
      RETURNS int
      AS
      BEGIN
      declare @ret int
      declare @rodzDefAnal char(1)
      declare @poziom int
      declare @dlsymb int
      declare @kontoparent varchar(30)

      select @rodzdefanal=rodzdefanal, @poziom=poziom, @dlsymb=dlsymb
      from fktpkdefinicjakontawzorce where konto=@konto and symbolwzorca=@SymbolWzorca

      if  @poziom=0
      begin
      select @ret=len(@konto)+1+@dlsymb
      end
      else
      begin
      select @kontoparent=kontoparent from xtpkwzorce
      where symbolwzorca=@symbolwzorca and konto=@konto
      select @ret=dbo.FKTPKDefinicjaKontaWzorceDlugoscKonta(@symbolwzorca, @kontoparent)+1+@dlsymb
      end

      return @ret
      end
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>92</Id>
    <NrLog>1</NrLog>
    <NrTab>36</NrTab>
    <NrProc>67</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>93</Id>
    <NrLog>1</NrLog>
    <NrTab>37</NrTab>
    <NrProc>67</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
	<TabProcki>
		<Id>94</Id>
		<NrLog>1</NrLog>
		<NrTab>38</NrTab>
		<NrProc>67</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>95</Id>
		<NrLog>1</NrLog>
		<NrTab>39</NrTab>
		<NrProc>67</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>96</Id>
		<NrLog>1</NrLog>
		<NrTab>40</NrTab>
		<NrProc>68</NrProc>
		<ProcFun>PROCEDURE</ProcFun>
		<NzProc>KPOpisKlZal_PelnyOpisKlucza</NzProc>
		<TextProc>
			CREATE PROCEDURE KPOpisKlZal_PelnyOpisKlucza
			@0 VARCHAR(7),
			@1 NTEXT,
			@2 VARCHAR(10),
			@3 DATETIME
			AS

			DECLARE @iDoc int

			IF len(@0)&lt;1 return

			IF datalength(@1)&gt;0
			begin

			EXEC sp_xml_preparedocument @iDoc output, @1
			IF @@Error&lt;&gt;0 return

			DECLARE @tblTemp TABLE ( kodskl varchar(7) );

			INSERT INTO @tblTemp (kodskl)
			( SELECT kodskl FROM OpenXML(@iDoc, '/root/KPOpisKlZal', 2)
			WITH (kodskl varchar(7) 'KodSkl' ));

			EXEC sp_xml_removedocument @iDoc

			IF @@Error&lt;&gt;0 return

			-- usuniecie z klucza skladnikow nie przekazanych w parametrze (dokumencie XML)
			delete from KPOpisKlZal where KodKlucza=@0 and KodSkl not in (select kodskl from @tblTemp)

			-- dopisanie brakujacych skladnikow do klucza
			insert into KPOpisKlZal (KodKlucza, KodSkl, Oper, DataCzas)
			(select @0, kodskl, @2, @3 from @tblTemp where kodskl not in (select KodSkl from KPOpisKlZal where KodKlucza=@0))

			end

			-- wyswietlenie w wyniku pelnego opisu klucza
			select * from KPOpisKlZal where KodKlucza=@0

			RETURN
		</TextProc> />
	</TabProcki>
	<TabProcki>
		<Id>97</Id>
		<NrLog>1</NrLog>
		<NrTab>40</NrTab>
		<NrProc>69</NrProc>
		<ProcFun>PROCEDURE</ProcFun>
		<NzProc>KPOpisKlZal_SkladnikOpisujacyKlucze</NzProc>
		<TextProc>
			CREATE PROCEDURE KPOpisKlZal_SkladnikOpisujacyKlucze
			@0 VARCHAR(7),
			@1 NTEXT,
			@2 VARCHAR(10),
			@3 DATETIME
			AS

			DECLARE @iDoc int

			IF len(@0)&lt;1 return

			IF datalength(@1)&gt;0
			begin

			EXEC sp_xml_preparedocument @iDoc output, @1
			IF @@Error&lt;&gt;0 return

			DECLARE @tblTemp TABLE ( kodklucza varchar(7) );

			INSERT INTO @tblTemp (kodklucza)
			( SELECT kodklucza FROM OpenXML(@iDoc, '/root/KPOpisKlZal', 2)
			WITH (kodklucza varchar(7) 'KodKlucza' ));

			EXEC sp_xml_removedocument @iDoc

			IF @@Error&lt;&gt;0 return

			-- usuniecie z klucza skladnikow nie przekazanych w parametrze (dokumencie XML)
			delete from KPOpisKlZal where KodSkl=@0 and KodKlucza not in (select kodklucza from @tblTemp)

			-- dopisanie brakujacych skladnikow do klucza
			insert into KPOpisKlZal (KodKlucza, KodSkl, Oper, DataCzas)
			(select kodklucza, @0, @2, @3 from @tblTemp where kodklucza not in (select KodKlucza from KPOpisKlZal where KodSkl=@0))

			end

			-- wyswietlenie w wyniku pelnego opisu klucza
			select * from KPOpisKlZal where KodSkl=@0

			RETURN
		</TextProc> />
	</TabProcki>
	<TabProcki>
		<Id>98</Id>
		<NrLog>1</NrLog>
		<NrTab>41</NrTab>
		<NrProc>69</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>99</Id>
		<NrLog>1</NrLog>
		<NrTab>42</NrTab>
		<NrProc>69</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>100</Id>
		<NrLog>1</NrLog>
		<NrTab>43</NrTab>
		<NrProc>69</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>101</Id>
		<NrLog>1</NrLog>
		<NrTab>44</NrTab>
		<NrProc>69</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>102</Id>
		<NrLog>1</NrLog>
		<NrTab>45</NrTab>
		<NrProc>69</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>103</Id>
		<NrLog>1</NrLog>
		<NrTab>46</NrTab>
		<NrProc>69</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>104</Id>
		<NrLog>1</NrLog>
		<NrTab>47</NrTab>
		<NrProc>70</NrProc>
		<ProcFun>PROCEDURE</ProcFun>
		<NzProc>KPOpisKlZal_PelnyOpisKlucza</NzProc>
		<TextProc>
			CREATE PROCEDURE KPOpisKlZal_PelnyOpisKlucza
			@0 VARCHAR(7),	-- symbol klucza zaliczenia
			@1 NTEXT,		-- kolekcja skladnikow placowych
			@2 VARCHAR(10),	-- operator
			@3 DATETIME		-- data czas
			AS

			DECLARE @iDoc int

			IF len(@0)&lt;1 return

			IF datalength(@1)&gt;0
			begin

			EXEC sp_xml_preparedocument @iDoc output, @1
			IF @@Error&lt;&gt;0 return

			DECLARE @tblTemp TABLE ( kodskl varchar(8) );

			INSERT INTO @tblTemp (kodskl)
			( SELECT kodskl FROM OpenXML(@iDoc, '/root/KPOpisKlZal', 2)
			WITH (kodskl varchar(8) 'KodSkl' ));

			EXEC sp_xml_removedocument @iDoc

			IF @@Error&lt;&gt;0 return

			-- usuniecie z klucza skladnikow nie przekazanych w parametrze (dokumencie XML)
			delete from KPOpisKlZal where KodKlucza=@0 and KodSkl not in (select kodskl from @tblTemp)

			-- dopisanie brakujacych skladnikow do klucza
			insert into KPOpisKlZal (KodKlucza, KodSkl, Oper, DataCzas)
			(select @0, kodskl, @2, @3 from @tblTemp where kodskl not in (select KodSkl from KPOpisKlZal where KodKlucza=@0))

			end

			-- wyswietlenie w wyniku pelnego opisu klucza
			select * from KPOpisKlZal where KodKlucza=@0

			RETURN
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>105</Id>
		<NrLog>1</NrLog>
		<NrTab>47</NrTab>
		<NrProc>71</NrProc>
		<ProcFun>PROCEDURE</ProcFun>
		<NzProc>KPOpisKlZal_SkladnikOpisujacyKlucze</NzProc>
		<TextProc>
			CREATE PROCEDURE KPOpisKlZal_SkladnikOpisujacyKlucze
			@0 VARCHAR(8),  -- symbol skladnika placowego
			@1 NTEXT,		-- kolekcja kluczy
			@2 VARCHAR(10),	-- operator
			@3 DATETIME		-- data czas
			AS

			DECLARE @iDoc int

			IF len(@0)&lt;1 return

			IF datalength(@1)&gt;0
			begin

			EXEC sp_xml_preparedocument @iDoc output, @1
			IF @@Error&lt;&gt;0 return

			DECLARE @tblTemp TABLE ( kodklucza varchar(7) );

			INSERT INTO @tblTemp (kodklucza)
			( SELECT kodklucza FROM OpenXML(@iDoc, '/root/KPOpisKlZal', 2)
			WITH (kodklucza varchar(7) 'KodKlucza' ));

			EXEC sp_xml_removedocument @iDoc

			IF @@Error&lt;&gt;0 return

			-- usuniecie z klucza skladnikow nie przekazanych w parametrze (dokumencie XML)
			delete from KPOpisKlZal where KodSkl=@0 and KodKlucza not in (select kodklucza from @tblTemp)

			-- dopisanie brakujacych skladnikow do klucza
			insert into KPOpisKlZal (KodKlucza, KodSkl, Oper, DataCzas)
			(select kodklucza, @0, @2, @3 from @tblTemp where kodklucza not in (select KodKlucza from KPOpisKlZal where KodSkl=@0))

			end

			-- wyswietlenie w wyniku pelnego opisu klucza
			select * from KPOpisKlZal where KodSkl=@0

			RETURN
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>106</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>72</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMStanIloAkt</NzProc>
		<TextProc>
			CREATE FUNCTION EMStanIloAkt
			(
			@okresO smallint,
			@syMag varchar(3),
			@syMat varchar(30),
			@wyrCen smallint
			)
			RETURNS decimal(10, 3)
			AS
			BEGIN
			RETURN (SELECT K.IBORR + K.IBORRKor +
			ISNULL((
			SELECT sum(KO.IloPrz + KO.IloPrzDys)
			FROM EMKAMAObroty KO
			WHERE KO.OkresO = @okresO AND
			KO.SyMag  = @syMag AND
			KO.SyMat  = @syMat AND
			KO.WyrCen = @wyrCen
			), 0)
			FROM EMKaMa K
			WHERE K.OkresO = @okresO AND
			K.SyMag  = @syMag AND
			K.SyMat  = @syMat AND
			K.WyrCen = @wyrCen
			)
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>107</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>73</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMStanWartAkt</NzProc>
		<TextProc>
			CREATE FUNCTION EMStanWartAkt
			(
			@okresO smallint,
			@syMag varchar(3),
			@syMat varchar(30),
			@wyrCen smallint
			)
			RETURNS decimal(10, 2)
			AS
			BEGIN
			RETURN (SELECT K.WBORR + K.WBORRKor +
			ISNULL((
			SELECT sum(KO.WarPrz + KO.WarPrzDys)
			FROM EMKAMAObroty KO
			WHERE KO.OkresO = @okresO AND
			KO.SyMag  = @syMag AND
			KO.SyMat  = @syMat AND
			KO.WyrCen = @wyrCen
			), 0)
			FROM EMKaMa K
			WHERE K.OkresO = @okresO AND
			K.SyMag  = @syMag AND
			K.SyMat  = @syMat AND
			K.WyrCen = @wyrCen
			)
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>108</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>74</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMStanIloDyspAkt</NzProc>
		<TextProc>
			CREATE FUNCTION EMStanIloDyspAkt
			(
			@okresO smallint,
			@syMag varchar(3),
			@syMat varchar(30),
			@wyrCen smallint
			)
			RETURNS decimal(10, 3)
			AS
			BEGIN
			RETURN
			(
			SELECT dbo.EMStanIloAkt(@okresO, @syMag, @syMat, @wyrCen) - K.IloRezerw
			FROM EMKaMa K
			WHERE K.OkresO = @okresO AND
			K.SyMag  = @syMag AND
			K.SyMat  = @syMat AND
			K.WyrCen = @wyrCen
			)
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>109</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>75</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMCenaEwAS</NzProc>
		<TextProc>
			CREATE FUNCTION EMCenaEwAS
			(
			@okresO smallint,
			@syMag varchar(3),
			@syMat varchar(30),
			@wyrCen smallint
			)
			RETURNS decimal(12, 5)
			AS
			BEGIN
			DECLARE @metodaWyceny char(1);
			DECLARE @wynik decimal(12, 5);

			SELECT @metodaWyceny = M.MetodaWyceny
			FROM EMMagazyny M
			WHERE M.OkresO = @okresO AND
			M.SyMag  = @syMag;

			IF @metodaWyceny = '0'
			SET @wynik = 0;
			ELSE IF @metodaWyceny = '1' OR @metodaWyceny = '3'
			SELECT @wynik = K.CenaEw
			FROM EMKAMA K
			WHERE K.OkresO = @okresO AND
			K.SyMag = @syMag AND
			K.SyMat = @syMat AND
			K.WyrCen = @wyrCen;
			ELSE IF @metodaWyceny = '2' OR @metodaWyceny = '4' OR @metodaWyceny = '5' BEGIN
			SELECT @wynik = dbo.EMStanWartAkt(@okresO, @syMag, @syMat, @wyrCen) / dbo.EMStanIloAkt(@okresO, @syMag, @syMat, @wyrCen);
			END;

			RETURN @wynik;
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>110</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>76</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMIloscPrzychodMM</NzProc>
		<TextProc>
			CREATE FUNCTION EMIloscPrzychodMM
			(
			@iloPrz decimal(10, 3),
			@iloPrzDys decimal(10, 3)
			)
			RETURNS decimal(10, 3)
			AS
			BEGIN
			RETURN @iloPrz + @iloPrzDys;
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>111</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>77</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMIloscRozchodMM</NzProc>
		<TextProc>
			CREATE FUNCTION EMIloscRozchodMM
			(
			@iloRoz decimal(10, 3),
			@iloRozDys decimal(10, 3)
			)
			RETURNS decimal(10, 3)
			AS
			BEGIN
			RETURN @iloRoz + @iloRozDys;
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>112</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>78</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMIloscStanNaBOMM</NzProc>
		<TextProc>
			CREATE FUNCTION EMIloscStanNaBOMM
			(
			@okresO smallint,
			@syMag varchar(3),
			@syMat varchar(30),
			@wyrCen smallint,
			@mies smallint,
			@rok smallint
			)
			RETURNS decimal(10, 3)
			AS
			BEGIN
			RETURN
			(
			SELECT K.IBORR + K.IBORRKor +
			(
			SELECT isnull
			(
			sum(dbo.EMIloscPrzychodMM(KO.IloPrz, KO.IloPrzDys) - dbo.EMIloscRozchodMM(KO.IloRoz, IloRozDys)),
			0
			)
			FROM EMKaMaObroty KO
			WHERE KO.OkresO = @okresO AND
			KO.SyMag  = @syMag AND
			KO.SyMat  = @syMat AND
			KO.WyrCen = @wyrCen AND
			(
			(KO.Rok = @rok AND KO.Mies &lt; @mies) OR
			(KO.Rok &lt; @rok)
			)
			)
			FROM EMKaMa K
			WHERE K.OkresO = @okresO AND
			K.SyMag  = @syMag AND
			K.SyMat  = @syMat AND
			K.WyrCen = @wyrCen
			)
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>113</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>79</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMIloscStanNaBZMM</NzProc>
		<TextProc>
			CREATE FUNCTION EMIloscStanNaBZMM
			(
			@okresO smallint,
			@syMag varchar(3),
			@syMat varchar(30),
			@wyrCen smallint,
			@mies smallint,
			@rok smallint
			)
			RETURNS decimal(10, 3)
			AS
			BEGIN
			RETURN
			(
			SELECT dbo.EMIloscStanNaBOMM(@okresO, @syMag, @syMat, @wyrCen, @mies, @rok) + dbo.EMIloscPrzychodMM(KO.IloPrz, KO.IloPrzDys) - dbo.EMIloscRozchodMM(KO.IloRoz, IloRozDys)
			FROM EMKaMaObroty KO
			WHERE KO.OkresO = @okresO AND
			KO.SyMag  = @syMag AND
			KO.SyMat  = @syMat AND
			KO.WyrCen = @wyrCen AND
			KO.Rok    = @rok AND
			KO.Mies   = @mies
			)
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>114</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>80</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMWartoscPrzychodMM</NzProc>
		<TextProc>
			CREATE FUNCTION EMWartoscPrzychodMM
			(
			@warPrz decimal(10, 2),
			@warPrzDys decimal(10, 2)
			)
			RETURNS decimal(10, 2)
			AS
			BEGIN
			RETURN @warPrz + @warPrzDys;
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>115</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>81</NrProc>
		<ProcFun>Function</ProcFun>
		<NzProc>EMWartoscRozchodMM</NzProc>
		<TextProc>
			CREATE FUNCTION EMWartoscRozchodMM
			(
			@warRoz decimal(10, 2),
			@warRozDys decimal(10, 2)
			)
			RETURNS decimal(10, 2)
			AS
			BEGIN
			RETURN @warRoz + @warRozDys;
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>116</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>82</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMWartoscStanNaBOMM</NzProc>
		<TextProc>
			CREATE FUNCTION EMWartoscStanNaBOMM
			(
			@okresO smallint,
			@syMag varchar(3),
			@syMat varchar(30),
			@wyrCen smallint,
			@mies smallint,
			@rok smallint
			)
			RETURNS decimal(10, 2)
			AS
			BEGIN
			RETURN
			(
			SELECT K.WBORR + K.WBORRKor +
			(
			SELECT isnull
			(
			sum(dbo.EMWartoscPrzychodMM(KO.WarPrz, KO.WarPrzDys) - dbo.EMWartoscRozchodMM(KO.WarRoz, WarRozDys)), 0)
			FROM EMKaMaObroty KO
			WHERE KO.OkresO = @okresO AND
			KO.SyMag  = @syMag AND
			KO.SyMat  = @syMat AND
			KO.WyrCen = @wyrCen AND
			(
			(KO.Rok = @rok AND KO.Mies &lt; @mies) OR
			(KO.Rok &lt; @rok)
			)
			)
			FROM EMKaMa K
			WHERE K.OkresO = @okresO AND
			K.SyMag  = @syMag AND
			K.SyMat  = @syMat AND
			K.WyrCen = @wyrCen
			)
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>117</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>83</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMWartoscStanNaBZMM</NzProc>
		<TextProc>
			CREATE FUNCTION EMWartoscStanNaBZMM
			(
			@okresO smallint,
			@syMag varchar(3),
			@syMat varchar(30),
			@wyrCen smallint,
			@mies smallint,
			@rok smallint
			)
			RETURNS decimal(10, 2)
			AS
			BEGIN
			RETURN
			(
			SELECT dbo.EMWartoscStanNaBOMM(@okresO, @syMag, @syMat, @wyrCen, @mies, @rok) + dbo.EMWartoscPrzychodMM(KO.IloPrz, KO.IloPrzDys) - dbo.EMWartoscRozchodMM(KO.IloRoz, IloRozDys)
			FROM EMKaMaObroty KO
			WHERE KO.OkresO = @okresO AND
			KO.SyMag  = @syMag AND
			KO.SyMat  = @syMat AND
			KO.WyrCen = @wyrCen AND
			KO.Rok    = @rok AND
			KO.Mies   = @mies
			)
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>118</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>84</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMCenaEwASM</NzProc>
		<TextProc>
			CREATE FUNCTION EMCenaEwASM
			(
			@okresO smallint,
			@syMag varchar(3),
			@syMat varchar(30),
			@wyrCen smallint,
			@mies smallint,
			@rok smallint
			)
			RETURNS decimal(12, 5)
			AS
			BEGIN
			DECLARE @metodaWyceny char(1);
			DECLARE @wynik decimal(12, 5);

			SELECT @metodaWyceny = M.MetodaWyceny
			FROM EMMagazyny M
			WHERE M.OkresO = @okresO AND
			M.SyMag  = @syMag;

			IF @metodaWyceny = '0'
			SET @wynik = 0;
			ELSE IF @metodaWyceny = '1' OR @metodaWyceny = '3'
			SELECT @wynik = K.CenaEw
			FROM EMKAMA K
			WHERE K.OkresO = @okresO AND
			K.SyMag = @syMag AND
			K.SyMat = @syMat AND
			K.WyrCen = @wyrCen;
			ELSE IF @metodaWyceny = '2' OR @metodaWyceny = '4' OR @metodaWyceny = '5' BEGIN
			SELECT @wynik = dbo.EMWartoscStanNaBZMM(@okresO, @syMag, @syMat, @wyrCen, @mies, @rok) / dbo.EMIloscStanNaBZMM(@okresO, @syMag, @syMat, @wyrCen, @mies, @rok);
			END;

			RETURN @wynik;
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>119</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>85</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMPrzychodIloscOgolem</NzProc>
		<TextProc>
			CREATE FUNCTION EMPrzychodIloscOgolem
			(
			@okresO smallint,
			@syMag varchar(3),
			@syMat varchar(30),
			@wyrCen smallint,
			@miesOd smallint,
			@rokOd smallint,
			@miesDo smallint,
			@rokDo smallint
			)
			RETURNS decimal(10, 3)
			AS
			BEGIN
			RETURN
			(
			SELECT ISNULL(SUM(IloPrz + IloPrzDys), 0)
			FROM EMKaMaObroty
			WHERE okresO = @okresO AND
			syMag = @syMag AND
			syMat = @syMat AND
			wyrCen = @wyrCen AND
			rok BETWEEN @rokOd AND @rokDo AND
			mies BETWEEN @miesOd AND @miesDo
			)
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>120</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>86</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMPrzychodWartoscOgolem</NzProc>
		<TextProc>
			CREATE FUNCTION EMPrzychodWartoscOgolem
			(
			@okresO smallint,
			@syMag varchar(3),
			@syMat varchar(30),
			@wyrCen smallint,
			@miesOd smallint,
			@rokOd smallint,
			@miesDo smallint,
			@rokDo smallint
			)
			RETURNS decimal(10, 3)
			AS
			BEGIN
			RETURN
			(
			SELECT ISNULL(SUM(WarPrz + WarPrzDys), 0)
			FROM EMKaMaObroty
			WHERE okresO = @okresO AND
			syMag = @syMag AND
			syMat = @syMat AND
			wyrCen = @wyrCen AND
			rok BETWEEN @rokOd AND @rokDo AND
			mies BETWEEN @miesOd AND @miesDo
			)
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>121</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>87</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMRozchodIloscOgolem</NzProc>
		<TextProc>
			CREATE FUNCTION EMRozchodIloscOgolem
			(
			@okresO smallint,
			@syMag varchar(3),
			@syMat varchar(30),
			@wyrCen smallint,
			@miesOd smallint,
			@rokOd smallint,
			@miesDo smallint,
			@rokDo smallint
			)
			RETURNS decimal(10, 3)
			AS
			BEGIN
			RETURN
			(
			SELECT ISNULL(SUM(IloRoz + IloRozDys), 0)
			FROM EMKaMaObroty
			WHERE okresO = @okresO AND
			syMag = @syMag AND
			syMat = @syMat AND
			wyrCen = @wyrCen AND
			rok BETWEEN @rokOd AND @rokDo AND
			mies BETWEEN @miesOd AND @miesDo
			)
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>122</Id>
		<NrLog>1</NrLog>
		<NrTab>48</NrTab>
		<NrProc>88</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>EMRozchodWartoscOgolem</NzProc>
		<TextProc>
			CREATE FUNCTION EMRozchodWartoscOgolem
			(
			@okresO smallint,
			@syMag varchar(3),
			@syMat varchar(30),
			@wyrCen smallint,
			@miesOd smallint,
			@rokOd smallint,
			@miesDo smallint,
			@rokDo smallint
			)
			RETURNS decimal(10, 3)
			AS
			BEGIN
			RETURN
			(
			SELECT ISNULL(SUM(WarRoz + WarRozDys), 0)
			FROM EMKaMaObroty
			WHERE okresO = @okresO AND
			syMag = @syMag AND
			syMat = @syMat AND
			wyrCen = @wyrCen AND
			rok BETWEEN @rokOd AND @rokDo AND
			mies BETWEEN @miesOd AND @miesDo
			)
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>123</Id>
		<NrLog>1</NrLog>
		<NrTab>49</NrTab>
		<NrProc>88</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>124</Id>
		<NrLog>1</NrLog>
		<NrTab>50</NrTab>
		<NrProc>88</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>125</Id>
		<NrLog>1</NrLog>
		<NrTab>51</NrTab>
		<NrProc>88</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>125</Id>
		<NrLog>1</NrLog>
		<NrTab>52</NrTab>
		<NrProc>88</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>126</Id>
		<NrLog>1</NrLog>
		<NrTab>53</NrTab>
		<NrProc>89</NrProc>
		<ProcFun>PROCEDURE</ProcFun>
		<NzProc>KPGenStanSOData</NzProc>
		<TextProc>
			CREATE PROCEDURE KPGenStanSOData
			@0 datetime, --data naliczenia
			@1 varchar(10),  --login operatora
			@2 smallint, --nrDef -&gt; nr struktury org
			@3 smallint  --Okres obrachunkowy
			AS
			BEGIN
			-- SET NOCOUNT ON added to prevent extra result sets from
			-- interfering with SELECT statements.
			SET NOCOUNT ON

			DECLARE @dataNaliczenia DATETIME
			DECLARE @operator VARCHAR(10)
			DECLARE @nrDef SMALLINT
			DECLARE @okresO SMALLINT

			SET @dataNaliczenia = @0
			SET @operator = @1
			SET @nrDef = @2
			SET @okresO = @3

			DECLARE @iloscNaliczenDlaDaty INTEGER

			--0. jezeli jest juz naliczenie: koniec funkcji
			SELECT @iloscNaliczenDlaDaty = COUNT(*)
			FROM KPStZatrSoD
			WHERE DataStanu = @dataNaliczenia AND NrDef = @nrDef

			IF @iloscNaliczenDlaDaty &gt; 0
			BEGIN
			RETURN
			END;

			-- wlasciwa czesc procedury
			DECLARE @dlugoscSySlow INTEGER
			DECLARE @dlugoscKod INTEGER
			DECLARE @dlugoscAdresPop INTEGER
			DECLARE	@indexStart INTEGER
			DECLARE @sySlowAdresPop VARCHAR(3)
			DECLARE @kodAdresPop VARCHAR(7)

			DECLARE @sySlowZaklady VARCHAR(3)
			DECLARE @sySlowKomorki VARCHAR(3)
			DECLARE @sySlowStanowPr VARCHAR(3)
			DECLARE @sySlowSysWynagr VARCHAR(3)
			DECLARE @sySlowXKP VARCHAR(3)

			SET @sySlowZaklady = 'XSZ'
			SET @sySlowKomorki = 'XSK'
			SET @sySlowStanowPr = 'XSS'
			SET @sySlowSysWynagr = 'XSW'
			SET @sySlowXKP = 'XKP'

			SET @dlugoscSySlow = 3;
			SET @dlugoscKod = 7;

			DECLARE @zaklad VARCHAR(7)
			DECLARE @komorka VARCHAR(7)
			DECLARE @stanowPr VARCHAR(7)
			DECLARE @sysWynagr VARCHAR(7)
			DECLARE @nrEwid INTEGER
			DECLARE @typUmowy VARCHAR(1)
			DECLARE @nrUmowy VARCHAR(10)

			DECLARE @adresPop VARCHAR(100)
			DECLARE @sySlowSegm VARCHAR(3)
			DECLARE @kodElem VARCHAR(7)
			DECLARE @lpPoz SMALLINT

			DECLARE @zaklad7 VARCHAR(7)
			DECLARE @komorka7 VARCHAR(7)
			DECLARE @stanowPr7 VARCHAR(7)
			DECLARE @sysWynagr7 VARCHAR(7)

			DECLARE @pobranoWierszStZatrD INTEGER
			DECLARE @pobranoWierszXSODef INTEGER

			DECLARE @iloscNiezgodnychWezlow INTEGER
			DECLARE @tabelaPar TABLE
			(
			SySlow VARCHAR(3),
			Kod VARCHAR(10)
			)

			DECLARE c_stZatrD CURSOR FOR
			SELECT TypUmowy, NrEwid, NrUmowy, Zaklad, Komorka, StanowPr, SysWynagr
			FROM   KPStZatrD
			WHERE  SySlow = @sySlowXKP AND DataStanu = @dataNaliczenia

			DECLARE c_xsoDef CURSOR FOR
			SELECT LpPoz, SySlowSegm, KodElem, AdresPop
			FROM   XSODef
			WHERE  OkresO = @okresO AND NrDef = @nrDef

			--1. dla kazdego wiersza w StZatrD...
			OPEN c_stZatrD
			FETCH NEXT FROM c_stZatrD
			INTO @typUmowy, @nrEwid, @nrUmowy, @zaklad, @komorka, @stanowPr, @sysWynagr
			SET @pobranoWierszStZatrD = @@FETCH_STATUS

			WHILE @pobranoWierszStZatrD = 0
			BEGIN
			--2. dla kazdego wiersza w XSODef
			OPEN c_xsoDef
			FETCH NEXT FROM c_xsoDef
			INTO @lpPoz, @sySlowSegm, @kodElem, @adresPop
			SET @pobranoWierszXSODef = @@FETCH_STATUS

			WHILE @pobranoWierszXSODef = 0
			BEGIN
			--2.0. depelnij symbole zakladu, komorki, stanowPr, sysWynagr do 7 znakow
			SET @dlugoscAdresPop = LEN( REPLACE(@adresPop, ' ', '.') )
			SET @zaklad7    = @zaklad    + SPACE(@dlugoscKod - LEN(REPLACE(@zaklad,    ' ', '.')))
			SET @komorka7   = @komorka   + SPACE(@dlugoscKod - LEN(REPLACE(@komorka,   ' ', '.')))
			SET @stanowPr7  = @stanowPr  + SPACE(@dlugoscKod - LEN(REPLACE(@stanowPr,  ' ', '.')))
			SET @sysWynagr7 = @sysWynagr + SPACE(@dlugoscKod - LEN(REPLACE(@sysWynagr, ' ', '.')))

			--2.1. Przygotowanie tabeli par poprzez dodanie do niej wszystkich sySlow + kod
			--	   w adresie wezla w strukturze org.
			DELETE FROM @tabelaPar

			SET @indexStart = 0;
			WHILE @indexStart &lt; @dlugoscAdresPop
			BEGIN
			SET @sySlowAdresPop = LEFT( RIGHT(@adresPop, @dlugoscAdresPop - @indexStart), @dlugoscSySlow )
			SET @indexStart		= @indexStart + @dlugoscSySlow
			SET @kodAdresPop    = LEFT( RIGHT(@adresPop, @dlugoscAdresPop - @indexStart), @dlugoscKod )
			SET @indexStart		= @indexStart + @dlugoscKod

			INSERT INTO @tabelaPar(SySlow, Kod)
			VALUES (@sySlowAdresPop, @kodAdresPop)
			END

			INSERT INTO @tabelaPar(SySlow, Kod)
			VALUES (@sySlowSegm, @kodElem)


			--2.2. Sprawdzenie czy wystepuje niezgodnosc miedzy naliczeniem a wezlem struktury
			SELECT @iloscNiezgodnychWezlow = COUNT(*)
			FROM @tabelaPar
			WHERE sySlow = @sySlowZaklady AND kod &lt;&gt; @zaklad7
			OR sySlow = @sySlowKomorki AND kod &lt;&gt; @komorka7
			OR sySlow = @sySlowStanowPr AND kod &lt;&gt; @stanowPr7
			OR sySlow = @sySlowSysWynagr AND kod &lt;&gt; @sysWynagr7

			IF @iloscNiezgodnychWezlow = 0
			BEGIN
			INSERT INTO KPStZatrSoD(SySlow, DataStanu, TypUmowy, NrEwid, NrUmowy, NrDef, LpPrez, SySlowElem, KodElem, AdresPop, Oper, DataCzas)
			VALUES (@sySlowXKP, @dataNaliczenia, @typUmowy, @nrEwid, @nrUmowy, @nrDef, @lpPoz, @sySlowSegm, @kodElem, @adresPop, @operator, GETDATE())
			END

			--pobierz kolejny wiersz XSODef
			FETCH NEXT FROM c_xsoDef
			INTO @lpPoz, @sySlowSegm, @kodElem, @adresPop
			SET @pobranoWierszXSODef = @@FETCH_STATUS
			END
			CLOSE c_xsoDef

			--pobierz kolejny wiersz StZatrD
			FETCH NEXT FROM c_stZatrD
			INTO @typUmowy, @nrEwid, @nrUmowy, @zaklad, @komorka, @stanowPr, @sysWynagr
			SET @pobranoWierszStZatrD = @@FETCH_STATUS
			END
			CLOSE c_stZatrD

			DEALLOCATE c_xsoDef
			DEALLOCATE c_stZatrD
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>127</Id>
		<NrLog>1</NrLog>
		<NrTab>53</NrTab>
		<NrProc>90</NrProc>
		<ProcFun>PROCEDURE</ProcFun>
		<NzProc>KPGenStanSOMc</NzProc>
		<TextProc>
			CREATE PROCEDURE KPGenStanSOMc
			@0 int, --lp naliczenia
			@1 int, --rok stanu
			@2 int, --miesiac stanu
			@3 varchar(10),  --login operatora
			@4 smallint, --nrDef -&gt; nr struktury org
			@5 smallint  --Okres obrachunkowy
			AS
			BEGIN
			-- SET NOCOUNT ON added to prevent extra result sets from
			-- interfering with SELECT statements.
			SET NOCOUNT ON

			DECLARE @lpNaliczenia INT
			DECLARE @rokStanu SMALLINT
			DECLARE @mcStanu SMALLINT
			DECLARE @operator VARCHAR(10)
			DECLARE @nrDef SMALLINT
			DECLARE @okresO SMALLINT

			--zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
			DECLARE @dataOdStrPom VARCHAR(12)
			DECLARE @dataOd DATETIME
			DECLARE @dataDo DATETIME

			SET @lpNaliczenia = @0
			SET @rokStanu = @1
			SET @mcStanu = @2
			SET @operator = @3
			SET @nrDef = @4
			SET @okresO = @5

			--Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
			--dla danego roku stanu i miesiaca stanu
			SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
			SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
			SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

			DECLARE @iloscNaliczenDlaDaty INTEGER

			--0. jezeli jest juz naliczenie: koniec funkcji
			SELECT @iloscNaliczenDlaDaty = COUNT(*)
			FROM KPStZatrSoS
			WHERE LpNaliczenia = @lpNaliczenia AND NrDef = @nrDef

			IF @iloscNaliczenDlaDaty &gt; 0
			BEGIN
			RETURN
			END;

			-- wlasciwa czesc procedury
			DECLARE @dlugoscSySlow INTEGER
			DECLARE @dlugoscKod INTEGER
			DECLARE @dlugoscAdresPop INTEGER
			DECLARE	@indexStart INTEGER
			DECLARE @sySlowAdresPop VARCHAR(3)
			DECLARE @kodAdresPop VARCHAR(7)

			DECLARE @sySlowZaklady VARCHAR(3)
			DECLARE @sySlowKomorki VARCHAR(3)
			DECLARE @sySlowStanowPr VARCHAR(3)
			DECLARE @sySlowSysWynagr VARCHAR(3)
			DECLARE @sySlowXKP VARCHAR(3)

			SET @sySlowZaklady = 'XSZ'
			SET @sySlowKomorki = 'XSK'
			SET @sySlowStanowPr = 'XSS'
			SET @sySlowSysWynagr = 'XSW'
			SET @sySlowXKP = 'XKP'

			SET @dlugoscSySlow = 3;
			SET @dlugoscKod = 7;

			DECLARE @zaklad VARCHAR(7)
			DECLARE @komorka VARCHAR(7)
			DECLARE @stanowPr VARCHAR(7)
			DECLARE @sysWynagr VARCHAR(7)
			DECLARE @nrEwid INTEGER
			DECLARE @typUmowy VARCHAR(1)
			DECLARE @nrUmowy VARCHAR(10)
			DECLARE @dataZmiany DATETIME

			DECLARE @adresPop VARCHAR(100)
			DECLARE @sySlowSegm VARCHAR(3)
			DECLARE @kodElem VARCHAR(7)
			DECLARE @lpPoz SMALLINT

			DECLARE @zaklad7 VARCHAR(7)
			DECLARE @komorka7 VARCHAR(7)
			DECLARE @stanowPr7 VARCHAR(7)
			DECLARE @sysWynagr7 VARCHAR(7)

			DECLARE @pobranoWierszStZatrS INTEGER
			DECLARE @pobranoWierszXSODef INTEGER

			DECLARE @iloscNiezgodnychWezlow INTEGER
			DECLARE @tabelaPar TABLE
			(
			SySlow VARCHAR(3),
			Kod VARCHAR(10)
			)

			DECLARE c_stZatrS CURSOR FOR
			SELECT TypUmowy, NrEwid, NrUmowy, Zaklad, Komorka, StanowPr, SysWynagr, DataZmiany
			FROM   KPStZatrS
			WHERE  SySlow = @sySlowXKP AND LpNaliczenia = @lpNaliczenia AND
			DataZmiany BETWEEN @dataOd AND @dataDo

			DECLARE c_xsoDef CURSOR FOR
			SELECT LpPoz, SySlowSegm, KodElem, AdresPop
			FROM   XSODef
			WHERE  OkresO = @okresO AND NrDef = @nrDef

			--1. dla kazdego wiersza w StZatrS...
			OPEN c_stZatrS
			FETCH NEXT FROM c_stZatrS
			INTO @typUmowy, @nrEwid, @nrUmowy, @zaklad, @komorka, @stanowPr, @sysWynagr, @dataZmiany
			SET @pobranoWierszStZatrS = @@FETCH_STATUS

			WHILE @pobranoWierszStZatrS = 0
			BEGIN
			--2. dla kazdego wiersza w XSODef
			OPEN c_xsoDef
			FETCH NEXT FROM c_xsoDef
			INTO @lpPoz, @sySlowSegm, @kodElem, @adresPop
			SET @pobranoWierszXSODef = @@FETCH_STATUS

			WHILE @pobranoWierszXSODef = 0
			BEGIN
			--2.0. depelnij symbole zakladu, komorki, stanowPr, sysWynagr do 7 znakow
			SET @dlugoscAdresPop = LEN( REPLACE(@adresPop, ' ', '.') )
			SET @zaklad7    = @zaklad    + SPACE(@dlugoscKod - LEN(REPLACE(@zaklad,    ' ', '.')))
			SET @komorka7   = @komorka   + SPACE(@dlugoscKod - LEN(REPLACE(@komorka,   ' ', '.')))
			SET @stanowPr7  = @stanowPr  + SPACE(@dlugoscKod - LEN(REPLACE(@stanowPr,  ' ', '.')))
			SET @sysWynagr7 = @sysWynagr + SPACE(@dlugoscKod - LEN(REPLACE(@sysWynagr, ' ', '.')))

			--2.1. Przygotowanie tabeli par poprzez dodanie do niej wszystkich sySlow + kod
			--	   w adresie wezla w strukturze org.
			DELETE FROM @tabelaPar

			SET @indexStart = 0;
			WHILE @indexStart &lt; @dlugoscAdresPop
			BEGIN
			SET @sySlowAdresPop = LEFT( RIGHT(@adresPop, @dlugoscAdresPop - @indexStart), @dlugoscSySlow )
			SET @indexStart		= @indexStart + @dlugoscSySlow
			SET @kodAdresPop    = LEFT( RIGHT(@adresPop, @dlugoscAdresPop - @indexStart), @dlugoscKod )
			SET @indexStart		= @indexStart + @dlugoscKod

			INSERT INTO @tabelaPar(SySlow, Kod)
			VALUES (@sySlowAdresPop, @kodAdresPop)
			END

			INSERT INTO @tabelaPar(SySlow, Kod)
			VALUES (@sySlowSegm, @kodElem)


			--2.2. Sprawdzenie czy wystepuje niezgodnosc miedzy naliczeniem a wezlem struktury
			SELECT @iloscNiezgodnychWezlow = COUNT(*)
			FROM @tabelaPar
			WHERE sySlow = @sySlowZaklady AND kod &lt;&gt; @zaklad7
			OR sySlow = @sySlowKomorki AND kod &lt;&gt; @komorka7
			OR sySlow = @sySlowStanowPr AND kod &lt;&gt; @stanowPr7
			OR sySlow = @sySlowSysWynagr AND kod &lt;&gt; @sysWynagr7

			IF @iloscNiezgodnychWezlow = 0
			BEGIN
			INSERT INTO KPStZatrSoS(SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, NrDef, LpPrez, SySlowElem, KodElem, AdresPop, Oper, DataCzas)
			VALUES (@sySlowXKP, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany, @nrDef, @lpPoz, @sySlowSegm, @kodElem, @adresPop, @operator, GETDATE())
			END

			--pobierz kolejny wiersz XSODef
			FETCH NEXT FROM c_xsoDef
			INTO @lpPoz, @sySlowSegm, @kodElem, @adresPop
			SET @pobranoWierszXSODef = @@FETCH_STATUS
			END
			CLOSE c_xsoDef

			--pobierz kolejny wiersz StZatrS
			FETCH NEXT FROM c_stZatrS
			INTO @typUmowy, @nrEwid, @nrUmowy, @zaklad, @komorka, @stanowPr, @sysWynagr, @dataZmiany
			SET @pobranoWierszStZatrS = @@FETCH_STATUS
			END
			CLOSE c_stZatrS

			DEALLOCATE c_xsoDef
			DEALLOCATE c_stZatrS
			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>128</Id>
		<NrLog>1</NrLog>
		<NrTab>53</NrTab>
		<NrProc>91</NrProc>
		<ProcFun>PROCEDURE</ProcFun>
		<NzProc>KPGenStanZatrData</NzProc>
		<TextProc>
			CREATE PROCEDURE KPGenStanZatrData
			@0 datetime, --data naliczenia
			@1 varchar(10) --login operatora
			AS
			BEGIN
			-- SET NOCOUNT ON added to prevent extra result sets from
			-- interfering with SELECT statements.
			SET NOCOUNT ON
			DECLARE @typUmowy CHAR(1);
			DECLARE @nrEwid INT;
			DECLARE @nrUmowy VARCHAR(10);
			DECLARE @dataZmiany DATETIME;

			DECLARE @statusZatrudn VARCHAR(3)
			DECLARE @kodUmowy VARCHAR(7)
			DECLARE @kodZwoln VARCHAR(7)
			DECLARE @zaklad VARCHAR(7)
			DECLARE @komorka VARCHAR(7)
			DECLARE @stanowPr VARCHAR(7)
			DECLARE @rodzStanPr CHAR(1)
			DECLARE @sysWynagr VARCHAR(7)
			DECLARE @miejsceWyplaty VARCHAR(7)
			DECLARE @kodZawiesz VARCHAR(7)
			DECLARE @kodInwal VARCHAR(7)
			DECLARE @kodWykszt VARCHAR(7)
			DECLARE @kodWyksztGUS VARCHAR(7)
			DECLARE @kodZawodu VARCHAR(7)
			DECLARE @kodZawoduGUS VARCHAR(7)
			DECLARE @statusUmowy CHAR(1)
			DECLARE @wiek SMALLINT
			DECLARE @plec CHAR(1)
			DECLARE @etat VARCHAR(7)
			DECLARE @etatDec DECIMAL(8, 6)
			DECLARE @podstDodat CHAR(1)

			DECLARE @dataZmianySysWynagr DATETIME
			DECLARE @dataZmianyEtat DATETIME

			DECLARE @dataNaliczenia DATETIME
			DECLARE @operator VARCHAR(10)
			DECLARE @sySlow VARCHAR(3)
			DECLARE @sySlowKpSlStPr VARCHAR(3)
			DECLARE @sySlowWyksztGUS VARCHAR(3)
			DECLARE @sySlowZawodGUS VARCHAR(3)

			SET @dataNaliczenia = @0
			SET @operator = @1
			SET @sySlow = 'XKP'
			SET @sySlowKpSlStPr = 'XSS'
			SET @sySlowWyksztGUS = '104'
			SET @sySlowZawodGUS = '103'

			DECLARE c_kupic CURSOR FOR
			SELECT TypUmowy, NrEwid, NrUmowy
			FROM KPKUPiC
			WHERE  (DataZakoncz IS NULL AND DataUmowyDo IS NULL AND DataUmowyOd &lt;= @dataNaliczenia)
			OR (DataZakoncz IS NULL AND @dataNaliczenia BETWEEN DataUmowyOd AND DataUmowyDo)
			OR (DataZakoncz IS NOT NULL AND @dataNaliczenia BETWEEN DataUmowyOd AND DataZakoncz)

			--1. wstaw wiersz do KPStArchD
			INSERT INTO KPStArchD (SySlow, DataStanu, Oper, DataCzas)
			VALUES (@sySlow, @dataNaliczenia, @operator, GETDATE())

			--2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw
			--	 dla nich wiersz do KPStZatrD
			OPEN c_kupic
			FETCH NEXT FROM c_kupic
			INTO @typUmowy, @nrEwid, @nrUmowy;

			WHILE @@FETCH_STATUS = 0
			BEGIN
			--wybierz odpowiednia date zmiany z KPKHP (aby miec pelny klucz rekordu z KPKHP)
			SELECT @dataZmiany = MAX(KHP.DataZmiany)
			FROM	KPKHP KHP
			WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
			AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataNaliczenia
			GROUP BY NrEwid, TypUmowy, NrUmowy

			--wybierz dane do wstawienia
			SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
			@kodUmowy = KPKUPiC.KodUmowy,
			@kodZwoln = ISNULL(KPKHP.KodZwoln, ''),
			@zaklad = ISNULL(KPKHP.Zaklad, ''),
			@komorka = ISNULL(KPKHP.Komorka, ''),
			@stanowPr = ISNULL(KPKHP.StanowPr, ''),
			@rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
			@sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
			@miejsceWyplaty = ISNULL(KPKHP.MiejsceWypl, ''),
			@kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
			@kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
			@kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
			@kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
			@kodZawodu = KPKOP.KodZawoduWykon,
			@kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
			@statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
			@wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL THEN
			CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataNaliczenia), XKOP.DataUrodz) &gt; @dataNaliczenia
			THEN DATEDIFF (year, XKOP.DataUrodz, @dataNaliczenia) - 1
			ELSE DATEDIFF (year, XKOP.DataUrodz, @dataNaliczenia)
			END
			ELSE 0 END,
			@plec = ISNULL(XKOP.Plec, ''),
			@etat = ISNULL(KPKHP.Etat, ''),
			@etatDec = CASE WHEN KPKHP.Etat = '' OR CAST(RIGHT(KPKHP.Etat, 3) AS DECIMAL (3)) = 0 THEN 0 ELSE CAST(LEFT(KPKHP.Etat, 3) AS DECIMAL(3)) / CAST(RIGHT(KPKHP.Etat, 3) AS DECIMAL (3)) END, --EtatDec (licznik / mianownik z pola Etat)
			@podstDodat = KPKUPiC.PodstDodat
			FROM	KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
			LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
			LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
			LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
			LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
			LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
			LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataNaliczenia AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataNaliczenia)
			WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

			--start: skoryguj SysWynagr, jesli byla zmiana typu P w KPKHP pozniej niz U lub A
			--       &lt;notatka&gt; najwieksza date typu U lub A mam juz w zmiennej @dataZmiany, ponizej znajduje najwieksza date typu P, U, A
			--				  i nastepnie sprawdzam czy jest wieksza od @dataZmiany. Tym samym mam pewnosc ze jest typu P &lt;/notatka&gt;
			SELECT @dataZmianySysWynagr = MAX(KHP.DataZmiany)
			FROM	KPKHP KHP
			WHERE	(KHP.TypZmiany = 'P' OR KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
			AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataNaliczenia
			GROUP BY NrEwid, TypUmowy, NrUmowy

			IF @dataZmianySysWynagr IS NOT NULL AND @dataZmianySysWynagr &gt; @dataZmiany
			BEGIN
			SELECT @sysWynagr = KPKHP.sysWynagr
			FROM KPKHP
			WHERE KPKHP.NrEwid = @nrEwid AND KPKHP.TypUmowy = @typUmowy AND KPKHP.NrUmowy = @nrUmowy AND DataZmiany = @dataZmianySysWynagr
			END
			--koniec: skoryguj SysWynagr

			--start: skoryguj etat, jesli byla zmiana typu C pozniej niz P, U lub A
			--       &lt;notatka&gt;analogicznie jak w SysWynagr; zobacz notatke do korekcji SysWynagr, jezeli nie widzisz zwiazku ze specyfikacja&lt;/notatka&gt;
			SELECT @dataZmianySysWynagr = MAX(KHP.DataZmiany)
			FROM	KPKHP KHP
			WHERE	(KHP.TypZmiany = 'C' OR KHP.TypZmiany = 'P' OR KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
			AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataNaliczenia
			GROUP BY NrEwid, TypUmowy, NrUmowy

			IF @dataZmianyEtat IS NOT NULL AND @dataZmianyEtat &gt; @dataZmianySysWynagr
			BEGIN
			SET @etatDec = 0
			SET @etat = ''
			SET @statusUmowy = 'C'
			END
			--koniec: skoryguj etat

			--wstaw wiersz do KPSTZATRD
			INSERT INTO KPStZatrD (SySlow, DataStanu, TypUmowy, NrEwid, NrUmowy, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanPr, SysWynagr, MiejsceWyplaty, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, EtatDec, PodstDodat, Oper, DataCzas)
			VALUES (@sySlow, @dataNaliczenia, @typUmowy, @nrEwid, @nrUmowy, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWyplaty, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @etatDec, @podstDodat, @operator, GETDATE());


			FETCH NEXT FROM c_kupic
			INTO @typUmowy, @nrEwid, @nrUmowy;
			END

			CLOSE c_kupic
			DEALLOCATE c_kupic

			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>129</Id>
		<NrLog>1</NrLog>
		<NrTab>53</NrTab>
		<NrProc>92</NrProc>
		<ProcFun>PROCEDURE</ProcFun>
		<NzProc>KPGenStanZatrMc</NzProc>
		<TextProc>
			CREATE PROCEDURE KPGenStanZatrMc
			@0 int, --lp naliczenia
			@1 int, --rok stanu
			@2 int, --miesiac stanu
			@3 varchar(10) --login operatora
			AS
			BEGIN
			-- SET NOCOUNT ON added to prevent extra result sets from
			-- interfering with SELECT statements.
			SET NOCOUNT ON
			--zmienne: klucz w tabeli KPKHP
			DECLARE @typUmowy CHAR(1);
			DECLARE @nrEwid INT;
			DECLARE @nrUmowy VARCHAR(10);
			DECLARE @dataZmiany DATETIME;

			--zmienne: składowe rekorku KPStArchS
			DECLARE @statusZatrudn VARCHAR(3)
			DECLARE @kodUmowy VARCHAR(7)
			DECLARE @kodZwoln VARCHAR(7)
			DECLARE @zaklad VARCHAR(7)
			DECLARE @komorka VARCHAR(7)
			DECLARE @stanowPr VARCHAR(7)
			DECLARE @rodzStanPr CHAR(1)
			DECLARE @sysWynagr VARCHAR(7)
			DECLARE @miejsceWypl VARCHAR(7)
			DECLARE @kodZawiesz VARCHAR(7)
			DECLARE @kodInwal VARCHAR(7)
			DECLARE @kodWykszt VARCHAR(7)
			DECLARE @kodWyksztGUS VARCHAR(7)
			DECLARE @kodZawodu VARCHAR(7)
			DECLARE @kodZawoduGUS VARCHAR(7)
			DECLARE @statusUmowy CHAR(1)
			DECLARE @wiek SMALLINT
			DECLARE @plec CHAR(1)
			DECLARE @etat VARCHAR(7)
			DECLARE @dniEtatoPracy DECIMAL(10, 6)
			DECLARE @podstDodat CHAR(1)

			--zmienne: składowe rekorku KPStArchS, uzywane gdy jest zmiana umowy
			DECLARE @kodUmowyZmiana VARCHAR(7)
			DECLARE @kodZwolnZmiana VARCHAR(7)
			DECLARE @zakladZmiana VARCHAR(7)
			DECLARE @komorkaZmiana VARCHAR(7)
			DECLARE @stanowPrZmiana VARCHAR(7)
			DECLARE @sysWynagrZmiana VARCHAR(7)
			DECLARE @miejsceWyplZmiana VARCHAR(7)
			DECLARE @kodZawieszZmiana VARCHAR(7)

			--zmienne: zmienne pomocnicze, wyznaczaja przedzial poszikiwania zmian umowy
			DECLARE @dataStart DATETIME
			DECLARE @dataStop DATETIME
			DECLARE @dataNastZmiany DATETIME
			DECLARE @typZmiany CHAR(1)
			DECLARE @dZawieszDo DATETIME

			--zmienne: zmienne pomocnicze do sterowania petli
			DECLARE @koniec BIT

			--zmienne: parametry wywolania procedury (tu beda przepisane)
			DECLARE @lpNaliczenia INT
			DECLARE @rokStanu INT
			DECLARE @mcStanu INT
			DECLARE @operator VARCHAR(10)

			--zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
			DECLARE @dataOdStrPom VARCHAR(12)
			DECLARE @dataOd DATETIME
			DECLARE @dataDo DATETIME

			--zmienne: stale
			DECLARE @sySlow VARCHAR(3)
			DECLARE @sySlowKpSlStPr VARCHAR(3)
			DECLARE @sySlowWyksztGUS VARCHAR(3)
			DECLARE @sySlowZawodGUS VARCHAR(3)

			--przypisanie wartosci stalym, oraz przepisanie parametrow procedury
			SET @lpNaliczenia = @0
			SET @rokStanu = @1
			SET @mcStanu = @2
			SET @operator = @3
			SET @sySlow = 'XKP'
			SET @sySlowKpSlStPr = 'XSS'
			SET @sySlowWyksztGUS = '104'
			SET @sySlowZawodGUS = '103'

			--Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
			--dla danego roku stanu i miesiaca stanu
			SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
			SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
			SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

			--kursor po umowach
			DECLARE c_kupic CURSOR FOR
			SELECT TypUmowy, NrEwid, NrUmowy
			FROM KPKUPiC
			WHERE  (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataOd)
			OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataOd BETWEEN DataUmowyOd AND DataUmowyDo)
			OR (DataZakoncz IS NOT NULL AND @dataOd BETWEEN DataUmowyOd AND DataZakoncz)
			OR (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataDo)
			OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataDo BETWEEN DataUmowyOd AND DataUmowyDo)
			OR (DataZakoncz IS NOT NULL AND @dataDo BETWEEN DataUmowyOd AND DataZakoncz)

			--1. wstaw wiersz do KPStArchS
			INSERT INTO KPStArchS (SySlow, LpNaliczenia, RokStanu, McStanu, Oper, DataCzas)
			VALUES (@sySlow, @lpNaliczenia, @rokStanu, @mcStanu, @operator, GETDATE())

			--2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw dla nich wiersze do KPStZatrS
			OPEN c_kupic
			FETCH NEXT FROM c_kupic
			INTO @typUmowy, @nrEwid, @nrUmowy;

			WHILE @@FETCH_STATUS = 0
			BEGIN
			--2.1. wyzeruj zmienne pomocnicze
			SET @dniEtatoPracy = NULL
			SET @dataStart = @dataOd
			SET @dataStop = @dataDo
			SET @dataNastZmiany = NULL

			--2.2. znajdz mniejsza z dwoch dat: ostatniej zmiany o typie U lub A przed
			--	   @dataOd, oraz ostatniej zmiany o typie U lub A przed @dataDo
			SELECT @dataZmiany = MIN(DataZmiany)
			FROM
			(
			SELECT MAX(KHP.DataZmiany) DataZmiany
			FROM KPKHP KHP
			WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
			AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataOd
			UNION
			SELECT MAX(KHP.DataZmiany) DataZmiany
			FROM KPKHP KHP
			WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
			AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataDo
			) Daty

			--2.3. Wybierz wszystkie dane pracownika
			SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
			@kodUmowy = KPKHP.KodUmowy,
			@kodZwoln = KPKUPiC.KodZakoncz,
			@zaklad = ISNULL(KPKHP.Zaklad, ''),
			@komorka = ISNULL(KPKHP.Komorka, ''),
			@stanowPr = ISNULL(KPKHP.StanowPr, ''),
			@rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
			@sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
			@miejsceWypl = ISNULL(KPKHP.MiejsceWypl, ''),
			@kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
			@kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
			@kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
			@kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
			@kodZawodu = KPKOP.KodZawoduWykon,
			@kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
			@statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
			@wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL THEN
			CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataStart), XKOP.DataUrodz) &gt; @dataStart
			THEN DATEDIFF (year, XKOP.DataUrodz, @dataStart) - 1
			ELSE DATEDIFF (year, XKOP.DataUrodz, @dataStart)
			END
			ELSE 0 END,
			@plec = ISNULL(XKOP.Plec, ''),
			@etat = ISNULL(KPKHP.Etat, ''),
			@podstDodat = KPKUPiC.PodstDodat,
			@typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
			@dZawieszDo = KPKHP.DZawieszDo --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
			FROM	KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
			LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
			LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
			LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
			LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
			LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
			LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataStart AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataStart)
			WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

			--2.4. Dla kazdej zmiany umowy pracownika, wpisz wiersz w KPStArchS
			--     &lt;notatna_techniczna&gt;
			--     Tutaj mozna uzyc kursora, ktory bedzie zwracal kolejne
			--	   daty zmiany. Zysk: jedno zapytanie zamiast kliku w petli, gdy jest kilka zmian w miesiacu.
			--	   strata: jezeli w wiekszosci wypadkow jest jedna umowa w miesiacu, deklaracja i zwalnianie
			--	   kursora moze spowolnic dzialanie.&lt;/notatka_techniczna&gt;
			SET @koniec = 0
			WHILE @koniec = 0
			BEGIN
			--2.4.1. Wyznaczenie daty nastepnej zmiany
			SELECT @dataNastZmiany = MIN(DataZmiany)
			FROM (
			SELECT KHP.dataZmiany AS DataZmiany
			FROM   KPKHP KHP
			WHERE  KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy
			AND KHP.DataZmiany BETWEEN @dataOd AND @dataDo AND KHP.DataZmiany &gt; @dataZmiany
			UNION  --Zmiana to takze przyznanie stopnia inwalidzkiego
			SELECT KPKOPInwal.DataPrzyznania AS DataZmiany
			FROM   KPKOPInwal
			WHERE  KPKOPInwal.NrEwid = @nrEwid AND KPKOPInwal.DataPrzyznania BETWEEN @dataOd AND @dataDo AND KPKOPInwal.DataPrzyznania&gt; @dataStart
			AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
			UNION  --Zmiana to takze zakonczenie waznosci stopnia inwalidzkiego
			SELECT KPKOPInwal.DataWaznosci AS DataZmiany
			FROM   KPKOPInwal
			WHERE  KPKOPInwal.NrEwid = @nrEwid AND KPKOPInwal.DataWaznosci BETWEEN @dataOd AND @dataDo AND KPKOPInwal.DataWaznosci &gt; @dataStart
			AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
			UNION  --Zmiana to takze urodziny pracownika
			SELECT DATEADD(YEAR, DATEDIFF(YEAR, XKOP.DataUrodz, @dataOd), XKOP.DataUrodz)
			FROM   XKOP
			WHERE  XKOP.NrEwid = @nrEwid AND SySlow = @sySlow AND
			XKOP.DataUrodz IS NOT NULL AND MONTH(XKOP.DataUrodz) = MONTH(@dataOd)
			AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
			) Daty

			--2.4.2. Jesli typ zmiany jest C, to nalezy skorygowac dateNastepnejZmiany
			--		 aby uwzgledniala date konca okresu zawieszenia
			IF @typZmiany = 'C' AND
			(@dataNastZmiany IS NULL
			OR
			(@dZawieszDo IS NOT NULL AND @dZawieszDo &lt; @dataNastZmiany))
			SET @dataNastZmiany = @dZawieszDo

			--2.4.3. Zmien dateStop, jezeli jest nastepna zmiana
			IF @dataNastZmiany IS NOT NULL
			SET @dataStop = @dataNastZmiany

			--2.4.4. Wylicz dni etato-pracy
			IF @typZmiany = 'Z'
			SET @dniEtatoPracy = 1
			ELSE IF @typZmiany = 'U' OR @typZmiany = 'A' OR @typZmiany = 'P'
			BEGIN
			SET @dniEtatoPracy = DATEDIFF(DAY, @dataStart, @dataStop)
			IF @dataNastZmiany IS NULL
			SET @dniEtatoPracy = @dniEtatoPracy + 1
			END
			ELSE IF @typZmiany = 'C'
			SET @dniEtatoPracy = 0

			--2.4.5. Dopisz wiersz do KPStZatrS
			INSERT INTO KPStZatrS (SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanowPr, SysWynagr, MiejsceWypl, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, DniEtatoPrac, PodstDodat, Oper, DataCzas)
			VALUES (@sySlow, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataStart, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWypl, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @dniEtatoPracy, @podstDodat, @operator, GETDATE())

			--2.4.6. Jezeli jest kolejna zmiana - pobierz dane z tabeli do zmiennych
			--       dla nastepnej zmiany umowy
			--		 w przeciwnym wypadku koniec petli
			IF @dataNastZmiany IS NOT NULL
			BEGIN
			--2.4.6.1. Pobranie danych do zmiennych pomocniczych
			SELECT  @kodUmowyZmiana = KPKHP.KodUmowy,
			@kodZwolnZmiana = KPKHP.KodZwoln,
			@zakladZmiana = ISNULL(KPKHP.Zaklad, ''),
			@komorkaZmiana = ISNULL(KPKHP.Komorka, ''),
			@stanowPrZmiana = ISNULL(KPKHP.StanowPr, ''),
			@sysWynagrZmiana = ISNULL(KPKHP.SysWynagr, ''),
			@miejsceWyplZmiana = ISNULL(KPKHP.MiejsceWypl, ''),
			@kodZawieszZmiana = ISNULL(KPKHP.KodZawiesz, ''),
			@typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
			@dZawieszDo = KPKHP.DZawieszDo, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
			@kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
			@wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL THEN
			CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataStart), XKOP.DataUrodz) &gt; @dataStart
			THEN DATEDIFF (year, XKOP.DataUrodz, @dataStart) - 1
			ELSE DATEDIFF (year, XKOP.DataUrodz, @dataStart)
			END
			ELSE 0 END,
			@etat = ISNULL(KPKHP.Etat, '')
			FROM	KPKHP LEFT OUTER JOIN XKOP ON KPKHP.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
			LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKHP.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataStart AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataStart)
			WHERE   KPKHP.TypUmowy = @typUmowy AND KPKHP.NrEwid = @nrEwid AND KPKHP.NrUmowy = @nrUmowy AND
			KPKHP.dataZmiany = (SELECT MAX(KHP.DataZmiany) FROM KPKHP KHP WHERE KHP.DataZmiany &lt;= @dataNastZmiany)

			--2.4.6.2. Przepisanie danych ze zmiennych pomocniczych do zmiennych wlasciwych
			--		   w zaleznosci od typu zmiany
			IF @typZmiany = 'U'
			BEGIN
			SET @kodUmowy = @kodUmowyZmiana
			SET @zaklad = @zakladZmiana
			SET @komorka = @komorkaZmiana
			SET @stanowPr = @stanowPrZmiana
			SET @sysWynagr = @sysWynagrZmiana
			SET @miejsceWypl = @miejsceWyplZmiana
			END
			ELSE IF @typZmiany = 'A'
			BEGIN
			SET @zaklad = @zakladZmiana
			SET @komorka = @komorkaZmiana
			SET @stanowPr = @stanowPrZmiana
			SET @sysWynagr = @sysWynagrZmiana
			SET @miejsceWypl = @miejsceWyplZmiana
			END
			ELSE IF @typZmiany = 'Z'
			SET @kodZwoln = @kodZwolnZmiana
			ELSE IF @typZmiany = 'C'
			SET @kodZawiesz = @kodZawieszZmiana
			ELSE IF @typZmiany = 'P'
			BEGIN
			SET @sysWynagr = @sysWynagrZmiana
			SET @miejsceWypl = @miejsceWyplZmiana
			END

			--2.4.6.3. Przesun okres do wyszukiwania zmian
			SET @dataStart = @dataNastZmiany
			SET @dataStop = @dataDo
			SET @dataZmiany = @dataNastZmiany
			END
			ELSE
			SET @koniec = 1

			END --petla zmian dla jednej umowy

			FETCH NEXT FROM c_kupic
			INTO @typUmowy, @nrEwid, @nrUmowy;
			END

			CLOSE c_kupic
			DEALLOCATE c_kupic

			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>130</Id>
		<NrLog>1</NrLog>
		<NrTab>54</NrTab>
		<NrProc>92</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>131</Id>
		<NrLog>1</NrLog>
		<NrTab>55</NrTab>
		<NrProc>92</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>132</Id>
		<NrLog>1</NrLog>
		<NrTab>56</NrTab>
		<NrProc>92</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>133</Id>
		<NrLog>1</NrLog>
		<NrTab>57</NrTab>
		<NrProc>92</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>134</Id>
		<NrLog>1</NrLog>
		<NrTab>58</NrTab>
		<NrProc>93</NrProc>
		<ProcFun>PROCEDURE</ProcFun>
		<NzProc>KPGenStanSOData</NzProc>
		<TextProc>
				-- =============================================
				-- Author:		Maciej Franecki
				-- Create date: 2007-01-08
				-- Description:	Procedura generuje stan zatrudnienia dla zadanej daty i wybranej definicji struktury organizacyjnej
				-- =============================================
				CREATE PROCEDURE KPGenStanSOData
				@0 datetime, --data naliczenia
				@1 varchar(10),  --login operatora
				@2 smallint, --nrDef -&gt; nr struktury org
				@3 smallint  --Okres obrachunkowy
				AS
				BEGIN
				-- SET NOCOUNT ON added to prevent extra result sets from
				-- interfering with SELECT statements.
				SET NOCOUNT ON

				DECLARE @dataNaliczenia DATETIME
				DECLARE @operator VARCHAR(10)
				DECLARE @nrDef SMALLINT
				DECLARE @okresO SMALLINT

				SET @dataNaliczenia = @0
				SET @operator = @1
				SET @nrDef = @2
				SET @okresO = @3

				DECLARE @iloscNaliczenDlaDaty INTEGER

				--0. jezeli jest juz naliczenie: koniec funkcji
				SELECT @iloscNaliczenDlaDaty = COUNT(*)
				FROM KPStZatrSoD
				WHERE DataStanu = @dataNaliczenia AND NrDef = @nrDef

				IF @iloscNaliczenDlaDaty &gt; 0
				BEGIN
				RETURN
				END;

				-- wlasciwa czesc procedury
				DECLARE @dlugoscSySlow INTEGER
				DECLARE @dlugoscKod INTEGER
				DECLARE @dlugoscAdresPop INTEGER
				DECLARE	@indexStart INTEGER
				DECLARE @sySlowAdresPop VARCHAR(3)
				DECLARE @kodAdresPop VARCHAR(7)

				DECLARE @sySlowZaklady VARCHAR(3)
				DECLARE @sySlowKomorki VARCHAR(3)
				DECLARE @sySlowStanowPr VARCHAR(3)
				DECLARE @sySlowSysWynagr VARCHAR(3)
				DECLARE @sySlowXKP VARCHAR(3)

				SET @sySlowZaklady = 'XSZ'
				SET @sySlowKomorki = 'XSK'
				SET @sySlowStanowPr = 'XSS'
				SET @sySlowSysWynagr = 'XSW'
				SET @sySlowXKP = 'XKP'

				SET @dlugoscSySlow = 3;
				SET @dlugoscKod = 7;

				DECLARE @zaklad VARCHAR(7)
				DECLARE @komorka VARCHAR(7)
				DECLARE @stanowPr VARCHAR(7)
				DECLARE @sysWynagr VARCHAR(7)
				DECLARE @nrEwid INTEGER
				DECLARE @typUmowy VARCHAR(1)
				DECLARE @nrUmowy VARCHAR(10)

				DECLARE @adresPop VARCHAR(100)
				DECLARE @sySlowSegm VARCHAR(3)
				DECLARE @kodElem VARCHAR(7)
				DECLARE @lpPoz SMALLINT
				DECLARE @lpPrez SMALLINT

				DECLARE @zaklad7 VARCHAR(7)
				DECLARE @komorka7 VARCHAR(7)
				DECLARE @stanowPr7 VARCHAR(7)
				DECLARE @sysWynagr7 VARCHAR(7)

				DECLARE @pobranoWierszStZatrD INTEGER
				DECLARE @pobranoWierszXSODef INTEGER

				DECLARE @iloscNiezgodnychWezlow INTEGER
				DECLARE @tabelaPar TABLE
				(
				SySlow VARCHAR(3),
				Kod VARCHAR(10)
				)
				DECLARE @iloscZgodnychWezlow INTEGER
				DECLARE @tabelaNiepowiazanychWezlow TABLE
				(
				NrDef SMALLINT,
				LpPrez SMALLINT,
				SySlowSegm VARCHAR(3),
				KodElem VARCHAR(10),
				AdresPop VARCHAR(100)
				)

				DECLARE c_stZatrD CURSOR FOR
				SELECT TypUmowy, NrEwid, NrUmowy, Zaklad, Komorka, StanowPr, SysWynagr
				FROM   KPStZatrD
				WHERE  SySlow = @sySlowXKP AND DataStanu = @dataNaliczenia

				DECLARE c_xsoDef CURSOR FOR
				SELECT   LpPoz, SySlowSegm, KodElem, AdresPop, LpPrez
				FROM     XSODef
				WHERE    OkresO = @okresO AND NrDef = @nrDef
				ORDER BY LpPrez

				--1. dla kazdego wiersza w StZatrD...
				OPEN c_stZatrD
				FETCH NEXT FROM c_stZatrD
				INTO @typUmowy, @nrEwid, @nrUmowy, @zaklad, @komorka, @stanowPr, @sysWynagr
				SET @pobranoWierszStZatrD = @@FETCH_STATUS

				WHILE @pobranoWierszStZatrD = 0
				BEGIN
				--1.1. depelnij symbole zakladu, komorki, stanowPr, sysWynagr do 7 znakow
				SET @zaklad7    = @zaklad    + SPACE(@dlugoscKod - LEN(REPLACE(@zaklad,    ' ', '.')))
				SET @komorka7   = @komorka   + SPACE(@dlugoscKod - LEN(REPLACE(@komorka,   ' ', '.')))
				SET @stanowPr7  = @stanowPr  + SPACE(@dlugoscKod - LEN(REPLACE(@stanowPr,  ' ', '.')))
				SET @sysWynagr7 = @sysWynagr + SPACE(@dlugoscKod - LEN(REPLACE(@sysWynagr, ' ', '.')))

				--2. dla kazdego wiersza w XSODef
				OPEN c_xsoDef
				FETCH NEXT FROM c_xsoDef
				INTO @lpPoz, @sySlowSegm, @kodElem, @adresPop, @lpPrez
				SET @pobranoWierszXSODef = @@FETCH_STATUS

				WHILE @pobranoWierszXSODef = 0
				BEGIN
				SET @dlugoscAdresPop = LEN( REPLACE(@adresPop, ' ', '.') )
				--2.0. Jezeli wezel jest korzeniem, wyczysc tabele niepowiazanych wezlow
				IF @dlugoscAdresPop = 0
				BEGIN
				DELETE FROM @tabelaNiepowiazanychWezlow
				END

				--2.1. Przygotowanie tabeli par poprzez dodanie do niej wszystkich sySlow + kod
				--	   w adresie wezla w strukturze org.
				DELETE FROM @tabelaPar

				SET @indexStart = 0;
				WHILE @indexStart &lt; @dlugoscAdresPop
				BEGIN
				SET @sySlowAdresPop = LEFT( RIGHT(@adresPop, @dlugoscAdresPop - @indexStart), @dlugoscSySlow )
				SET @indexStart		= @indexStart + @dlugoscSySlow
				SET @kodAdresPop    = LEFT( RIGHT(@adresPop, @dlugoscAdresPop - @indexStart), @dlugoscKod )
				SET @indexStart		= @indexStart + @dlugoscKod

				INSERT INTO @tabelaPar(SySlow, Kod)
				VALUES (@sySlowAdresPop, @kodAdresPop)
				END

				INSERT INTO @tabelaPar(SySlow, Kod)
				VALUES (@sySlowSegm, @kodElem)

				--2.2. Sprawdzenie czy wystepuje niezgodnosc miedzy naliczeniem a wezlem struktury
				SELECT @iloscNiezgodnychWezlow = COUNT(*)
				FROM @tabelaPar
				WHERE sySlow = @sySlowZaklady AND kod &lt;&gt; @zaklad7
				OR sySlow = @sySlowKomorki AND kod &lt;&gt; @komorka7
				OR sySlow = @sySlowStanowPr AND kod &lt;&gt; @stanowPr7
				OR sySlow = @sySlowSysWynagr AND kod &lt;&gt; @sysWynagr7

				IF @iloscNiezgodnychWezlow = 0
				BEGIN
				--2.2.1. Wstaw wezel do tabeli potencjalnie zgodnych wezlow
				INSERT INTO @tabelaNiepowiazanychWezlow(NrDef, LpPrez, SySlowSegm, KodElem, AdresPop)
				VALUES (@nrDef, @lpPrez, @sySlowSegm, @kodElem, @adresPop)

				--2.2.2. Sprawdzenie czy wystepuje choc jeden zgodny element w wezle i danych pracownika
				SELECT @iloscZgodnychWezlow = COUNT(*)
				FROM @tabelaPar
				WHERE sySlow = @sySlowZaklady AND kod = @zaklad7
				OR sySlow = @sySlowKomorki AND kod = @komorka7
				OR sySlow = @sySlowStanowPr AND kod = @stanowPr7
				OR sySlow = @sySlowSysWynagr AND kod = @sysWynagr7

				--2.2.3. Jezeli choc jeden element jest zgodny, wstaw do KPStZatrSoS wezel oraz wszystkie niepowiazane wezly - rodzice
				IF @iloscZgodnychWezlow &gt; 0
				BEGIN
				INSERT INTO KPStZatrSoD(SySlow, DataStanu, TypUmowy, NrEwid, NrUmowy, NrDef, LpPrez, SySlowElem, KodElem, AdresPop, Oper, DataCzas)
				SELECT @sySlowXKP, @dataNaliczenia, @typUmowy, @nrEwid, @nrUmowy, Wezly.NrDef, Wezly.LpPrez, Wezly.SySlowSegm, Wezly.KodElem, Wezly.AdresPop, @operator, GETDATE()
				FROM @tabelaNiepowiazanychWezlow Wezly

				DELETE FROM @tabelaNiepowiazanychWezlow
				END
				END

				--pobierz kolejny wiersz XSODef
				FETCH NEXT FROM c_xsoDef
				INTO @lpPoz, @sySlowSegm, @kodElem, @adresPop, @lpPrez
				SET @pobranoWierszXSODef = @@FETCH_STATUS
				END
				CLOSE c_xsoDef

				--pobierz kolejny wiersz StZatrD
				FETCH NEXT FROM c_stZatrD
				INTO @typUmowy, @nrEwid, @nrUmowy, @zaklad, @komorka, @stanowPr, @sysWynagr
				SET @pobranoWierszStZatrD = @@FETCH_STATUS
				END
				CLOSE c_stZatrD

				DEALLOCATE c_xsoDef
				DEALLOCATE c_stZatrD
				END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>135</Id>
		<NrLog>1</NrLog>
		<NrTab>58</NrTab>
		<NrProc>94</NrProc>
		<ProcFun>PROCEDURE</ProcFun>
		<NzProc>KPGenStanSOMc</NzProc>
		<TextProc>
			-- =============================================
			-- Author:		Maciej Franecki
			-- Create date: 2008-03-10
			-- Description:	Procedura generuje stan zatrudnienia dla zadanego miesiaca i wybranej definicji struktury organizacyjnej
			-- =============================================
			CREATE PROCEDURE KPGenStanSOMc
			@0 int, --lp naliczenia
			@1 int, --rok stanu
			@2 int, --miesiac stanu
			@3 varchar(10),  --login operatora
			@4 smallint, --nrDef -&gt; nr struktury org
			@5 smallint  --Okres obrachunkowy
			AS
			BEGIN
			-- SET NOCOUNT ON added to prevent extra result sets from
			-- interfering with SELECT statements.
			SET NOCOUNT ON

			DECLARE @lpNaliczenia INT
			DECLARE @rokStanu SMALLINT
			DECLARE @mcStanu SMALLINT
			DECLARE @operator VARCHAR(10)
			DECLARE @nrDef SMALLINT
			DECLARE @okresO SMALLINT

			--zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
			DECLARE @dataOdStrPom VARCHAR(12)
			DECLARE @dataOd DATETIME
			DECLARE @dataDo DATETIME

			SET @lpNaliczenia = @0
			SET @rokStanu = @1
			SET @mcStanu = @2
			SET @operator = @3
			SET @nrDef = @4
			SET @okresO = @5

			--Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
			--dla danego roku stanu i miesiaca stanu
			SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
			SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
			SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

			DECLARE @iloscNaliczenDlaDaty INTEGER

			--0. jezeli jest juz naliczenie: koniec funkcji
			SELECT @iloscNaliczenDlaDaty = COUNT(*)
			FROM KPStZatrSoS
			WHERE LpNaliczenia = @lpNaliczenia AND NrDef = @nrDef

			IF @iloscNaliczenDlaDaty &gt; 0
			BEGIN
			RETURN
			END;

			-- wlasciwa czesc procedury
			DECLARE @dlugoscSySlow INTEGER
			DECLARE @dlugoscKod INTEGER
			DECLARE @dlugoscAdresPop INTEGER
			DECLARE	@indexStart INTEGER
			DECLARE @sySlowAdresPop VARCHAR(3)
			DECLARE @kodAdresPop VARCHAR(7)

			DECLARE @sySlowZaklady VARCHAR(3)
			DECLARE @sySlowKomorki VARCHAR(3)
			DECLARE @sySlowStanowPr VARCHAR(3)
			DECLARE @sySlowSysWynagr VARCHAR(3)
			DECLARE @sySlowXKP VARCHAR(3)

			SET @sySlowZaklady = 'XSZ'
			SET @sySlowKomorki = 'XSK'
			SET @sySlowStanowPr = 'XSS'
			SET @sySlowSysWynagr = 'XSW'
			SET @sySlowXKP = 'XKP'

			SET @dlugoscSySlow = 3;
			SET @dlugoscKod = 7;

			DECLARE @zaklad VARCHAR(7)
			DECLARE @komorka VARCHAR(7)
			DECLARE @stanowPr VARCHAR(7)
			DECLARE @sysWynagr VARCHAR(7)
			DECLARE @nrEwid INTEGER
			DECLARE @typUmowy VARCHAR(1)
			DECLARE @nrUmowy VARCHAR(10)
			DECLARE @dataZmiany DATETIME

			DECLARE @adresPop VARCHAR(100)
			DECLARE @sySlowSegm VARCHAR(3)
			DECLARE @kodElem VARCHAR(7)
			DECLARE @lpPoz SMALLINT
			DECLARE @lpPrez SMALLINT

			DECLARE @zaklad7 VARCHAR(7)
			DECLARE @komorka7 VARCHAR(7)
			DECLARE @stanowPr7 VARCHAR(7)
			DECLARE @sysWynagr7 VARCHAR(7)

			DECLARE @pobranoWierszStZatrS INTEGER
			DECLARE @pobranoWierszXSODef INTEGER

			DECLARE @iloscNiezgodnychWezlow INTEGER
			DECLARE @tabelaPar TABLE
			(
			SySlow VARCHAR(3),
			Kod VARCHAR(10)
			)
			DECLARE @iloscZgodnychWezlow INTEGER
			DECLARE @tabelaNiepowiazanychWezlow TABLE
			(
			NrDef SMALLINT,
			LpPrez SMALLINT,
			SySlowSegm VARCHAR(3),
			KodElem VARCHAR(10),
			AdresPop VARCHAR(100)
			)

			DECLARE c_stZatrS CURSOR FOR
			SELECT TypUmowy, NrEwid, NrUmowy, Zaklad, Komorka, StanowPr, SysWynagr, DataZmiany
			FROM   KPStZatrS
			WHERE  SySlow = @sySlowXKP AND LpNaliczenia = @lpNaliczenia AND
			DataZmiany BETWEEN @dataOd AND @dataDo

			DECLARE c_xsoDef CURSOR FOR
			SELECT   LpPoz, SySlowSegm, KodElem, AdresPop, LpPrez
			FROM     XSODef
			WHERE    OkresO = @okresO AND NrDef = @nrDef
			ORDER BY LpPrez


			--1. dla kazdego wiersza w StZatrS...
			OPEN c_stZatrS
			FETCH NEXT FROM c_stZatrS
			INTO @typUmowy, @nrEwid, @nrUmowy, @zaklad, @komorka, @stanowPr, @sysWynagr, @dataZmiany
			SET @pobranoWierszStZatrS = @@FETCH_STATUS

			WHILE @pobranoWierszStZatrS = 0
			BEGIN
			--1.1. depelnij symbole zakladu, komorki, stanowPr, sysWynagr do 7 znakow
			SET @zaklad7    = @zaklad    + SPACE(@dlugoscKod - LEN(REPLACE(@zaklad,    ' ', '.')))
			SET @komorka7   = @komorka   + SPACE(@dlugoscKod - LEN(REPLACE(@komorka,   ' ', '.')))
			SET @stanowPr7  = @stanowPr  + SPACE(@dlugoscKod - LEN(REPLACE(@stanowPr,  ' ', '.')))
			SET @sysWynagr7 = @sysWynagr + SPACE(@dlugoscKod - LEN(REPLACE(@sysWynagr, ' ', '.')))

			--2. dla kazdego wiersza w XSODef
			OPEN c_xsoDef
			FETCH NEXT FROM c_xsoDef
			INTO @lpPoz, @sySlowSegm, @kodElem, @adresPop, @lpPrez
			SET @pobranoWierszXSODef = @@FETCH_STATUS

			WHILE @pobranoWierszXSODef = 0
			BEGIN
			SET @dlugoscAdresPop = LEN( REPLACE(@adresPop, ' ', '.') )
			--2.0. Jezeli wezel jest korzeniem, wyczysc tabele niepowiazanych wezlow
			IF @dlugoscAdresPop = 0
			BEGIN
			DELETE FROM @tabelaNiepowiazanychWezlow
			END

			--2.1. Przygotowanie tabeli par poprzez dodanie do niej wszystkich sySlow + kod
			--	   w adresie wezla w strukturze org.
			DELETE FROM @tabelaPar

			SET @indexStart = 0;
			WHILE @indexStart &lt; @dlugoscAdresPop
			BEGIN
			SET @sySlowAdresPop = LEFT( RIGHT(@adresPop, @dlugoscAdresPop - @indexStart), @dlugoscSySlow )
			SET @indexStart		= @indexStart + @dlugoscSySlow
			SET @kodAdresPop    = LEFT( RIGHT(@adresPop, @dlugoscAdresPop - @indexStart), @dlugoscKod )
			SET @indexStart		= @indexStart + @dlugoscKod

			INSERT INTO @tabelaPar(SySlow, Kod)
			VALUES (@sySlowAdresPop, @kodAdresPop)
			END

			INSERT INTO @tabelaPar(SySlow, Kod)
			VALUES (@sySlowSegm, @kodElem)

			--2.2. Sprawdzenie czy wystepuje niezgodnosc miedzy naliczeniem a wezlem struktury
			SELECT @iloscNiezgodnychWezlow = COUNT(*)
			FROM @tabelaPar
			WHERE sySlow = @sySlowZaklady AND kod &lt;&gt; @zaklad7
			OR sySlow = @sySlowKomorki AND kod &lt;&gt; @komorka7
			OR sySlow = @sySlowStanowPr AND kod &lt;&gt; @stanowPr7
			OR sySlow = @sySlowSysWynagr AND kod &lt;&gt; @sysWynagr7

			IF @iloscNiezgodnychWezlow = 0
			BEGIN
			--2.2.1. Wstaw wezel do tabeli potencjalnie zgodnych wezlow
			INSERT INTO @tabelaNiepowiazanychWezlow(NrDef, LpPrez, SySlowSegm, KodElem, AdresPop)
			VALUES (@nrDef, @lpPrez, @sySlowSegm, @kodElem, @adresPop)

			--2.2.2. Sprawdzenie czy wystepuje choc jeden zgodny element w wezle i danych pracownika
			SELECT @iloscZgodnychWezlow = COUNT(*)
			FROM @tabelaPar
			WHERE sySlow = @sySlowZaklady AND kod = @zaklad7
			OR sySlow = @sySlowKomorki AND kod = @komorka7
			OR sySlow = @sySlowStanowPr AND kod = @stanowPr7
			OR sySlow = @sySlowSysWynagr AND kod = @sysWynagr7

			--2.2.3. Jezeli choc jeden element jest zgodny, wstaw do KPStZatrSoS wezel oraz wszystkie niepowiazane wezly - rodzice
			IF @iloscZgodnychWezlow &gt; 0
			BEGIN
			INSERT INTO KPStZatrSoS(SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, NrDef, LpPrez, SySlowElem, KodElem, AdresPop, Oper, DataCzas)
			SELECT @sySlowXKP, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany, Wezly.NrDef, Wezly.LpPrez, Wezly.SySlowSegm, Wezly.KodElem, Wezly.AdresPop, @operator, GETDATE()
			FROM @tabelaNiepowiazanychWezlow Wezly

			DELETE FROM @tabelaNiepowiazanychWezlow
			END
			END

			--pobierz kolejny wiersz XSODef
			FETCH NEXT FROM c_xsoDef
			INTO @lpPoz, @sySlowSegm, @kodElem, @adresPop, @lpPrez
			SET @pobranoWierszXSODef = @@FETCH_STATUS
			END
			CLOSE c_xsoDef

			--pobierz kolejny wiersz StZatrS
			FETCH NEXT FROM c_stZatrS
			INTO @typUmowy, @nrEwid, @nrUmowy, @zaklad, @komorka, @stanowPr, @sysWynagr, @dataZmiany
			SET @pobranoWierszStZatrS = @@FETCH_STATUS
			END
			CLOSE c_stZatrS

			DEALLOCATE c_xsoDef
			DEALLOCATE c_stZatrS
			END
		</TextProc>
	</TabProcki>	
	<TabProcki>
		<Id>136</Id>
		<NrLog>1</NrLog>
		<NrTab>58</NrTab>
		<NrProc>95</NrProc>
		<ProcFun>PROCEDURE</ProcFun>
		<NzProc>KPGenStanZatrData</NzProc>
		<TextProc>
			-- =============================================
			-- Author:		Maciej Franecki
			-- Create date: 2008-03-06
			-- Description:	Procedura generuje stan zatrudnienia dla zadanej daty
			-- =============================================
			CREATE PROCEDURE KPGenStanZatrData
			@0 datetime, --data naliczenia
			@1 varchar(10) --login operatora
			AS
			BEGIN
			-- SET NOCOUNT ON added to prevent extra result sets from
			-- interfering with SELECT statements.
			SET NOCOUNT ON
			DECLARE @typUmowy CHAR(1);
			DECLARE @nrEwid INT;
			DECLARE @nrUmowy VARCHAR(10);
			DECLARE @dataZmiany DATETIME;

			DECLARE @statusZatrudn VARCHAR(3)
			DECLARE @kodUmowy VARCHAR(7)
			DECLARE @kodZwoln VARCHAR(7)
			DECLARE @zaklad VARCHAR(7)
			DECLARE @komorka VARCHAR(7)
			DECLARE @stanowPr VARCHAR(7)
			DECLARE @rodzStanPr CHAR(1)
			DECLARE @sysWynagr VARCHAR(7)
			DECLARE @miejsceWyplaty VARCHAR(7)
			DECLARE @kodZawiesz VARCHAR(7)
			DECLARE @kodInwal VARCHAR(7)
			DECLARE @kodWykszt VARCHAR(7)
			DECLARE @kodWyksztGUS VARCHAR(7)
			DECLARE @kodZawodu VARCHAR(7)
			DECLARE @kodZawoduGUS VARCHAR(7)
			DECLARE @statusUmowy CHAR(1)
			DECLARE @wiek SMALLINT
			DECLARE @plec CHAR(1)
			DECLARE @etat VARCHAR(7)
			DECLARE @etatDec DECIMAL(8, 6)
			DECLARE @podstDodat CHAR(1)

			DECLARE @dataZmianySysWynagr DATETIME
			DECLARE @dataZmianyEtat DATETIME

			DECLARE @dataNaliczenia DATETIME
			DECLARE @operator VARCHAR(10)
			DECLARE @sySlow VARCHAR(3)
			DECLARE @sySlowKpSlStPr VARCHAR(3)
			DECLARE @sySlowWyksztGUS VARCHAR(3)
			DECLARE @sySlowZawodGUS VARCHAR(3)

			SET @dataNaliczenia = @0
			SET @operator = @1
			SET @sySlow = 'XKP'
			SET @sySlowKpSlStPr = 'XSS'
			SET @sySlowWyksztGUS = '104'
			SET @sySlowZawodGUS = '103'

			DECLARE c_kupic CURSOR FOR
			SELECT TypUmowy, NrEwid, NrUmowy
			FROM KPKUPiC
			WHERE  (DataZakoncz IS NULL AND DataUmowyDo IS NULL AND DataUmowyOd &lt;= @dataNaliczenia)
			OR (DataZakoncz IS NULL AND @dataNaliczenia BETWEEN DataUmowyOd AND DataUmowyDo)
			OR (DataZakoncz IS NOT NULL AND @dataNaliczenia BETWEEN DataUmowyOd AND DataZakoncz)

			--1. wstaw wiersz do KPStArchD
			INSERT INTO KPStArchD (SySlow, DataStanu, Oper, DataCzas)
			VALUES (@sySlow, @dataNaliczenia, @operator, GETDATE())

			--2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw
			--	 dla nich wiersz do KPStZatrD
			OPEN c_kupic
			FETCH NEXT FROM c_kupic
			INTO @typUmowy, @nrEwid, @nrUmowy;

			WHILE @@FETCH_STATUS = 0
			BEGIN
			--wybierz odpowiednia date zmiany z KPKHP (aby miec pelny klucz rekordu z KPKHP)
			SELECT @dataZmiany = MAX(KHP.DataZmiany)
			FROM	KPKHP KHP
			WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
			AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataNaliczenia
			GROUP BY NrEwid, TypUmowy, NrUmowy

			--wybierz dane do wstawienia
			SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
			@kodUmowy = KPKUPiC.KodUmowy,
			@kodZwoln = ISNULL(KPKHP.KodZwoln, ''),
			@zaklad = ISNULL(KPKHP.Zaklad, ''),
			@komorka = ISNULL(KPKHP.Komorka, ''),
			@stanowPr = ISNULL(KPKHP.StanowPr, ''),
			@rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
			@sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
			@miejsceWyplaty = ISNULL(KPKHP.MiejsceWypl, ''),
			@kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
			@kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
			@kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
			@kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
			@kodZawodu = KPKOP.KodZawoduWykon,
			@kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
			@statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
			@wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL THEN
			CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataNaliczenia), XKOP.DataUrodz) &gt; @dataNaliczenia
			THEN DATEDIFF (year, XKOP.DataUrodz, @dataNaliczenia) - 1
			ELSE DATEDIFF (year, XKOP.DataUrodz, @dataNaliczenia)
			END
			ELSE 0 END,
			@plec = ISNULL(XKOP.Plec, ''),
			@etat = ISNULL(KPKHP.Etat, ''),
			@etatDec = CASE WHEN KPKHP.Etat IS NULL OR KPKHP.Etat = '' OR CAST(RIGHT(KPKHP.Etat, 3) AS DECIMAL (3)) = 0 THEN 0 ELSE CAST(LEFT(KPKHP.Etat, 3) AS DECIMAL(3)) / CAST(RIGHT(KPKHP.Etat, 3) AS DECIMAL (3)) END, --EtatDec (licznik / mianownik z pola Etat)
			@podstDodat = KPKUPiC.PodstDodat
			FROM	KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
			LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
			LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
			LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
			LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
			LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
			LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataNaliczenia AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataNaliczenia)
			WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

			--start: skoryguj SysWynagr, jesli byla zmiana typu P w KPKHP pozniej niz U lub A
			--       [notatka]najwieksza date typu U lub A mam juz w zmiennej @dataZmiany, ponizej znajduje najwieksza date typu P, U, A
			--				  i nastepnie sprawdzam czy jest wieksza od @dataZmiany. Tym samym mam pewnosc ze jest typu P[/notatka]
			SELECT @dataZmianySysWynagr = MAX(KHP.DataZmiany)
			FROM	KPKHP KHP
			WHERE	(KHP.TypZmiany = 'P' OR KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
			AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataNaliczenia
			GROUP BY NrEwid, TypUmowy, NrUmowy

			IF @dataZmianySysWynagr IS NOT NULL AND @dataZmianySysWynagr &gt; @dataZmiany
			BEGIN
			SELECT @sysWynagr = KPKHP.sysWynagr
			FROM KPKHP
			WHERE KPKHP.NrEwid = @nrEwid AND KPKHP.TypUmowy = @typUmowy AND KPKHP.NrUmowy = @nrUmowy AND DataZmiany = @dataZmianySysWynagr
			END
			--koniec: skoryguj SysWynagr

			--start: skoryguj etat, jesli byla zmiana typu C pozniej niz P, U lub A
			--       [notatka]analogicznie jak w SysWynagr; zobacz notatke do korekcji SysWynagr, jezeli nie widzisz zwiazku ze specyfikacja[/notatka]
			SELECT @dataZmianySysWynagr = MAX(KHP.DataZmiany)
			FROM	KPKHP KHP
			WHERE	(KHP.TypZmiany = 'C' OR KHP.TypZmiany = 'P' OR KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
			AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataNaliczenia
			GROUP BY NrEwid, TypUmowy, NrUmowy

			IF @dataZmianyEtat IS NOT NULL AND @dataZmianyEtat &gt; @dataZmianySysWynagr
			BEGIN
			SET @etatDec = 0
			SET @etat = ''
			SET @statusUmowy = 'C'
			END
			--koniec: skoryguj etat

			--wstaw wiersz do KPSTZATRD
			INSERT INTO KPStZatrD (SySlow, DataStanu, TypUmowy, NrEwid, NrUmowy, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanPr, SysWynagr, MiejsceWyplaty, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, EtatDec, PodstDodat, Oper, DataCzas)
			VALUES (@sySlow, @dataNaliczenia, @typUmowy, @nrEwid, @nrUmowy, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWyplaty, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @etatDec, @podstDodat, @operator, GETDATE());


			FETCH NEXT FROM c_kupic
			INTO @typUmowy, @nrEwid, @nrUmowy;
			END

			CLOSE c_kupic
			DEALLOCATE c_kupic

			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>137</Id>
		<NrLog>1</NrLog>
		<NrTab>58</NrTab>
		<NrProc>96</NrProc>
		<ProcFun>PROCEDURE</ProcFun>
		<NzProc>KPGenStanZatrMc</NzProc>
		<TextProc>
			CREATE PROCEDURE KPGenStanZatrMc
			@0 int, --lp naliczenia
			@1 int, --rok stanu
			@2 int, --miesiac stanu
			@3 varchar(10) --login operatora
			AS
			BEGIN
			-- SET NOCOUNT ON added to prevent extra result sets from
			-- interfering with SELECT statements.
			SET NOCOUNT ON
			--zmienne: klucz w tabeli KPKHP
			DECLARE @typUmowy CHAR(1);
			DECLARE @nrEwid INT;
			DECLARE @nrUmowy VARCHAR(10);
			DECLARE @dataZmiany DATETIME;

			--zmienne: składowe rekorku KPStArchS
			DECLARE @statusZatrudn VARCHAR(3)
			DECLARE @kodUmowy VARCHAR(7)
			DECLARE @kodZwoln VARCHAR(7)
			DECLARE @zaklad VARCHAR(7)
			DECLARE @komorka VARCHAR(7)
			DECLARE @stanowPr VARCHAR(7)
			DECLARE @rodzStanPr CHAR(1)
			DECLARE @sysWynagr VARCHAR(7)
			DECLARE @miejsceWypl VARCHAR(7)
			DECLARE @kodZawiesz VARCHAR(7)
			DECLARE @kodInwal VARCHAR(7)
			DECLARE @kodWykszt VARCHAR(7)
			DECLARE @kodWyksztGUS VARCHAR(7)
			DECLARE @kodZawodu VARCHAR(7)
			DECLARE @kodZawoduGUS VARCHAR(7)
			DECLARE @statusUmowy CHAR(1)
			DECLARE @wiek SMALLINT
			DECLARE @plec CHAR(1)
			DECLARE @etat VARCHAR(7)
			DECLARE @dniEtatoPracy DECIMAL(10, 6)
			DECLARE @podstDodat CHAR(1)

			--zmienne: składowe rekorku KPStArchS, uzywane gdy jest zmiana umowy
			DECLARE @kodUmowyZmiana VARCHAR(7)
			DECLARE @kodZwolnZmiana VARCHAR(7)
			DECLARE @zakladZmiana VARCHAR(7)
			DECLARE @komorkaZmiana VARCHAR(7)
			DECLARE @stanowPrZmiana VARCHAR(7)
			DECLARE @sysWynagrZmiana VARCHAR(7)
			DECLARE @miejsceWyplZmiana VARCHAR(7)
			DECLARE @kodZawieszZmiana VARCHAR(7)
			DECLARE @etatZmiana VARCHAR(7)

			--zmienne: zmienne pomocnicze, wyznaczaja przedzial poszikiwania zmian umowy
			DECLARE @dataStop DATETIME
			DECLARE @dataNastZmiany DATETIME
			DECLARE @typZmiany CHAR(1)
			DECLARE @typZmianyPoprzedni CHAR(1)
			DECLARE @dZawieszDo DATETIME
			DECLARE @dZawieszDoZmiana DATETIME

			--zmienne: zmienne pomocnicze do sterowania petli
			DECLARE @koniec BIT

			--zmienne: parametry wywolania procedury (tu beda przepisane)
			DECLARE @lpNaliczenia INT
			DECLARE @rokStanu INT
			DECLARE @mcStanu INT
			DECLARE @operator VARCHAR(10)

			--zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
			DECLARE @dataOdStrPom VARCHAR(12)
			DECLARE @dataOd DATETIME
			DECLARE @dataDo DATETIME

			--zmienne: stale
			DECLARE @sySlow VARCHAR(3)
			DECLARE @sySlowKpSlStPr VARCHAR(3)
			DECLARE @sySlowWyksztGUS VARCHAR(3)
			DECLARE @sySlowZawodGUS VARCHAR(3)

			--przypisanie wartosci stalym, oraz przepisanie parametrow procedury
			SET @lpNaliczenia = @0
			SET @rokStanu = @1
			SET @mcStanu = @2
			SET @operator = @3
			SET @sySlow = 'XKP'
			SET @sySlowKpSlStPr = 'XSS'
			SET @sySlowWyksztGUS = '104'
			SET @sySlowZawodGUS = '103'

			--Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
			--dla danego roku stanu i miesiaca stanu
			SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
			SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
			SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

			--kursor po umowach
			DECLARE c_kupic CURSOR FOR
			SELECT TypUmowy, NrEwid, NrUmowy
			FROM KPKUPiC
			WHERE  (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataOd)
			OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataOd BETWEEN DataUmowyOd AND DataUmowyDo)
			OR (DataZakoncz IS NOT NULL AND @dataOd BETWEEN DataUmowyOd AND DataZakoncz)
			OR (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataDo)
			OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataDo BETWEEN DataUmowyOd AND DataUmowyDo)
			OR (DataZakoncz IS NOT NULL AND @dataDo BETWEEN DataUmowyOd AND DataZakoncz)

			--1. wstaw wiersz do KPStArchS
			INSERT INTO KPStArchS (SySlow, LpNaliczenia, RokStanu, McStanu, Oper, DataCzas)
			VALUES (@sySlow, @lpNaliczenia, @rokStanu, @mcStanu, @operator, GETDATE())

			--2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw dla nich wiersze do KPStZatrS
			OPEN c_kupic
			FETCH NEXT FROM c_kupic
			INTO @typUmowy, @nrEwid, @nrUmowy;

			WHILE @@FETCH_STATUS = 0
			BEGIN
			--2.1. wyzeruj zmienne pomocnicze
			SET @dniEtatoPracy = NULL
			SET @dataStop = @dataDo
			SET @dataNastZmiany = NULL

			--2.2. znajdz mniejsza z dwoch dat: ostatniej zmiany o typie U lub A przed
			--	   @dataOd, oraz ostatniej zmiany o typie U lub A przed @dataDo
			SELECT @dataZmiany = MIN(DataZmiany)
			FROM
			(
			SELECT MAX(KHP.DataZmiany) DataZmiany
			FROM KPKHP KHP
			WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
			AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataOd
			UNION
			SELECT MAX(KHP.DataZmiany) DataZmiany
			FROM KPKHP KHP
			WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
			AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataDo
			) Daty

			--2.3. Wybierz wszystkie dane pracownika
			SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
			@kodUmowy = KPKHP.KodUmowy,
			@kodZwoln = KPKUPiC.KodZakoncz,
			@zaklad = ISNULL(KPKHP.Zaklad, ''),
			@komorka = ISNULL(KPKHP.Komorka, ''),
			@stanowPr = ISNULL(KPKHP.StanowPr, ''),
			@rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
			@sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
			@miejsceWypl = ISNULL(KPKHP.MiejsceWypl, ''),
			@kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
			@kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
			@kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
			@kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
			@kodZawodu = KPKOP.KodZawoduWykon,
			@kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
			@statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
			@wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL THEN
			CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany), XKOP.DataUrodz) &gt; @dataZmiany
			THEN DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
			ELSE DATEDIFF (year, XKOP.DataUrodz, @dataZmiany)
			END
			ELSE 0 END,
			@plec = ISNULL(XKOP.Plec, ''),
			@etat = ISNULL(KPKHP.Etat, ''),
			@podstDodat = KPKUPiC.PodstDodat,
			@typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
			@dZawieszDo = KPKHP.DZawieszDo --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
			FROM	KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
			LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
			LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
			LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
			LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
			LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
			LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataZmiany AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataZmiany)
			WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

			SET @typZmianyPoprzedni = @typZmiany
			--2.4. Dla kazdej zmiany umowy pracownika, wpisz wiersz w KPStArchS
			--     [notatna_techniczna]Tutaj mozna uzyc kursora, ktory bedzie zwracal kolejne
			--	   daty zmiany. Zysk: jedno zapytanie zamiast kliku w petli, gdy jest kilka zmian w miesiacu.
			--	   strata: jezeli w wiekszosci wypadkow jest jedna umowa w miesiacu, deklaracja i zwalnianie
			--	   kursora moze spowolnic dzialanie.[/notatka_techniczna]
			SET @koniec = 0
			WHILE @koniec = 0
			BEGIN
			--2.4.1. Wyznaczenie daty nastepnej zmiany
			SELECT @dataNastZmiany = MIN(DataZmiany)
			FROM (
			SELECT KHP.dataZmiany AS DataZmiany
			FROM   KPKHP KHP
			WHERE  KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy
			UNION  --Zmiana to takze przyznanie stopnia inwalidzkiego
			SELECT KPKOPInwal.DataPrzyznania AS DataZmiany
			FROM   KPKOPInwal
			WHERE  KPKOPInwal.NrEwid = @nrEwid
			AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
			UNION  --Zmiana to takze zakonczenie waznosci stopnia inwalidzkiego
			SELECT KPKOPInwal.DataWaznosci AS DataZmiany
			FROM   KPKOPInwal
			WHERE  KPKOPInwal.NrEwid = @nrEwid
			AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
			UNION  --Zmiana to takze urodziny pracownika
			SELECT DATEADD(YEAR, DATEDIFF(YEAR, XKOP.DataUrodz, @dataOd), XKOP.DataUrodz)
			FROM   XKOP
			WHERE  XKOP.NrEwid = @nrEwid AND SySlow = @sySlow AND
			XKOP.DataUrodz IS NOT NULL AND MONTH(XKOP.DataUrodz) = MONTH(@dataOd)
			AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
			UNION  --poczatek okresu tez ma wywolac zmiane
			SELECT @dataOd AS DataZmiany
			) Daty
			WHERE DataZmiany &gt; @dataZmiany AND DataZmiany &lt;= @dataDo

			--2.4.2. Jesli typ zmiany jest C, to nalezy skorygowac dateNastepnejZmiany
			--		 aby uwzgledniala date konca okresu zawieszenia
			IF @typZmiany = 'C' AND
			(@dataNastZmiany IS NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt;= @dataDo
			OR
			(@dataNastZmiany IS NOT NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt; @dataNastZmiany))
			SET @dataNastZmiany = DATEADD(DAY, 1, @dZawieszDo)

			--2.4.3. Zmien dateStop, jezeli jest nastepna zmiana
			IF @dataNastZmiany IS NOT NULL
			SET @dataStop = @dataNastZmiany
			ELSE
			SET @dataStop = @dataDo

			--2.4.4. Jezeli rozpatrywana zmiana miesci sie w okresie @dataOd i @dataDo
			IF @dataNastZmiany IS NULL OR @dataZmiany BETWEEN @dataOd AND @dataDo
			BEGIN
			--2.4.4.1. Wylicz dni etato-pracy
			IF @typZmiany = 'Z'
			SET @dniEtatoPracy = 1
			ELSE IF @typZmiany = 'U' OR @typZmiany = 'A' OR @typZmiany = 'P'
			BEGIN
			SET @dniEtatoPracy = DATEDIFF(DAY, @dataZmiany, @dataStop)
			IF @dataNastZmiany IS NULL
			SET @dniEtatoPracy = @dniEtatoPracy + 1
			END
			ELSE IF @typZmiany = 'C'
			SET @dniEtatoPracy = 0

			--2.4.4.2. Dopisz wiersz do KPStZatrS
			INSERT INTO KPStZatrS (SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanowPr, SysWynagr, MiejsceWypl, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, DniEtatoPrac, PodstDodat, Oper, DataCzas)
			VALUES (@sySlow, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWypl, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @dniEtatoPracy, @podstDodat, @operator, GETDATE())
			END

			--2.4.5. Jezeli jest kolejna zmiana - pobierz dane z tabeli do zmiennych
			--       dla nastepnej zmiany umowy
			--		 w przeciwnym wypadku koniec petli
			IF @dataNastZmiany IS NOT NULL
			BEGIN
			SET @dataZmiany = @dataNastZmiany
			--2.4.5.1. Pobranie danych do zmiennych pomocniczych
			SELECT  @kodUmowyZmiana = ISNULL(KPKHP.KodUmowy, ''),
			@kodZwolnZmiana = ISNULL(KPKHP.KodZwoln, ''),
			@zakladZmiana = ISNULL(KPKHP.Zaklad, ''),
			@komorkaZmiana = ISNULL(KPKHP.Komorka, ''),
			@stanowPrZmiana = ISNULL(KPKHP.StanowPr, ''),
			@sysWynagrZmiana = ISNULL(KPKHP.SysWynagr, ''),
			@miejsceWyplZmiana = ISNULL(KPKHP.MiejsceWypl, ''),
			@kodZawieszZmiana = ISNULL(KPKHP.KodZawiesz, ''),
			@typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
			@dZawieszDoZmiana = KPKHP.DZawieszDo, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
			@kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
			@wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL THEN
			CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany), XKOP.DataUrodz) &gt; @dataZmiany
			THEN DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
			ELSE DATEDIFF (year, XKOP.DataUrodz, @dataZmiany)
			END
			ELSE 0 END,
			@etatZmiana = ISNULL(KPKHP.Etat, '')
			FROM	KPKUPiC LEFT OUTER JOIN KPKHP ON KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
			LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
			LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataZmiany AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataZmiany)
			WHERE   KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

			--2.4.5.2. Przepisanie danych ze zmiennych pomocniczych do zmiennych wlasciwych
			--		   w zaleznosci od typu zmiany
			IF @typZmiany = 'U'
			BEGIN
			SET @kodUmowy = @kodUmowyZmiana
			SET @zaklad = @zakladZmiana
			SET @komorka = @komorkaZmiana
			SET @stanowPr = @stanowPrZmiana
			SET @sysWynagr = @sysWynagrZmiana
			SET @miejsceWypl = @miejsceWyplZmiana
			SET @etat = @etatZmiana
			SET @typZmianyPoprzedni = @typZmiany
			END
			ELSE IF @typZmiany = 'A'
			BEGIN
			SET @zaklad = @zakladZmiana
			SET @komorka = @komorkaZmiana
			SET @stanowPr = @stanowPrZmiana
			SET @sysWynagr = @sysWynagrZmiana
			SET @miejsceWypl = @miejsceWyplZmiana
			SET @etat = @etatZmiana
			SET @typZmianyPoprzedni = @typZmiany
			SET @dZawieszDo = NULL
			END
			ELSE IF @typZmiany = 'Z'
			BEGIN
			SET @kodZwoln = @kodZwolnZmiana
			SET @dZawieszDo = NULL
			END
			ELSE IF @typZmiany = 'C'
			BEGIN
			SET @kodZawiesz = @kodZawieszZmiana
			SET @dZawieszDo = @dZawieszDoZmiana
			END
			ELSE IF @typZmiany = 'P'
			BEGIN
			SET @sysWynagr = @sysWynagrZmiana
			SET @miejsceWypl = @miejsceWyplZmiana
			SET @typZmianyPoprzedni = @typZmiany
			SET @dZawieszDo = NULL
			END
			ELSE IF @typZmiany IS NULL --Jezeli aktualna @dataZmiany nie wiaze sie z wpisem w KPKHP
			BEGIN
			--to w zaleznosci od tego czy trwa okres zawieszenia pracownika
			--typ zmiany ustawiany jest albo na 'C' (zawieszony)
			--albo na poprzedni typ zmiany inny od 'C' i 'Z'
			IF @dZawieszDo IS NOT NULL AND @dataZmiany &lt;= @dZawieszDo
			SET @typZmiany = 'C'
			ELSE
			BEGIN
			SET @typZmiany = @typZmianyPoprzedni
			SET @kodZawiesz = ''
			SET @dZawieszDo = NULL
			END
			END
			END
			ELSE
			SET @koniec = 1

			END --petla zmian dla jednej umowy

			FETCH NEXT FROM c_kupic
			INTO @typUmowy, @nrEwid, @nrUmowy;
			END

			CLOSE c_kupic
			DEALLOCATE c_kupic

			END
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>138</Id>
		<NrLog>1</NrLog>
		<NrTab>59</NrTab>
		<NrProc>96</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>139</Id>
		<NrLog>1</NrLog>
		<NrTab>60</NrTab>
		<NrProc>96</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>140</Id>
		<NrLog>1</NrLog>
		<NrTab>61</NrTab>
		<NrProc>96</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>
	<TabProcki>
		<Id>141</Id>
		<NrLog>1</NrLog>
		<NrTab>62</NrTab>
		<NrProc>96</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>

	<TabProcki>
		<Id>141</Id>
		<NrLog>1</NrLog>
		<NrTab>63</NrTab>
		<NrProc>96</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>

	<TabProcki>
		<Id>142</Id>
		<NrLog>1</NrLog>
		<NrTab>64</NrTab>
		<NrProc>96</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>

	<TabProcki>
		<Id>143</Id>
		<NrLog>1</NrLog>
		<NrTab>65</NrTab>
		<NrProc>96</NrProc>
		<ProcFun></ProcFun>
		<NzProc></NzProc>
		<TextProc>
		</TextProc>
	</TabProcki>

	<TabProcki>
		<Id>144</Id>
		<NrLog>1</NrLog>
		<NrTab>66</NrTab>
		<NrProc>97</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>KPdec2hm</NzProc>
		<TextProc>
			CREATE FUNCTION KPdec2hm
			(
			@0 decimal(18,2)
			)
			RETURNS decimal(18,2)
			AS
			BEGIN
			RETURN ((@0 - @0 % 1) + (@0 % 1)*3/5)
			END
		</TextProc>
	</TabProcki>

	<TabProcki>
		<Id>144</Id>
		<NrLog>1</NrLog>
		<NrTab>66</NrTab>
		<NrProc>98</NrProc>
		<ProcFun>FUNCTION</ProcFun>
		<NzProc>KPhm2dec</NzProc>
		<TextProc>
			CREATE FUNCTION KPhm2dec
			(
			@0 decimal(18,2)
			)
			RETURNS decimal(18,2)
			AS
			BEGIN
			RETURN ((@0 - @0 % 1) + (@0 % 1)*5/3)
			END
		</TextProc>
	</TabProcki>

  <TabProcki>
    <Id>145</Id>
    <NrLog>1</NrLog>
    <NrTab>67</NrTab>
    <NrProc>98</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>146</Id>
    <NrLog>1</NrLog>
    <NrTab>68</NrTab>
    <NrProc>98</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>147</Id>
    <NrLog>1</NrLog>
    <NrTab>69</NrTab>
    <NrProc>98</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>148</Id>
    <NrLog>1</NrLog>
    <NrTab>70</NrTab>
    <NrProc>99</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>KPPrzesunDateCzasOHMCzas</NzProc>
    <TextProc>
      CREATE FUNCTION KPPrzesunDateCzasOHMCzas
      (
      @data DATETIME,
      @hmCzas decimal(18,2)
      )
      RETURNS DATETIME
      AS
      BEGIN
      RETURN DATEADD
      (
      MINUTE,
      CONVERT(INT, (@hmCzas - CONVERT(INT, @hmCzas)) * 100),
      DATEADD
      (
      HOUR,
      CONVERT(int, @hmCzas),
      @data
      )
      )
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>149</Id>
    <NrLog>1</NrLog>
    <NrTab>71</NrTab>
    <NrProc>99</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>150</Id>
    <NrLog>1</NrLog>
    <NrTab>72</NrTab>
    <NrProc>100</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>KPDajHMCzasZDatyCzas</NzProc>
    <TextProc>
      CREATE FUNCTION KPDajHMCzasZDatyCzas
      (
      @data DATETIME
      )
      RETURNS DECIMAL(18,2)
      AS
      BEGIN
      RETURN DATEPART(HOUR, @data) + (DATEPART(MINUTE, @data) / CONVERT(DECIMAL(18,2), 100))
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>151</Id>
    <NrLog>1</NrLog>
    <NrTab>73</NrTab>
    <NrProc>100</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>152</Id>
    <NrLog>1</NrLog>
    <NrTab>74</NrTab>
    <NrProc>100</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>153</Id>
    <NrLog>1</NrLog>
    <NrTab>75</NrTab>
    <NrProc>100</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>154</Id>
    <NrLog>1</NrLog>
    <NrTab>76</NrTab>
    <NrProc>100</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>155</Id>
    <NrLog>1</NrLog>
    <NrTab>77</NrTab>
    <NrProc>101</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>RegexMatch</NzProc>
    <TextProc>
      CREATE FUNCTION RegexMatch(@0 [nvarchar](max), @1 [nvarchar](4000))
        RETURNS [bit] WITH EXECUTE AS CALLER
      AS 
        EXTERNAL NAME [InfraSqlCLR].[UserDefinedFunctions].[RegexMatch]
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>156</Id>
    <NrLog>1</NrLog>
    <NrTab>77</NrTab>
    <NrProc>102</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>FKDajKontaWgDefWyboru</NzProc>
    <TextProc>
      CREATE PROCEDURE FKDajKontaWgDefWyboru
      @0 [smallint],
      @1 [nvarchar](4000),
      @2 [nvarchar](4000),
      @3 [nvarchar](4000)
      WITH EXECUTE AS CALLER
      AS
      EXTERNAL NAME [InfraSqlCLR].[StoredProcedures].[FKDajKontaWgDefWyboru]
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>157</Id>
    <NrLog>1</NrLog>
    <NrTab>78</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>158</Id>
    <NrLog>1</NrLog>
    <NrTab>79</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>159</Id>
    <NrLog>1</NrLog>
    <NrTab>80</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>160</Id>
    <NrLog>1</NrLog>
    <NrTab>81</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>161</Id>
    <NrLog>1</NrLog>
    <NrTab>82</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>162</Id>
    <NrLog>1</NrLog>
    <NrTab>83</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>163</Id>
    <NrLog>1</NrLog>
    <NrTab>84</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>164</Id>
    <NrLog>1</NrLog>
    <NrTab>85</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>165</Id>
    <NrLog>1</NrLog>
    <NrTab>86</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>166</Id>
    <NrLog>1</NrLog>
    <NrTab>87</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>167</Id>
    <NrLog>1</NrLog>
    <NrTab>88</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>168</Id>
    <NrLog>1</NrLog>
    <NrTab>89</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>169</Id>
    <NrLog>1</NrLog>
    <NrTab>90</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>170</Id>
    <NrLog>1</NrLog>
    <NrTab>91</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>171</Id>
    <NrLog>1</NrLog>
    <NrTab>92</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>172</Id>
    <NrLog>1</NrLog>
    <NrTab>93</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>173</Id>
    <NrLog>1</NrLog>
    <NrTab>94</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>174</Id>
    <NrLog>1</NrLog>
    <NrTab>95</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>175</Id>
    <NrLog>1</NrLog>
    <NrTab>96</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>176</Id>
    <NrLog>1</NrLog>
    <NrTab>97</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>177</Id>
    <NrLog>1</NrLog>
    <NrTab>98</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>178</Id>
    <NrLog>1</NrLog>
    <NrTab>99</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>179</Id>
    <NrLog>2</NrLog>
    <NrTab>1</NrTab>
    <NrProc>102</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>180</Id>
    <NrLog>2</NrLog>
    <NrTab>2</NrTab>
    <NrProc>103</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>DataZRokMcDz</NzProc>
    <TextProc>
      CREATE FUNCTION [dbo].[DataZRokMcDz]
      (
      @rok INT,
      @mc INT,
      @dzien INT
      )
      RETURNS DATETIME
      AS
      BEGIN
      RETURN DATEADD(MONTH,((@rok-1900) * 12) + @mc - 1, @dzien - 1)
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>181</Id>
    <NrLog>2</NrLog>
    <NrTab>2</NrTab>
    <NrProc>104</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>PoczatekMc</NzProc>
    <TextProc>
      CREATE FUNCTION [dbo].[PoczatekMc]
      (
      @data DATETIME
      )
      RETURNS DATETIME
      AS
      BEGIN
      RETURN dbo.DataZRokMcDz( DATEPART(YEAR, @data), DATEPART(MONTH, @data), 1 )
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>182</Id>
    <NrLog>2</NrLog>
    <NrTab>2</NrTab>
    <NrProc>105</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>KoniecMc</NzProc>
    <TextProc>
      CREATE FUNCTION [dbo].[KoniecMc]
      (
      @data DATETIME
      )
      RETURNS DATETIME
      AS
      BEGIN
      RETURN DATEADD(DAY, -1, DATEADD(MONTH, 1, dbo.PoczatekMc(@data)))
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>183</Id>
    <NrLog>2</NrLog>
    <NrTab>3</NrTab>
    <NrProc>105</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>184</Id>
    <NrLog>2</NrLog>
    <NrTab>4</NrTab>
    <NrProc>106</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>KPWyplatySkladniki_AFTER_DELETE_WyzerujZasilki</NzProc>
    <TextProc>
      CREATE TRIGGER [dbo].[KPWyplatySkladniki_AFTER_DELETE_WyzerujZasilki]
      ON [dbo].[KPWyplatySkladniki]
      AFTER DELETE
      AS

      DECLARE @typUmowy CHAR(1)
      DECLARE @nrEwid INT
      DECLARE @nrZasilku INT
      DECLARE @nrAbsencji INT
      DECLARE @kodSkPl VARCHAR(10)

      SELECT	@typUmowy = TypUmowy FROM deleted
      SELECT	@nrEwid	=	NrEwid FROM deleted
      SELECT	@nrZasilku = NrZasilku FROM deleted
      SELECT	@nrAbsencji = NrAbsencji FROM deleted
      SELECT	@kodSkPl = KodSkPl FROM deleted

      UPDATE	KPZasChor
      SET		NrListyZas = 0
      WHERE	TypUmowy = @typUmowy
      AND	NrEwid = @nrEwid
      AND NrZasilku = @nrZasilku
      AND	NrAbsencji = @nrAbsencji
      AND KodZasilku = @kodSkPl

      UPDATE	KPZasChor
      SET		NrListyAbs = 0
      WHERE	TypUmowy = @typUmowy
      AND	NrEwid = @nrEwid
      AND NrZasilku = @nrZasilku
      AND	NrAbsencji = @nrAbsencji
      AND KodZasilku &lt;&gt; @kodSkPl
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>185</Id>
    <NrLog>2</NrLog>
    <NrTab>5</NrTab>
    <NrProc>106</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>186</Id>
    <NrLog>2</NrLog>
    <NrTab>6</NrTab>
    <NrProc>106</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

    <TabProcki>
    <Id>187</Id>
    <NrLog>2</NrLog>
    <NrTab>7</NrTab>
    <NrProc>106</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>188</Id>
    <NrLog>2</NrLog>
    <NrTab>8</NrTab>
    <NrProc>107</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>KPWyplatySkladniki_AFTER_DELETE_SkasujPrzelewy</NzProc>
    <TextProc>
      CREATE TRIGGER KPWyplatySkladniki_AFTER_DELETE_SkasujPrzelewy
      ON KpWyplatySkladniki
      AFTER DELETE
      AS
      DECLARE @okresO SMALLINT
      DECLARE @rejestrLP CHAR(1)
      DECLARE @rokObrach SMALLINT
      DECLARE @mcObrach SMALLINT
      DECLARE @nrListy SMALLINT
      DECLARE @nrEwid INT
      DECLARE @kodSkPl VARCHAR(10)

      SELECT	@okresO = OkresO FROM deleted
      SELECT	@rejestrLP = RejestrLP FROM deleted
      SELECT	@rokObrach = RokObrach FROM deleted
      SELECT	@mcObrach = McObrach FROM deleted
      SELECT	@nrListy = NrListy FROM deleted
      SELECT	@nrEwid	=	NrEwid FROM deleted
      SELECT	@kodSkPl = KodSkPl FROM deleted

      DELETE	FROM KPWyplatyPrzelewy
      WHERE	OkresO = @okresO
      AND	RejestrLP = @rejestrLP
      AND	RokObrach = @rokObrach
      AND	McObrach = @mcObrach
      AND	NrListy = @nrListy
      AND	NrEwid = @nrEwid
      AND	KodSkladnika = @kodSkPl
      AND DostepnyDlaHB = 0
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>189</Id>
    <NrLog>2</NrLog>
    <NrTab>9</NrTab>
    <NrProc>107</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>190</Id>
    <NrLog>2</NrLog>
    <NrTab>10</NrTab>
    <NrProc>107</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>191</Id>
    <NrLog>2</NrLog>
    <NrTab>11</NrTab>
    <NrProc>107</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>192</Id>
    <NrLog>2</NrLog>
    <NrTab>12</NrTab>
    <NrProc>108</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>KPSTAZ_LMD</NzProc>
    <TextProc>
      CREATE FUNCTION KPSTAZ_LMD
      (
      @dataOd DATETIME,
      @dataDo DATETIME
      )
      RETURNS VARCHAR(10)
      AS
      BEGIN
      DECLARE  @koniecMiesiacaDataOd DATETIME SET @koniecMiesiacaDataOd = dbo.KoniecMc(@dataOd)

      SET @dataDo = DATEADD(DAY, 1, @dataDo)

      DECLARE @lata INT SET @lata = DATEPART(YEAR, @dataDo) - DATEPART(YEAR, @dataOd)
      DECLARE @miesiace INT SET @miesiace = DATEPART(MONTH, @dataDo) - DATEPART(MONTH, @dataOd)
      DECLARE @dni INT SET @dni = DATEPART(DAY, @dataDo) - DATEPART(DAY, @dataOd)

      IF @dni &lt; 0
      BEGIN
      SET @dni = @dni + DATEPART(DAY, @koniecMiesiacaDataOd)
      SET @miesiace = @miesiace - 1
      END
      IF @miesiace &lt; 0
      BEGIN
      SET @miesiace = @miesiace + 12
      SET @lata = @lata - 1
      END

      DECLARE @lataStr VARCHAR(2)
      DECLARE @miesiaceStr VARCHAR(2)
      DECLARE @dniStr VARCHAR(2)
      IF @lata &gt;= 10
      SET @lataStr = CAST(@lata AS VARCHAR(2))
      ELSE
      SET @lataStr = '0' + CAST(@lata AS VARCHAR(1))
      IF @miesiace &gt;= 10
      SET @miesiaceStr = CAST(@miesiace AS VARCHAR(2))
      ELSE
      SET @miesiaceStr = '0' + CAST(@miesiace AS VARCHAR(1))
      IF @dni &gt;= 10
      SET @dniStr = CAST(@dni AS VARCHAR(2))
      ELSE
      SET @dniStr = '0' + CAST(@dni AS VARCHAR(1))

      RETURN @lataStr + ':' + @miesiaceStr + ':' + @dniStr
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>193</Id>
    <NrLog>2</NrLog>
    <NrTab>12</NrTab>
    <NrProc>109</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>KPHM2DEC</NzProc>
    <TextProc>
      CREATE FUNCTION KPHM2DEC
      (
      @0 decimal(38,22)
      )
      RETURNS decimal(38,22)
      AS
      BEGIN
      RETURN ((@0 - @0 % 1) + (@0 % 1)*5/3)
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>194</Id>
    <NrLog>2</NrLog>
    <NrTab>12</NrTab>
    <NrProc>110</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>KPDEC2HM</NzProc>
    <TextProc>
      CREATE FUNCTION KPDEC2HM
      (
      @0 decimal(38,22)
      )
      RETURNS decimal(18,2)
      AS
      BEGIN
      RETURN ((@0 - @0 % 1) + (@0 % 1)*3/5)
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>191</Id>
    <NrLog>2</NrLog>
    <NrTab>13</NrTab>
    <NrProc>110</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>192</Id>
    <NrLog>2</NrLog>
    <NrTab>14</NrTab>
    <NrProc>110</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>193</Id>
    <NrLog>2</NrLog>
    <NrTab>15</NrTab>
    <NrProc>110</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>194</Id>
    <NrLog>2</NrLog>
    <NrTab>16</NrTab>
    <NrProc>110</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>195</Id>
    <NrLog>2</NrLog>
    <NrTab>17</NrTab>
    <NrProc>111</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>KPGenStanZatrMc</NzProc>
    <TextProc>
      CREATE PROCEDURE KPGenStanZatrMc
      @0 int, --lp naliczenia
      @1 int, --rok stanu
      @2 int, --miesiac stanu
      @3 varchar(10) --login operatora
      AS
      BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON
      --zmienne: klucz w tabeli KPKHP
      DECLARE @typUmowy CHAR(1);
      DECLARE @nrEwid INT;
      DECLARE @nrUmowy VARCHAR(10);
      DECLARE @dataZmiany DATETIME;

      --zmienne: składowe rekorku KPStArchS
      DECLARE @statusZatrudn VARCHAR(3)
      DECLARE @kodUmowy VARCHAR(7)
      DECLARE @kodZwoln VARCHAR(7)
      DECLARE @zaklad VARCHAR(7)
      DECLARE @komorka VARCHAR(7)
      DECLARE @stanowPr VARCHAR(7)
      DECLARE @rodzStanPr CHAR(1)
      DECLARE @sysWynagr VARCHAR(7)
      DECLARE @miejsceWypl VARCHAR(7)
      DECLARE @kodZawiesz VARCHAR(7)
      DECLARE @kodInwal VARCHAR(7)
      DECLARE @kodWykszt VARCHAR(7)
      DECLARE @kodWyksztGUS VARCHAR(7)
      DECLARE @kodZawodu VARCHAR(7)
      DECLARE @kodZawoduGUS VARCHAR(7)
      DECLARE @statusUmowy CHAR(1)
      DECLARE @wiek SMALLINT
      DECLARE @plec CHAR(1)
      DECLARE @etat VARCHAR(7)
      DECLARE @dniEtatoPracy DECIMAL(10, 6)
      DECLARE @podstDodat CHAR(1)

      --zmienne: składowe rekorku KPStArchS, uzywane gdy jest zmiana umowy
      DECLARE @kodUmowyZmiana VARCHAR(7)
      DECLARE @kodZwolnZmiana VARCHAR(7)
      DECLARE @zakladZmiana VARCHAR(7)
      DECLARE @komorkaZmiana VARCHAR(7)
      DECLARE @stanowPrZmiana VARCHAR(7)
      DECLARE @sysWynagrZmiana VARCHAR(7)
      DECLARE @miejsceWyplZmiana VARCHAR(7)
      DECLARE @kodZawieszZmiana VARCHAR(7)
      DECLARE @etatZmiana VARCHAR(7)

      --zmienne: zmienne pomocnicze, wyznaczaja przedzial poszikiwania zmian umowy
      DECLARE @dataStop DATETIME
      DECLARE @dataNastZmiany DATETIME
      DECLARE @typZmiany CHAR(1)
      DECLARE @typZmianyPoprzedni CHAR(1)
      DECLARE @dZawieszDo DATETIME
      DECLARE @dZawieszDoZmiana DATETIME

      --zmienne: zmienne pomocnicze do sterowania petli
      DECLARE @koniec BIT

      --zmienne: parametry wywolania procedury (tu beda przepisane)
      DECLARE @lpNaliczenia INT
      DECLARE @rokStanu INT
      DECLARE @mcStanu INT
      DECLARE @operator VARCHAR(10)

      --zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
      DECLARE @dataOdStrPom VARCHAR(12)
      DECLARE @dataOd DATETIME
      DECLARE @dataDo DATETIME

      --zmienne: stale
      DECLARE @sySlow VARCHAR(3)
      DECLARE @sySlowKpSlStPr VARCHAR(3)
      DECLARE @sySlowWyksztGUS VARCHAR(3)
      DECLARE @sySlowZawodGUS VARCHAR(3)

      --przypisanie wartosci stalym, oraz przepisanie parametrow procedury
      SET @lpNaliczenia = @0
      SET @rokStanu = @1
      SET @mcStanu = @2
      SET @operator = @3
      SET @sySlow = 'XKP'
      SET @sySlowKpSlStPr = 'XSS'
      SET @sySlowWyksztGUS = '104'
      SET @sySlowZawodGUS = '103'

      --Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
      --dla danego roku stanu i miesiaca stanu
      SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
      SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
      SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

      --kursor po umowach
      DECLARE c_kupic CURSOR FOR
      SELECT TypUmowy, NrEwid, NrUmowy
      FROM KPKUPiC
      WHERE  (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataOd)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataOd BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataOd BETWEEN DataUmowyOd AND DataZakoncz)
      OR (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataDo)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataDo BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataDo BETWEEN DataUmowyOd AND DataZakoncz)

      --1. wstaw wiersz do KPStArchS
      INSERT INTO KPStArchS (SySlow, LpNaliczenia, RokStanu, McStanu, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @rokStanu, @mcStanu, @operator, GETDATE())

      --2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw dla nich wiersze do KPStZatrS
      OPEN c_kupic
      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;

      WHILE @@FETCH_STATUS = 0
      BEGIN
      --2.1. wyzeruj zmienne pomocnicze
      SET @dniEtatoPracy = NULL
      SET @dataStop = @dataDo
      SET @dataNastZmiany = NULL

      --2.2. znajdz mniejsza z dwoch dat: ostatniej zmiany o typie U lub A przed
      --	   @dataOd, oraz ostatniej zmiany o typie U lub A przed @dataDo
      SELECT @dataZmiany = MIN(DataZmiany)
      FROM
      (
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataOd
      UNION
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataDo
      ) Daty

      --2.3. Wybierz wszystkie dane pracownika
      SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
      @kodUmowy = KPKHP.KodUmowy,
      @kodZwoln = ISNULL(KPKUPiC.KodZakoncz, ''),
      @zaklad = ISNULL(KPKHP.Zaklad, ''),
      @komorka = ISNULL(KPKHP.Komorka, ''),
      @stanowPr = ISNULL(KPKHP.StanowPr, ''),
      @rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
      @sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWypl = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
      @kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
      @kodZawodu = KPKOP.KodZawoduWykon,
      @kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
      @statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany), XKOP.DataUrodz) &gt; @dataZmiany
      THEN DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE DATEDIFF (year, XKOP.DataUrodz, @dataZmiany)
      END
      ELSE 0 END,
      @plec = ISNULL(XKOP.Plec, ''),
      @etat = ISNULL(KPKHP.Etat, ''),
      @podstDodat = KPKUPiC.PodstDodat,
      @typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDo = KPKHP.DZawieszDo --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      FROM	KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
      LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
      LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataZmiany AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

      SET @typZmianyPoprzedni = @typZmiany
      --2.4. Dla kazdej zmiany umowy pracownika, wpisz wiersz w KPStArchS
      --     [notatna_techniczna]Tutaj mozna uzyc kursora, ktory bedzie zwracal kolejne
      --	   daty zmiany. Zysk: jedno zapytanie zamiast kliku w petli, gdy jest kilka zmian w miesiacu.
      --	   strata: jezeli w wiekszosci wypadkow jest jedna umowa w miesiacu, deklaracja i zwalnianie
      --	   kursora moze spowolnic dzialanie.[/notatka_techniczna]
      SET @koniec = 0
      WHILE @koniec = 0
      BEGIN
      --2.4.1. Wyznaczenie daty nastepnej zmiany
      SELECT @dataNastZmiany = MIN(DataZmiany)
      FROM (
      SELECT KHP.dataZmiany AS DataZmiany
      FROM   KPKHP KHP
      WHERE  KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy
      UNION  --Zmiana to takze przyznanie stopnia inwalidzkiego
      SELECT KPKOPInwal.DataPrzyznania AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze zakonczenie waznosci stopnia inwalidzkiego
      SELECT KPKOPInwal.DataWaznosci AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze urodziny pracownika
      SELECT DATEADD(YEAR, DATEDIFF(YEAR, XKOP.DataUrodz, @dataOd), XKOP.DataUrodz)
      FROM   XKOP
      WHERE  XKOP.NrEwid = @nrEwid AND SySlow = @sySlow AND
      XKOP.DataUrodz IS NOT NULL AND MONTH(XKOP.DataUrodz) = MONTH(@dataOd)
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --poczatek okresu tez ma wywolac zmiane
      SELECT @dataOd AS DataZmiany
      ) Daty
      WHERE DataZmiany &gt; @dataZmiany AND DataZmiany &lt;= @dataDo

      --2.4.2. Jesli typ zmiany jest C, to nalezy skorygowac dateNastepnejZmiany
      --		 aby uwzgledniala date konca okresu zawieszenia
      IF @typZmiany = 'C' AND
      (@dataNastZmiany IS NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt;= @dataDo
      OR
      (@dataNastZmiany IS NOT NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt; @dataNastZmiany))
      SET @dataNastZmiany = DATEADD(DAY, 1, @dZawieszDo)

      --2.4.3. Zmien dateStop, jezeli jest nastepna zmiana
      IF @dataNastZmiany IS NOT NULL
      SET @dataStop = @dataNastZmiany
      ELSE
      SET @dataStop = @dataDo

      --2.4.4. Jezeli rozpatrywana zmiana miesci sie w okresie @dataOd i @dataDo
      IF @dataNastZmiany IS NULL OR @dataZmiany BETWEEN @dataOd AND @dataDo
      BEGIN
      --2.4.4.1. Wylicz dni etato-pracy
      IF @typZmiany = 'Z'
      SET @dniEtatoPracy = 1
      ELSE IF @typZmiany = 'U' OR @typZmiany = 'A' OR @typZmiany = 'P'
      BEGIN
      SET @dniEtatoPracy = DATEDIFF(DAY, @dataZmiany, @dataStop)
      IF @dataNastZmiany IS NULL
      SET @dniEtatoPracy = @dniEtatoPracy + 1
      END
      ELSE IF @typZmiany = 'C'
      SET @dniEtatoPracy = 0

      --2.4.4.2. Dopisz wiersz do KPStZatrS
      INSERT INTO KPStZatrS (SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanowPr, SysWynagr, MiejsceWypl, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, DniEtatoPrac, PodstDodat, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWypl, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @dniEtatoPracy, @podstDodat, @operator, GETDATE())
      END

      --2.4.5. Jezeli jest kolejna zmiana - pobierz dane z tabeli do zmiennych
      --       dla nastepnej zmiany umowy
      --		 w przeciwnym wypadku koniec petli
      IF @dataNastZmiany IS NOT NULL
      BEGIN
      SET @dataZmiany = @dataNastZmiany
      --2.4.5.1. Pobranie danych do zmiennych pomocniczych
      SELECT  @kodUmowyZmiana = ISNULL(KPKHP.KodUmowy, ''),
      @kodZwolnZmiana = ISNULL(KPKHP.KodZwoln, ''),
      @zakladZmiana = ISNULL(KPKHP.Zaklad, ''),
      @komorkaZmiana = ISNULL(KPKHP.Komorka, ''),
      @stanowPrZmiana = ISNULL(KPKHP.StanowPr, ''),
      @sysWynagrZmiana = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWyplZmiana = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawieszZmiana = ISNULL(KPKHP.KodZawiesz, ''),
      @typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDoZmiana = KPKHP.DZawieszDo, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany), XKOP.DataUrodz) &gt; @dataZmiany
      THEN DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE DATEDIFF (year, XKOP.DataUrodz, @dataZmiany)
      END
      ELSE 0 END,
      @etatZmiana = ISNULL(KPKHP.Etat, '')
      FROM	KPKUPiC LEFT OUTER JOIN KPKHP ON KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataZmiany AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE   KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

      --2.4.5.2. Przepisanie danych ze zmiennych pomocniczych do zmiennych wlasciwych
      --		   w zaleznosci od typu zmiany
      IF @typZmiany = 'U'
      BEGIN
      SET @kodUmowy = @kodUmowyZmiana
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      END
      ELSE IF @typZmiany = 'A'
      BEGIN
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'Z'
      BEGIN
      SET @kodZwoln = @kodZwolnZmiana
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'C'
      BEGIN
      SET @kodZawiesz = @kodZawieszZmiana
      SET @dZawieszDo = @dZawieszDoZmiana
      END
      ELSE IF @typZmiany = 'P'
      BEGIN
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany IS NULL --Jezeli aktualna @dataZmiany nie wiaze sie z wpisem w KPKHP
      BEGIN
      --to w zaleznosci od tego czy trwa okres zawieszenia pracownika
      --typ zmiany ustawiany jest albo na 'C' (zawieszony)
      --albo na poprzedni typ zmiany inny od 'C' i 'Z'
      IF @dZawieszDo IS NOT NULL AND @dataZmiany &lt;= @dZawieszDo
      SET @typZmiany = 'C'
      ELSE
      BEGIN
      SET @typZmiany = @typZmianyPoprzedni
      SET @kodZawiesz = ''
      SET @dZawieszDo = NULL
      END
      END
      END
      ELSE
      SET @koniec = 1

      END --petla zmian dla jednej umowy

      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;
      END

      CLOSE c_kupic
      DEALLOCATE c_kupic

      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>196</Id>
    <NrLog>2</NrLog>
    <NrTab>17</NrTab>
    <NrProc>112</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>KPWyplatySkladniki_AFTER_DELETE_SkasujPrzelewy</NzProc>
    <TextProc>
      CREATE TRIGGER KPWyplatySkladniki_AFTER_DELETE_SkasujPrzelewy
      ON KpWyplatySkladniki
      AFTER DELETE
      AS
      DELETE Przelew
      FROM KPWyplatyPrzelewy Przelew
      INNER JOIN deleted Del
      ON	Przelew.OkresO = Del.OkresO
      AND	Przelew.RejestrLP = Del.RejestrLP
      AND	Przelew.RokObrach = Del.RokObrach
      AND Przelew.McObrach = Del.McObrach
      AND	Przelew.NrListy = Del.NrListy
      AND	Przelew.NrEwid = Del.NrEwid
      AND	Przelew.KodSkladnika = Del.KodSkPl
      WHERE Przelew.DostepnyDlaHB = 0
    </TextProc>
  </TabProcki>
  
  <TabProcki>
    <Id>197</Id>
    <NrLog>2</NrLog>
    <NrTab>17</NrTab>
    <NrProc>113</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>KPWyplatySkladniki_AFTER_DELETE_WyzerujZasilki</NzProc>
    <TextProc>
      CREATE TRIGGER KPWyplatySkladniki_AFTER_DELETE_WyzerujZasilki
      ON KpWyplatySkladniki
      AFTER DELETE
      AS
      UPDATE	KPZasChor
      SET	NrListyZas = CASE WHEN Del.Skl1 = Zas.KodZasilku OR Del.Skl2 = Zas.KodZasilku THEN 0 ELSE Zas.NrListyZas END,
      NrListyAbs = CASE WHEN Del.Skl1 &lt;&gt; Zas.KodZasilku OR Del.Skl2 &lt;&gt; Zas.KodZasilku THEN 0 ELSE Zas.NrListyAbs END
      FROM	KPZasChor Zas
      INNER JOIN (SELECT	TypUmowy, NrEwid, NrZasilku, MIN(KodSkPl) Skl1, MAX(KodSkPl) Skl2
      FROM	deleted
      WHERE	NrZasilku IS NOT NULL
      GROUP BY	TypUmowy, NrEwid, NrZasilku) Del
      ON	Zas.TypUmowy = Del.TypUmowy
      AND	Zas.NrEwid = Del.NrEwid
      AND	Zas.NrZasilku = Del.NrZasilku
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>198</Id>
    <NrLog>2</NrLog>
    <NrTab>18</NrTab>
    <NrProc>113</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>199</Id>
    <NrLog>2</NrLog>
    <NrTab>19</NrTab>
    <NrProc>113</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>200</Id>
    <NrLog>2</NrLog>
    <NrTab>20</NrTab>
    <NrProc>113</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>201</Id>
    <NrLog>2</NrLog>
    <NrTab>21</NrTab>
    <NrProc>113</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>202</Id>
    <NrLog>2</NrLog>
    <NrTab>22</NrTab>
    <NrProc>113</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>203</Id>
    <NrLog>2</NrLog>
    <NrTab>23</NrTab>
    <NrProc>113</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>204</Id>
    <NrLog>2</NrLog>
    <NrTab>24</NrTab>
    <NrProc>114</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>XTpkOpis_AFTER_DELETE_UsunDefinicjeKontaBezSubkont</NzProc> />
    <TextProc>
      CREATE TRIGGER XTpkOpis_AFTER_DELETE_UsunDefinicjeKontaBezSubkont
      ON XTpkOpis
      AFTER DELETE
      AS
      Declare @ile int
      Declare @okresO smallint
      Declare @kontoParent varchar(30)

      select @kontoparent=kontoparent from deleted
      select @okresO=OkresO from deleted
      select @ile=count(*) from XTpkOpis where KontoParent=@kontoParent
      and KontoParent&lt;>Konto
      and OkresO=@okresO

      if(@ile=0)
      Delete from FKTpkDefinicjaKonta where konto=@kontoParent and OkresO=@okresO
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>205</Id>
    <NrLog>2</NrLog>
    <NrTab>24</NrTab>
    <NrProc>115</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>XTpkProjekty_AFTER_DELETE_UsunDefinicjeKontaBezSubkont</NzProc> />
    <TextProc>
      CREATE TRIGGER XTpkProjekty_AFTER_DELETE_UsunDefinicjeKontaBezSubkont
      ON XTpkProjekty
      AFTER DELETE
      AS
      Declare @ile int
      Declare @symbolProjektu smallint
      Declare @kontoParent varchar(30)

      select @kontoparent=kontoparent from deleted
      select @symbolProjektu=SymbolProjektu from deleted
      select @ile=count(*) from XTpkProjekty where KontoParent=@kontoParent
      and KontoParent&lt;>Konto
      and SymbolProjektu=@symbolProjektu

      if(@ile=0) Delete from FKTpkDefinicjaKontaProjekty
      where konto=@kontoParent and SymbolProjektu=@symbolProjektu
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>206</Id>
    <NrLog>2</NrLog>
    <NrTab>24</NrTab>
    <NrProc>116</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>XTpkWzorce_AFTER_DELETE_UsunDefinicjeKontaBezSubkont</NzProc> />
    <TextProc>
      CREATE TRIGGER XTpkWzorce_AFTER_DELETE_UsunDefinicjeKontaBezSubkont
      ON XTpkWzorce
      AFTER DELETE
      AS
      Declare @ile int
      Declare @symbolWzorca smallint
      Declare @kontoParent varchar(30)

      select @kontoparent=kontoparent from deleted
      select @symbolWzorca=SymbolWzorca from deleted
      select @ile=count(*) from XTpkWzorce where KontoParent=@kontoParent
      and KontoParent&lt;>Konto
      and SymbolWzorca=@symbolWzorca

      if(@ile=0) Delete from FKTpkDefinicjaKontaWzorce
      where konto=@kontoParent and SymbolWzorca=@symbolWzorca
    </TextProc> />
  </TabProcki>

  <TabProcki>
    <Id>207</Id>
    <NrLog>2</NrLog>
    <NrTab>25</NrTab>
    <NrProc>116</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>208</Id>
    <NrLog>2</NrLog>
    <NrTab>26</NrTab>
    <NrProc>116</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>209</Id>
    <NrLog>2</NrLog>
    <NrTab>27</NrTab>
    <NrProc>117</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>KPGenStanSOData</NzProc>
    <TextProc>
      -- =============================================
      -- Author:      Maciej Franecki
      -- Create date: 2007-01-08
      -- Modify date: 2013-03-11
      -- Description:   Procedura generuje stan zatrudnienia dla zadanej daty i wybranej definicji
      --                struktury organizacyjnej
      -- Zmiany:      Dodanie obsługi KPKUPiCXSlowSo
      -- =============================================
      CREATE PROCEDURE KPGenStanSOData
      @0 datetime, --data naliczenia
      @1 varchar(10),  --login operatora
      @2 smallint, --nrDef -&gt; nr struktury org
      @3 smallint  --Okres obrachunkowy
      AS
      BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON

      DECLARE @dataNaliczenia DATETIME
      DECLARE @operator VARCHAR(10)
      DECLARE @nrDef SMALLINT
      DECLARE @okresO SMALLINT

      SET @dataNaliczenia = @0
      SET @operator = @1
      SET @nrDef = @2
      SET @okresO = @3

      DECLARE @iloscNaliczenDlaDaty INTEGER

      --0. jezeli jest juz naliczenie: koniec funkcji
      SELECT @iloscNaliczenDlaDaty = COUNT(*)
      FROM KPStZatrSoD
      WHERE DataStanu = @dataNaliczenia AND NrDef = @nrDef

      IF @iloscNaliczenDlaDaty &gt; 0
      BEGIN
      RETURN
      END;

      -- wlasciwa czesc procedury
      DECLARE @dlugoscSySlow INTEGER
      DECLARE @dlugoscKod INTEGER
      DECLARE @dlugoscAdresPop INTEGER
      DECLARE   @indexStart INTEGER
      DECLARE @sySlowAdresPop VARCHAR(3)
      DECLARE @kodAdresPop VARCHAR(7)

      DECLARE @sySlowZaklady VARCHAR(3)
      DECLARE @sySlowKomorki VARCHAR(3)
      DECLARE @sySlowStanowPr VARCHAR(3)
      DECLARE @sySlowSysWynagr VARCHAR(3)
      DECLARE @sySlowXKP VARCHAR(3)

      SET @sySlowZaklady = 'XSZ'
      SET @sySlowKomorki = 'XSK'
      SET @sySlowStanowPr = 'XSS'
      SET @sySlowSysWynagr = 'XSW'
      SET @sySlowXKP = 'XKP'

      SET @dlugoscSySlow = 3;
      SET @dlugoscKod = 7;

      DECLARE @zaklad VARCHAR(7)
      DECLARE @komorka VARCHAR(7)
      DECLARE @stanowPr VARCHAR(7)
      DECLARE @sysWynagr VARCHAR(7)
      DECLARE @nrEwid INTEGER
      DECLARE @typUmowy VARCHAR(1)
      DECLARE @nrUmowy VARCHAR(10)

      DECLARE @adresPop VARCHAR(100)
      DECLARE @sySlowSegm VARCHAR(3)
      DECLARE @kodElem VARCHAR(7)
      DECLARE @lpPoz SMALLINT
      DECLARE @lpPrez SMALLINT

      DECLARE @zaklad7 VARCHAR(7)
      DECLARE @komorka7 VARCHAR(7)
      DECLARE @stanowPr7 VARCHAR(7)
      DECLARE @sysWynagr7 VARCHAR(7)

      DECLARE @pobranoWierszStZatrD INTEGER
      DECLARE @pobranoWierszXSODef INTEGER

      DECLARE @iloscNiezgodnychWezlow INTEGER
      DECLARE @tabelaPar TABLE
      (
      SySlow VARCHAR(3),
      Kod VARCHAR(10)
      )
      DECLARE @iloscZgodnychWezlow INTEGER
      DECLARE @tabelaNiepowiazanychWezlow TABLE
      (
      NrDef SMALLINT,
      LpPrez SMALLINT,
      SySlowSegm VARCHAR(3),
      KodElem VARCHAR(10),
      AdresPop VARCHAR(100)
      )

      DECLARE c_stZatrD CURSOR FOR
      SELECT TypUmowy, NrEwid, NrUmowy, Zaklad, Komorka, StanowPr, SysWynagr
      FROM   KPStZatrD
      WHERE  SySlow = @sySlowXKP AND DataStanu = @dataNaliczenia

      DECLARE c_xsoDef CURSOR FOR
      SELECT   LpPoz, SySlowSegm, KodElem, AdresPop, LpPrez
      FROM     XSODef
      WHERE    OkresO = @okresO AND NrDef = @nrDef
      ORDER BY LpPrez

      --1. dla kazdego wiersza w StZatrD...
      OPEN c_stZatrD
      FETCH NEXT FROM c_stZatrD
      INTO @typUmowy, @nrEwid, @nrUmowy, @zaklad, @komorka, @stanowPr, @sysWynagr
      SET @pobranoWierszStZatrD = @@FETCH_STATUS

      WHILE @pobranoWierszStZatrD = 0
      BEGIN
      --1.1. depelnij symbole zakladu, komorki, stanowPr, sysWynagr do 7 znakow
      SET @zaklad7    = @zaklad    +
      SPACE(@dlugoscKod - LEN(REPLACE(@zaklad,    ' ', '.')))
      SET @komorka7   = @komorka   +
      SPACE(@dlugoscKod - LEN(REPLACE(@komorka,   ' ', '.')))
      SET @stanowPr7  = @stanowPr  +
      SPACE(@dlugoscKod - LEN(REPLACE(@stanowPr,  ' ', '.')))
      SET @sysWynagr7 = @sysWynagr +
      SPACE(@dlugoscKod - LEN(REPLACE(@sysWynagr, ' ', '.')))

      --2. dla kazdego wiersza w XSODef
      OPEN c_xsoDef
      FETCH NEXT FROM c_xsoDef
      INTO @lpPoz, @sySlowSegm, @kodElem, @adresPop, @lpPrez
      SET @pobranoWierszXSODef = @@FETCH_STATUS

      WHILE @pobranoWierszXSODef = 0
      BEGIN
      SET @dlugoscAdresPop = LEN( REPLACE(@adresPop, ' ', '.') )
      --2.0. Jezeli wezel jest korzeniem, wyczysc tabele niepowiazanych wezlow
      IF @dlugoscAdresPop = 0
      BEGIN
      DELETE FROM @tabelaNiepowiazanychWezlow
      END

      --2.1. Przygotowanie tabeli par poprzez dodanie do niej wszystkich sySlow + kod
      --      w adresie wezla w strukturze org.
      DELETE FROM @tabelaPar

      SET @indexStart = 0;
      WHILE @indexStart &lt; @dlugoscAdresPop
      BEGIN
      SET @sySlowAdresPop = LEFT( RIGHT(@adresPop, @dlugoscAdresPop - @indexStart),
      @dlugoscSySlow )
      SET @indexStart      = @indexStart + @dlugoscSySlow
      SET @kodAdresPop    = LEFT( RIGHT(@adresPop, @dlugoscAdresPop - @indexStart),
      @dlugoscKod )
      SET @indexStart      = @indexStart + @dlugoscKod

      INSERT INTO @tabelaPar(SySlow, Kod)
      VALUES (@sySlowAdresPop, @kodAdresPop)
      END

      INSERT INTO @tabelaPar(SySlow, Kod)
      VALUES (@sySlowSegm, @kodElem)

      --2.2. Sprawdzenie czy wystepuje niezgodnosc miedzy naliczeniem
      --     a wezlem struktury
      SELECT @iloscNiezgodnychWezlow = COUNT(*)
      FROM @tabelaPar Pary
      LEFT OUTER JOIN XNagObEw Nag
      ON Nag.SySlow = Pary.SySlow
      WHERE Pary.sySlow = @sySlowZaklady AND Pary.kod &lt;&gt; @zaklad7
      OR Pary.sySlow = @sySlowKomorki AND Pary.kod &lt;&gt; @komorka7
      OR Pary.sySlow = @sySlowStanowPr AND Pary.kod &lt;&gt; @stanowPr7
      OR Pary.sySlow = @sySlowSysWynagr AND Pary.kod &lt;&gt; @sysWynagr7
      --oprocz sprawdzenia czy osoba pasuje do zakladu, komorki itp.
      --       sprawdzamy tez czy pasuje do wirtualnych wezlow
      --       konstruowanych przez KPKupicSlowSO
      OR (Nag.Kategoria IS NOT NULL
      --sprawdza czy w ogole jest wiesz XNagObEW
      AND Nag.Kategoria = 'S'  --sprawdzenie cech xnagobew
      AND Nag.KonstrukcjaWykazu = 'D'
      --sprawdzenie czy umowa pasuje do umow przyczepionych do kodu -
      -- elemnu KPUPICSlowSO
      AND Pary.kod &lt;&gt; (SELECT   TOP(1) SlowSO.Kod
      FROM KPKUPiCSlowSO SlowSO
      WHERE SlowSO.OkresO = @okresO
      AND SlowSO.SySlow = Pary.SySlow
      AND SlowSO.NrEwid = @nrEwid
      AND SlowSO.NrUmowy = @nrUmowy
      AND SlowSO.TypUmowy = @typUmowy
      AND SlowSO.DataZmiany &lt;= @dataNaliczenia
      ORDER BY   SlowSO.DataZmiany DESC))

      IF @iloscNiezgodnychWezlow = 0
      BEGIN
      --2.2.1. Wstaw wezel do tabeli potencjalnie zgodnych wezlow
      INSERT INTO @tabelaNiepowiazanychWezlow(NrDef, LpPrez, SySlowSegm,
      KodElem, AdresPop)
      VALUES (@nrDef, @lpPrez, @sySlowSegm, @kodElem, @adresPop)

      --2.2.2. Sprawdzenie czy wystepuje choc jeden zgodny element w wezle
      --       i danych pracownika
      SELECT @iloscZgodnychWezlow = COUNT(*)
      FROM @tabelaPar Pary
      LEFT OUTER JOIN XNagObEw Nag
      ON Nag.SySlow = Pary.SySlow
      WHERE Pary.sySlow = @sySlowZaklady AND Pary.kod = @zaklad7
      OR Pary.sySlow = @sySlowKomorki AND Pary.kod = @komorka7
      OR Pary.sySlow = @sySlowStanowPr AND Pary.kod = @stanowPr7
      OR Pary.sySlow = @sySlowSysWynagr AND Pary.kod = @sysWynagr7
      --oprocz sprawdzenia czy osoba pasuje do zakladu, komorki itp.
      -- sprawdzamy tez czy pasuje do wirtualnych wezlow
      -- konstruowanych przez KPKupicSlowSO
      OR (Nag.Kategoria IS NOT NULL
      --sprawdza czy w ogole jest wiesz XNagObEW
      AND Nag.Kategoria = 'S'  --sprawdzenie cech xnagobew
      AND Nag.KonstrukcjaWykazu = 'D'
      --sprawdzenie czy umowa pasuje do umow przyczepionych do kodu
      -- - elemnu KPUPICSlowSO
      AND Pary.kod = (SELECT   TOP(1) SlowSO.Kod
      FROM KPKUPiCSlowSO SlowSO
      WHERE SlowSO.OkresO = @okresO
      AND SlowSO.SySlow = Pary.SySlow
      AND SlowSO.NrEwid = @nrEwid
      AND SlowSO.NrUmowy = @nrUmowy
      AND SlowSO.TypUmowy = @typUmowy
      AND SlowSO.DataZmiany &lt;= @dataNaliczenia
      ORDER BY   SlowSO.DataZmiany DESC))

      --2.2.3. Jezeli choc jeden element jest zgodny,
      --       wstaw do KPStZatrSoS wezel
      --       oraz wszystkie niepowiazane wezly - rodzice
      IF @iloscZgodnychWezlow &gt; 0
      BEGIN
      INSERT INTO KPStZatrSoD(SySlow, DataStanu, TypUmowy, NrEwid,
      NrUmowy, NrDef, LpPrez, SySlowElem, KodElem,
      AdresPop, Oper, DataCzas)
      SELECT @sySlowXKP, @dataNaliczenia, @typUmowy, @nrEwid, @nrUmowy,
      Wezly.NrDef, Wezly.LpPrez, Wezly.SySlowSegm, Wezly.KodElem,
      Wezly.AdresPop, @operator, GETDATE()
      FROM @tabelaNiepowiazanychWezlow Wezly

      DELETE FROM @tabelaNiepowiazanychWezlow
      END
      END

      --pobierz kolejny wiersz XSODef
      FETCH NEXT FROM c_xsoDef
      INTO @lpPoz, @sySlowSegm, @kodElem, @adresPop, @lpPrez
      SET @pobranoWierszXSODef = @@FETCH_STATUS
      END
      CLOSE c_xsoDef

      --pobierz kolejny wiersz StZatrD
      FETCH NEXT FROM c_stZatrD
      INTO @typUmowy, @nrEwid, @nrUmowy, @zaklad, @komorka, @stanowPr, @sysWynagr
      SET @pobranoWierszStZatrD = @@FETCH_STATUS
      END
      CLOSE c_stZatrD

      DEALLOCATE c_xsoDef
      DEALLOCATE c_stZatrD
      END

    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>210</Id>
    <NrLog>2</NrLog>
    <NrTab>27</NrTab>
    <NrProc>118</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>KPGenStanSOMc</NzProc>
    <TextProc>
      -- =============================================
      -- Author:      Maciej Franecki
      -- Create date: 2008-03-10
      -- Modify date: 2013-03-11
      -- Description:   Procedura generuje stan zatrudnienia dla zadanego miesiaca i wybranej definicji
      --                struktury organizacyjnej
      -- Zmiany:      Dodanie obsługi KPKUPiCXSlowSo
      -- =============================================
      CREATE PROCEDURE KPGenStanSOMc
      @0 int, --lp naliczenia
      @1 int, --rok stanu
      @2 int, --miesiac stanu
      @3 varchar(10),  --login operatora
      @4 smallint, --nrDef -&gt; nr struktury org
      @5 smallint  --Okres obrachunkowy
      AS
      BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON

      DECLARE @lpNaliczenia INT
      DECLARE @rokStanu SMALLINT
      DECLARE @mcStanu SMALLINT
      DECLARE @operator VARCHAR(10)
      DECLARE @nrDef SMALLINT
      DECLARE @okresO SMALLINT

      --zmienne: pierszy i ostniego dnia miesiaca
      -- (granice przedzialu do wyliczenia statystyk)
      DECLARE @dataOdStrPom VARCHAR(12)
      DECLARE @dataOd DATETIME
      DECLARE @dataDo DATETIME

      SET @lpNaliczenia = @0
      SET @rokStanu = @1
      SET @mcStanu = @2
      SET @operator = @3
      SET @nrDef = @4
      SET @okresO = @5

      --Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
      --dla danego roku stanu i miesiaca stanu
      SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
      SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)
      --101 okresla format daty w ciagu @dataOdStrPom
      SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

      DECLARE @iloscNaliczenDlaDaty INTEGER

      --0. jezeli jest juz naliczenie: koniec funkcji
      SELECT @iloscNaliczenDlaDaty = COUNT(*)
      FROM KPStZatrSoS
      WHERE LpNaliczenia = @lpNaliczenia AND NrDef = @nrDef

      IF @iloscNaliczenDlaDaty &gt; 0
      BEGIN
      RETURN
      END;

      -- wlasciwa czesc procedury
      DECLARE @dlugoscSySlow INTEGER
      DECLARE @dlugoscKod INTEGER
      DECLARE @dlugoscAdresPop INTEGER
      DECLARE   @indexStart INTEGER
      DECLARE @sySlowAdresPop VARCHAR(3)
      DECLARE @kodAdresPop VARCHAR(7)

      DECLARE @sySlowZaklady VARCHAR(3)
      DECLARE @sySlowKomorki VARCHAR(3)
      DECLARE @sySlowStanowPr VARCHAR(3)
      DECLARE @sySlowSysWynagr VARCHAR(3)
      DECLARE @sySlowXKP VARCHAR(3)

      SET @sySlowZaklady = 'XSZ'
      SET @sySlowKomorki = 'XSK'
      SET @sySlowStanowPr = 'XSS'
      SET @sySlowSysWynagr = 'XSW'
      SET @sySlowXKP = 'XKP'

      SET @dlugoscSySlow = 3;
      SET @dlugoscKod = 7;

      DECLARE @zaklad VARCHAR(7)
      DECLARE @komorka VARCHAR(7)
      DECLARE @stanowPr VARCHAR(7)
      DECLARE @sysWynagr VARCHAR(7)
      DECLARE @nrEwid INTEGER
      DECLARE @typUmowy VARCHAR(1)
      DECLARE @nrUmowy VARCHAR(10)
      DECLARE @dataZmiany DATETIME

      DECLARE @adresPop VARCHAR(100)
      DECLARE @sySlowSegm VARCHAR(3)
      DECLARE @kodElem VARCHAR(7)
      DECLARE @lpPoz SMALLINT
      DECLARE @lpPrez SMALLINT

      DECLARE @zaklad7 VARCHAR(7)
      DECLARE @komorka7 VARCHAR(7)
      DECLARE @stanowPr7 VARCHAR(7)
      DECLARE @sysWynagr7 VARCHAR(7)

      DECLARE @pobranoWierszStZatrS INTEGER
      DECLARE @pobranoWierszXSODef INTEGER

      DECLARE @iloscNiezgodnychWezlow INTEGER
      DECLARE @tabelaPar TABLE
      (
      SySlow VARCHAR(3),
      Kod VARCHAR(10)
      )
      DECLARE @iloscZgodnychWezlow INTEGER
      DECLARE @tabelaNiepowiazanychWezlow TABLE
      (
      NrDef SMALLINT,
      LpPrez SMALLINT,
      SySlowSegm VARCHAR(3),
      KodElem VARCHAR(10),
      AdresPop VARCHAR(100)
      )

      DECLARE c_stZatrS CURSOR FOR
      SELECT TypUmowy, NrEwid, NrUmowy, Zaklad, Komorka, StanowPr, SysWynagr, DataZmiany
      FROM   KPStZatrS
      WHERE  SySlow = @sySlowXKP AND LpNaliczenia = @lpNaliczenia AND
      DataZmiany BETWEEN @dataOd AND @dataDo

      DECLARE c_xsoDef CURSOR FOR
      SELECT   LpPoz, SySlowSegm, KodElem, AdresPop, LpPrez
      FROM     XSODef
      WHERE    OkresO = @okresO AND NrDef = @nrDef
      ORDER BY LpPrez


      --1. dla kazdego wiersza w StZatrS...
      OPEN c_stZatrS
      FETCH NEXT FROM c_stZatrS
      INTO @typUmowy, @nrEwid, @nrUmowy, @zaklad, @komorka, @stanowPr, @sysWynagr,
      @dataZmiany

      SET @pobranoWierszStZatrS = @@FETCH_STATUS

      WHILE @pobranoWierszStZatrS = 0
      BEGIN
      --1.1. depelnij symbole zakladu, komorki, stanowPr, sysWynagr do 7 znakow
      SET @zaklad7    = @zaklad    +
      SPACE(@dlugoscKod - LEN(REPLACE(@zaklad,    ' ', '.')))
      SET @komorka7   = @komorka   +
      SPACE(@dlugoscKod - LEN(REPLACE(@komorka,   ' ', '.')))
      SET @stanowPr7  = @stanowPr  +
      SPACE(@dlugoscKod - LEN(REPLACE(@stanowPr,  ' ', '.')))
      SET @sysWynagr7 = @sysWynagr +
      SPACE(@dlugoscKod - LEN(REPLACE(@sysWynagr, ' ', '.')))

      --2. dla kazdego wiersza w XSODef
      OPEN c_xsoDef
      FETCH NEXT FROM c_xsoDef
      INTO @lpPoz, @sySlowSegm, @kodElem, @adresPop, @lpPrez

      SET @pobranoWierszXSODef = @@FETCH_STATUS

      WHILE @pobranoWierszXSODef = 0
      BEGIN
      SET @dlugoscAdresPop = LEN( REPLACE(@adresPop, ' ', '.') )
      --2.0. Jezeli wezel jest korzeniem, wyczysc tabele niepowiazanych wezlow
      IF @dlugoscAdresPop = 0
      BEGIN
      DELETE FROM @tabelaNiepowiazanychWezlow
      END

      --2.1. Przygotowanie tabeli par poprzez dodanie do niej wszystkich sySlow + kod
      --      w adresie wezla w strukturze org.
      DELETE FROM @tabelaPar

      SET @indexStart = 0;
      WHILE @indexStart &lt; @dlugoscAdresPop
      BEGIN
      SET @sySlowAdresPop =
      LEFT( RIGHT(@adresPop, @dlugoscAdresPop - @indexStart), @dlugoscSySlow )
      SET @indexStart      = @indexStart + @dlugoscSySlow
      SET @kodAdresPop    =
      LEFT( RIGHT(@adresPop, @dlugoscAdresPop - @indexStart), @dlugoscKod )
      SET @indexStart      = @indexStart + @dlugoscKod

      INSERT INTO @tabelaPar(SySlow, Kod)
      VALUES (@sySlowAdresPop, @kodAdresPop)
      END

      INSERT INTO @tabelaPar(SySlow, Kod)
      VALUES (@sySlowSegm, @kodElem)

      --2.2. Sprawdzenie czy wystepuje niezgodnosc miedzy naliczeniem
      --     a wezlem struktury
      SELECT @iloscNiezgodnychWezlow = COUNT(*)
      FROM @tabelaPar Pary
      LEFT OUTER JOIN XNagObEw Nag
      ON   Nag.SySlow = Pary.SySlow
      WHERE Pary.sySlow = @sySlowZaklady AND Pary.kod &lt;&gt; @zaklad7
      OR Pary.sySlow = @sySlowKomorki AND Pary.kod &lt;&gt; @komorka7
      OR Pary.sySlow = @sySlowStanowPr AND Pary.kod &lt;&gt; @stanowPr7
      OR Pary.sySlow = @sySlowSysWynagr AND Pary.kod &lt;&gt; @sysWynagr7
      --oprocz sprawdzenia czy osoba pasuje do zakladu, komorki itp.
      --sprawdzamy tez czy pasuje do wirtualnych wezlow
      --             konstruowanych przez KPKupicSlowSO
      OR (Nag.Kategoria IS NOT NULL
      --sprawdza czy w ogole jest wiesz XNagObEW
      AND Nag.Kategoria = 'S'  --sprawdzenie cech xnagobew
      AND Nag.KonstrukcjaWykazu = 'D'
      --sprawdzenie czy umowa pasuje do umow przyczepionych do kodu -
      -- elementu KPUPICSlowSO
      AND Pary.kod &lt;&gt; (SELECT   TOP(1) SlowSO.Kod
      FROM KPKUPiCSlowSO SlowSO
      WHERE SlowSO.OkresO = @okresO
      AND SlowSO.SySlow = Pary.SySlow
      AND SlowSO.NrEwid = @nrEwid
      AND SlowSO.NrUmowy = @nrUmowy
      AND SlowSO.TypUmowy = @typUmowy
      AND SlowSO.DataZmiany &lt;= @dataZmiany
      ORDER BY   SlowSO.DataZmiany DESC))


      IF @iloscNiezgodnychWezlow = 0
      BEGIN
      --2.2.1. Wstaw wezel do tabeli potencjalnie zgodnych wezlow
      INSERT INTO @tabelaNiepowiazanychWezlow(NrDef, LpPrez, SySlowSegm,
      KodElem, AdresPop)
      VALUES (@nrDef, @lpPrez, @sySlowSegm, @kodElem, @adresPop)

      --2.2.2. Sprawdzenie czy wystepuje choc jeden zgodny element w wezle
      --       i danych pracownika
      SELECT @iloscZgodnychWezlow = COUNT(*)
      FROM @tabelaPar Pary
      LEFT OUTER JOIN XNagObEw Nag
      ON Nag.SySlow = Pary.SySlow
      WHERE Pary.sySlow = @sySlowZaklady AND Pary.kod = @zaklad7
      OR Pary.sySlow = @sySlowKomorki AND Pary.kod = @komorka7
      OR Pary.sySlow = @sySlowStanowPr AND Pary.kod = @stanowPr7
      OR Pary.sySlow = @sySlowSysWynagr AND Pary.kod = @sysWynagr7
      --oprocz sprawdzenia czy osoba pasuje do zakladu, komorki itp.
      --sprawdzamy tez czy pasuje do wirtualnych wezlow
      -- konstruowanych przez KPKupicSlowSO
      OR (Nag.Kategoria IS NOT NULL --sprawdza czy w ogole jest wiesz XNagObEW
      AND Nag.Kategoria = 'S'  --sprawdzenie cech xnagobew
      AND Nag.KonstrukcjaWykazu = 'D'
      --sprawdzenie czy umowa pasuje do umow przyczepionych do kodu -
      --  elemnu KPUPICSlowSO
      AND Pary.kod = (SELECT   TOP(1) SlowSO.Kod
      FROM KPKUPiCSlowSO SlowSO
      WHERE SlowSO.OkresO = @okresO
      AND SlowSO.SySlow = Pary.SySlow
      AND SlowSO.NrEwid = @nrEwid
      AND SlowSO.NrUmowy = @nrUmowy
      AND SlowSO.TypUmowy = @typUmowy
      AND SlowSO.DataZmiany &lt;= @dataZmiany
      ORDER BY   SlowSO.DataZmiany DESC))

      --2.2.3. Jezeli choc jeden element jest zgodny, wstaw do KPStZatrSoS wezel
      --       oraz wszystkie niepowiazane wezly - rodzice
      IF @iloscZgodnychWezlow &gt; 0
      BEGIN
      INSERT INTO KPStZatrSoS(SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy,
      DataZmiany, NrDef, LpPrez, SySlowElem, KodElem,
      AdresPop, Oper, DataCzas)
      SELECT @sySlowXKP, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany,
      Wezly.NrDef, Wezly.LpPrez, Wezly.SySlowSegm, Wezly.KodElem,
      Wezly.AdresPop, @operator, GETDATE()
      FROM @tabelaNiepowiazanychWezlow Wezly

      DELETE FROM @tabelaNiepowiazanychWezlow
      END
      END

      --pobierz kolejny wiersz XSODef
      FETCH NEXT FROM c_xsoDef
      INTO @lpPoz, @sySlowSegm, @kodElem, @adresPop, @lpPrez
      SET @pobranoWierszXSODef = @@FETCH_STATUS
      END
      CLOSE c_xsoDef

      --pobierz kolejny wiersz StZatrS
      FETCH NEXT FROM c_stZatrS
      INTO @typUmowy, @nrEwid, @nrUmowy, @zaklad, @komorka, @stanowPr,
      @sysWynagr, @dataZmiany
      SET @pobranoWierszStZatrS = @@FETCH_STATUS
      END
      CLOSE c_stZatrS

      DEALLOCATE c_xsoDef
      DEALLOCATE c_stZatrS
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>211</Id>
    <NrLog>2</NrLog>
    <NrTab>27</NrTab>
    <NrProc>119</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>KPGenStanZatrMc</NzProc>
    <TextProc>
      CREATE PROCEDURE KPGenStanZatrMc
      @0 int, --lp naliczenia
      @1 int, --rok stanu
      @2 int, --miesiac stanu
      @3 varchar(10) --login operatora
      AS
      BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON
      --zmienne: klucz w tabeli KPKHP
      DECLARE @typUmowy CHAR(1);
      DECLARE @nrEwid INT;
      DECLARE @nrUmowy VARCHAR(10);
      DECLARE @dataZmiany DATETIME;

      --zmienne: składowe rekorku KPStArchS
      DECLARE @statusZatrudn VARCHAR(3)
      DECLARE @kodUmowy VARCHAR(7)
      DECLARE @kodZwoln VARCHAR(7)
      DECLARE @zaklad VARCHAR(7)
      DECLARE @komorka VARCHAR(7)
      DECLARE @stanowPr VARCHAR(7)
      DECLARE @rodzStanPr CHAR(1)
      DECLARE @sysWynagr VARCHAR(7)
      DECLARE @miejsceWypl VARCHAR(7)
      DECLARE @kodZawiesz VARCHAR(7)
      DECLARE @kodInwal VARCHAR(7)
      DECLARE @kodWykszt VARCHAR(7)
      DECLARE @kodWyksztGUS VARCHAR(7)
      DECLARE @kodZawodu VARCHAR(7)
      DECLARE @kodZawoduGUS VARCHAR(7)
      DECLARE @statusUmowy CHAR(1)
      DECLARE @wiek SMALLINT
      DECLARE @plec CHAR(1)
      DECLARE @etat VARCHAR(7)
      DECLARE @dniEtatoPracy DECIMAL(10, 6)
      declare @dniEtatoChoroby decimal(10,6)
      DECLARE @podstDodat CHAR(1)

      --zmienne: składowe rekorku KPStArchS, uzywane gdy jest zmiana umowy
      DECLARE @kodUmowyZmiana VARCHAR(7)
      DECLARE @kodZwolnZmiana VARCHAR(7)
      DECLARE @zakladZmiana VARCHAR(7)
      DECLARE @komorkaZmiana VARCHAR(7)
      DECLARE @stanowPrZmiana VARCHAR(7)
      DECLARE @sysWynagrZmiana VARCHAR(7)
      DECLARE @miejsceWyplZmiana VARCHAR(7)
      DECLARE @kodZawieszZmiana VARCHAR(7)
      DECLARE @etatZmiana VARCHAR(7)

      --zmienne: zmienne pomocnicze, wyznaczaja przedzial poszikiwania zmian umowy
      DECLARE @dataStop DATETIME
      DECLARE @dataNastZmiany DATETIME
      DECLARE @typZmiany CHAR(1)
      DECLARE @typZmianyPoprzedni CHAR(1)
      DECLARE @dZawieszDo DATETIME
      DECLARE @dZawieszDoZmiana DATETIME

      --zmienne: zmienne pomocnicze do sterowania petli
      DECLARE @koniec BIT

      --zmienne: parametry wywolania procedury (tu beda przepisane)
      DECLARE @lpNaliczenia INT
      DECLARE @rokStanu INT
      DECLARE @mcStanu INT
      DECLARE @operator VARCHAR(10)

      --zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
      DECLARE @dataOdStrPom VARCHAR(12)
      DECLARE @dataOd DATETIME
      DECLARE @dataDo DATETIME

      --zmienne: stale
      DECLARE @sySlow VARCHAR(3)
      DECLARE @sySlowKpSlStPr VARCHAR(3)
      DECLARE @sySlowWyksztGUS VARCHAR(3)
      DECLARE @sySlowZawodGUS VARCHAR(3)

      --przypisanie wartosci stalym, oraz przepisanie parametrow procedury
      SET @lpNaliczenia = @0
      SET @rokStanu = @1
      SET @mcStanu = @2
      SET @operator = @3
      SET @sySlow = 'XKP'
      SET @sySlowKpSlStPr = 'XSS'
      SET @sySlowWyksztGUS = '104'
      SET @sySlowZawodGUS = '103'

      --Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
      --dla danego roku stanu i miesiaca stanu
      SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
      SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
      SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

      --kursor po umowach
      DECLARE c_kupic CURSOR FOR
      SELECT TypUmowy, NrEwid, NrUmowy
      FROM KPKUPiC
      WHERE  (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataOd)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataOd BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataOd BETWEEN DataUmowyOd AND DataZakoncz)
      OR (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataDo)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataDo BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataDo BETWEEN DataUmowyOd AND DataZakoncz)

      --1. wstaw wiersz do KPStArchS
      INSERT INTO KPStArchS (SySlow, LpNaliczenia, RokStanu, McStanu, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @rokStanu, @mcStanu, @operator, GETDATE())

      --2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw dla nich wiersze do KPStZatrS
      OPEN c_kupic
      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;

      WHILE @@FETCH_STATUS = 0
      BEGIN
      --2.1. wyzeruj zmienne pomocnicze
      SET @dniEtatoPracy = NULL
      set @dniEtatoChoroby = null
      SET @dataStop = @dataDo
      SET @dataNastZmiany = NULL

      --2.2. znajdz mniejsza z dwoch dat: ostatniej zmiany o typie U lub A przed
      --	   @dataOd, oraz ostatniej zmiany o typie U lub A przed @dataDo
      SELECT @dataZmiany = MIN(DataZmiany)
      FROM
      (
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataOd
      UNION
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE (KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataDo
      ) Daty

      --2.3. Wybierz wszystkie dane pracownika
      SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
      @kodUmowy = KPKHP.KodUmowy,
      @kodZwoln = ISNULL(KPKUPiC.KodZakoncz, ''),
      @zaklad = ISNULL(KPKHP.Zaklad, ''),
      @komorka = ISNULL(KPKHP.Komorka, ''),
      @stanowPr = ISNULL(KPKHP.StanowPr, ''),
      @rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
      @sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWypl = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
      @kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
      @kodZawodu = KPKOP.KodZawoduWykon,
      @kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
      @statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany),
      XKOP.DataUrodz) &gt; @dataZmiany
      THEN DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) END
      ELSE 0 END,
      @plec = ISNULL(XKOP.Plec, ''),
      @etat = ISNULL(KPKHP.Etat, ''),
      @podstDodat = KPKUPiC.PodstDodat,
      @typZmiany = KPKHP.typZmiany,
      --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDo = KPKHP.DZawieszDo --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      FROM KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
      LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
      LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataZmiany AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

      SET @typZmianyPoprzedni = @typZmiany
      --2.4. Dla kazdej zmiany umowy pracownika, wpisz wiersz w KPStArchS
      --     [notatna_techniczna]Tutaj mozna uzyc kursora, ktory bedzie zwracal kolejne
      --	   daty zmiany. Zysk: jedno zapytanie zamiast kliku w petli, gdy jest kilka zmian w miesiacu.
      --	   strata: jezeli w wiekszosci wypadkow jest jedna umowa w miesiacu, deklaracja i zwalnianie
      --	   kursora moze spowolnic dzialanie.[/notatka_techniczna]
      SET @koniec = 0
      WHILE @koniec = 0
      BEGIN
      --2.4.1. Wyznaczenie daty nastepnej zmiany
      SELECT @dataNastZmiany = MIN(DataZmiany)
      FROM (
      SELECT KHP.dataZmiany AS DataZmiany
      FROM   KPKHP KHP
      WHERE  KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy
      UNION  --Zmiana to takze przyznanie stopnia inwalidzkiego
      SELECT KPKOPInwal.DataPrzyznania AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze zakonczenie waznosci stopnia inwalidzkiego
      SELECT KPKOPInwal.DataWaznosci AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze urodziny pracownika
      SELECT DATEADD(YEAR, DATEDIFF(YEAR, XKOP.DataUrodz, @dataOd), XKOP.DataUrodz)
      FROM   XKOP
      WHERE  XKOP.NrEwid = @nrEwid AND SySlow = @sySlow AND
      XKOP.DataUrodz IS NOT NULL AND MONTH(XKOP.DataUrodz) = MONTH(@dataOd)
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --poczatek okresu tez ma wywolac zmiane
      SELECT @dataOd AS DataZmiany
      ) Daty
      WHERE DataZmiany &gt; @dataZmiany AND DataZmiany &lt;= @dataDo

      --2.4.2. Jesli typ zmiany jest C, to nalezy skorygowac dateNastepnejZmiany
      --		 aby uwzgledniala date konca okresu zawieszenia
      IF @typZmiany = 'C' AND
      (@dataNastZmiany IS NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt;= @dataDo
      OR
      (@dataNastZmiany IS NOT NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt; @dataNastZmiany))
      SET @dataNastZmiany = DATEADD(DAY, 1, @dZawieszDo)

      --2.4.3. Zmien dateStop, jezeli jest nastepna zmiana
      IF @dataNastZmiany IS NOT NULL
      SET @dataStop = @dataNastZmiany
      ELSE
      SET @dataStop = @dataDo

      --2.4.4. Jezeli rozpatrywana zmiana miesci sie w okresie @dataOd i @dataDo
      IF @dataNastZmiany IS NULL OR @dataZmiany BETWEEN @dataOd AND @dataDo
      BEGIN
      --2.4.4.1. Wylicz dni etato-pracy
      IF @typZmiany = 'Z'
      SET @dniEtatoPracy = 1
      ELSE IF @typZmiany = 'U' OR @typZmiany = 'A' OR @typZmiany = 'P'
      BEGIN
      SET @dniEtatoPracy = DATEDIFF(DAY, @dataZmiany, @dataStop)
      IF @dataNastZmiany IS NULL
      SET @dniEtatoPracy = @dniEtatoPracy + 1
      END
      -- tu było ELSE IF @typZmiany = 'C'

      IF @typZmiany = 'C'
      SET @dniEtatoPracy = 0
      ELSE
      BEGIN
      declare @pomDni int
      select @pomDni = sum(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END, CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      (XSlSkPl.TypSkPl='B' and XSlSkPl.ZawieszaUmowe=0 and KPAbsenc.DniKalend&gt;29 or
      XSlSkPl.ZawieszaUmowe=1)
      select @dniEtatoPracy = @dniEtatoPracy - @pomDni
      END


      -- 1.2.3 nowe HF
      declare @pomDniChor int
      select @pomDniChor = sum(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END, CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      left(XSlSkPl.TypSkPl,1)='C' and XSlSkPl.KodZusP&gt;'300' and XSlSkPl.KodZusP&lt;'330'
      select @dniEtatoChoroby = case when 30 &lt; abs(@pomDniChor) then -30 else -1 * abs(@pomDniChor) end

      --2.4.4.2. Dopisz wiersz do KPStZatrS
      INSERT INTO KPStZatrS (SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanowPr, SysWynagr, MiejsceWypl, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, DniEtatoPrac, PodstDodat, DniEtatoChoroby, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWypl, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @dniEtatoPracy, @podstDodat, @dniEtatoChoroby, @operator, GETDATE())
      END

      --2.4.5. Jezeli jest kolejna zmiana - pobierz dane z tabeli do zmiennych
      --       dla nastepnej zmiany umowy
      --		 w przeciwnym wypadku koniec petli
      IF @dataNastZmiany IS NOT NULL
      BEGIN
      SET @dataZmiany = @dataNastZmiany
      --2.4.5.1. Pobranie danych do zmiennych pomocniczych
      SELECT  @kodUmowyZmiana = ISNULL(KPKHP.KodUmowy, ''),
      @kodZwolnZmiana = ISNULL(KPKHP.KodZwoln, ''),
      @zakladZmiana = ISNULL(KPKHP.Zaklad, ''),
      @komorkaZmiana = ISNULL(KPKHP.Komorka, ''),
      @stanowPrZmiana = ISNULL(KPKHP.StanowPr, ''),
      @sysWynagrZmiana = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWyplZmiana = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawieszZmiana = ISNULL(KPKHP.KodZawiesz, ''),
      @typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDoZmiana = KPKHP.DZawieszDo, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany), XKOP.DataUrodz) &gt; @dataZmiany
      THEN
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany)
      END
      ELSE
      0
      END,
      @etatZmiana = ISNULL(KPKHP.Etat, '')
      FROM KPKUPiC
      LEFT OUTER JOIN KPKHP ON KPKUPiC.NrEwid = KPKHP.NrEwid AND
      KPKUPiC.TypUmowy = KPKHP.TypUmowy AND
      KPKUPiC.NrUmowy = KPKHP.NrUmowy AND
      KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND
      XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid
      AND KodInwal.DataPrzyznania = (
      SELECT MAX(DataPrzyznania)
      FROM KPKOPInwal
      WHERE DataPrzyznania &lt;= @dataZmiany AND
      NrEwid = @nrEwid) AND
      (KodInwal.DataWaznosci IS NULL OR
      KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND
      KPKUPiC.NrUmowy = @nrUmowy

      --2.4.5.2. Przepisanie danych ze zmiennych pomocniczych do zmiennych wlasciwych
      -- w zaleznosci od typu zmiany
      IF @typZmiany = 'U'
      BEGIN
      SET @kodUmowy = @kodUmowyZmiana
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      END
      ELSE IF @typZmiany = 'A'
      BEGIN
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'Z'
      BEGIN
      SET @kodZwoln = @kodZwolnZmiana
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'C'
      BEGIN
      SET @kodZawiesz = @kodZawieszZmiana
      SET @dZawieszDo = @dZawieszDoZmiana
      END
      ELSE IF @typZmiany = 'P'
      BEGIN
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany IS NULL --Jezeli aktualna @dataZmiany nie wiaze sie z wpisem w KPKHP
      BEGIN
      --to w zaleznosci od tego czy trwa okres zawieszenia pracownika
      --typ zmiany ustawiany jest albo na 'C' (zawieszony)
      --albo na poprzedni typ zmiany inny od 'C' i 'Z'
      IF @dZawieszDo IS NOT NULL AND @dataZmiany &lt;= @dZawieszDo
      SET @typZmiany = 'C'
      ELSE
      BEGIN
      SET @typZmiany = @typZmianyPoprzedni
      SET @kodZawiesz = ''
      SET @dZawieszDo = NULL
      END
      END
      END
      ELSE
      SET @koniec = 1

      END --petla zmian dla jednej umowy

      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;
      END

      CLOSE c_kupic
      DEALLOCATE c_kupic

      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>212</Id>
    <NrLog>2</NrLog>
    <NrTab>28</NrTab>
    <NrProc>119</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>213</Id>
    <NrLog>2</NrLog>
    <NrTab>29</NrTab>
    <NrProc>119</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>214</Id>
    <NrLog>2</NrLog>
    <NrTab>30</NrTab>
    <NrProc>120</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>KPGenStanZatrMc</NzProc>
    <TextProc>
      CREATE PROCEDURE KPGenStanZatrMc
      @0 int, --lp naliczenia
      @1 int, --rok stanu
      @2 int, --miesiac stanu
      @3 varchar(10) --login operatora
      AS
      BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON
      --zmienne: klucz w tabeli KPKHP
      DECLARE @typUmowy CHAR(1);
      DECLARE @nrEwid INT;
      DECLARE @nrUmowy VARCHAR(10);
      DECLARE @dataZmiany DATETIME;

      --zmienne: składowe rekorku KPStArchS
      DECLARE @statusZatrudn VARCHAR(3)
      DECLARE @kodUmowy VARCHAR(7)
      DECLARE @kodZwoln VARCHAR(7)
      DECLARE @zaklad VARCHAR(7)
      DECLARE @komorka VARCHAR(7)
      DECLARE @stanowPr VARCHAR(7)
      DECLARE @rodzStanPr CHAR(1)
      DECLARE @sysWynagr VARCHAR(7)
      DECLARE @miejsceWypl VARCHAR(7)
      DECLARE @kodZawiesz VARCHAR(7)
      DECLARE @kodInwal VARCHAR(7)
      DECLARE @kodWykszt VARCHAR(7)
      DECLARE @kodWyksztGUS VARCHAR(7)
      DECLARE @kodZawodu VARCHAR(7)
      DECLARE @kodZawoduGUS VARCHAR(7)
      DECLARE @statusUmowy CHAR(1)
      DECLARE @wiek SMALLINT
      DECLARE @plec CHAR(1)
      DECLARE @etat VARCHAR(7)
      DECLARE @dniEtatoPracy DECIMAL(10, 6)
      declare @dniEtatoChoroby decimal(10,6)
      DECLARE @podstDodat CHAR(1)

      --zmienne: składowe rekorku KPStArchS, uzywane gdy jest zmiana umowy
      DECLARE @kodUmowyZmiana VARCHAR(7)
      DECLARE @kodZwolnZmiana VARCHAR(7)
      DECLARE @zakladZmiana VARCHAR(7)
      DECLARE @komorkaZmiana VARCHAR(7)
      DECLARE @stanowPrZmiana VARCHAR(7)
      DECLARE @sysWynagrZmiana VARCHAR(7)
      DECLARE @miejsceWyplZmiana VARCHAR(7)
      DECLARE @kodZawieszZmiana VARCHAR(7)
      DECLARE @etatZmiana VARCHAR(7)

      --zmienne: zmienne pomocnicze, wyznaczaja przedzial poszikiwania zmian umowy
      DECLARE @dataStop DATETIME
      DECLARE @dataNastZmiany DATETIME
      DECLARE @typZmiany CHAR(1)
      DECLARE @typZmianyPoprzedni CHAR(1)
      DECLARE @dZawieszDo DATETIME
      DECLARE @dZawieszDoZmiana DATETIME

      --zmienne: zmienne pomocnicze do sterowania petli
      DECLARE @koniec BIT

      --zmienne: parametry wywolania procedury (tu beda przepisane)
      DECLARE @lpNaliczenia INT
      DECLARE @rokStanu INT
      DECLARE @mcStanu INT
      DECLARE @operator VARCHAR(10)

      --zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
      DECLARE @dataOdStrPom VARCHAR(12)
      DECLARE @dataOd DATETIME
      DECLARE @dataDo DATETIME

      --zmienne: stale
      DECLARE @sySlow VARCHAR(3)
      DECLARE @sySlowKpSlStPr VARCHAR(3)
      DECLARE @sySlowWyksztGUS VARCHAR(3)
      DECLARE @sySlowZawodGUS VARCHAR(3)

      --przypisanie wartosci stalym, oraz przepisanie parametrow procedury
      SET @lpNaliczenia = @0
      SET @rokStanu = @1
      SET @mcStanu = @2
      SET @operator = @3
      SET @sySlow = 'XKP'
      SET @sySlowKpSlStPr = 'XSS'
      SET @sySlowWyksztGUS = '104'
      SET @sySlowZawodGUS = '103'

      --Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
      --dla danego roku stanu i miesiaca stanu
      SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
      SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
      SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

      --kursor po umowach
      DECLARE c_kupic CURSOR FOR
      SELECT TypUmowy, NrEwid, NrUmowy
      FROM KPKUPiC
      WHERE  (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataOd)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataOd BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataOd BETWEEN DataUmowyOd AND DataZakoncz)
      OR (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataDo)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataDo BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataDo BETWEEN DataUmowyOd AND DataZakoncz)

      --1. wstaw wiersz do KPStArchS
      INSERT INTO KPStArchS (SySlow, LpNaliczenia, RokStanu, McStanu, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @rokStanu, @mcStanu, @operator, GETDATE())

      --2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw dla nich wiersze do KPStZatrS
      OPEN c_kupic
      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;

      WHILE @@FETCH_STATUS = 0
      BEGIN
      --2.1. wyzeruj zmienne pomocnicze
      SET @dniEtatoPracy = 0
      set @dniEtatoChoroby = 0
      SET @dataStop = @dataDo
      SET @dataNastZmiany = NULL

      --2.2. znajdz mniejsza z dwoch dat: ostatniej zmiany o typie U lub A przed
      --	   @dataOd, oraz ostatniej zmiany o typie U lub A przed @dataDo
      SELECT @dataZmiany = MIN(DataZmiany)
      FROM
      (
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataOd
      UNION
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE (KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataDo
      ) Daty

      --2.3. Wybierz wszystkie dane pracownika
      SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
      @kodUmowy = KPKHP.KodUmowy,
      @kodZwoln = ISNULL(KPKUPiC.KodZakoncz, ''),
      @zaklad = ISNULL(KPKHP.Zaklad, ''),
      @komorka = ISNULL(KPKHP.Komorka, ''),
      @stanowPr = ISNULL(KPKHP.StanowPr, ''),
      @rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
      @sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWypl = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
      @kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
      @kodZawodu = KPKOP.KodZawoduWykon,
      @kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
      @statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany),
      XKOP.DataUrodz) &gt; @dataZmiany
      THEN DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) END
      ELSE 0 END,
      @plec = ISNULL(XKOP.Plec, ''),
      @etat = ISNULL(KPKHP.Etat, ''),
      @podstDodat = KPKUPiC.PodstDodat,
      @typZmiany = KPKHP.typZmiany,
      --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDo = KPKHP.DZawieszDo --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      FROM KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
      LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
      LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataZmiany AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

      SET @typZmianyPoprzedni = @typZmiany
      --2.4. Dla kazdej zmiany umowy pracownika, wpisz wiersz w KPStArchS
      --     [notatna_techniczna]Tutaj mozna uzyc kursora, ktory bedzie zwracal kolejne
      --	   daty zmiany. Zysk: jedno zapytanie zamiast kliku w petli, gdy jest kilka zmian w miesiacu.
      --	   strata: jezeli w wiekszosci wypadkow jest jedna umowa w miesiacu, deklaracja i zwalnianie
      --	   kursora moze spowolnic dzialanie.[/notatka_techniczna]
      SET @koniec = 0
      WHILE @koniec = 0
      BEGIN
      --2.4.1. Wyznaczenie daty nastepnej zmiany
      SELECT @dataNastZmiany = MIN(DataZmiany)
      FROM (
      SELECT KHP.dataZmiany AS DataZmiany
      FROM   KPKHP KHP
      WHERE  KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy
      UNION  --Zmiana to takze przyznanie stopnia inwalidzkiego
      SELECT KPKOPInwal.DataPrzyznania AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze zakonczenie waznosci stopnia inwalidzkiego
      SELECT KPKOPInwal.DataWaznosci AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze urodziny pracownika
      SELECT DATEADD(YEAR, DATEDIFF(YEAR, XKOP.DataUrodz, @dataOd), XKOP.DataUrodz)
      FROM   XKOP
      WHERE  XKOP.NrEwid = @nrEwid AND SySlow = @sySlow AND
      XKOP.DataUrodz IS NOT NULL AND MONTH(XKOP.DataUrodz) = MONTH(@dataOd)
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION
      SELECT DataZmiany
      FROM   KPKUPiCSlowSO
      WHERE  KPKUPiCSlowSO.NrEwid = @nrEwid AND KPKUPiCSlowSO.TypUmowy = @typUmowy AND KPKUPiCSlowSO.NrUmowy = @nrUmowy
      UNION  --poczatek okresu tez ma wywolac zmiane
      SELECT @dataOd AS DataZmiany
      ) Daty
      WHERE DataZmiany &gt; @dataZmiany AND DataZmiany &lt;= @dataDo

      --2.4.2. Jesli typ zmiany jest C, to nalezy skorygowac dateNastepnejZmiany
      --		 aby uwzgledniala date konca okresu zawieszenia
      IF @typZmiany = 'C' AND
      (@dataNastZmiany IS NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt;= @dataDo
      OR
      (@dataNastZmiany IS NOT NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt; @dataNastZmiany))
      SET @dataNastZmiany = DATEADD(DAY, 1, @dZawieszDo)

      --2.4.3. Zmien dateStop, jezeli jest nastepna zmiana
      IF @dataNastZmiany IS NOT NULL
      SET @dataStop = @dataNastZmiany
      ELSE
      SET @dataStop = @dataDo

      --2.4.4. Jezeli rozpatrywana zmiana miesci sie w okresie @dataOd i @dataDo
      IF @dataNastZmiany IS NULL OR @dataZmiany BETWEEN @dataOd AND @dataDo
      BEGIN
      --2.4.4.1. Wylicz dni etato-pracy
      IF @typZmiany = 'Z'
      SET @dniEtatoPracy = 1
      ELSE IF @typZmiany = 'U' OR @typZmiany = 'A' OR @typZmiany = 'P'
      BEGIN
      SET @dniEtatoPracy = DATEDIFF(DAY, @dataZmiany, @dataStop)
      IF @dataNastZmiany IS NULL
      SET @dniEtatoPracy = @dniEtatoPracy + 1
      END
      -- tu było ELSE IF @typZmiany = 'C'

      IF @typZmiany = 'C'
      SET @dniEtatoPracy = 0
      ELSE
      BEGIN
      declare @pomDni int
      select @pomDni = sum(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END, CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      (XSlSkPl.TypSkPl='B' and XSlSkPl.ZawieszaUmowe=0 and KPAbsenc.DniKalend&gt;29 or
      XSlSkPl.ZawieszaUmowe=1)
      select @pomDni = ISNULL(@pomDni,0);
      select @dniEtatoPracy = @dniEtatoPracy - abs(@pomDni)
      END


      -- 1.2.3 nowe HF
      declare @pomDniChor int
      select @pomDniChor = sum(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END, CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      left(XSlSkPl.TypSkPl,1)='C' and XSlSkPl.KodZusP&gt;'300' and XSlSkPl.KodZusP&lt;'330'
      select @dniEtatoChoroby = case when 30 &lt; abs(@pomDniChor) then -30 else -1 * abs(@pomDniChor) end

      select @dniEtatoPracy = isnull(@dniEtatoPracy,0);
      select @dniEtatoChoroby = isnull(@dniEtatoChoroby,0);

      --2.4.4.2. Dopisz wiersz do KPStZatrS
      INSERT INTO KPStZatrS (SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanowPr, SysWynagr, MiejsceWypl, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, DniEtatoPrac, PodstDodat, DniEtatoChoroby, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWypl, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @dniEtatoPracy, @podstDodat, @dniEtatoChoroby, @operator, GETDATE())
      END

      --2.4.5. Jezeli jest kolejna zmiana - pobierz dane z tabeli do zmiennych
      --       dla nastepnej zmiany umowy
      --		 w przeciwnym wypadku koniec petli
      IF @dataNastZmiany IS NOT NULL
      BEGIN
      SET @dataZmiany = @dataNastZmiany
      --2.4.5.1. Pobranie danych do zmiennych pomocniczych
      SELECT  @kodUmowyZmiana = ISNULL(KPKHP.KodUmowy, ''),
      @kodZwolnZmiana = ISNULL(KPKHP.KodZwoln, ''),
      @zakladZmiana = ISNULL(KPKHP.Zaklad, ''),
      @komorkaZmiana = ISNULL(KPKHP.Komorka, ''),
      @stanowPrZmiana = ISNULL(KPKHP.StanowPr, ''),
      @sysWynagrZmiana = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWyplZmiana = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawieszZmiana = ISNULL(KPKHP.KodZawiesz, ''),
      @typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDoZmiana = KPKHP.DZawieszDo, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany), XKOP.DataUrodz) &gt; @dataZmiany
      THEN
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany)
      END
      ELSE
      0
      END,
      @etatZmiana = ISNULL(KPKHP.Etat, '')
      FROM KPKUPiC
      LEFT OUTER JOIN KPKHP ON KPKUPiC.NrEwid = KPKHP.NrEwid AND
      KPKUPiC.TypUmowy = KPKHP.TypUmowy AND
      KPKUPiC.NrUmowy = KPKHP.NrUmowy AND
      KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND
      XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid
      AND KodInwal.DataPrzyznania = (
      SELECT MAX(DataPrzyznania)
      FROM KPKOPInwal
      WHERE DataPrzyznania &lt;= @dataZmiany AND
      NrEwid = @nrEwid) AND
      (KodInwal.DataWaznosci IS NULL OR
      KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND
      KPKUPiC.NrUmowy = @nrUmowy

      --2.4.5.2. Przepisanie danych ze zmiennych pomocniczych do zmiennych wlasciwych
      -- w zaleznosci od typu zmiany
      IF @typZmiany = 'U'
      BEGIN
      SET @kodUmowy = @kodUmowyZmiana
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      END
      ELSE IF @typZmiany = 'A'
      BEGIN
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'Z'
      BEGIN
      SET @kodZwoln = @kodZwolnZmiana
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'C'
      BEGIN
      SET @kodZawiesz = @kodZawieszZmiana
      SET @dZawieszDo = @dZawieszDoZmiana
      END
      ELSE IF @typZmiany = 'P'
      BEGIN
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany IS NULL --Jezeli aktualna @dataZmiany nie wiaze sie z wpisem w KPKHP
      BEGIN
      --to w zaleznosci od tego czy trwa okres zawieszenia pracownika
      --typ zmiany ustawiany jest albo na 'C' (zawieszony)
      --albo na poprzedni typ zmiany inny od 'C' i 'Z'
      IF @dZawieszDo IS NOT NULL AND @dataZmiany &lt;= @dZawieszDo
      SET @typZmiany = 'C'
      ELSE
      BEGIN
      SET @typZmiany = @typZmianyPoprzedni
      SET @kodZawiesz = ''
      SET @dZawieszDo = NULL
      END
      END
      END
      ELSE
      SET @koniec = 1

      END --petla zmian dla jednej umowy

      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;
      END

      CLOSE c_kupic
      DEALLOCATE c_kupic

      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>215</Id>
    <NrLog>2</NrLog>
    <NrTab>30</NrTab>
    <NrProc>121</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>XKOPBankPriorytetNumer</NzProc>
    <TextProc>
      CREATE PROCEDURE XKOPBankPriorytetNumer	(
      @0 VARCHAR(3),	-- SySlow
      @1 INT,		-- NrEwid
      @2 VARCHAR(60),	-- Rachunek do ustawienia nowej wartosci okreslonej w parametrze @3
      @3 SMALLINT	-- żądana wartość Priorytetu rachunku z parametru @2
      )
      AS

      DECLARE @biezacy_priorytet AS INT
      DECLARE @nowy_priorytet AS INT
      DECLARE @rachunek_modyf AS VARCHAR(60)
      DECLARE @rachunek_poprz AS VARCHAR(60)

      SET @biezacy_priorytet = -1
      SET @rachunek_poprz = ''

      IF ( SELECT COUNT(*) FROM XKOPBank WHERE SySlow=@0 AND NrEwid=@1 AND Rachunek = @2 ) &lt; 1 SET @3 = -1

      WHILE 1=1
      BEGIN
      SET @rachunek_modyf = (SELECT TOP 1 Rachunek FROM XKOPBank WHERE SySlow=@0 AND NrEwid=@1 AND Rachunek &lt;&gt; @2 AND Rachunek &lt;&gt; @rachunek_poprz AND Priorytet &gt;= @biezacy_priorytet ORDER BY Priorytet)

      IF ISNULL(@rachunek_modyf,'|')='|' BREAK
      ELSE SET @rachunek_poprz = @rachunek_modyf

      SET @nowy_priorytet = @biezacy_priorytet + 1

      IF ( @nowy_priorytet = @3 )
      SET @nowy_priorytet = @3 + 1

      UPDATE XKOPBank SET Priorytet = @nowy_priorytet FROM XKOPBank WHERE SySlow=@0 AND NrEwid=@1 AND Rachunek = @rachunek_modyf

      SET @biezacy_priorytet = @nowy_priorytet

      END

      UPDATE XKOPBank SET Priorytet = @3 FROM XKOPBank WHERE SySlow=@0 AND NrEwid=@1 AND Rachunek = @2

      SELECT SySlow, NrEwid, Rachunek, Priorytet FROM XKOPBank WHERE SySlow=@0 AND NrEwid=@1 ORDER BY Priorytet

      RETURN
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>216</Id>
    <NrLog>2</NrLog>
    <NrTab>31</NrTab>
    <NrProc>121</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>217</Id>
    <NrLog>2</NrLog>
    <NrTab>32</NrTab>
    <NrProc>122</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>FKParGlob050AlgDomChange</NzProc>
    <TextProc>
      CREATE TRIGGER FKParGlob050AlgDomChange
      ON  FKParGlob
      AFTER UPDATE
      AS
      BEGIN
        SET NOCOUNT ON;

        DECLARE @modSyParam varchar(30)
        DECLARE @SyParam varchar(30)
        DECLARE @ParGlobOkresO smallint
        DECLARE @ParGlobAlg varchar(512)
        DECLARE @ParGlobOper varchar(10)
        DECLARE @ParGlobMet varchar(512)
        DECLARE @chk1 varchar(512)
        DECLARE @chk2 varchar(512)
        DECLARE @ParGlobDataCzas datetime
        DECLARE @ParGlobAutoRoz bit
        DECLARE @ParGlobAutoRozJak varchar(64)
        DECLARE @jest int

        select @modSyParam=SyParam from inserted
        if(@modSyParam='050AlgDom')
        begin
          select @ParGlobOkresO=OkresO from inserted
          select @ParGlobAlg=TekstParam from inserted
          select @ParGlobOper=Oper from inserted
          select @ParGlobDataCzas=DataCzas from inserted

          select @SyParam=case @ParGlobAlg
          when 'Para' then '015MetRozP'
          when 'Data' then '025MetRozD'
          when 'Termin' then '035MetRozT'
          when 'Kolejność' then '045MetRozC'
        end

        select @ParGlobMet=TekstParam from FKParGlob where OkresO=@ParGlobOkresO and SyParam=@SyParam

        select @chk1=TekstParam from FKParGlob where OkresO=@ParGlobOkresO and SyParam='060RozDek'
        select @chk2=TekstParam from FKParGlob where OkresO=@ParGlobOkresO and SyParam='070RozDow'

        select @ParGlobAutoRoz=case
        when (@chk1='false' and @chk2='false') then 0
        else 1
        end
        select @ParGlobAutoRozJak=case
        when @chk2='true' then 'AutoDow'
        else 'AutoDek'
        end
        select @jest=COUNT(*) from FKRozrachunkiCechy where OkresO=@ParGlobOkresO AND NrWyjatku=0
        if(@jest&gt;0)
        update FKRozrachunkiCechy set OkresO=@ParGlobOkresO, NrWyjatku=0, Konto=null, SySlow=null, Analityka=null, GrupaRoz=null, SyAnal=null, SyKth=null, NrEwid=null, NrUs=null, AlgRoz=@ParGlobAlg, MetRoz=@ParGlobMet, AutoRoz=@ParGlobAutoRoz, AutoRozJak=@ParGlobAutoRozJak, OperZaloz=@ParGlobOper, DataCzasZaloz=@ParGlobDataCzas, Oper=@ParGlobOper, DataCzas=@ParGlobDataCzas where OkresO=@ParGlobOkresO and NrWyjatku=0
        if(@jest=0)
        insert into FKRozrachunkiCechy (OkresO, NrWyjatku, Konto, SySlow, Analityka, GrupaRoz, SyAnal, SyKth, NrEwid, NrUs, AlgRoz, MetRoz, AutoRoz, AutoRozJak, OperZaloz, DataCzasZaloz, Oper, DataCzas)
        values (@ParGlobOkresO, 0, null, null, null, null, null, null, null, null, @ParGlobAlg, @ParGlobMet, @ParGlobAutoRoz, @ParGlobAutoRozJak, @ParGlobOper, @ParGlobDataCzas, @ParGlobOper, @ParGlobDataCzas)
        end
      END

    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>218</Id>
    <NrLog>2</NrLog>
    <NrTab>33</NrTab>
    <NrProc>122</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>219</Id>
    <NrLog>2</NrLog>
    <NrTab>34</NrTab>
    <NrProc>123</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>RegexMatch</NzProc>
    <TextProc>
      CREATE FUNCTION RegexMatch(@0 [nvarchar](max), @1 [nvarchar](4000))
      RETURNS [bit] WITH EXECUTE AS CALLER
      AS
      EXTERNAL NAME [InfraSqlCLR].[UserDefinedFunctions].[RegexMatch]
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>220</Id>
    <NrLog>2</NrLog>
    <NrTab>34</NrTab>
    <NrProc>124</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>FKDajKontaWgDefWyboru</NzProc>
    <TextProc>
      CREATE PROCEDURE FKDajKontaWgDefWyboru
      @0 [smallint],
      @1 [nvarchar](4000),
      @2 [nvarchar](4000),
      @3 [nvarchar](4000)
      WITH EXECUTE AS CALLER
      AS
      EXTERNAL NAME [InfraSqlCLR].[StoredProcedures].[FKDajKontaWgDefWyboru]
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>221</Id>
    <NrLog>2</NrLog>
    <NrTab>34</NrTab>
    <NrProc>125</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>NrWyjatkuDlaKonta</NzProc>
    <TextProc>
      CREATE FUNCTION NrWyjatkuDlaKonta(@0 [int], @1 [nvarchar](max), @2 [nvarchar](max), @3 [nvarchar](max), @4 [int], @5[bit])
      RETURNS [int] WITH EXECUTE AS CALLER
      AS
      EXTERNAL NAME [InfraSqlCLR].[UserDefinedFunctions].[NrWyjatkuDlaKonta]
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>222</Id>
    <NrLog>2</NrLog>
    <NrTab>34</NrTab>
    <NrProc>126</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>PoziomR</NzProc>
    <TextProc>
      CREATE FUNCTION PoziomR(@0 [int], @1 [nvarchar](max))
      RETURNS [int] WITH EXECUTE AS CALLER
      AS
      EXTERNAL NAME [InfraSqlCLR].[UserDefinedFunctions].[PoziomR]
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>223</Id>
    <NrLog>2</NrLog>
    <NrTab>35</NrTab>
    <NrProc>126</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>224</Id>
    <NrLog>2</NrLog>
    <NrTab>36</NrTab>
    <NrProc>126</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>225</Id>
    <NrLog>2</NrLog>
    <NrTab>37</NrTab>
    <NrProc>126</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>226</Id>
    <NrLog>2</NrLog>
    <NrTab>38</NrTab>
    <NrProc>126</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>227</Id>
    <NrLog>2</NrLog>
    <NrTab>39</NrTab>
    <NrProc>126</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>228</Id>
    <NrLog>2</NrLog>
    <NrTab>40</NrTab>
    <NrProc>126</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>229</Id>
    <NrLog>2</NrLog>
    <NrTab>41</NrTab>
    <NrProc>126</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>230</Id>
    <NrLog>2</NrLog>
    <NrTab>42</NrTab>
    <NrProc>126</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>231</Id>
    <NrLog>2</NrLog>
    <NrTab>43</NrTab>
    <NrProc>126</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>232</Id>
    <NrLog>2</NrLog>
    <NrTab>44</NrTab>
    <NrProc>126</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>233</Id>
    <NrLog>2</NrLog>
    <NrTab>45</NrTab>
    <NrProc>126</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>234</Id>
    <NrLog>2</NrLog>
    <NrTab>46</NrTab>
    <NrProc>127</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>FKParGlob050AlgDomChange</NzProc>
    <TextProc>
      CREATE TRIGGER FKParGlob050AlgDomChange
      ON  FKParGlob
      AFTER UPDATE
      AS
      BEGIN
        SET NOCOUNT ON;

        DECLARE @modSyParam varchar(30)
        DECLARE @SyParam varchar(30)
        DECLARE @ParGlobOkresO smallint
        DECLARE @ParGlobAlg varchar(512)
        DECLARE @ParGlobOper varchar(10)
        DECLARE @ParGlobMet varchar(512)
        DECLARE @chk1 varchar(512)
        DECLARE @chk2 varchar(512)
        DECLARE @ParGlobDataCzas datetime
        DECLARE @ParGlobAutoRoz bit
        DECLARE @ParGlobAutoRozJak varchar(64)
        DECLARE @jest int

        select @modSyParam=SyParam from inserted
        if(@modSyParam='050AlgDom')
        begin
          select @ParGlobOkresO=OkresO from inserted
          select @ParGlobAlg=TekstParam from inserted
          select @ParGlobOper=Oper from inserted
          select @ParGlobDataCzas=DataCzas from inserted

          select @SyParam=case @ParGlobAlg
          when 'Para' then '015MetRozP'
          when 'Data' then '025MetRozD'
          when 'Termin' then '035MetRozT'
          when 'Kolejnoœæ' then '045MetRozC'
        end

        select @ParGlobMet=TekstParam from FKParGlob where OkresO=@ParGlobOkresO and SyParam=@SyParam

        select @chk1=TekstParam from FKParGlob where OkresO=@ParGlobOkresO and SyParam='060RozDek'
        select @chk2=TekstParam from FKParGlob where OkresO=@ParGlobOkresO and SyParam='070RozDow'

        select @ParGlobAutoRoz=case
        when (@chk1='false' and @chk2='false') then 0
        else 1
        end
        select @ParGlobAutoRozJak=case
        when @chk2='true' then 'AutoDow'
        else 'AutoDek'
        end
        select @jest=COUNT(*) from FKRozrachunkiCechy where OkresO=@ParGlobOkresO AND NrWyjatku=0
        if(@jest &gt; 0)
        update FKRozrachunkiCechy set OkresO=@ParGlobOkresO, NrWyjatku=0, Konto=null, SySlow=null, Analityka='', GrupaRoz=null, SyAnal=null, SyKth=null, NrEwid=null, NrUs=null, AlgRoz=@ParGlobAlg, MetRoz=@ParGlobMet, AutoRoz=@ParGlobAutoRoz, AutoRozJak=@ParGlobAutoRozJak, OperZaloz=@ParGlobOper, DataCzasZaloz=@ParGlobDataCzas, Oper=@ParGlobOper, DataCzas=@ParGlobDataCzas where OkresO=@ParGlobOkresO and NrWyjatku=0
        if(@jest=0)
        insert into FKRozrachunkiCechy (OkresO, NrWyjatku, Konto, SySlow, Analityka, GrupaRoz, SyAnal, SyKth, NrEwid, NrUs, AlgRoz, MetRoz, AutoRoz, AutoRozJak, OperZaloz, DataCzasZaloz, Oper, DataCzas)
        values (@ParGlobOkresO, 0, null, null, '', null, null, null, null, null, @ParGlobAlg, @ParGlobMet, @ParGlobAutoRoz, @ParGlobAutoRozJak, @ParGlobOper, @ParGlobDataCzas, @ParGlobOper, @ParGlobDataCzas)
        end
      END


    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>235</Id>
    <NrLog>2</NrLog>
    <NrTab>47</NrTab>
    <NrProc>128</NrProc>
    <ProcFun>Procedure</ProcFun>
    <NzProc>KPGenStanZatrMc</NzProc>
    <TextProc>
      CREATE PROCEDURE KPGenStanZatrMc
      @0 int, --lp naliczenia
      @1 int, --rok stanu
      @2 int, --miesiac stanu
      @3 varchar(10) --login operatora
      AS
      BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON
      --zmienne: klucz w tabeli KPKHP
      DECLARE @typUmowy CHAR(1);
      DECLARE @nrEwid INT;
      DECLARE @nrUmowy VARCHAR(10);
      DECLARE @dataZmiany DATETIME;

      --zmienne: składowe rekorku KPStArchS
      DECLARE @statusZatrudn VARCHAR(3)
      DECLARE @kodUmowy VARCHAR(7)
      DECLARE @kodZwoln VARCHAR(7)
      DECLARE @zaklad VARCHAR(7)
      DECLARE @komorka VARCHAR(7)
      DECLARE @stanowPr VARCHAR(7)
      DECLARE @rodzStanPr CHAR(1)
      DECLARE @sysWynagr VARCHAR(7)
      DECLARE @miejsceWypl VARCHAR(7)
      DECLARE @kodZawiesz VARCHAR(7)
      DECLARE @kodInwal VARCHAR(7)
      DECLARE @kodWykszt VARCHAR(7)
      DECLARE @kodWyksztGUS VARCHAR(7)
      DECLARE @kodZawodu VARCHAR(7)
      DECLARE @kodZawoduGUS VARCHAR(7)
      DECLARE @statusUmowy CHAR(1)
      DECLARE @wiek SMALLINT
      DECLARE @plec CHAR(1)
      DECLARE @etat VARCHAR(7)
      DECLARE @dniEtatoPracy DECIMAL(10, 6)
      declare @dniEtatoChoroby decimal(10,6)
      DECLARE @podstDodat CHAR(1)

      --zmienne: składowe rekorku KPStArchS, uzywane gdy jest zmiana umowy
      DECLARE @kodUmowyZmiana VARCHAR(7)
      DECLARE @kodZwolnZmiana VARCHAR(7)
      DECLARE @zakladZmiana VARCHAR(7)
      DECLARE @komorkaZmiana VARCHAR(7)
      DECLARE @stanowPrZmiana VARCHAR(7)
      DECLARE @sysWynagrZmiana VARCHAR(7)
      DECLARE @miejsceWyplZmiana VARCHAR(7)
      DECLARE @kodZawieszZmiana VARCHAR(7)
      DECLARE @etatZmiana VARCHAR(7)

      --zmienne: zmienne pomocnicze, wyznaczaja przedzial poszikiwania zmian umowy
      DECLARE @dataStop DATETIME
      DECLARE @dataNastZmiany DATETIME
      DECLARE @typZmiany CHAR(1)
      DECLARE @typZmianyPoprzedni CHAR(1)
      DECLARE @dZawieszDo DATETIME
      DECLARE @dZawieszDoZmiana DATETIME

      --zmienne: zmienne pomocnicze do sterowania petli
      DECLARE @koniec BIT

      --zmienne: parametry wywolania procedury (tu beda przepisane)
      DECLARE @lpNaliczenia INT
      DECLARE @rokStanu INT
      DECLARE @mcStanu INT
      DECLARE @operator VARCHAR(10)

      --zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
      DECLARE @dataOdStrPom VARCHAR(12)
      DECLARE @dataOd DATETIME
      DECLARE @dataDo DATETIME

      --zmienne: stale
      DECLARE @sySlow VARCHAR(3)
      DECLARE @sySlowKpSlStPr VARCHAR(3)
      DECLARE @sySlowWyksztGUS VARCHAR(3)
      DECLARE @sySlowZawodGUS VARCHAR(3)

      --przypisanie wartosci stalym, oraz przepisanie parametrow procedury
      SET @lpNaliczenia = @0
      SET @rokStanu = @1
      SET @mcStanu = @2
      SET @operator = @3
      SET @sySlow = 'XKP'
      SET @sySlowKpSlStPr = 'XSS'
      SET @sySlowWyksztGUS = '104'
      SET @sySlowZawodGUS = '103'

      --Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
      --dla danego roku stanu i miesiaca stanu
      SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
      SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
      SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

      --kursor po umowach
      DECLARE c_kupic CURSOR FOR
      SELECT TypUmowy, NrEwid, NrUmowy
      FROM KPKUPiC
      WHERE  (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataOd)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataOd BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataOd BETWEEN DataUmowyOd AND DataZakoncz)
      OR (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataDo)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataDo BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataDo BETWEEN DataUmowyOd AND DataZakoncz)

      --1. wstaw wiersz do KPStArchS
      INSERT INTO KPStArchS (SySlow, LpNaliczenia, RokStanu, McStanu, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @rokStanu, @mcStanu, @operator, GETDATE())

      --2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw dla nich wiersze do KPStZatrS
      OPEN c_kupic
      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;

      WHILE @@FETCH_STATUS = 0
      BEGIN
      --2.1. wyzeruj zmienne pomocnicze
      SET @dniEtatoPracy = 0
      set @dniEtatoChoroby = 0
      SET @dataStop = @dataDo
      SET @dataNastZmiany = NULL

      --2.2. znajdz mniejsza z dwoch dat: ostatniej zmiany o typie U lub A przed
      --	   @dataOd, oraz ostatniej zmiany o typie U lub A przed @dataDo
      SELECT @dataZmiany = MIN(DataZmiany)
      FROM
      (
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataOd
      UNION
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE (KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataDo
      ) Daty

      --2.3. Wybierz wszystkie dane pracownika
      SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
      @kodUmowy = KPKHP.KodUmowy,
      @kodZwoln = ISNULL(KPKUPiC.KodZakoncz, ''),
      @zaklad = ISNULL(KPKHP.Zaklad, ''),
      @komorka = ISNULL(KPKHP.Komorka, ''),
      @stanowPr = ISNULL(KPKHP.StanowPr, ''),
      @rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
      @sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWypl = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
      @kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
      @kodZawodu = KPKOP.KodZawoduWykon,
      @kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
      @statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany),
      XKOP.DataUrodz) &gt; @dataZmiany
      THEN DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) END
      ELSE 0 END,
      @plec = ISNULL(XKOP.Plec, ''),
      @etat = ISNULL(KPKHP.Etat, ''),
      @podstDodat = KPKUPiC.PodstDodat,
      @typZmiany = KPKHP.typZmiany,
      --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDo = KPKHP.DZawieszDo --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      FROM KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
      LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
      LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataZmiany AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

      SET @typZmianyPoprzedni = @typZmiany
      --2.4. Dla kazdej zmiany umowy pracownika, wpisz wiersz w KPStArchS
      --     [notatna_techniczna]Tutaj mozna uzyc kursora, ktory bedzie zwracal kolejne
      --	   daty zmiany. Zysk: jedno zapytanie zamiast kliku w petli, gdy jest kilka zmian w miesiacu.
      --	   strata: jezeli w wiekszosci wypadkow jest jedna umowa w miesiacu, deklaracja i zwalnianie
      --	   kursora moze spowolnic dzialanie.[/notatka_techniczna]
      SET @koniec = 0
      WHILE @koniec = 0
      BEGIN
      --2.4.1. Wyznaczenie daty nastepnej zmiany
      SELECT @dataNastZmiany = MIN(DataZmiany)
      FROM (
      SELECT KHP.dataZmiany AS DataZmiany
      FROM   KPKHP KHP
      WHERE  KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy
      UNION  --Zmiana to takze przyznanie stopnia inwalidzkiego
      SELECT KPKOPInwal.DataPrzyznania AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze zakonczenie waznosci stopnia inwalidzkiego
      SELECT KPKOPInwal.DataWaznosci AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze urodziny pracownika
      SELECT DATEADD(YEAR, DATEDIFF(YEAR, XKOP.DataUrodz, @dataOd), XKOP.DataUrodz)
      FROM   XKOP
      WHERE  XKOP.NrEwid = @nrEwid AND SySlow = @sySlow AND
      XKOP.DataUrodz IS NOT NULL AND MONTH(XKOP.DataUrodz) = MONTH(@dataOd)
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION
      SELECT DataZmiany
      FROM   KPKUPiCSlowSO
      WHERE  KPKUPiCSlowSO.NrEwid = @nrEwid AND KPKUPiCSlowSO.TypUmowy = @typUmowy AND KPKUPiCSlowSO.NrUmowy = @nrUmowy
      UNION  --poczatek okresu tez ma wywolac zmiane
      SELECT @dataOd AS DataZmiany
      ) Daty
      WHERE DataZmiany &gt; @dataZmiany AND DataZmiany &lt;= @dataDo

      --2.4.2. Jesli typ zmiany jest C, to nalezy skorygowac dateNastepnejZmiany
      --		 aby uwzgledniala date konca okresu zawieszenia
      IF @typZmiany = 'C' AND
      (@dataNastZmiany IS NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt;= @dataDo
      OR
      (@dataNastZmiany IS NOT NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt; @dataNastZmiany))
      SET @dataNastZmiany = DATEADD(DAY, 1, @dZawieszDo)

      --2.4.3. Zmien dateStop, jezeli jest nastepna zmiana
      IF @dataNastZmiany IS NOT NULL
      SET @dataStop = @dataNastZmiany
      ELSE
      SET @dataStop = @dataDo

      --2.4.4. Jezeli rozpatrywana zmiana miesci sie w okresie @dataOd i @dataDo
      IF @dataNastZmiany IS NULL OR @dataZmiany BETWEEN @dataOd AND @dataDo
      BEGIN
      --2.4.4.1. Wylicz dni etato-pracy
      IF @typZmiany = 'Z'
      SET @dniEtatoPracy = 1
      ELSE IF @typZmiany = 'U' OR @typZmiany = 'A' OR @typZmiany = 'P'
      BEGIN
      SET @dniEtatoPracy = DATEDIFF(DAY, @dataZmiany, @dataStop) + (CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END)
      --IF @dataNastZmiany IS NULL
      --SET @dniEtatoPracy = @dniEtatoPracy + 1
      END
      -- tu było ELSE IF @typZmiany = 'C'

      IF @typZmiany = 'C'
      SET @dniEtatoPracy = 0
      ELSE
      BEGIN
      declare @pomDni int
      select @pomDni = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END, CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))+1)
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      (XSlSkPl.TypSkPl='B' and XSlSkPl.ZawieszaUmowe=0 and KPAbsenc.DniKalend&gt;29 or
      XSlSkPl.ZawieszaUmowe=1)
      select @pomDni = ISNULL(@pomDni,0);
      select @dniEtatoPracy = @dniEtatoPracy - abs(@pomDni)
      END


      -- 1.2.3 nowe HF
      declare @pomDniChor int
      select @pomDniChor = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END, CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))+1)
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      left(XSlSkPl.TypSkPl,1)='C' and XSlSkPl.KodZusP&gt;'300' and XSlSkPl.KodZusP&lt;'330'
      select @dniEtatoChoroby = case when 30 &lt; abs(@pomDniChor) then -30 else -1 * abs(@pomDniChor) end

      select @dniEtatoPracy = isnull(@dniEtatoPracy,0);
      select @dniEtatoChoroby = isnull(@dniEtatoChoroby,0);

      --2.4.4.2. Dopisz wiersz do KPStZatrS
      INSERT INTO KPStZatrS (SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanowPr, SysWynagr, MiejsceWypl, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, DniEtatoPrac, PodstDodat, DniEtatoChoroby, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWypl, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @dniEtatoPracy, @podstDodat, @dniEtatoChoroby, @operator, GETDATE())
      END

      --2.4.5. Jezeli jest kolejna zmiana - pobierz dane z tabeli do zmiennych
      --       dla nastepnej zmiany umowy
      --		 w przeciwnym wypadku koniec petli
      IF @dataNastZmiany IS NOT NULL
      BEGIN
      SET @dataZmiany = @dataNastZmiany
      --2.4.5.1. Pobranie danych do zmiennych pomocniczych
      SELECT  @kodUmowyZmiana = ISNULL(KPKHP.KodUmowy, ''),
      @kodZwolnZmiana = ISNULL(KPKHP.KodZwoln, ''),
      @zakladZmiana = ISNULL(KPKHP.Zaklad, ''),
      @komorkaZmiana = ISNULL(KPKHP.Komorka, ''),
      @stanowPrZmiana = ISNULL(KPKHP.StanowPr, ''),
      @sysWynagrZmiana = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWyplZmiana = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawieszZmiana = ISNULL(KPKHP.KodZawiesz, ''),
      @typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDoZmiana = KPKHP.DZawieszDo, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany), XKOP.DataUrodz) &gt; @dataZmiany
      THEN
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany)
      END
      ELSE
      0
      END,
      @etatZmiana = ISNULL(KPKHP.Etat, '')
      FROM KPKUPiC
      LEFT OUTER JOIN KPKHP ON KPKUPiC.NrEwid = KPKHP.NrEwid AND
      KPKUPiC.TypUmowy = KPKHP.TypUmowy AND
      KPKUPiC.NrUmowy = KPKHP.NrUmowy AND
      KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND
      XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid
      AND KodInwal.DataPrzyznania = (
      SELECT MAX(DataPrzyznania)
      FROM KPKOPInwal
      WHERE DataPrzyznania &lt;= @dataZmiany AND
      NrEwid = @nrEwid) AND
      (KodInwal.DataWaznosci IS NULL OR
      KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND
      KPKUPiC.NrUmowy = @nrUmowy

      --2.4.5.2. Przepisanie danych ze zmiennych pomocniczych do zmiennych wlasciwych
      -- w zaleznosci od typu zmiany
      IF @typZmiany = 'U'
      BEGIN
      SET @kodUmowy = @kodUmowyZmiana
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      END
      ELSE IF @typZmiany = 'A'
      BEGIN
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'Z'
      BEGIN
      SET @kodZwoln = @kodZwolnZmiana
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'C'
      BEGIN
      SET @kodZawiesz = @kodZawieszZmiana
      SET @dZawieszDo = @dZawieszDoZmiana
      END
      ELSE IF @typZmiany = 'P'
      BEGIN
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany IS NULL --Jezeli aktualna @dataZmiany nie wiaze sie z wpisem w KPKHP
      BEGIN
      --to w zaleznosci od tego czy trwa okres zawieszenia pracownika
      --typ zmiany ustawiany jest albo na 'C' (zawieszony)
      --albo na poprzedni typ zmiany inny od 'C' i 'Z'
      IF @dZawieszDo IS NOT NULL AND @dataZmiany &lt;= @dZawieszDo
      SET @typZmiany = 'C'
      ELSE
      BEGIN
      SET @typZmiany = @typZmianyPoprzedni
      SET @kodZawiesz = ''
      SET @dZawieszDo = NULL
      END
      END
      END
      ELSE
      SET @koniec = 1

      END --petla zmian dla jednej umowy

      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;
      END

      CLOSE c_kupic
      DEALLOCATE c_kupic

      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>236</Id>
    <NrLog>2</NrLog>
    <NrTab>48</NrTab>
    <NrProc>129</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>KPGenStanZatrMc</NzProc>
    <TextProc>
      CREATE PROCEDURE KPGenStanZatrMc
      @0 int, --lp naliczenia
      @1 int, --rok stanu
      @2 int, --miesiac stanu
      @3 varchar(10) --login operatora
      AS
      BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON
      --zmienne: klucz w tabeli KPKHP
      DECLARE @typUmowy CHAR(1);
      DECLARE @nrEwid INT;
      DECLARE @nrUmowy VARCHAR(10);
      DECLARE @dataZmiany DATETIME;

      --zmienne: składowe rekorku KPStArchS
      DECLARE @statusZatrudn VARCHAR(3)
      DECLARE @kodUmowy VARCHAR(7)
      DECLARE @kodZwoln VARCHAR(7)
      DECLARE @zaklad VARCHAR(7)
      DECLARE @komorka VARCHAR(7)
      DECLARE @stanowPr VARCHAR(7)
      DECLARE @rodzStanPr CHAR(1)
      DECLARE @sysWynagr VARCHAR(7)
      DECLARE @miejsceWypl VARCHAR(7)
      DECLARE @kodZawiesz VARCHAR(7)
      DECLARE @kodInwal VARCHAR(7)
      DECLARE @kodWykszt VARCHAR(7)
      DECLARE @kodWyksztGUS VARCHAR(7)
      DECLARE @kodZawodu VARCHAR(7)
      DECLARE @kodZawoduGUS VARCHAR(7)
      DECLARE @statusUmowy CHAR(1)
      DECLARE @wiek SMALLINT
      DECLARE @plec CHAR(1)
      DECLARE @etat VARCHAR(7)
      DECLARE @dniEtatoPracy DECIMAL(10, 6)
      declare @dniEtatoChoroby decimal(10,6)
      DECLARE @podstDodat CHAR(1)

      --zmienne: składowe rekorku KPStArchS, uzywane gdy jest zmiana umowy
      DECLARE @kodUmowyZmiana VARCHAR(7)
      DECLARE @kodZwolnZmiana VARCHAR(7)
      DECLARE @zakladZmiana VARCHAR(7)
      DECLARE @komorkaZmiana VARCHAR(7)
      DECLARE @stanowPrZmiana VARCHAR(7)
      DECLARE @sysWynagrZmiana VARCHAR(7)
      DECLARE @miejsceWyplZmiana VARCHAR(7)
      DECLARE @kodZawieszZmiana VARCHAR(7)
      DECLARE @etatZmiana VARCHAR(7)

      --zmienne: zmienne pomocnicze, wyznaczaja przedzial poszikiwania zmian umowy
      DECLARE @dataStop DATETIME
      DECLARE @dataNastZmiany DATETIME
      DECLARE @typZmiany CHAR(1)
      DECLARE @typZmianyPoprzedni CHAR(1)
      DECLARE @dZawieszDo DATETIME
      DECLARE @dZawieszDoZmiana DATETIME

      --zmienne: zmienne pomocnicze do sterowania petli
      DECLARE @koniec BIT

      --zmienne: parametry wywolania procedury (tu beda przepisane)
      DECLARE @lpNaliczenia INT
      DECLARE @rokStanu INT
      DECLARE @mcStanu INT
      DECLARE @operator VARCHAR(10)

      --zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
      DECLARE @dataOdStrPom VARCHAR(12)
      DECLARE @dataOd DATETIME
      DECLARE @dataDo DATETIME

      --zmienne: stale
      DECLARE @sySlow VARCHAR(3)
      DECLARE @sySlowKpSlStPr VARCHAR(3)
      DECLARE @sySlowWyksztGUS VARCHAR(3)
      DECLARE @sySlowZawodGUS VARCHAR(3)

      --przypisanie wartosci stalym, oraz przepisanie parametrow procedury
      SET @lpNaliczenia = @0
      SET @rokStanu = @1
      SET @mcStanu = @2
      SET @operator = @3
      SET @sySlow = 'XKP'
      SET @sySlowKpSlStPr = 'XSS'
      SET @sySlowWyksztGUS = '104'
      SET @sySlowZawodGUS = '103'

      --Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
      --dla danego roku stanu i miesiaca stanu
      SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
      SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
      SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

      --kursor po umowach
      DECLARE c_kupic CURSOR FOR
      SELECT TypUmowy, NrEwid, NrUmowy
      FROM KPKUPiC
      WHERE  (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataOd)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataOd BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataOd BETWEEN DataUmowyOd AND DataZakoncz)
      OR (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataDo)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataDo BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataDo BETWEEN DataUmowyOd AND DataZakoncz)

      --1. wstaw wiersz do KPStArchS
      INSERT INTO KPStArchS (SySlow, LpNaliczenia, RokStanu, McStanu, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @rokStanu, @mcStanu, @operator, GETDATE())

      --2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw dla nich wiersze do KPStZatrS
      OPEN c_kupic
      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;

      WHILE @@FETCH_STATUS = 0
      BEGIN
      --2.1. wyzeruj zmienne pomocnicze
      SET @dniEtatoPracy = 0
      set @dniEtatoChoroby = 0
      SET @dataStop = @dataDo
      SET @dataNastZmiany = NULL

      --2.2. znajdz mniejsza z dwoch dat: ostatniej zmiany o typie U lub A przed
      --	   @dataOd, oraz ostatniej zmiany o typie U lub A przed @dataDo
      SELECT @dataZmiany = MIN(DataZmiany)
      FROM
      (
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataOd
      UNION
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE (KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataDo
      ) Daty

      --2.3. Wybierz wszystkie dane pracownika
      SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
      @kodUmowy = KPKHP.KodUmowy,
      @kodZwoln = ISNULL(KPKUPiC.KodZakoncz, ''),
      @zaklad = ISNULL(KPKHP.Zaklad, ''),
      @komorka = ISNULL(KPKHP.Komorka, ''),
      @stanowPr = ISNULL(KPKHP.StanowPr, ''),
      @rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
      @sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWypl = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
      @kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
      @kodZawodu = KPKOP.KodZawoduWykon,
      @kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
      @statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany),
      XKOP.DataUrodz) &gt; @dataZmiany
      THEN DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) END
      ELSE 0 END,
      @plec = ISNULL(XKOP.Plec, ''),
      @etat = ISNULL(KPKHP.Etat, ''),
      @podstDodat = KPKUPiC.PodstDodat,
      @typZmiany = KPKHP.typZmiany,
      --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDo = KPKHP.DZawieszDo --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      FROM KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
      LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
      LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataZmiany AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

      SET @typZmianyPoprzedni = @typZmiany
      --2.4. Dla kazdej zmiany umowy pracownika, wpisz wiersz w KPStArchS
      --     [notatna_techniczna]Tutaj mozna uzyc kursora, ktory bedzie zwracal kolejne
      --	   daty zmiany. Zysk: jedno zapytanie zamiast kliku w petli, gdy jest kilka zmian w miesiacu.
      --	   strata: jezeli w wiekszosci wypadkow jest jedna umowa w miesiacu, deklaracja i zwalnianie
      --	   kursora moze spowolnic dzialanie.[/notatka_techniczna]
      SET @koniec = 0
      WHILE @koniec = 0
      BEGIN
      --2.4.1. Wyznaczenie daty nastepnej zmiany
      SELECT @dataNastZmiany = MIN(DataZmiany)
      FROM (
      SELECT KHP.dataZmiany AS DataZmiany
      FROM   KPKHP KHP
      WHERE  KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy
      UNION  --Zmiana to takze przyznanie stopnia inwalidzkiego
      SELECT KPKOPInwal.DataPrzyznania AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze zakonczenie waznosci stopnia inwalidzkiego
      SELECT KPKOPInwal.DataWaznosci AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze urodziny pracownika
      SELECT DATEADD(YEAR, DATEDIFF(YEAR, XKOP.DataUrodz, @dataOd), XKOP.DataUrodz)
      FROM   XKOP
      WHERE  XKOP.NrEwid = @nrEwid AND SySlow = @sySlow AND
      XKOP.DataUrodz IS NOT NULL AND MONTH(XKOP.DataUrodz) = MONTH(@dataOd)
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION
      SELECT DataZmiany
      FROM   KPKUPiCSlowSO
      WHERE  KPKUPiCSlowSO.NrEwid = @nrEwid AND KPKUPiCSlowSO.TypUmowy = @typUmowy AND KPKUPiCSlowSO.NrUmowy = @nrUmowy
      UNION  --poczatek okresu tez ma wywolac zmiane
      SELECT @dataOd AS DataZmiany
      ) Daty
      WHERE DataZmiany &gt; @dataZmiany AND DataZmiany &lt;= @dataDo

      --2.4.2. Jesli typ zmiany jest C, to nalezy skorygowac dateNastepnejZmiany
      --		 aby uwzgledniala date konca okresu zawieszenia
      IF @typZmiany = 'C' AND
      (@dataNastZmiany IS NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt;= @dataDo
      OR
      (@dataNastZmiany IS NOT NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt; @dataNastZmiany))
      SET @dataNastZmiany = DATEADD(DAY, 1, @dZawieszDo)

      --2.4.3. Zmien dateStop, jezeli jest nastepna zmiana
      IF @dataNastZmiany IS NOT NULL
      SET @dataStop = @dataNastZmiany
      ELSE
      SET @dataStop = @dataDo

      --2.4.4. Jezeli rozpatrywana zmiana miesci sie w okresie @dataOd i @dataDo
      IF @dataNastZmiany IS NULL OR @dataZmiany BETWEEN @dataOd AND @dataDo
      BEGIN
      --2.4.4.1. Wylicz dni etato-pracy
      IF @typZmiany = 'Z'
      SET @dniEtatoPracy = 1
      ELSE IF @typZmiany = 'U' OR @typZmiany = 'A' OR @typZmiany = 'P'
      BEGIN
      SET @dniEtatoPracy = DATEDIFF(DAY, @dataZmiany, @dataStop) + (CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END)
      --IF @dataNastZmiany IS NULL
      --SET @dniEtatoPracy = @dniEtatoPracy + 1
      END
      -- tu było ELSE IF @typZmiany = 'C'

      IF @typZmiany = 'C'
      SET @dniEtatoPracy = 0
      ELSE
      BEGIN
      declare @pomDni int
      select @pomDni = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END, CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END)) + (CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END))
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      (XSlSkPl.TypSkPl='B' and XSlSkPl.ZawieszaUmowe=0 and KPAbsenc.DniKalend&gt;29 or
      XSlSkPl.ZawieszaUmowe=1)
      select @pomDni = ISNULL(@pomDni,0);
      select @dniEtatoPracy = @dniEtatoPracy - abs(@pomDni)
      END


      -- 1.2.3 nowe HF
      declare @pomDniChor int
      select @pomDniChor = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END, CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END)) + (CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END))
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      left(XSlSkPl.TypSkPl,1)='C' and XSlSkPl.KodZusP&gt;'300' and XSlSkPl.KodZusP&lt;'330'
      select @dniEtatoChoroby = case when 30 &lt; abs(@pomDniChor) then -30 else -1 * abs(@pomDniChor) end

      select @dniEtatoPracy = isnull(@dniEtatoPracy,0);
      select @dniEtatoChoroby = isnull(@dniEtatoChoroby,0);

      --2.4.4.2. Dopisz wiersz do KPStZatrS
      INSERT INTO KPStZatrS (SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanowPr, SysWynagr, MiejsceWypl, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, DniEtatoPrac, PodstDodat, DniEtatoChoroby, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWypl, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @dniEtatoPracy, @podstDodat, @dniEtatoChoroby, @operator, GETDATE())
      END

      --2.4.5. Jezeli jest kolejna zmiana - pobierz dane z tabeli do zmiennych
      --       dla nastepnej zmiany umowy
      --		 w przeciwnym wypadku koniec petli
      IF @dataNastZmiany IS NOT NULL
      BEGIN
      SET @dataZmiany = @dataNastZmiany
      --2.4.5.1. Pobranie danych do zmiennych pomocniczych
      SELECT  @kodUmowyZmiana = ISNULL(KPKHP.KodUmowy, ''),
      @kodZwolnZmiana = ISNULL(KPKHP.KodZwoln, ''),
      @zakladZmiana = ISNULL(KPKHP.Zaklad, ''),
      @komorkaZmiana = ISNULL(KPKHP.Komorka, ''),
      @stanowPrZmiana = ISNULL(KPKHP.StanowPr, ''),
      @sysWynagrZmiana = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWyplZmiana = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawieszZmiana = ISNULL(KPKHP.KodZawiesz, ''),
      @typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDoZmiana = KPKHP.DZawieszDo, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany), XKOP.DataUrodz) &gt; @dataZmiany
      THEN
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany)
      END
      ELSE
      0
      END,
      @etatZmiana = ISNULL(KPKHP.Etat, '')
      FROM KPKUPiC
      LEFT OUTER JOIN KPKHP ON KPKUPiC.NrEwid = KPKHP.NrEwid AND
      KPKUPiC.TypUmowy = KPKHP.TypUmowy AND
      KPKUPiC.NrUmowy = KPKHP.NrUmowy AND
      KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND
      XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid
      AND KodInwal.DataPrzyznania = (
      SELECT MAX(DataPrzyznania)
      FROM KPKOPInwal
      WHERE DataPrzyznania &lt;= @dataZmiany AND
      NrEwid = @nrEwid) AND
      (KodInwal.DataWaznosci IS NULL OR
      KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND
      KPKUPiC.NrUmowy = @nrUmowy

      --2.4.5.2. Przepisanie danych ze zmiennych pomocniczych do zmiennych wlasciwych
      -- w zaleznosci od typu zmiany
      IF @typZmiany = 'U'
      BEGIN
      SET @kodUmowy = @kodUmowyZmiana
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      END
      ELSE IF @typZmiany = 'A'
      BEGIN
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'Z'
      BEGIN
      SET @kodZwoln = @kodZwolnZmiana
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'C'
      BEGIN
      SET @kodZawiesz = @kodZawieszZmiana
      SET @dZawieszDo = @dZawieszDoZmiana
      END
      ELSE IF @typZmiany = 'P'
      BEGIN
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany IS NULL --Jezeli aktualna @dataZmiany nie wiaze sie z wpisem w KPKHP
      BEGIN
      --to w zaleznosci od tego czy trwa okres zawieszenia pracownika
      --typ zmiany ustawiany jest albo na 'C' (zawieszony)
      --albo na poprzedni typ zmiany inny od 'C' i 'Z'
      IF @dZawieszDo IS NOT NULL AND @dataZmiany &lt;= @dZawieszDo
      SET @typZmiany = 'C'
      ELSE
      BEGIN
      SET @typZmiany = @typZmianyPoprzedni
      SET @kodZawiesz = ''
      SET @dZawieszDo = NULL
      END
      END
      END
      ELSE
      SET @koniec = 1

      END --petla zmian dla jednej umowy

      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;
      END

      CLOSE c_kupic
      DEALLOCATE c_kupic

      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>237</Id>
    <NrLog>2</NrLog>
    <NrTab>49</NrTab>
    <NrProc>129</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>238</Id>
    <NrLog>2</NrLog>
    <NrTab>50</NrTab>
    <NrProc>129</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>239</Id>
    <NrLog>2</NrLog>
    <NrTab>51</NrTab>
    <NrProc>129</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>240</Id>
    <NrLog>2</NrLog>
    <NrTab>52</NrTab>
    <NrProc>129</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>241</Id>
    <NrLog>2</NrLog>
    <NrTab>53</NrTab>
    <NrProc>129</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>242</Id>
    <NrLog>2</NrLog>
    <NrTab>54</NrTab>
    <NrProc>129</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>243</Id>
    <NrLog>2</NrLog>
    <NrTab>55</NrTab>
    <NrProc>129</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>244</Id>
    <NrLog>2</NrLog>
    <NrTab>56</NrTab>
    <NrProc>129</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>245</Id>
    <NrLog>2</NrLog>
    <NrTab>57</NrTab>
    <NrProc>129</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>246</Id>
    <NrLog>2</NrLog>
    <NrTab>58</NrTab>
    <NrProc>129</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>247</Id>
    <NrLog>2</NrLog>
    <NrTab>59</NrTab>
    <NrProc>130</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>KPSTAZ_LMD</NzProc>
    <TextProc>
      CREATE FUNCTION KPSTAZ_LMD
      (
      @dataOd DATETIME,
      @dataDo DATETIME
      )
      RETURNS VARCHAR(10)
      AS
      BEGIN
      DECLARE  @koniecMiesiacaDataOd DATETIME SET @koniecMiesiacaDataOd = dbo.KoniecMc(@dataOd)

      SET @dataDo = DATEADD(DAY, 1, @dataDo)

      DECLARE @lata INT SET @lata = DATEPART(YEAR, @dataDo) - DATEPART(YEAR, @dataOd)
      DECLARE @miesiace INT SET @miesiace = DATEPART(MONTH, @dataDo) - DATEPART(MONTH, @dataOd)
      DECLARE @dni INT SET @dni = DATEPART(DAY, @dataDo) - DATEPART(DAY, @dataOd)

      IF @dni &lt; 0
      BEGIN
      SET @dni = @dni + DATEPART(DAY, @koniecMiesiacaDataOd)
      SET @miesiace = @miesiace - 1
      END
      IF @miesiace &lt; 0
      BEGIN
      SET @miesiace = @miesiace + 12
      SET @lata = @lata - 1
      END

      DECLARE @lataStr VARCHAR(2)
      DECLARE @miesiaceStr VARCHAR(2)
      DECLARE @dniStr VARCHAR(2)
      IF @lata &gt;= 10
      SET @lataStr = CAST(@lata AS VARCHAR(2))
      ELSE
      SET @lataStr = '0' + CAST(@lata AS VARCHAR(1))
      IF @miesiace &gt;= 10
      SET @miesiaceStr = CAST(@miesiace AS VARCHAR(2))
      ELSE
      SET @miesiaceStr = '0' + CAST(@miesiace AS VARCHAR(1))
      IF @dni &gt;= 10
      SET @dniStr = CAST(@dni AS VARCHAR(2))
      ELSE
      SET @dniStr = '0' + CAST(@dni AS VARCHAR(1))

      RETURN @lataStr + ':' + @miesiaceStr + ':' + @dniStr
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>248</Id>
    <NrLog>2</NrLog>
    <NrTab>60</NrTab>
    <NrProc>130</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>249</Id>
    <NrLog>2</NrLog>
    <NrTab>61</NrTab>
    <NrProc>130</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>250</Id>
    <NrLog>2</NrLog>
    <NrTab>62</NrTab>
    <NrProc>130</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>251</Id>
    <NrLog>2</NrLog>
    <NrTab>63</NrTab>
    <NrProc>131</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>KPGenStanZatrMc</NzProc>
    <TextProc>
      CREATE PROCEDURE KPGenStanZatrMc
      @0 int, --lp naliczenia
      @1 int, --rok stanu
      @2 int, --miesiac stanu
      @3 varchar(10) --login operatora
      AS
      BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON
      --zmienne: klucz w tabeli KPKHP
      DECLARE @typUmowy CHAR(1);
      DECLARE @nrEwid INT;
      DECLARE @nrUmowy VARCHAR(10);
      DECLARE @dataZmiany DATETIME;

      --zmienne: składowe rekorku KPStArchS
      DECLARE @statusZatrudn VARCHAR(3)
      DECLARE @kodUmowy VARCHAR(7)
      DECLARE @kodZwoln VARCHAR(7)
      DECLARE @zaklad VARCHAR(7)
      DECLARE @komorka VARCHAR(7)
      DECLARE @stanowPr VARCHAR(7)
      DECLARE @rodzStanPr CHAR(1)
      DECLARE @sysWynagr VARCHAR(7)
      DECLARE @miejsceWypl VARCHAR(7)
      DECLARE @kodZawiesz VARCHAR(7)
      DECLARE @kodInwal VARCHAR(7)
      DECLARE @kodWykszt VARCHAR(7)
      DECLARE @kodWyksztGUS VARCHAR(7)
      DECLARE @kodZawodu VARCHAR(7)
      DECLARE @kodZawoduGUS VARCHAR(7)
      DECLARE @statusUmowy CHAR(1)
      DECLARE @wiek SMALLINT
      DECLARE @plec CHAR(1)
      DECLARE @etat VARCHAR(7)
      DECLARE @dniEtatoPracy DECIMAL(10, 6)
      declare @dniEtatoChoroby decimal(10,6)
      DECLARE @podstDodat CHAR(1)

      --zmienne: składowe rekorku KPStArchS, uzywane gdy jest zmiana umowy
      DECLARE @kodUmowyZmiana VARCHAR(7)
      DECLARE @kodZwolnZmiana VARCHAR(7)
      DECLARE @zakladZmiana VARCHAR(7)
      DECLARE @komorkaZmiana VARCHAR(7)
      DECLARE @stanowPrZmiana VARCHAR(7)
      DECLARE @sysWynagrZmiana VARCHAR(7)
      DECLARE @miejsceWyplZmiana VARCHAR(7)
      DECLARE @kodZawieszZmiana VARCHAR(7)
      DECLARE @etatZmiana VARCHAR(7)

      --zmienne: zmienne pomocnicze, wyznaczaja przedzial poszikiwania zmian umowy
      DECLARE @dataStop DATETIME
      DECLARE @dataNastZmiany DATETIME
      DECLARE @typZmiany CHAR(1)
      DECLARE @typZmianyPoprzedni CHAR(1)
      DECLARE @dZawieszDo DATETIME
      DECLARE @dZawieszDoZmiana DATETIME

      --zmienne: zmienne pomocnicze do sterowania petli
      DECLARE @koniec BIT

      --zmienne: parametry wywolania procedury (tu beda przepisane)
      DECLARE @lpNaliczenia INT
      DECLARE @rokStanu INT
      DECLARE @mcStanu INT
      DECLARE @operator VARCHAR(10)

      --zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
      DECLARE @dataOdStrPom VARCHAR(12)
      DECLARE @dataOd DATETIME
      DECLARE @dataDo DATETIME

      --zmienne: stale
      DECLARE @sySlow VARCHAR(3)
      DECLARE @sySlowKpSlStPr VARCHAR(3)
      DECLARE @sySlowWyksztGUS VARCHAR(3)
      DECLARE @sySlowZawodGUS VARCHAR(3)

      --przypisanie wartosci stalym, oraz przepisanie parametrow procedury
      SET @lpNaliczenia = @0
      SET @rokStanu = @1
      SET @mcStanu = @2
      SET @operator = @3
      SET @sySlow = 'XKP'
      SET @sySlowKpSlStPr = 'XSS'
      SET @sySlowWyksztGUS = '104'
      SET @sySlowZawodGUS = '103'

      --Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
      --dla danego roku stanu i miesiaca stanu
      SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
      SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
      SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

      --kursor po umowach
      DECLARE c_kupic CURSOR FOR
      SELECT TypUmowy, NrEwid, NrUmowy
      FROM KPKUPiC
      WHERE  (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataOd)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataOd BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataOd BETWEEN DataUmowyOd AND DataZakoncz)
      OR (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataDo)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataDo BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataDo BETWEEN DataUmowyOd AND DataZakoncz)

      --1. wstaw wiersz do KPStArchS
      INSERT INTO KPStArchS (SySlow, LpNaliczenia, RokStanu, McStanu, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @rokStanu, @mcStanu, @operator, GETDATE())

      --2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw dla nich wiersze do KPStZatrS
      OPEN c_kupic
      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;

      WHILE @@FETCH_STATUS = 0
      BEGIN
      --2.1. wyzeruj zmienne pomocnicze
      SET @dniEtatoPracy = 0
      set @dniEtatoChoroby = 0
      SET @dataStop = @dataDo
      SET @dataNastZmiany = NULL

      --2.2. znajdz mniejsza z dwoch dat: ostatniej zmiany o typie U lub A przed
      --	   @dataOd, oraz ostatniej zmiany o typie U lub A przed @dataDo
      SELECT @dataZmiany = MIN(DataZmiany)
      FROM
      (
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataOd
      UNION
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE (KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataDo
      ) Daty

      --2.3. Wybierz wszystkie dane pracownika
      SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
      @kodUmowy = KPKHP.KodUmowy,
      @kodZwoln = ISNULL(KPKUPiC.KodZakoncz, ''),
      @zaklad = ISNULL(KPKHP.Zaklad, ''),
      @komorka = ISNULL(KPKHP.Komorka, ''),
      @stanowPr = ISNULL(KPKHP.StanowPr, ''),
      @rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
      @sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWypl = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
      @kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
      @kodZawodu = KPKOP.KodZawoduWykon,
      @kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
      @statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany),
      XKOP.DataUrodz) &gt; @dataZmiany
      THEN DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) END
      ELSE 0 END,
      @plec = ISNULL(XKOP.Plec, ''),
      @etat = ISNULL(KPKHP.Etat, ''),
      @podstDodat = KPKUPiC.PodstDodat,
      @typZmiany = KPKHP.typZmiany,
      --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDo = KPKHP.DZawieszDo --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      FROM KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
      LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
      LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataZmiany AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

      SET @typZmianyPoprzedni = @typZmiany
      --2.4. Dla kazdej zmiany umowy pracownika, wpisz wiersz w KPStArchS
      --     [notatna_techniczna]Tutaj mozna uzyc kursora, ktory bedzie zwracal kolejne
      --	   daty zmiany. Zysk: jedno zapytanie zamiast kliku w petli, gdy jest kilka zmian w miesiacu.
      --	   strata: jezeli w wiekszosci wypadkow jest jedna umowa w miesiacu, deklaracja i zwalnianie
      --	   kursora moze spowolnic dzialanie.[/notatka_techniczna]
      SET @koniec = 0
      WHILE @koniec = 0
      BEGIN
      --2.4.1. Wyznaczenie daty nastepnej zmiany
      SELECT @dataNastZmiany = MIN(DataZmiany)
      FROM (
      SELECT KHP.dataZmiany AS DataZmiany
      FROM   KPKHP KHP
      WHERE  KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy
      UNION  --Zmiana to takze przyznanie stopnia inwalidzkiego
      SELECT KPKOPInwal.DataPrzyznania AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze zakonczenie waznosci stopnia inwalidzkiego
      SELECT KPKOPInwal.DataWaznosci AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze urodziny pracownika
      SELECT DATEADD(YEAR, DATEDIFF(YEAR, XKOP.DataUrodz, @dataOd), XKOP.DataUrodz)
      FROM   XKOP
      WHERE  XKOP.NrEwid = @nrEwid AND SySlow = @sySlow AND
      XKOP.DataUrodz IS NOT NULL AND MONTH(XKOP.DataUrodz) = MONTH(@dataOd)
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION
      SELECT DataZmiany
      FROM   KPKUPiCSlowSO
      WHERE  KPKUPiCSlowSO.NrEwid = @nrEwid AND KPKUPiCSlowSO.TypUmowy = @typUmowy AND KPKUPiCSlowSO.NrUmowy = @nrUmowy
      UNION  --poczatek okresu tez ma wywolac zmiane
      SELECT @dataOd AS DataZmiany
      ) Daty
      WHERE DataZmiany &gt; @dataZmiany AND DataZmiany &lt;= @dataDo

      --2.4.2. Jesli typ zmiany jest C, to nalezy skorygowac dateNastepnejZmiany
      --		 aby uwzgledniala date konca okresu zawieszenia
      IF @typZmiany = 'C' AND
      (@dataNastZmiany IS NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt;= @dataDo
      OR
      (@dataNastZmiany IS NOT NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt; @dataNastZmiany))
      SET @dataNastZmiany = DATEADD(DAY, 1, @dZawieszDo)

      --2.4.3. Zmien dateStop, jezeli jest nastepna zmiana
      IF @dataNastZmiany IS NOT NULL
      SET @dataStop = @dataNastZmiany
      ELSE
      SET @dataStop = @dataDo

      --2.4.4. Jezeli rozpatrywana zmiana miesci sie w okresie @dataOd i @dataDo
      IF @dataNastZmiany IS NULL OR @dataZmiany BETWEEN @dataOd AND @dataDo
      BEGIN
      --2.4.4.1. Wylicz dni etato-pracy
      IF @typZmiany = 'Z'
      SET @dniEtatoPracy = 1
      ELSE IF @typZmiany = 'U' OR @typZmiany = 'A' OR @typZmiany = 'P'
      BEGIN
      SET @dniEtatoPracy = DATEDIFF(DAY, @dataZmiany, @dataStop) + (CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END)
      --IF @dataNastZmiany IS NULL
      --SET @dniEtatoPracy = @dniEtatoPracy + 1
      END
      -- tu było ELSE IF @typZmiany = 'C'

      -- zmiana HF
      IF @typZmiany = 'C'
      SET @dniEtatoPracy = 0
      ELSE
      BEGIN
      declare @pomDni int
      select @pomDni = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END, 
                                              CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END)) 
                                              + 1)   --(CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END))
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      (XSlSkPl.TypSkPl='B' and XSlSkPl.ZawieszaUmowe=0 and KPAbsenc.DniKalend&gt;29 or
      XSlSkPl.ZawieszaUmowe=1)
      select @pomDni = ISNULL(@pomDni,0);
      select @dniEtatoPracy = @dniEtatoPracy - abs(@pomDni)
      END


      -- 1.2.3 nowe HF
      declare @pomDniChor int
      select @pomDniChor = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END, 
                                                  CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
                                                  + 1)  --(CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END))
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      left(XSlSkPl.TypSkPl,1)='C' and XSlSkPl.KodZusP&gt;'300' and XSlSkPl.KodZusP&lt;'330'
      select @dniEtatoChoroby = case when 30 &lt; abs(@pomDniChor) then -30 else -1 * abs(@pomDniChor) end

      select @dniEtatoPracy = isnull(@dniEtatoPracy,0);
      select @dniEtatoChoroby = isnull(@dniEtatoChoroby,0);

      --2.4.4.2. Dopisz wiersz do KPStZatrS
      INSERT INTO KPStZatrS (SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanowPr, SysWynagr, MiejsceWypl, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, DniEtatoPrac, PodstDodat, DniEtatoChoroby, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWypl, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @dniEtatoPracy, @podstDodat, @dniEtatoChoroby, @operator, GETDATE())
      END

      --2.4.5. Jezeli jest kolejna zmiana - pobierz dane z tabeli do zmiennych
      --       dla nastepnej zmiany umowy
      --		 w przeciwnym wypadku koniec petli
      IF @dataNastZmiany IS NOT NULL
      BEGIN
      SET @dataZmiany = @dataNastZmiany
      --2.4.5.1. Pobranie danych do zmiennych pomocniczych
      SELECT  @kodUmowyZmiana = ISNULL(KPKHP.KodUmowy, ''),
      @kodZwolnZmiana = ISNULL(KPKHP.KodZwoln, ''),
      @zakladZmiana = ISNULL(KPKHP.Zaklad, ''),
      @komorkaZmiana = ISNULL(KPKHP.Komorka, ''),
      @stanowPrZmiana = ISNULL(KPKHP.StanowPr, ''),
      @sysWynagrZmiana = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWyplZmiana = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawieszZmiana = ISNULL(KPKHP.KodZawiesz, ''),
      @typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDoZmiana = KPKHP.DZawieszDo, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany), XKOP.DataUrodz) &gt; @dataZmiany
      THEN
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany)
      END
      ELSE
      0
      END,
      @etatZmiana = ISNULL(KPKHP.Etat, '')
      FROM KPKUPiC
      LEFT OUTER JOIN KPKHP ON KPKUPiC.NrEwid = KPKHP.NrEwid AND
      KPKUPiC.TypUmowy = KPKHP.TypUmowy AND
      KPKUPiC.NrUmowy = KPKHP.NrUmowy AND
      KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND
      XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid
      AND KodInwal.DataPrzyznania = (
      SELECT MAX(DataPrzyznania)
      FROM KPKOPInwal
      WHERE DataPrzyznania &lt;= @dataZmiany AND
      NrEwid = @nrEwid) AND
      (KodInwal.DataWaznosci IS NULL OR
      KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND
      KPKUPiC.NrUmowy = @nrUmowy

      --2.4.5.2. Przepisanie danych ze zmiennych pomocniczych do zmiennych wlasciwych
      -- w zaleznosci od typu zmiany
      IF @typZmiany = 'U'
      BEGIN
      SET @kodUmowy = @kodUmowyZmiana
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      END
      ELSE IF @typZmiany = 'A'
      BEGIN
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'Z'
      BEGIN
      SET @kodZwoln = @kodZwolnZmiana
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'C'
      BEGIN
      SET @kodZawiesz = @kodZawieszZmiana
      SET @dZawieszDo = @dZawieszDoZmiana
      END
      ELSE IF @typZmiany = 'P'
      BEGIN
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany IS NULL --Jezeli aktualna @dataZmiany nie wiaze sie z wpisem w KPKHP
      BEGIN
      --to w zaleznosci od tego czy trwa okres zawieszenia pracownika
      --typ zmiany ustawiany jest albo na 'C' (zawieszony)
      --albo na poprzedni typ zmiany inny od 'C' i 'Z'
      IF @dZawieszDo IS NOT NULL AND @dataZmiany &lt;= @dZawieszDo
      SET @typZmiany = 'C'
      ELSE
      BEGIN
      SET @typZmiany = @typZmianyPoprzedni
      SET @kodZawiesz = ''
      SET @dZawieszDo = NULL
      END
      END
      END
      ELSE
      SET @koniec = 1

      END --petla zmian dla jednej umowy

      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;
      END

      CLOSE c_kupic
      DEALLOCATE c_kupic

      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>252</Id>
    <NrLog>2</NrLog>
    <NrTab>64</NrTab>
    <NrProc>131</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>253</Id>
    <NrLog>2</NrLog>
    <NrTab>65</NrTab>
    <NrProc>131</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>254</Id>
    <NrLog>2</NrLog>
    <NrTab>66</NrTab>
    <NrProc>131</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>255</Id>
    <NrLog>2</NrLog>
    <NrTab>67</NrTab>
    <NrProc>131</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>256</Id>
    <NrLog>2</NrLog>
    <NrTab>68</NrTab>
    <NrProc>131</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>257</Id>
    <NrLog>2</NrLog>
    <NrTab>69</NrTab>
    <NrProc>131</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>258</Id>
    <NrLog>2</NrLog>
    <NrTab>70</NrTab>
    <NrProc>132</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>KPGenStanZatrMc</NzProc>
    <TextProc>
      CREATE PROCEDURE KPGenStanZatrMc
      @0 int, --lp naliczenia
      @1 int, --rok stanu
      @2 int, --miesiac stanu
      @3 varchar(10) --login operatora
      AS
      BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON
      --zmienne: klucz w tabeli KPKHP
      DECLARE @typUmowy CHAR(1);
      DECLARE @nrEwid INT;
      DECLARE @nrUmowy VARCHAR(10);
      DECLARE @dataZmiany DATETIME;

      --zmienne: składowe rekorku KPStArchS
      DECLARE @statusZatrudn VARCHAR(3)
      DECLARE @kodUmowy VARCHAR(7)
      DECLARE @kodZwoln VARCHAR(7)
      DECLARE @zaklad VARCHAR(7)
      DECLARE @komorka VARCHAR(7)
      DECLARE @stanowPr VARCHAR(7)
      DECLARE @rodzStanPr CHAR(1)
      DECLARE @sysWynagr VARCHAR(7)
      DECLARE @miejsceWypl VARCHAR(7)
      DECLARE @kodZawiesz VARCHAR(7)
      DECLARE @kodInwal VARCHAR(7)
      DECLARE @kodWykszt VARCHAR(7)
      DECLARE @kodWyksztGUS VARCHAR(7)
      DECLARE @kodZawodu VARCHAR(7)
      DECLARE @kodZawoduGUS VARCHAR(7)
      DECLARE @statusUmowy CHAR(1)
      DECLARE @wiek SMALLINT
      DECLARE @plec CHAR(1)
      DECLARE @etat VARCHAR(7)
      DECLARE @dniEtatoPracy DECIMAL(10, 6)
      declare @dniEtatoChoroby decimal(10,6)
      DECLARE @podstDodat CHAR(1)

      --zmienne: składowe rekorku KPStArchS, uzywane gdy jest zmiana umowy
      DECLARE @kodUmowyZmiana VARCHAR(7)
      DECLARE @kodZwolnZmiana VARCHAR(7)
      DECLARE @zakladZmiana VARCHAR(7)
      DECLARE @komorkaZmiana VARCHAR(7)
      DECLARE @stanowPrZmiana VARCHAR(7)
      DECLARE @sysWynagrZmiana VARCHAR(7)
      DECLARE @miejsceWyplZmiana VARCHAR(7)
      DECLARE @kodZawieszZmiana VARCHAR(7)
      DECLARE @etatZmiana VARCHAR(7)

      --zmienne: zmienne pomocnicze, wyznaczaja przedzial poszikiwania zmian umowy
      DECLARE @dataStop DATETIME
      DECLARE @dataNastZmiany DATETIME
      DECLARE @typZmiany CHAR(1)
      DECLARE @typZmianyPoprzedni CHAR(1)
      DECLARE @dZawieszDo DATETIME
      DECLARE @dZawieszDoZmiana DATETIME

      --zmienne: zmienne pomocnicze do sterowania petli
      DECLARE @koniec BIT

      --zmienne: parametry wywolania procedury (tu beda przepisane)
      DECLARE @lpNaliczenia INT
      DECLARE @rokStanu INT
      DECLARE @mcStanu INT
      DECLARE @operator VARCHAR(10)

      --zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
      DECLARE @dataOdStrPom VARCHAR(12)
      DECLARE @dataOd DATETIME
      DECLARE @dataDo DATETIME

      --zmienne: stale
      DECLARE @sySlow VARCHAR(3)
      DECLARE @sySlowKpSlStPr VARCHAR(3)
      DECLARE @sySlowWyksztGUS VARCHAR(3)
      DECLARE @sySlowZawodGUS VARCHAR(3)

      --przypisanie wartosci stalym, oraz przepisanie parametrow procedury
      SET @lpNaliczenia = @0
      SET @rokStanu = @1
      SET @mcStanu = @2
      SET @operator = @3
      SET @sySlow = 'XKP'
      SET @sySlowKpSlStPr = 'XSS'
      SET @sySlowWyksztGUS = '104'
      SET @sySlowZawodGUS = '103'

      --Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
      --dla danego roku stanu i miesiaca stanu
      SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
      SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
      SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

      --kursor po umowach
      DECLARE c_kupic CURSOR FOR
      SELECT TypUmowy, NrEwid, NrUmowy
      FROM KPKUPiC
      WHERE  (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataOd)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataOd BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataOd BETWEEN DataUmowyOd AND DataZakoncz)
      OR (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataDo)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataDo BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataDo BETWEEN DataUmowyOd AND DataZakoncz)

      --1. wstaw wiersz do KPStArchS
      INSERT INTO KPStArchS (SySlow, LpNaliczenia, RokStanu, McStanu, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @rokStanu, @mcStanu, @operator, GETDATE())

      --2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw dla nich wiersze do KPStZatrS
      OPEN c_kupic
      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;

      WHILE @@FETCH_STATUS = 0
      BEGIN
      --2.1. wyzeruj zmienne pomocnicze
      SET @dniEtatoPracy = 0
      set @dniEtatoChoroby = 0
      SET @dataStop = @dataDo
      SET @dataNastZmiany = NULL

      --2.2. znajdz mniejsza z dwoch dat: ostatniej zmiany o typie U lub A przed
      --	   @dataOd, oraz ostatniej zmiany o typie U lub A przed @dataDo
      SELECT @dataZmiany = MIN(DataZmiany)
      FROM
      (
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataOd
      UNION
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE (KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataDo
      ) Daty

      --2.3. Wybierz wszystkie dane pracownika
      SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
      @kodUmowy = KPKHP.KodUmowy,
      @kodZwoln = ISNULL(KPKUPiC.KodZakoncz, ''),
      @zaklad = ISNULL(KPKHP.Zaklad, ''),
      @komorka = ISNULL(KPKHP.Komorka, ''),
      @stanowPr = ISNULL(KPKHP.StanowPr, ''),
      @rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
      @sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWypl = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
      @kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
      @kodZawodu = KPKOP.KodZawoduWykon,
      @kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
      @statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany),
      XKOP.DataUrodz) &gt; @dataZmiany
      THEN DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) END
      ELSE 0 END,
      @plec = ISNULL(XKOP.Plec, ''),
      @etat = ISNULL(KPKHP.Etat, ''),
      @podstDodat = KPKUPiC.PodstDodat,
      @typZmiany = KPKHP.typZmiany,
      --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDo = KPKHP.DZawieszDo --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      FROM KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
      LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
      LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataZmiany AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

      SET @typZmianyPoprzedni = @typZmiany
      --2.4. Dla kazdej zmiany umowy pracownika, wpisz wiersz w KPStArchS
      --     [notatna_techniczna]Tutaj mozna uzyc kursora, ktory bedzie zwracal kolejne
      --	   daty zmiany. Zysk: jedno zapytanie zamiast kliku w petli, gdy jest kilka zmian w miesiacu.
      --	   strata: jezeli w wiekszosci wypadkow jest jedna umowa w miesiacu, deklaracja i zwalnianie
      --	   kursora moze spowolnic dzialanie.[/notatka_techniczna]
      SET @koniec = 0
      WHILE @koniec = 0
      BEGIN
      --2.4.1. Wyznaczenie daty nastepnej zmiany
      SELECT @dataNastZmiany = MIN(DataZmiany)
      FROM (
      SELECT KHP.dataZmiany AS DataZmiany
      FROM   KPKHP KHP
      WHERE  KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy
      UNION  --Zmiana to takze przyznanie stopnia inwalidzkiego
      SELECT KPKOPInwal.DataPrzyznania AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze zakonczenie waznosci stopnia inwalidzkiego
      SELECT KPKOPInwal.DataWaznosci AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze urodziny pracownika
      SELECT DATEADD(YEAR, DATEDIFF(YEAR, XKOP.DataUrodz, @dataOd), XKOP.DataUrodz)
      FROM   XKOP
      WHERE  XKOP.NrEwid = @nrEwid AND SySlow = @sySlow AND
      XKOP.DataUrodz IS NOT NULL AND MONTH(XKOP.DataUrodz) = MONTH(@dataOd)
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION
      SELECT DataZmiany
      FROM   KPKUPiCSlowSO
      WHERE  KPKUPiCSlowSO.NrEwid = @nrEwid AND KPKUPiCSlowSO.TypUmowy = @typUmowy AND KPKUPiCSlowSO.NrUmowy = @nrUmowy
      UNION  --poczatek okresu tez ma wywolac zmiane
      SELECT @dataOd AS DataZmiany
      ) Daty
      WHERE DataZmiany &gt; @dataZmiany AND DataZmiany &lt;= @dataDo

      --2.4.2. Jesli typ zmiany jest C, to nalezy skorygowac dateNastepnejZmiany
      --		 aby uwzgledniala date konca okresu zawieszenia
      IF @typZmiany = 'C' AND
      (@dataNastZmiany IS NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt;= @dataDo
      OR
      (@dataNastZmiany IS NOT NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt; @dataNastZmiany))
      SET @dataNastZmiany = DATEADD(DAY, 1, @dZawieszDo)

      --2.4.3. Zmien dateStop, jezeli jest nastepna zmiana
      IF @dataNastZmiany IS NOT NULL
      SET @dataStop = @dataNastZmiany
      ELSE
      SET @dataStop = @dataDo

      --2.4.4. Jezeli rozpatrywana zmiana miesci sie w okresie @dataOd i @dataDo
      IF @dataNastZmiany IS NULL OR @dataZmiany BETWEEN @dataOd AND @dataDo
      BEGIN
      --2.4.4.1. Wylicz dni etato-pracy
      IF @typZmiany = 'Z'
      SET @dniEtatoPracy = 1
      ELSE IF @typZmiany = 'U' OR @typZmiany = 'A' OR @typZmiany = 'P'
      BEGIN
      SET @dniEtatoPracy = DATEDIFF(DAY, @dataZmiany, @dataStop) + (CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END)
      --IF @dataNastZmiany IS NULL
      --SET @dniEtatoPracy = @dniEtatoPracy + 1
      END
      -- tu było ELSE IF @typZmiany = 'C'

      -- zmiana HF
      IF @typZmiany = 'C'
      SET @dniEtatoPracy = 0
      ELSE
      BEGIN
      declare @pomDni int
      select @pomDni = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END,
      CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      + 1)   --(CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END))
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      (XSlSkPl.TypSkPl='B' and XSlSkPl.ZawieszaUmowe=0 and KPAbsenc.DniKalend&gt;29 or
      XSlSkPl.ZawieszaUmowe=1)
      select @pomDni = ISNULL(@pomDni,0);
      select @dniEtatoPracy = @dniEtatoPracy - abs(@pomDni)
      END


      -- 1.2.3 nowe HF
      declare @pomDniChor int
      select @pomDniChor = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END,
      CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      + 1)  --(CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END))
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      KPAbsenc.Anulowanie=0 and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      left(XSlSkPl.TypSkPl,1)='C' and XSlSkPl.KodZusP&gt;'300' and XSlSkPl.KodZusP&lt;'330'
      select @dniEtatoChoroby = case when 30 &lt; abs(@pomDniChor) then -30 else -1 * abs(@pomDniChor) end

      select @dniEtatoPracy = isnull(@dniEtatoPracy,0);
      select @dniEtatoChoroby = isnull(@dniEtatoChoroby,0);

      --2.4.4.2. Dopisz wiersz do KPStZatrS
      INSERT INTO KPStZatrS (SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanowPr, SysWynagr, MiejsceWypl, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, DniEtatoPrac, PodstDodat, DniEtatoChoroby, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWypl, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @dniEtatoPracy, @podstDodat, @dniEtatoChoroby, @operator, GETDATE())
      END

      --2.4.5. Jezeli jest kolejna zmiana - pobierz dane z tabeli do zmiennych
      --       dla nastepnej zmiany umowy
      --		 w przeciwnym wypadku koniec petli
      IF @dataNastZmiany IS NOT NULL
      BEGIN
      SET @dataZmiany = @dataNastZmiany
      --2.4.5.1. Pobranie danych do zmiennych pomocniczych
      SELECT  @kodUmowyZmiana = ISNULL(KPKHP.KodUmowy, ''),
      @kodZwolnZmiana = ISNULL(KPKHP.KodZwoln, ''),
      @zakladZmiana = ISNULL(KPKHP.Zaklad, ''),
      @komorkaZmiana = ISNULL(KPKHP.Komorka, ''),
      @stanowPrZmiana = ISNULL(KPKHP.StanowPr, ''),
      @sysWynagrZmiana = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWyplZmiana = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawieszZmiana = ISNULL(KPKHP.KodZawiesz, ''),
      @typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDoZmiana = KPKHP.DZawieszDo, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany), XKOP.DataUrodz) &gt; @dataZmiany
      THEN
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany)
      END
      ELSE
      0
      END,
      @etatZmiana = ISNULL(KPKHP.Etat, '')
      FROM KPKUPiC
      LEFT OUTER JOIN KPKHP ON KPKUPiC.NrEwid = KPKHP.NrEwid AND
      KPKUPiC.TypUmowy = KPKHP.TypUmowy AND
      KPKUPiC.NrUmowy = KPKHP.NrUmowy AND
      KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND
      XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid
      AND KodInwal.DataPrzyznania = (
      SELECT MAX(DataPrzyznania)
      FROM KPKOPInwal
      WHERE DataPrzyznania &lt;= @dataZmiany AND
      NrEwid = @nrEwid) AND
      (KodInwal.DataWaznosci IS NULL OR
      KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND
      KPKUPiC.NrUmowy = @nrUmowy

      --2.4.5.2. Przepisanie danych ze zmiennych pomocniczych do zmiennych wlasciwych
      -- w zaleznosci od typu zmiany
      IF @typZmiany = 'U'
      BEGIN
      SET @kodUmowy = @kodUmowyZmiana
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      END
      ELSE IF @typZmiany = 'A'
      BEGIN
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'Z'
      BEGIN
      SET @kodZwoln = @kodZwolnZmiana
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'C'
      BEGIN
      SET @kodZawiesz = @kodZawieszZmiana
      SET @dZawieszDo = @dZawieszDoZmiana
      END
      ELSE IF @typZmiany = 'P'
      BEGIN
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany IS NULL --Jezeli aktualna @dataZmiany nie wiaze sie z wpisem w KPKHP
      BEGIN
      --to w zaleznosci od tego czy trwa okres zawieszenia pracownika
      --typ zmiany ustawiany jest albo na 'C' (zawieszony)
      --albo na poprzedni typ zmiany inny od 'C' i 'Z'
      IF @dZawieszDo IS NOT NULL AND @dataZmiany &lt;= @dZawieszDo
      SET @typZmiany = 'C'
      ELSE
      BEGIN
      SET @typZmiany = @typZmianyPoprzedni
      SET @kodZawiesz = ''
      SET @dZawieszDo = NULL
      END
      END
      END
      ELSE
      SET @koniec = 1

      END --petla zmian dla jednej umowy

      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;
      END

      CLOSE c_kupic
      DEALLOCATE c_kupic

      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>259</Id>
    <NrLog>2</NrLog>
    <NrTab>71</NrTab>
    <NrProc>132</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>260</Id>
    <NrLog>2</NrLog>
    <NrTab>72</NrTab>
    <NrProc>132</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>261</Id>
    <NrLog>2</NrLog>
    <NrTab>73</NrTab>
    <NrProc>132</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>262</Id>
    <NrLog>2</NrLog>
    <NrTab>74</NrTab>
    <NrProc>132</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>263</Id>
    <NrLog>2</NrLog>
    <NrTab>75</NrTab>
    <NrProc>132</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>264</Id>
    <NrLog>2</NrLog>
    <NrTab>76</NrTab>
    <NrProc>132</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>265</Id>
    <NrLog>2</NrLog>
    <NrTab>77</NrTab>
    <NrProc>132</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>266</Id>
    <NrLog>2</NrLog>
    <NrTab>78</NrTab>
    <NrProc>132</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>267</Id>
    <NrLog>2</NrLog>
    <NrTab>79</NrTab>
    <NrProc>132</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>268</Id>
    <NrLog>2</NrLog>
    <NrTab>80</NrTab>
    <NrProc>133</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>PoziomRKonta</NzProc>
    <TextProc>
      CREATE FUNCTION PoziomRKonta
      (
      @okresO SMALLINT,
      @konto VARCHAR(30)
      )
      RETURNS SMALLINT
      AS
      BEGIN
      DECLARE @rozrachunkowe BIT;
      DECLARE @kontoParent VARCHAR(30);
      DECLARE @ileRozrachunkowych SMALLINT;

      SET @ileRozrachunkowych = -1;


      SELECT  @rozrachunkowe = XTPKOpis.Rozrachunkowe,
      @kontoParent = XTPKOpis.KontoParent
      FROM	XTPKOpis
      WHERE	OkresO = @okresO
      AND	Konto = @konto;

      WHILE @rozrachunkowe = 1
      BEGIN
      SET @ileRozrachunkowych = @ileRozrachunkowych + 1;

      IF @kontoParent &lt;&gt; @konto
      BEGIN
      SET @konto = @kontoParent;
      SELECT  @rozrachunkowe = XTPKOpis.Rozrachunkowe,
      @kontoParent = XTPKOpis.KontoParent
      FROM	XTPKOpis
      WHERE	OkresO = @okresO
      AND	Konto = @konto;
      END
      ELSE
      BEGIN
      --przerwij petle bo jestesmy w syntetyce
      set @rozrachunkowe = 0
      END
      END

      RETURN @ileRozrachunkowych;
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>269</Id>
    <NrLog>2</NrLog>
    <NrTab>80</NrTab>
    <NrProc>134</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>NrWyjatkuKonta</NzProc>
    <TextProc>
      CREATE FUNCTION NrWyjatkuKonta
      (
      @okresO SMALLINT,
      @konto VARCHAR(30)
      )
      RETURNS SMALLINT
      AS
      BEGIN
      DECLARE @nrWyjatkuKtrKnt INT;
      DECLARE @nrWyjatkuKtr INT;
      DECLARE @nrWyjatkuKnt INT;
      DECLARE @sySlow VARCHAR(3);
      DECLARE @analityka VARCHAR(20);
      DECLARE @kontoParent VARCHAR(30);

      SELECT	@sySlow = SySlow,
      @analityka = Analityka
      FROM	XTPKOpis
      WHERE	OkresO = @okresO
      AND	Konto = @konto

      --COALESCE(KtrKnt.NrWyjatku, Ktr.NrWyjatku, Knt.NrWyjatku)
      SELECT	@kontoParent = XTPKOpis.KontoParent,
      @nrWyjatkuKtrKnt = KtrKnt.NrWyjatku,
      @nrWyjatkuKtr = Ktr.NrWyjatku,
      @nrWyjatkuKnt = Knt.NrWyjatku
      FROM	XTPKOpis
      LEFT OUTER JOIN FKRozrachunkiCechy KtrKnt
      ON	XTPKOpis.OkresO = KtrKnt.OkresO
      AND	XTPKOpis.Konto = KtrKnt.Konto
      AND KtrKnt.SySlow = @sySlow
      AND KtrKnt.Analityka = @analityka
      LEFT OUTER JOIN FKRozrachunkiCechy Ktr
      ON	XTPKOpis.OkresO = Ktr.OkresO
      AND	Ktr.Konto IS NULL
      AND Ktr.SySlow = @sySlow
      AND Ktr.Analityka = @analityka
      LEFT OUTER JOIN FKRozrachunkiCechy Knt
      ON	XTPKOpis.OkresO = Knt.OkresO
      AND	XTPKOpis.Konto = Knt.Konto
      AND Knt.SySlow IS NULL
      AND (Knt.Analityka IS NULL
      OR Knt.Analityka = '')
      WHERE	XTPKOpis.OkresO = @okresO
      AND XTPKOpis.Konto = @konto;

      WHILE @nrWyjatkuKtrKnt IS NULL AND @konto &lt;&gt; @kontoParent
      BEGIN
      SET @konto = @kontoParent;
      SELECT	@kontoParent = XTPKOpis.KontoParent,
      @nrWyjatkuKtrKnt = CASE WHEN @nrWyjatkuKtrKnt IS NOT NULL THEN @nrWyjatkuKtrKnt ELSE KtrKnt.NrWyjatku END,
      @nrWyjatkuKnt = CASE WHEN @nrWyjatkuKnt IS NOT NULL THEN @nrWyjatkuKnt ELSE Knt.NrWyjatku END
      FROM	XTPKOpis
      LEFT OUTER JOIN FKRozrachunkiCechy KtrKnt
      ON	XTPKOpis.OkresO = KtrKnt.OkresO
      AND	XTPKOpis.Konto = KtrKnt.Konto
      AND KtrKnt.SySlow = @sySlow
      AND KtrKnt.Analityka = @analityka
      LEFT OUTER JOIN FKRozrachunkiCechy Knt
      ON	XTPKOpis.OkresO = Knt.OkresO
      AND	XTPKOpis.Konto = Knt.Konto
      AND Knt.SySlow IS NULL
      AND (Knt.Analityka IS NULL
      OR Knt.Analityka = '')
      WHERE	XTPKOpis.OkresO = @okresO
      AND XTPKOpis.Konto = @konto;
      END

      RETURN COALESCE(@nrWyjatkuKtrKnt, @nrWyjatkuKtr, @nrWyjatkuKnt, 0);
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>270</Id>
    <NrLog>2</NrLog>
    <NrTab>80</NrTab>
    <NrProc>135</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>KPMinDate</NzProc>
    <TextProc>
      CREATE FUNCTION KPMinDate
      (
      @0 DATETIME,	-- data 1
      @1 DATETIME 	-- data 2
      )
      RETURNS DATETIME
      AS
      BEGIN

      DECLARE @date1 AS DATETIME
      DECLARE @date2 AS DATETIME

      SET @date1 = ISNULL(@0,CONVERT(DATETIME, '99991231', 112))
      SET @date2 = ISNULL(@1,CONVERT(DATETIME, '99991231', 112))

      IF ( @date1 &lt;= @date2 ) RETURN ( @date1 )

      RETURN ( @date2 )

      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>271</Id>
    <NrLog>2</NrLog>
    <NrTab>81</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>272</Id>
    <NrLog>2</NrLog>
    <NrTab>82</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>273</Id>
    <NrLog>2</NrLog>
    <NrTab>83</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>274</Id>
    <NrLog>2</NrLog>
    <NrTab>84</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>275</Id>
    <NrLog>2</NrLog>
    <NrTab>85</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>276</Id>
    <NrLog>2</NrLog>
    <NrTab>86</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>277</Id>
    <NrLog>2</NrLog>
    <NrTab>87</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>278</Id>
    <NrLog>2</NrLog>
    <NrTab>88</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>279</Id>
    <NrLog>2</NrLog>
    <NrTab>89</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>280</Id>
    <NrLog>2</NrLog>
    <NrTab>90</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>281</Id>
    <NrLog>2</NrLog>
    <NrTab>91</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>282</Id>
    <NrLog>2</NrLog>
    <NrTab>92</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>283</Id>
    <NrLog>2</NrLog>
    <NrTab>93</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>284</Id>
    <NrLog>2</NrLog>
    <NrTab>94</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>285</Id>
    <NrLog>2</NrLog>
    <NrTab>95</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>286</Id>
    <NrLog>2</NrLog>
    <NrTab>96</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>287</Id>
    <NrLog>2</NrLog>
    <NrTab>97</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>288</Id>
    <NrLog>2</NrLog>
    <NrTab>98</NrTab>
    <NrProc>135</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>289</Id>
    <NrLog>2</NrLog>
    <NrTab>99</NrTab>
    <NrProc>136</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKRDekretyOkres</NzProc>
    <TextProc>
CREATE FUNCTION FKRDekretyOkres(@okresO int)
RETURNS @wynik TABLE 
(
	OkresO smallint not null, 
	Rok smallint not null, 
	Mies smallint not null, 
	DowodNr varchar(15) not null, 
	NrPozycjiKs smallint not null, 
	NrDekretu smallint not null, 
	ZStrony varchar(2) not null, 
	NrPozycjiRozr smallint not null, 
	OstatnieKonto varchar(30) not null	
) 
AS
BEGIN
	INSERT INTO @wynik(OkresO, Rok, Mies, DowodNr, NrPozycjiKs, NrDekretu, ZStrony, NrPozycjiRozr, OstatnieKonto)
	SELECT	FKRDekrety.OkresO,
			FKRDekrety.Rok,
			FKRDekrety.Mies,
			FKRDekrety.DowodNr,
			FKRDekrety.NrPozycjiKs,
			FKRDekrety.NrDekretu,
			FKRDekrety.ZStrony,
			FKRDekrety.NrPozycjiRozr,
			CASE WHEN WarstwaRozNast.WarstwaRoz IS NOT NULL AND FKDekretyKonwersja.Konto IS NOT NULL THEN FKDekretyKonwersja.Konto
				ELSE FKRdekrety.OstatnieKonto
			END OstatnieKonto
	FROM	FKRDekrety
	LEFT OUTER JOIN FKOkresyWarstwyRoz WarstwaRozBiez
		ON	WarstwaRozBiez.OkresO = @okresO
	OUTER APPLY 
	( 
		SELECT	TOP(1) WarstwaRoz 
		FROM	FKOkresyWarstwyRoz WarstwaRozNastWew
		WHERE	WarstwaRozNastWew.OkresO &gt; @okresO
			AND	WarstwaRozNastWew.WarstwaRoz &lt;&gt; WarstwaRozBiez.WarstwaRoz
	) WarstwaRozNast
	LEFT OUTER JOIN FKDekretyKonwersja
		ON	FKDekretyKonwersja.WarstwaRoz = WarstwaRozBiez.WarstwaRoz
		AND	FKDekretyKonwersja.OkresO = FKRdekrety.OkresO
		AND FKDekretyKonwersja.Rok = FKRdekrety.Rok
		AND FKDekretyKonwersja.Mies = FKRdekrety.Mies
		AND FKDekretyKonwersja.DowodNr = FKRdekrety.DowodNr
		AND FKDekretyKonwersja.NrPozycjiKs = FKRdekrety.NrPozycjiKs
		AND FKDekretyKonwersja.NrDekretu = FKRdekrety.NrDekretu
		AND FKDekretyKonwersja.ZStrony = FKRdekrety.ZStrony
  
   RETURN
END
</TextProc>
  </TabProcki>

  <TabProcki>
    <Id>290</Id>
    <NrLog>3</NrLog>
    <NrTab>1</NrTab>
    <NrProc>136</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>291</Id>
    <NrLog>3</NrLog>
    <NrTab>2</NrTab>
    <NrProc>137</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>KPGenStanZatrMC</NzProc>
    <TextProc>
      CREATE PROCEDURE KPGenStanZatrMc
      @0 int, --lp naliczenia
      @1 int, --rok stanu
      @2 int, --miesiac stanu
      @3 varchar(10) --login operatora
      AS
      BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON
      --zmienne: klucz w tabeli KPKHP
      DECLARE @typUmowy CHAR(1);
      DECLARE @nrEwid INT;
      DECLARE @nrUmowy VARCHAR(10);
      DECLARE @dataZmiany DATETIME;

      --zmienne: składowe rekorku KPStArchS
      DECLARE @statusZatrudn VARCHAR(3)
      DECLARE @kodUmowy VARCHAR(7)
      DECLARE @kodZwoln VARCHAR(7)
      DECLARE @zaklad VARCHAR(7)
      DECLARE @komorka VARCHAR(7)
      DECLARE @stanowPr VARCHAR(7)
      DECLARE @rodzStanPr CHAR(1)
      DECLARE @sysWynagr VARCHAR(7)
      DECLARE @miejsceWypl VARCHAR(7)
      DECLARE @kodZawiesz VARCHAR(7)
      DECLARE @kodInwal VARCHAR(7)
      DECLARE @kodWykszt VARCHAR(7)
      DECLARE @kodWyksztGUS VARCHAR(7)
      DECLARE @kodZawodu VARCHAR(7)
      DECLARE @kodZawoduGUS VARCHAR(7)
      DECLARE @statusUmowy CHAR(1)
      DECLARE @wiek SMALLINT
      DECLARE @plec CHAR(1)
      DECLARE @etat VARCHAR(7)
      DECLARE @dniEtatoPracy DECIMAL(10, 6)
      declare @dniEtatoChoroby decimal(10,6)
      DECLARE @podstDodat CHAR(1)

      --zmienne: składowe rekorku KPStArchS, uzywane gdy jest zmiana umowy
      DECLARE @kodUmowyZmiana VARCHAR(7)
      DECLARE @kodZwolnZmiana VARCHAR(7)
      DECLARE @zakladZmiana VARCHAR(7)
      DECLARE @komorkaZmiana VARCHAR(7)
      DECLARE @stanowPrZmiana VARCHAR(7)
      DECLARE @sysWynagrZmiana VARCHAR(7)
      DECLARE @miejsceWyplZmiana VARCHAR(7)
      DECLARE @kodZawieszZmiana VARCHAR(7)
      DECLARE @etatZmiana VARCHAR(7)

      --zmienne: zmienne pomocnicze, wyznaczaja przedzial poszikiwania zmian umowy
      DECLARE @dataStop DATETIME
      DECLARE @dataNastZmiany DATETIME
      DECLARE @typZmiany CHAR(1)
      DECLARE @typZmianyPoprzedni CHAR(1)
      DECLARE @dZawieszDo DATETIME
      DECLARE @dZawieszDoZmiana DATETIME

      --zmienne: zmienne pomocnicze do sterowania petli
      DECLARE @koniec BIT

      --zmienne: parametry wywolania procedury (tu beda przepisane)
      DECLARE @lpNaliczenia INT
      DECLARE @rokStanu INT
      DECLARE @mcStanu INT
      DECLARE @operator VARCHAR(10)

      --zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
      DECLARE @dataOdStrPom VARCHAR(12)
      DECLARE @dataOd DATETIME
      DECLARE @dataDo DATETIME

      --zmienne: stale
      DECLARE @sySlow VARCHAR(3)
      DECLARE @sySlowKpSlStPr VARCHAR(3)
      DECLARE @sySlowWyksztGUS VARCHAR(3)
      DECLARE @sySlowZawodGUS VARCHAR(3)

      --przypisanie wartosci stalym, oraz przepisanie parametrow procedury
      SET @lpNaliczenia = @0
      SET @rokStanu = @1
      SET @mcStanu = @2
      SET @operator = @3
      SET @sySlow = 'XKP'
      SET @sySlowKpSlStPr = 'XSS'
      SET @sySlowWyksztGUS = '104'
      SET @sySlowZawodGUS = '103'

      --Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
      --dla danego roku stanu i miesiaca stanu
      SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
      SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
      SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

      --kursor po umowach
      DECLARE c_kupic CURSOR FOR
      SELECT TypUmowy, NrEwid, NrUmowy
      FROM KPKUPiC
      WHERE  (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataOd)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataOd BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataOd BETWEEN DataUmowyOd AND DataZakoncz)
      OR (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataDo)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataDo BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataDo BETWEEN DataUmowyOd AND DataZakoncz)

      --1. wstaw wiersz do KPStArchS
      INSERT INTO KPStArchS (SySlow, LpNaliczenia, RokStanu, McStanu, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @rokStanu, @mcStanu, @operator, GETDATE())

      --2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw dla nich wiersze do KPStZatrS
      OPEN c_kupic
      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;

      WHILE @@FETCH_STATUS = 0
      BEGIN
      --2.1. wyzeruj zmienne pomocnicze
      SET @dniEtatoPracy = 0
      set @dniEtatoChoroby = 0
      SET @dataStop = @dataDo
      SET @dataNastZmiany = NULL

      --2.2. znajdz mniejsza z dwoch dat: ostatniej zmiany o typie U lub A przed
      --	   @dataOd, oraz ostatniej zmiany o typie U lub A przed @dataDo
      SELECT @dataZmiany = MIN(DataZmiany)
      FROM
      (
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataOd
      UNION
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE (KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataDo
      ) Daty

      --2.3. Wybierz wszystkie dane pracownika
      SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
      @kodUmowy = KPKHP.KodUmowy,
      @kodZwoln = ISNULL(KPKUPiC.KodZakoncz, ''),
      @zaklad = ISNULL(KPKHP.Zaklad, ''),
      @komorka = ISNULL(KPKHP.Komorka, ''),
      @stanowPr = ISNULL(KPKHP.StanowPr, ''),
      @rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
      @sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWypl = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
      @kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
      @kodZawodu = KPKOP.KodZawoduWykon,
      @kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
      @statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany),
      XKOP.DataUrodz) &gt; @dataZmiany
      THEN DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) END
      ELSE 0 END,
      @plec = ISNULL(XKOP.Plec, ''),
      @etat = ISNULL(KPKHP.Etat, ''),
      @podstDodat = KPKUPiC.PodstDodat,
      @typZmiany = KPKHP.typZmiany,
      --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDo = KPKHP.DZawieszDo --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      FROM KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
      LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
      LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataZmiany AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

      SET @typZmianyPoprzedni = @typZmiany
      --2.4. Dla kazdej zmiany umowy pracownika, wpisz wiersz w KPStArchS
      --     [notatna_techniczna]Tutaj mozna uzyc kursora, ktory bedzie zwracal kolejne
      --	   daty zmiany. Zysk: jedno zapytanie zamiast kliku w petli, gdy jest kilka zmian w miesiacu.
      --	   strata: jezeli w wiekszosci wypadkow jest jedna umowa w miesiacu, deklaracja i zwalnianie
      --	   kursora moze spowolnic dzialanie.[/notatka_techniczna]
      SET @koniec = 0
      WHILE @koniec = 0
      BEGIN
      --2.4.1. Wyznaczenie daty nastepnej zmiany
      SELECT @dataNastZmiany = MIN(DataZmiany)
      FROM (
      SELECT KHP.dataZmiany AS DataZmiany
      FROM   KPKHP KHP
      WHERE  KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy
      UNION  --Zmiana to takze przyznanie stopnia inwalidzkiego
      SELECT KPKOPInwal.DataPrzyznania AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze zakonczenie waznosci stopnia inwalidzkiego
      SELECT KPKOPInwal.DataWaznosci AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze urodziny pracownika
      SELECT DATEADD(YEAR, DATEDIFF(YEAR, XKOP.DataUrodz, @dataOd), XKOP.DataUrodz)
      FROM   XKOP
      WHERE  XKOP.NrEwid = @nrEwid AND SySlow = @sySlow AND
      XKOP.DataUrodz IS NOT NULL AND MONTH(XKOP.DataUrodz) = MONTH(@dataOd)
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION
      SELECT DataZmiany
      FROM   KPKUPiCSlowSO
      WHERE  KPKUPiCSlowSO.NrEwid = @nrEwid AND KPKUPiCSlowSO.TypUmowy = @typUmowy AND KPKUPiCSlowSO.NrUmowy = @nrUmowy
      UNION  --poczatek okresu tez ma wywolac zmiane
      SELECT @dataOd AS DataZmiany
      ) Daty
      WHERE DataZmiany &gt; @dataZmiany AND DataZmiany &lt;= @dataDo

      --2.4.2. Jesli typ zmiany jest C, to nalezy skorygowac dateNastepnejZmiany
      --		 aby uwzgledniala date konca okresu zawieszenia
      IF @typZmiany = 'C' AND
      (@dataNastZmiany IS NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt;= @dataDo
      OR
      (@dataNastZmiany IS NOT NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt; @dataNastZmiany))
      SET @dataNastZmiany = DATEADD(DAY, 1, @dZawieszDo)

      --2.4.3. Zmien dateStop, jezeli jest nastepna zmiana
      IF @dataNastZmiany IS NOT NULL
      SET @dataStop = @dataNastZmiany
      ELSE
      SET @dataStop = @dataDo

      --2.4.4. Jezeli rozpatrywana zmiana miesci sie w okresie @dataOd i @dataDo
      IF @dataNastZmiany IS NULL OR @dataZmiany BETWEEN @dataOd AND @dataDo
      BEGIN
      --2.4.4.1. Wylicz dni etato-pracy
      IF @typZmiany = 'Z'
      SET @dniEtatoPracy = 1
      ELSE IF @typZmiany = 'U' OR @typZmiany = 'A' OR @typZmiany = 'P'
      BEGIN
      SET @dniEtatoPracy = DATEDIFF(DAY, @dataZmiany, @dataStop) + (CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END)
      --IF @dataNastZmiany IS NULL
      --SET @dniEtatoPracy = @dniEtatoPracy + 1
      END
      -- tu było ELSE IF @typZmiany = 'C'

      -- zmiana HF
      IF @typZmiany = 'C'
      SET @dniEtatoPracy = 0
      ELSE
      BEGIN
      declare @pomDni int
      select @pomDni = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END,
      CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      + 1)   --(CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END))
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      (XSlSkPl.TypSkPl='B' and XSlSkPl.ZawieszaUmowe=0 and KPAbsenc.DniKalend&gt;29 or
      XSlSkPl.ZawieszaUmowe=1)
      select @pomDni = ISNULL(@pomDni,0);
      select @dniEtatoPracy = @dniEtatoPracy - abs(@pomDni)
      END


      -- 1.2.3 nowe HF
      declare @pomDniChor int
      select @pomDniChor = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END,
      CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      --TUTAJ ZMIANY --&gt;&gt;&gt;&gt; TEGO NA TO CO NIZEJ --&gt;&gt;&gt; + 1)  --(CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END))
      + CASE WHEN (@dataNastZmiany IS NULL AND @dataStop = @dataDo) OR (@dataNastZmiany IS NOT NULL AND @dataNastZmiany &gt; KPAbsenc.DataDo) THEN 1 ELSE 0 END)
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      KPAbsenc.Anulowanie=0 and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      left(XSlSkPl.TypSkPl,1)='C' and XSlSkPl.KodZusP&gt;'300' and XSlSkPl.KodZusP&lt;'330'
      select @dniEtatoChoroby = case when 30 &lt; abs(@pomDniChor) then -30 else -1 * abs(@pomDniChor) end

      select @dniEtatoPracy = isnull(@dniEtatoPracy,0);
      select @dniEtatoChoroby = isnull(@dniEtatoChoroby,0);

      --2.4.4.2. Dopisz wiersz do KPStZatrS
      INSERT INTO KPStZatrS (SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanowPr, SysWynagr, MiejsceWypl, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, DniEtatoPrac, PodstDodat, DniEtatoChoroby, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWypl, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @dniEtatoPracy, @podstDodat, @dniEtatoChoroby, @operator, GETDATE())
      END

      --2.4.5. Jezeli jest kolejna zmiana - pobierz dane z tabeli do zmiennych
      --       dla nastepnej zmiany umowy
      --		 w przeciwnym wypadku koniec petli
      IF @dataNastZmiany IS NOT NULL
      BEGIN
      SET @dataZmiany = @dataNastZmiany
      --2.4.5.1. Pobranie danych do zmiennych pomocniczych
      SELECT  @kodUmowyZmiana = ISNULL(KPKHP.KodUmowy, ''),
      @kodZwolnZmiana = ISNULL(KPKHP.KodZwoln, ''),
      @zakladZmiana = ISNULL(KPKHP.Zaklad, ''),
      @komorkaZmiana = ISNULL(KPKHP.Komorka, ''),
      @stanowPrZmiana = ISNULL(KPKHP.StanowPr, ''),
      @sysWynagrZmiana = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWyplZmiana = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawieszZmiana = ISNULL(KPKHP.KodZawiesz, ''),
      @typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDoZmiana = KPKHP.DZawieszDo, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany), XKOP.DataUrodz) &gt; @dataZmiany
      THEN
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany)
      END
      ELSE
      0
      END,
      @etatZmiana = ISNULL(KPKHP.Etat, '')
      FROM KPKUPiC
      LEFT OUTER JOIN KPKHP ON KPKUPiC.NrEwid = KPKHP.NrEwid AND
      KPKUPiC.TypUmowy = KPKHP.TypUmowy AND
      KPKUPiC.NrUmowy = KPKHP.NrUmowy AND
      KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND
      XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid
      AND KodInwal.DataPrzyznania = (
      SELECT MAX(DataPrzyznania)
      FROM KPKOPInwal
      WHERE DataPrzyznania &lt;= @dataZmiany AND
      NrEwid = @nrEwid) AND
      (KodInwal.DataWaznosci IS NULL OR
      KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND
      KPKUPiC.NrUmowy = @nrUmowy

      --2.4.5.2. Przepisanie danych ze zmiennych pomocniczych do zmiennych wlasciwych
      -- w zaleznosci od typu zmiany
      IF @typZmiany = 'U'
      BEGIN
      SET @kodUmowy = @kodUmowyZmiana
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      END
      ELSE IF @typZmiany = 'A'
      BEGIN
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'Z'
      BEGIN
      SET @kodZwoln = @kodZwolnZmiana
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'C'
      BEGIN
      SET @kodZawiesz = @kodZawieszZmiana
      SET @dZawieszDo = @dZawieszDoZmiana
      END
      ELSE IF @typZmiany = 'P'
      BEGIN
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany IS NULL --Jezeli aktualna @dataZmiany nie wiaze sie z wpisem w KPKHP
      BEGIN
      --to w zaleznosci od tego czy trwa okres zawieszenia pracownika
      --typ zmiany ustawiany jest albo na 'C' (zawieszony)
      --albo na poprzedni typ zmiany inny od 'C' i 'Z'
      IF @dZawieszDo IS NOT NULL AND @dataZmiany &lt;= @dZawieszDo
      SET @typZmiany = 'C'
      ELSE
      BEGIN
      SET @typZmiany = @typZmianyPoprzedni
      SET @kodZawiesz = ''
      SET @dZawieszDo = NULL
      END
      END
      END
      ELSE
      SET @koniec = 1

      END --petla zmian dla jednej umowy

      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;
      END

      CLOSE c_kupic
      DEALLOCATE c_kupic

      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>292</Id>
    <NrLog>3</NrLog>
    <NrTab>3</NrTab>
    <NrProc>137</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>293</Id>
    <NrLog>3</NrLog>
    <NrTab>4</NrTab>
    <NrProc>138</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>KPGenStanZatrMc</NzProc>
    <TextProc>
      CREATE PROCEDURE KPGenStanZatrMc
      @0 int, --lp naliczenia
      @1 int, --rok stanu
      @2 int, --miesiac stanu
      @3 varchar(10) --login operatora
      AS
      BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON
      --zmienne: klucz w tabeli KPKHP
      DECLARE @typUmowy CHAR(1);
      DECLARE @nrEwid INT;
      DECLARE @nrUmowy VARCHAR(10);
      DECLARE @dataZmiany DATETIME;

      --zmienne: składowe rekorku KPStArchS
      DECLARE @statusZatrudn VARCHAR(3)
      DECLARE @kodUmowy VARCHAR(7)
      DECLARE @kodZwoln VARCHAR(7)
      DECLARE @zaklad VARCHAR(7)
      DECLARE @komorka VARCHAR(7)
      DECLARE @stanowPr VARCHAR(7)
      DECLARE @rodzStanPr CHAR(1)
      DECLARE @sysWynagr VARCHAR(7)
      DECLARE @miejsceWypl VARCHAR(7)
      DECLARE @kodZawiesz VARCHAR(7)
      DECLARE @kodInwal VARCHAR(7)
      DECLARE @kodWykszt VARCHAR(7)
      DECLARE @kodWyksztGUS VARCHAR(7)
      DECLARE @kodZawodu VARCHAR(7)
      DECLARE @kodZawoduGUS VARCHAR(7)
      DECLARE @statusUmowy CHAR(1)
      DECLARE @wiek SMALLINT
      DECLARE @plec CHAR(1)
      DECLARE @etat VARCHAR(7)
      DECLARE @dniEtatoPracy DECIMAL(10, 6)
      declare @dniEtatoChoroby decimal(10,6)
      DECLARE @podstDodat CHAR(1)

      --zmienne: składowe rekorku KPStArchS, uzywane gdy jest zmiana umowy
      DECLARE @kodUmowyZmiana VARCHAR(7)
      DECLARE @kodZwolnZmiana VARCHAR(7)
      DECLARE @zakladZmiana VARCHAR(7)
      DECLARE @komorkaZmiana VARCHAR(7)
      DECLARE @stanowPrZmiana VARCHAR(7)
      DECLARE @sysWynagrZmiana VARCHAR(7)
      DECLARE @miejsceWyplZmiana VARCHAR(7)
      DECLARE @kodZawieszZmiana VARCHAR(7)
      DECLARE @etatZmiana VARCHAR(7)

      --zmienne: zmienne pomocnicze, wyznaczaja przedzial poszikiwania zmian umowy
      DECLARE @dataStop DATETIME
      DECLARE @dataNastZmiany DATETIME
      DECLARE @typZmiany CHAR(1)
      DECLARE @typZmianyPoprzedni CHAR(1)
      DECLARE @dZawieszDo DATETIME
      DECLARE @dZawieszDoZmiana DATETIME

      --zmienne: zmienne pomocnicze do sterowania petli
      DECLARE @koniec BIT

      --zmienne: parametry wywolania procedury (tu beda przepisane)
      DECLARE @lpNaliczenia INT
      DECLARE @rokStanu INT
      DECLARE @mcStanu INT
      DECLARE @operator VARCHAR(10)

      --zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
      DECLARE @dataOdStrPom VARCHAR(12)
      DECLARE @dataOd DATETIME
      DECLARE @dataDo DATETIME

      --zmienne: stale
      DECLARE @sySlow VARCHAR(3)
      DECLARE @sySlowKpSlStPr VARCHAR(3)
      DECLARE @sySlowWyksztGUS VARCHAR(3)
      DECLARE @sySlowZawodGUS VARCHAR(3)

      --przypisanie wartosci stalym, oraz przepisanie parametrow procedury
      SET @lpNaliczenia = @0
      SET @rokStanu = @1
      SET @mcStanu = @2
      SET @operator = @3
      SET @sySlow = 'XKP'
      SET @sySlowKpSlStPr = 'XSS'
      SET @sySlowWyksztGUS = '104'
      SET @sySlowZawodGUS = '103'

      --Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
      --dla danego roku stanu i miesiaca stanu
      SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
      SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
      SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

      --kursor po umowach
      DECLARE c_kupic CURSOR FOR
      SELECT TypUmowy, NrEwid, NrUmowy
      FROM KPKUPiC
      WHERE  (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataOd)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataOd BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataOd BETWEEN DataUmowyOd AND DataZakoncz)
      OR (DataUmowyDo IS NULL AND DataZakoncz IS NULL AND DataUmowyOd &lt;= @dataDo)
      OR (DataUmowyDo IS NOT NULL AND DataZakoncz IS NULL AND @dataDo BETWEEN DataUmowyOd AND DataUmowyDo)
      OR (DataZakoncz IS NOT NULL AND @dataDo BETWEEN DataUmowyOd AND DataZakoncz)

      --1. wstaw wiersz do KPStArchS
      INSERT INTO KPStArchS (SySlow, LpNaliczenia, RokStanu, McStanu, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @rokStanu, @mcStanu, @operator, GETDATE())

      --2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw dla nich wiersze do KPStZatrS
      OPEN c_kupic
      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;

      WHILE @@FETCH_STATUS = 0
      BEGIN
      --2.1. wyzeruj zmienne pomocnicze
      SET @dniEtatoPracy = 0
      set @dniEtatoChoroby = 0
      SET @dataStop = @dataDo
      SET @dataNastZmiany = NULL

      --2.2. znajdz mniejsza z dwoch dat: ostatniej zmiany o typie U lub A przed
      --	   @dataOd, oraz ostatniej zmiany o typie U lub A przed @dataDo
      SELECT @dataZmiany = MIN(DataZmiany)
      FROM
      (
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataOd
      UNION
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE (KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataDo
      ) Daty

      --2.3. Wybierz wszystkie dane pracownika
      SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
      @kodUmowy = KPKHP.KodUmowy,
      @kodZwoln = ISNULL(KPKUPiC.KodZakoncz, ''),
      @zaklad = ISNULL(KPKHP.Zaklad, ''),
      @komorka = ISNULL(KPKHP.Komorka, ''),
      @stanowPr = ISNULL(KPKHP.StanowPr, ''),
      @rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
      @sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWypl = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
      @kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
      @kodZawodu = KPKOP.KodZawoduWykon,
      @kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
      @statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany),
      XKOP.DataUrodz) &gt; @dataZmiany
      THEN DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) END
      ELSE 0 END,
      @plec = ISNULL(XKOP.Plec, ''),
      @etat = ISNULL(KPKHP.Etat, ''),
      @podstDodat = KPKUPiC.PodstDodat,
      @typZmiany = KPKHP.typZmiany,
      --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDo = KPKHP.DZawieszDo --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      FROM KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
      LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
      LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataZmiany AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

      SET @typZmianyPoprzedni = @typZmiany
      --2.4. Dla kazdej zmiany umowy pracownika, wpisz wiersz w KPStArchS
      --     [notatna_techniczna]Tutaj mozna uzyc kursora, ktory bedzie zwracal kolejne
      --	   daty zmiany. Zysk: jedno zapytanie zamiast kliku w petli, gdy jest kilka zmian w miesiacu.
      --	   strata: jezeli w wiekszosci wypadkow jest jedna umowa w miesiacu, deklaracja i zwalnianie
      --	   kursora moze spowolnic dzialanie.[/notatka_techniczna]
      SET @koniec = 0
      WHILE @koniec = 0
      BEGIN
      --2.4.1. Wyznaczenie daty nastepnej zmiany
      SELECT @dataNastZmiany = MIN(DataZmiany)
      FROM (
      SELECT KHP.dataZmiany AS DataZmiany
      FROM   KPKHP KHP
      WHERE  KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy
      UNION  --Zmiana to takze przyznanie stopnia inwalidzkiego
      SELECT KPKOPInwal.DataPrzyznania AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze zakonczenie waznosci stopnia inwalidzkiego
      SELECT KPKOPInwal.DataWaznosci AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze urodziny pracownika
      SELECT DATEADD(YEAR, DATEDIFF(YEAR, XKOP.DataUrodz, @dataOd), XKOP.DataUrodz)
      FROM   XKOP
      WHERE  XKOP.NrEwid = @nrEwid AND SySlow = @sySlow AND
      XKOP.DataUrodz IS NOT NULL AND MONTH(XKOP.DataUrodz) = MONTH(@dataOd)
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION
      SELECT DataZmiany
      FROM   KPKUPiCSlowSO
      WHERE  KPKUPiCSlowSO.NrEwid = @nrEwid AND KPKUPiCSlowSO.TypUmowy = @typUmowy AND KPKUPiCSlowSO.NrUmowy = @nrUmowy
      UNION  --poczatek okresu tez ma wywolac zmiane
      SELECT @dataOd AS DataZmiany
      ) Daty
      WHERE DataZmiany &gt; @dataZmiany AND DataZmiany &lt;= @dataDo

      --2.4.2. Jesli typ zmiany jest C, to nalezy skorygowac dateNastepnejZmiany
      --		 aby uwzgledniala date konca okresu zawieszenia
      IF @typZmiany = 'C' AND
      (@dataNastZmiany IS NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt;= @dataDo
      OR
      (@dataNastZmiany IS NOT NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt; @dataNastZmiany))
      SET @dataNastZmiany = DATEADD(DAY, 1, @dZawieszDo)

      --2.4.3. Zmien dateStop, jezeli jest nastepna zmiana
      IF @dataNastZmiany IS NOT NULL
      SET @dataStop = @dataNastZmiany
      ELSE
      SET @dataStop = @dataDo

      --2.4.4. Jezeli rozpatrywana zmiana miesci sie w okresie @dataOd i @dataDo
      IF @dataNastZmiany IS NULL OR @dataZmiany BETWEEN @dataOd AND @dataDo
      BEGIN
      --2.4.4.1. Wylicz dni etato-pracy
      IF @typZmiany = 'Z'
      SET @dniEtatoPracy = 1
      ELSE IF @typZmiany = 'U' OR @typZmiany = 'A' OR @typZmiany = 'P'
      BEGIN
      SET @dniEtatoPracy = DATEDIFF(DAY, @dataZmiany, @dataStop) + (CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END)
      --IF @dataNastZmiany IS NULL
      --SET @dniEtatoPracy = @dniEtatoPracy + 1
      END
      -- tu było ELSE IF @typZmiany = 'C'

      -- zmiana HF
      IF @typZmiany = 'C'
      SET @dniEtatoPracy = 0
      ELSE
      BEGIN
      declare @pomDni int
      select @pomDni = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END,
      CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      + 1)   --(CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END))
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      (XSlSkPl.TypSkPl='B' and XSlSkPl.ZawieszaUmowe=0 and KPAbsenc.DniKalend&gt;29 or
      XSlSkPl.ZawieszaUmowe=1)
      select @pomDni = ISNULL(@pomDni,0);
      select @dniEtatoPracy = @dniEtatoPracy - abs(@pomDni)
      END


      -- 1.2.3 nowe HF
      declare @pomDniChor int
      select @pomDniChor = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END,
      CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      --TUTAJ ZMIANY --&gt;&gt;&gt;&gt; TEGO NA TO CO NIZEJ --&gt;&gt;&gt; + 1)  --(CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END))
      + CASE WHEN (@dataNastZmiany IS NULL AND @dataStop = @dataDo) OR (@dataNastZmiany IS NOT NULL AND @dataNastZmiany &gt; KPAbsenc.DataDo) THEN 1 ELSE 0 END)
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and KPAbsenc.PodstDodat = @podstDodat and
      KPAbsenc.Anulowanie=0 and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      left(XSlSkPl.TypSkPl,1)='C' and XSlSkPl.KodZusP&gt;'300' and XSlSkPl.KodZusP&lt;'330'
      select @dniEtatoChoroby = case when 30 &lt; abs(@pomDniChor) then -30 else -1 * abs(@pomDniChor) end

      select @dniEtatoPracy = isnull(@dniEtatoPracy,0);
      select @dniEtatoChoroby = isnull(@dniEtatoChoroby,0);

      --2.4.4.2. Dopisz wiersz do KPStZatrS
      INSERT INTO KPStZatrS (SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanowPr, SysWynagr, MiejsceWypl, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, DniEtatoPrac, PodstDodat, DniEtatoChoroby, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWypl, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @dniEtatoPracy, @podstDodat, @dniEtatoChoroby, @operator, GETDATE())
      END

      --2.4.5. Jezeli jest kolejna zmiana - pobierz dane z tabeli do zmiennych
      --       dla nastepnej zmiany umowy
      --		 w przeciwnym wypadku koniec petli
      IF @dataNastZmiany IS NOT NULL
      BEGIN
      SET @dataZmiany = @dataNastZmiany
      --2.4.5.1. Pobranie danych do zmiennych pomocniczych
      SELECT  @kodUmowyZmiana = ISNULL(KPKHP.KodUmowy, ''),
      @kodZwolnZmiana = ISNULL(KPKHP.KodZwoln, ''),
      @zakladZmiana = ISNULL(KPKHP.Zaklad, ''),
      @komorkaZmiana = ISNULL(KPKHP.Komorka, ''),
      @stanowPrZmiana = ISNULL(KPKHP.StanowPr, ''),
      @sysWynagrZmiana = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWyplZmiana = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawieszZmiana = ISNULL(KPKHP.KodZawiesz, ''),
      @typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDoZmiana = KPKHP.DZawieszDo, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany), XKOP.DataUrodz) &gt; @dataZmiany
      THEN
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany)
      END
      ELSE
      0
      END,
      @etatZmiana = ISNULL(KPKHP.Etat, '')
      FROM KPKUPiC
      LEFT OUTER JOIN KPKHP ON KPKUPiC.NrEwid = KPKHP.NrEwid AND
      KPKUPiC.TypUmowy = KPKHP.TypUmowy AND
      KPKUPiC.NrUmowy = KPKHP.NrUmowy AND
      KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND
      XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid
      AND KodInwal.DataPrzyznania = (
      SELECT MAX(DataPrzyznania)
      FROM KPKOPInwal
      WHERE DataPrzyznania &lt;= @dataZmiany AND
      NrEwid = @nrEwid) AND
      (KodInwal.DataWaznosci IS NULL OR
      KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND
      KPKUPiC.NrUmowy = @nrUmowy

      --2.4.5.2. Przepisanie danych ze zmiennych pomocniczych do zmiennych wlasciwych
      -- w zaleznosci od typu zmiany
      IF @typZmiany = 'U'
      BEGIN
      SET @kodUmowy = @kodUmowyZmiana
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      END
      ELSE IF @typZmiany = 'A'
      BEGIN
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'Z'
      BEGIN
      SET @kodZwoln = @kodZwolnZmiana
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'C'
      BEGIN
      SET @kodZawiesz = @kodZawieszZmiana
      SET @dZawieszDo = @dZawieszDoZmiana
      END
      ELSE IF @typZmiany = 'P'
      BEGIN
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany IS NULL --Jezeli aktualna @dataZmiany nie wiaze sie z wpisem w KPKHP
      BEGIN
      --to w zaleznosci od tego czy trwa okres zawieszenia pracownika
      --typ zmiany ustawiany jest albo na 'C' (zawieszony)
      --albo na poprzedni typ zmiany inny od 'C' i 'Z'
      IF @dZawieszDo IS NOT NULL AND @dataZmiany &lt;= @dZawieszDo
      SET @typZmiany = 'C'
      ELSE
      BEGIN
      SET @typZmiany = @typZmianyPoprzedni
      SET @kodZawiesz = ''
      SET @dZawieszDo = NULL
      END
      END
      END
      ELSE
      SET @koniec = 1

      END --petla zmian dla jednej umowy

      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;
      END

      CLOSE c_kupic
      DEALLOCATE c_kupic

      END
        </TextProc>
    </TabProcki>

   <TabProcki>
      <Id>294</Id>
      <NrLog>3</NrLog>
      <NrTab>5</NrTab>
      <NrProc>138</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

   <TabProcki>
      <Id>295</Id>
      <NrLog>3</NrLog>
      <NrTab>6</NrTab>
      <NrProc>138</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

     <TabProcki>
      <Id>296</Id>
      <NrLog>3</NrLog>
      <NrTab>7</NrTab>
      <NrProc>138</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

     <TabProcki>
      <Id>297</Id>
      <NrLog>3</NrLog>
      <NrTab>8</NrTab>
      <NrProc>138</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

     <TabProcki>
      <Id>298</Id>
      <NrLog>3</NrLog>
      <NrTab>9</NrTab>
      <NrProc>138</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

     <TabProcki>
      <Id>299</Id>
      <NrLog>3</NrLog>
      <NrTab>10</NrTab>
      <NrProc>138</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

     <TabProcki>
      <Id>300</Id>
      <NrLog>3</NrLog>
      <NrTab>11</NrTab>
      <NrProc>138</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

     <TabProcki>
      <Id>301</Id>
      <NrLog>3</NrLog>
      <NrTab>12</NrTab>
      <NrProc>138</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

     <TabProcki>
      <Id>302</Id>
      <NrLog>3</NrLog>
      <NrTab>13</NrTab>
      <NrProc>138</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

     <TabProcki>
      <Id>303</Id>
      <NrLog>3</NrLog>
      <NrTab>14</NrTab>
      <NrProc>138</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

   <TabProcki>
      <Id>304</Id>
      <NrLog>3</NrLog>
      <NrTab>15</NrTab>
      <NrProc>138</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

   <TabProcki>
      <Id>303</Id>
      <NrLog>3</NrLog>
      <NrTab>16</NrTab>
      <NrProc>138</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

   <TabProcki>
      <Id>304</Id>
      <NrLog>3</NrLog>
      <NrTab>17</NrTab>
      <NrProc>138</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

   <TabProcki>
      <Id>305</Id>
      <NrLog>3</NrLog>
      <NrTab>18</NrTab>
      <NrProc>138</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>


   <TabProcki>
      <Id>306</Id>
      <NrLog>3</NrLog>
      <NrTab>19</NrTab>
      <NrProc>139</NrProc>
      <ProcFun>FUNCTION</ProcFun>
      <NzProc>RegexMatch</NzProc>
      <TextProc>
        CREATE FUNCTION RegexMatch(@0 [nvarchar](max), @1 [nvarchar](4000))
        RETURNS [bit] WITH EXECUTE AS CALLER
        AS
        EXTERNAL NAME [InfraSqlCLR].[UserDefinedFunctions].[RegexMatch]
      </TextProc>
   
   </TabProcki>

    <TabProcki>
      <Id>307</Id>
      <NrLog>3</NrLog>
      <NrTab>19</NrTab>
      <NrProc>140</NrProc>
      <ProcFun>PROCEDURE</ProcFun>
      <NzProc>FKDajKontaWgDefWyboru</NzProc>
      <TextProc>
        CREATE PROCEDURE FKDajKontaWgDefWyboru
        @0 [smallint],
        @1 [nvarchar](4000),
        @2 [nvarchar](4000),
        @3 [nvarchar](4000)
        WITH EXECUTE AS CALLER
        AS
        EXTERNAL NAME [InfraSqlCLR].[StoredProcedures].[FKDajKontaWgDefWyboru]
      </TextProc>
    </TabProcki>

    <TabProcki>
      <Id>308</Id>
      <NrLog>3</NrLog>
      <NrTab>19</NrTab>
      <NrProc>141</NrProc>
      <ProcFun>FUNCTION</ProcFun>
      <NzProc>NrWyjatkuDlaKonta</NzProc>
      <TextProc>
        CREATE FUNCTION NrWyjatkuDlaKonta(@0 [int], @1 [nvarchar](max), @2 [nvarchar](max), @3 [nvarchar](max), @4 [int], @5[bit])
        RETURNS [int] WITH EXECUTE AS CALLER
        AS
        EXTERNAL NAME [InfraSqlCLR].[UserDefinedFunctions].[NrWyjatkuDlaKonta]
      </TextProc>
    </TabProcki>

    <TabProcki>
      <Id>309</Id>
      <NrLog>3</NrLog>
      <NrTab>19</NrTab>
      <NrProc>142</NrProc>
      <ProcFun>FUNCTION</ProcFun>
      <NzProc>PoziomR</NzProc>
      <TextProc>
        CREATE FUNCTION PoziomR(@0 [int], @1 [nvarchar](max))
        RETURNS [int] WITH EXECUTE AS CALLER
        AS
        EXTERNAL NAME [InfraSqlCLR].[UserDefinedFunctions].[PoziomR]
      </TextProc>
    </TabProcki>

     <TabProcki>
      <Id>310</Id>
      <NrLog>3</NrLog>
      <NrTab>20</NrTab>
      <NrProc>142</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

     <TabProcki>
      <Id>311</Id>
      <NrLog>3</NrLog>
      <NrTab>21</NrTab>
      <NrProc>142</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

  
     <TabProcki>
      <Id>312</Id>
      <NrLog>3</NrLog>
      <NrTab>22</NrTab>
      <NrProc>142</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>
  
   <TabProcki>
      <Id>313</Id>
      <NrLog>3</NrLog>
      <NrTab>23</NrTab>
      <NrProc>142</NrProc>
      <ProcFun></ProcFun>
      <NzProc></NzProc>
      <TextProc>
      </TextProc>
   </TabProcki>

  <TabProcki>
    <Id>314</Id>
    <NrLog>3</NrLog>
    <NrTab>24</NrTab>
    <NrProc>142</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>315</Id>
    <NrLog>3</NrLog>
    <NrTab>25</NrTab>
    <NrProc>142</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>316</Id>
    <NrLog>3</NrLog>
    <NrTab>26</NrTab>
    <NrProc>142</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>317</Id>
    <NrLog>3</NrLog>
    <NrTab>27</NrTab>
    <NrProc>142</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>318</Id>
    <NrLog>3</NrLog>
    <NrTab>28</NrTab>
    <NrProc>142</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

    <TabProcki>
    <Id>319</Id>
    <NrLog>3</NrLog>
    <NrTab>29</NrTab>
    <NrProc>143</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>KPGenStanZatrData</NzProc>
    <TextProc>
	CREATE PROCEDURE KPGenStanZatrData
	@0 datetime, --data naliczenia
	@1 varchar(10) --login operatora
	AS
	BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON
	DECLARE @typUmowy CHAR(1);
	DECLARE @nrEwid INT;
	DECLARE @nrUmowy VARCHAR(10);
	DECLARE @dataZmiany DATETIME;

	DECLARE @statusZatrudn VARCHAR(3)
	DECLARE @kodUmowy VARCHAR(7)
	DECLARE @kodZwoln VARCHAR(7)
	DECLARE @zaklad VARCHAR(7)
	DECLARE @komorka VARCHAR(7)
	DECLARE @stanowPr VARCHAR(7)
	DECLARE @rodzStanPr CHAR(1)
	DECLARE @sysWynagr VARCHAR(7)
	DECLARE @miejsceWyplaty VARCHAR(7)
	DECLARE @kodZawiesz VARCHAR(7)
	DECLARE @kodInwal VARCHAR(7)
	DECLARE @kodWykszt VARCHAR(7)
	DECLARE @kodWyksztGUS VARCHAR(7)
	DECLARE @kodZawodu VARCHAR(7)
	DECLARE @kodZawoduGUS VARCHAR(7)
	DECLARE @statusUmowy CHAR(1)
	DECLARE @wiek SMALLINT
	DECLARE @plec CHAR(1)
	DECLARE @etat VARCHAR(7)
	DECLARE @etatDec DECIMAL(8, 6)
	DECLARE @podstDodat CHAR(1)

	DECLARE @dataZmianySysWynagr DATETIME
	DECLARE @dataZmianyEtat DATETIME

	DECLARE @dataNaliczenia DATETIME
	DECLARE @operator VARCHAR(10)
	DECLARE @sySlow VARCHAR(3)
	DECLARE @sySlowKpSlStPr VARCHAR(3)
	DECLARE @sySlowWyksztGUS VARCHAR(3)
	DECLARE @sySlowZawodGUS VARCHAR(3)

	SET @dataNaliczenia = @0
	SET @operator = @1
	SET @sySlow = 'XKP'
	SET @sySlowKpSlStPr = 'XSS'
	SET @sySlowWyksztGUS = '104'
	SET @sySlowZawodGUS = '103'

	DECLARE c_kupic CURSOR FOR
	SELECT TypUmowy, NrEwid, NrUmowy
	FROM KPKUPiC
	WHERE  (DataZakoncz IS NULL AND DataUmowyDo IS NULL AND DataUmowyOd &lt;= @dataNaliczenia)
	OR (DataZakoncz IS NULL AND @dataNaliczenia BETWEEN DataUmowyOd AND DataUmowyDo)
	OR (DataZakoncz IS NOT NULL AND @dataNaliczenia BETWEEN DataUmowyOd AND DataZakoncz)

	--1. wstaw wiersz do KPStArchD
	INSERT INTO KPStArchD (SySlow, DataStanu, Oper, DataCzas)
	VALUES (@sySlow, @dataNaliczenia, @operator, GETDATE())

	--2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw
	--	 dla nich wiersz do KPStZatrD
	OPEN c_kupic
	FETCH NEXT FROM c_kupic
	INTO @typUmowy, @nrEwid, @nrUmowy;

	WHILE @@FETCH_STATUS = 0
	BEGIN
	--wybierz odpowiednia date zmiany z KPKHP (aby miec pelny klucz rekordu z KPKHP)
	SELECT @dataZmiany = MAX(KHP.DataZmiany)
	FROM	KPKHP KHP
	WHERE	(KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
	AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataNaliczenia
	GROUP BY NrEwid, TypUmowy, NrUmowy

	--wybierz dane do wstawienia
	SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
	@kodUmowy = KPKUPiC.KodUmowy,
	@kodZwoln = ISNULL(KPKHP.KodZwoln, ''),
	@zaklad = ISNULL(KPKHP.Zaklad, ''),
	@komorka = ISNULL(KPKHP.Komorka, ''),
	@stanowPr = ISNULL(KPKHP.StanowPr, ''),
	@rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
	@sysWynagr = ISNULL(ZmSysWyn.SysWynagr, ISNULL(KPKHP.SysWynagr, '')), --sytem wynagradzania wez z typu zmiany P a jezeli nie ma to z umowy lub aneksu
	@miejsceWyplaty = ISNULL(ZmSysWyn.MiejsceWypl, ISNULL(KPKHP.MiejsceWypl, '')), --miejsce wyplaty wez z typu zmiany P a jezeli nie ma to z umowy lub aneksu
	@kodZawiesz = ISNULL(Zawiesz.KodZawiesz, ''), --kod zawieszenia we z typu zmiany C
	@kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
	@kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
	@kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
	@kodZawodu = KPKOP.KodZawoduWykon,
	@kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
	@statusUmowy = CASE WHEN Zawiesz.TypZmiany IS NULL THEN '' ELSE 'C' END, --wypelnij jezeli umowa zawieszona
	@wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL THEN
	CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataNaliczenia), XKOP.DataUrodz) > @dataNaliczenia
	THEN DATEDIFF (year, XKOP.DataUrodz, @dataNaliczenia) - 1
	ELSE DATEDIFF (year, XKOP.DataUrodz, @dataNaliczenia)
	END
	ELSE 0 END,
	@plec = ISNULL(XKOP.Plec, ''),
	@etat = ISNULL(KPKHP.Etat, ''),
	@etatDec = CASE WHEN KPKHP.Etat IS NULL OR KPKHP.Etat = '' OR CAST(RIGHT(KPKHP.Etat, 3) AS DECIMAL (3)) = 0 THEN 0 ELSE CAST(LEFT(KPKHP.Etat, 3) AS DECIMAL(3)) / CAST(RIGHT(KPKHP.Etat, 3) AS DECIMAL (3)) END, --EtatDec (licznik / mianownik z pola Etat)
	@podstDodat = KPKUPiC.PodstDodat
	FROM	KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
	LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
	LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
	LEFT OUTER JOIN KPKHP Zawiesz
		ON	KPKHP.NrEwid = Zawiesz.NrEwid
		AND	KPKHP.TypUmowy = Zawiesz.TypUmowy
		AND	KPKHP.NrUmowy = Zawiesz.NrUmowy
		AND	Zawiesz.DataZmiany = (SELECT	MIN(KhpWew.DataZmiany)
									FROM	KPKHP KhpWew
									WHERE	KhpWew.NrEwid = Zawiesz.NrEwid
										AND	KhpWew.TypUmowy = Zawiesz.TypUmowy
										AND	KhpWew.NrUmowy = Zawiesz.NrUmowy
										AND	KhpWew.TypZmiany = 'C'
										AND @dataNaliczenia BETWEEN KhpWew.DZawieszOd AND COALESCE(KhpWew.DZawieszDo, CONVERT(DATETIME, '9999-12-31', 120)))
	LEFT OUTER JOIN KPKHP ZmSysWyn
		ON	KPKHP.NrEwid = ZmSysWyn.NrEwid
		AND	KPKHP.TypUmowy = ZmSysWyn.TypUmowy
		AND	KPKHP.NrUmowy = ZmSysWyn.NrUmowy
		AND	ZmSysWyn.DataZmiany = (SELECT	MIN(KhpWew.DataZmiany)
									FROM	KPKHP KhpWew
									WHERE	KhpWew.NrEwid = ZmSysWyn.NrEwid
										AND	KhpWew.TypUmowy = ZmSysWyn.TypUmowy
										AND	KhpWew.NrUmowy = ZmSysWyn.NrUmowy
										AND	KhpWew.TypZmiany = 'P'
										AND KhpWew.DataZmiany BETWEEN @dataZmiany AND @dataNaliczenia)									
	LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
	LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
	LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
	LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataNaliczenia AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataNaliczenia)
	WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy


	--wstaw wiersz do KPSTZATRD
	INSERT INTO KPStZatrD (SySlow, DataStanu, TypUmowy, NrEwid, NrUmowy, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanPr, SysWynagr, MiejsceWyplaty, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, EtatDec, PodstDodat, Oper, DataCzas)
	VALUES (@sySlow, @dataNaliczenia, @typUmowy, @nrEwid, @nrUmowy, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWyplaty, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @etatDec, @podstDodat, @operator, GETDATE());


	FETCH NEXT FROM c_kupic
	INTO @typUmowy, @nrEwid, @nrUmowy;
	END

	CLOSE c_kupic
	DEALLOCATE c_kupic

	END
  </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>320</Id>
    <NrLog>3</NrLog>
    <NrTab>30</NrTab>
    <NrProc>143</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>321</Id>
    <NrLog>3</NrLog>
    <NrTab>31</NrTab>
    <NrProc>143</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>322</Id>
    <NrLog>3</NrLog>
    <NrTab>32</NrTab>
    <NrProc>143</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>323</Id>
    <NrLog>3</NrLog>
    <NrTab>33</NrTab>
    <NrProc>143</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>324</Id>
    <NrLog>3</NrLog>
    <NrTab>34</NrTab>
    <NrProc>143</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>325</Id>
    <NrLog>3</NrLog>
    <NrTab>35</NrTab>
    <NrProc>143</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>326</Id>
    <NrLog>3</NrLog>
    <NrTab>36</NrTab>
    <NrProc>143</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>327</Id>
    <NrLog>3</NrLog>
    <NrTab>37</NrTab>
    <NrProc>144</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKRDekretyOkres</NzProc>
    <TextProc>
CREATE FUNCTION FKRDekretyOkres(@okresO int, @okresORdekretu smallint=null, @rok smallint=null, @mies smallint=null, @dowodNr varchar(15)=null, 
                                @nrPozycjiKs smallint=null, @nrDekretu smallint=null, @zStrony varchar(2)=null, @nrPozycjiRozr smallint=null)
RETURNS @wynik TABLE 
(
	OkresO smallint not null, 
	Rok smallint not null, 
	Mies smallint not null, 
	DowodNr varchar(15) not null, 
	NrPozycjiKs smallint not null, 
	NrDekretu smallint not null, 
	ZStrony varchar(2) not null, 
	NrPozycjiRozr smallint not null, 
	OstatnieKonto varchar(30) not null	
) 
AS
BEGIN
	IF (@okresORdekretu IS NULL
		OR @rok IS NULL
		OR @mies IS NULL
		OR @dowodNr IS NULL
		OR @nrPozycjiKs IS NULL
		OR @nrDekretu IS NULL
		OR @zStrony IS NULL
		OR @nrPozycjiRozr IS NULL)

		INSERT INTO @wynik(OkresO, Rok, Mies, DowodNr, NrPozycjiKs, NrDekretu, ZStrony, NrPozycjiRozr, OstatnieKonto)
		SELECT	FKRDekrety.OkresO,
				FKRDekrety.Rok,
				FKRDekrety.Mies,
				FKRDekrety.DowodNr,
				FKRDekrety.NrPozycjiKs,
				FKRDekrety.NrDekretu,
				FKRDekrety.ZStrony,
				FKRDekrety.NrPozycjiRozr,
				CASE WHEN WarstwaRozNast.WarstwaRoz IS NOT NULL AND FKDekretyKonwersja.Konto IS NOT NULL THEN FKDekretyKonwersja.Konto
					ELSE FKRdekrety.OstatnieKonto
				END OstatnieKonto
		FROM	FKRDekrety
		LEFT OUTER JOIN FKOkresyWarstwyRoz WarstwaRozBiez
			ON	WarstwaRozBiez.OkresO = @okresO
		OUTER APPLY 
		( 
			SELECT	TOP(1) WarstwaRoz 
			FROM	FKOkresyWarstwyRoz WarstwaRozNastWew
			WHERE	WarstwaRozNastWew.OkresO &gt; @okresO
				AND	WarstwaRozNastWew.WarstwaRoz &lt;&gt; WarstwaRozBiez.WarstwaRoz
		) WarstwaRozNast
		LEFT OUTER JOIN FKDekretyKonwersja
			ON	FKDekretyKonwersja.WarstwaRoz = WarstwaRozBiez.WarstwaRoz
			AND	FKDekretyKonwersja.OkresO = FKRdekrety.OkresO
			AND FKDekretyKonwersja.Rok = FKRdekrety.Rok
			AND FKDekretyKonwersja.Mies = FKRdekrety.Mies
			AND FKDekretyKonwersja.DowodNr = FKRdekrety.DowodNr
			AND FKDekretyKonwersja.NrPozycjiKs = FKRdekrety.NrPozycjiKs
			AND FKDekretyKonwersja.NrDekretu = FKRdekrety.NrDekretu
			AND FKDekretyKonwersja.ZStrony = FKRdekrety.ZStrony
	ELSE
		INSERT INTO @wynik(OkresO, Rok, Mies, DowodNr, NrPozycjiKs, NrDekretu, ZStrony, NrPozycjiRozr, OstatnieKonto)
		SELECT	FKRDekrety.OkresO,
				FKRDekrety.Rok,
				FKRDekrety.Mies,
				FKRDekrety.DowodNr,
				FKRDekrety.NrPozycjiKs,
				FKRDekrety.NrDekretu,
				FKRDekrety.ZStrony,
				FKRDekrety.NrPozycjiRozr,
				CASE WHEN WarstwaRozNast.WarstwaRoz IS NOT NULL AND FKDekretyKonwersja.Konto IS NOT NULL THEN FKDekretyKonwersja.Konto
					ELSE FKRdekrety.OstatnieKonto
				END OstatnieKonto
		FROM	FKRDekrety
		LEFT OUTER JOIN FKOkresyWarstwyRoz WarstwaRozBiez
			ON	WarstwaRozBiez.OkresO = @okresO
		OUTER APPLY 
		( 
			SELECT	TOP(1) WarstwaRoz 
			FROM	FKOkresyWarstwyRoz WarstwaRozNastWew
			WHERE	WarstwaRozNastWew.OkresO &gt; @okresO
				AND	WarstwaRozNastWew.WarstwaRoz &lt;&gt; WarstwaRozBiez.WarstwaRoz
		) WarstwaRozNast
		LEFT OUTER JOIN FKDekretyKonwersja
			ON	FKDekretyKonwersja.WarstwaRoz = WarstwaRozBiez.WarstwaRoz
			AND	FKDekretyKonwersja.OkresO = FKRdekrety.OkresO
			AND FKDekretyKonwersja.Rok = FKRdekrety.Rok
			AND FKDekretyKonwersja.Mies = FKRdekrety.Mies
			AND FKDekretyKonwersja.DowodNr = FKRdekrety.DowodNr
			AND FKDekretyKonwersja.NrPozycjiKs = FKRdekrety.NrPozycjiKs
			AND FKDekretyKonwersja.NrDekretu = FKRdekrety.NrDekretu
			AND FKDekretyKonwersja.ZStrony = FKRdekrety.ZStrony
		WHERE
			FKRDekrety.OkresO = @okresORdekretu
			AND FKRDekrety.Rok = @rok
			AND FKRDekrety.Mies = @mies
			AND FKRDekrety.DowodNr = @dowodNr
			AND FKRDekrety.NrPozycjiKs = @nrPozycjiRozr
			AND FKRDekrety.NrDekretu = @nrDekretu
			AND FKRDekrety.ZStrony = @zStrony
			AND FKRDekrety.NrPozycjiRozr = @nrPozycjiRozr
  
   RETURN
END
</TextProc>
  </TabProcki>

  <TabProcki>
    <Id>326</Id>
    <NrLog>3</NrLog>
    <NrTab>38</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  
  <TabProcki>
    <Id>327</Id>
    <NrLog>3</NrLog>
    <NrTab>39</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>328</Id>
    <NrLog>3</NrLog>
    <NrTab>40</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  
  <TabProcki>
    <Id>329</Id>
    <NrLog>3</NrLog>
    <NrTab>41</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>330</Id>
    <NrLog>3</NrLog>
    <NrTab>42</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>331</Id>
    <NrLog>3</NrLog>
    <NrTab>43</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>332</Id>
    <NrLog>3</NrLog>
    <NrTab>44</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>333</Id>
    <NrLog>3</NrLog>
    <NrTab>45</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>333</Id>
    <NrLog>3</NrLog>
    <NrTab>46</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>334</Id>
    <NrLog>3</NrLog>
    <NrTab>47</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>335</Id>
    <NrLog>3</NrLog>
    <NrTab>48</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>335</Id>
    <NrLog>3</NrLog>
    <NrTab>49</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>336</Id>
    <NrLog>3</NrLog>
    <NrTab>50</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>337</Id>
    <NrLog>3</NrLog>
    <NrTab>51</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>338</Id>
    <NrLog>3</NrLog>
    <NrTab>52</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>339</Id>
    <NrLog>3</NrLog>
    <NrTab>53</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>339</Id>
    <NrLog>3</NrLog>
    <NrTab>54</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>340</Id>
    <NrLog>3</NrLog>
    <NrTab>55</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>341</Id>
    <NrLog>3</NrLog>
    <NrTab>56</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>342</Id>
    <NrLog>3</NrLog>
    <NrTab>57</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>343</Id>
    <NrLog>3</NrLog>
    <NrTab>58</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>343</Id>
    <NrLog>3</NrLog>
    <NrTab>59</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>343</Id>
    <NrLog>3</NrLog>
    <NrTab>60</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>344</Id>
    <NrLog>3</NrLog>
    <NrTab>61</NrTab>
    <NrProc>144</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>  
    <Id>345</Id>
    <NrLog>3</NrLog>
    <NrTab>62</NrTab>
    <NrProc>145</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>AdresJakoTekst</NzProc>
    <TextProc>
      CREATE FUNCTION AdresJakoTekst (@ulica VARCHAR(50),	@miejscowosc VARCHAR(30),	@poczta VARCHAR(30), @kodPocztowy VARCHAR(15),
		                                  @nrDomu VARCHAR(10), @nrLok VARCHAR(10), @syKraj VARCHAR(2), @naKraj VARCHAR(30), @separator VARCHAR(3))
      RETURNS VARCHAR(190)
      AS
      BEGIN
        RETURN @kodPocztowy + ' ' + 
        (CASE WHEN @poczta IS NULL OR @poczta = '' THEN @miejscowosc ELSE @poczta END) + @separator	+ 
        (CASE WHEN @ulica IS NOT NULL AND @ulica &lt;&gt; '' AND @miejscowosc IS NOT NULL AND @miejscowosc &lt;&gt; '' AND @poczta IS NOT NULL AND @poczta &lt;&gt; '' AND 
                   @miejscowosc &lt;&gt; @poczta THEN @miejscowosc + ', ' ELSE '' END) + 
        (CASE WHEN @ulica IS NOT NULL AND @ulica &lt;&gt; '' THEN @ulica 
              ELSE 
                   (CASE WHEN @miejscowosc IS NOT NULL AND @miejscowosc &lt;&gt; '' THEN @miejscowosc 
                         ELSE 
                             (CASE WHEN @poczta IS NOT NULL AND @poczta &lt;&gt; NULL THEN @poczta ELSE '' END) 
                         END) 
              END) 	+ ' ' + 
        @nrDomu + (CASE WHEN @nrLok IS NOT NULL AND @nrLok &lt;&gt; '' THEN '/' + @nrLok ELSE '' END)	+ 
        (CASE WHEN @syKraj IS NOT NULL AND @syKraj &lt;&gt; '' AND @syKraj &lt;&gt; 'PL' THEN @separator + 
                (CASE WHEN @naKraj IS NOT NULL AND @naKraj &lt;&gt; '' THEN @naKraj ELSE @syKraj END) 
        ELSE '' END)   END
    </TextProc>
  </TabProcki>

  <TabProcki>    ---- dla następnej zmiany struktur
    <Id>346</Id>
    <NrLog>3</NrLog>
    <NrTab>63</NrTab>
    <NrProc>146</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>AdresJakoTekst</NzProc>
    <TextProc>
      CREATE FUNCTION AdresJakoTekst (@ulica VARCHAR(50),	@miejscowosc VARCHAR(30),	@poczta VARCHAR(30), @kodPocztowy VARCHAR(15),
		                                  @nrDomu VARCHAR(10), @nrLok VARCHAR(10), @syKraj VARCHAR(2), @naKraj VARCHAR(30), @separator VARCHAR(3))
      RETURNS VARCHAR(190)
      AS
      BEGIN
        RETURN @kodPocztowy + ' ' + (CASE WHEN @poczta IS NULL OR @poczta = '' THEN COALESCE(@miejscowosc, '') ELSE COALESCE(@poczta, '') END) + @separator +
        (CASE WHEN @ulica IS NOT NULL AND @ulica &lt;&gt; '' AND @miejscowosc IS NOT NULL AND @miejscowosc &lt;&gt; '' AND @poczta IS NOT NULL AND @poczta &lt;&gt; '' AND 
                   @miejscowosc &lt;&gt; @poczta THEN @miejscowosc + ', ' ELSE '' END) + 
        (CASE WHEN @ulica IS NOT NULL AND @ulica &lt;&gt; '' THEN @ulica 
              ELSE 
                   (CASE WHEN @miejscowosc IS NOT NULL AND @miejscowosc &lt;&gt; '' THEN @miejscowosc 
                         ELSE 
                             (CASE WHEN @poczta IS NOT NULL AND @poczta &lt;&gt; NULL THEN @poczta ELSE '' END) 
                         END) 
              END) 	+ ' ' + 
        @nrDomu + (CASE WHEN @nrLok IS NOT NULL AND @nrLok &lt;&gt; '' THEN '/' + @nrLok ELSE '' END)	+ 
        (CASE WHEN @syKraj IS NOT NULL AND @syKraj &lt;&gt; '' AND @syKraj &lt;&gt; 'PL' THEN @separator + 
                (CASE WHEN @naKraj IS NOT NULL AND @naKraj &lt;&gt; '' THEN @naKraj ELSE @syKraj END) 
        ELSE '' END)   END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>347</Id>
    <NrLog>3</NrLog>
    <NrTab>64</NrTab>
    <NrProc>146</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>348</Id>
    <NrLog>3</NrLog>
    <NrTab>65</NrTab>
    <NrProc>146</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>349</Id>
    <NrLog>3</NrLog>
    <NrTab>66</NrTab>
    <NrProc>146</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>350</Id>
    <NrLog>3</NrLog>
    <NrTab>67</NrTab>
    <NrProc>146</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>351</Id>
    <NrLog>3</NrLog>
    <NrTab>68</NrTab>
    <NrProc>146</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>352</Id>
    <NrLog>3</NrLog>
    <NrTab>69</NrTab>
    <NrProc>146</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>353</Id>
    <NrLog>3</NrLog>
    <NrTab>70</NrTab>
    <NrProc>146</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>KPSTAZ_LMD</NzProc>
    <TextProc>
      CREATE FUNCTION KPSTAZ_LMD
      (
      @dataOd DATETIME,
      @dataDo DATETIME
      )
      RETURNS VARCHAR(10)
      AS
      BEGIN
      DECLARE  @koniecMiesiacaDataOd DATETIME SET @koniecMiesiacaDataOd = dbo.KoniecMc(@dataOd)

      SET @dataDo = DATEADD(DAY, 1, @dataDo)

      DECLARE @lata INT SET @lata = DATEPART(YEAR, @dataDo) - DATEPART(YEAR, @dataOd)
      DECLARE @miesiace INT SET @miesiace = DATEPART(MONTH, @dataDo) - DATEPART(MONTH, @dataOd)
      DECLARE @dni INT SET @dni = DATEPART(DAY, @dataDo) - DATEPART(DAY, @dataOd)
      
      IF @lata &lt; 0
      BEGIN
      SET @lata = 0
      SET @miesiace = 0
      SET @dni = 0
      END
      
      IF @lata = 0 AND @miesiace &lt; 0
      BEGIN
      SET @miesiace = 0
      SET @dni = 0
      END
      
      IF @lata = 0 AND @miesiace = 0 AND @dni &lt; 0
      BEGIN
      SET @dni = 0
      END
      

      IF @dni &lt; 0
      BEGIN
      SET @dni = @dni + DATEPART(DAY, @koniecMiesiacaDataOd)
      SET @miesiace = @miesiace - 1
      END
      IF @miesiace &lt; 0
      BEGIN
      SET @miesiace = @miesiace + 12
      SET @lata = @lata - 1
      END

      DECLARE @lataStr VARCHAR(2)
      DECLARE @miesiaceStr VARCHAR(2)
      DECLARE @dniStr VARCHAR(2)
      IF @lata &gt;= 10
      SET @lataStr = CAST(@lata AS VARCHAR(2))
      ELSE
      SET @lataStr = '0' + CAST(@lata AS VARCHAR(1))
      IF @miesiace &gt;= 10
      SET @miesiaceStr = CAST(@miesiace AS VARCHAR(2))
      ELSE
      SET @miesiaceStr = '0' + CAST(@miesiace AS VARCHAR(1))
      IF @dni &gt;= 10
      SET @dniStr = CAST(@dni AS VARCHAR(2))
      ELSE
      SET @dniStr = '0' + CAST(@dni AS VARCHAR(1))

      RETURN @lataStr + ':' + @miesiaceStr + ':' + @dniStr
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>354</Id>
    <NrLog>3</NrLog>
    <NrTab>71</NrTab>
    <NrProc>146</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>355</Id>
    <NrLog>3</NrLog>
    <NrTab>72</NrTab>
    <NrProc>146</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>356</Id>
    <NrLog>3</NrLog>
    <NrTab>73</NrTab>
    <NrProc>147</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>KPGenStanZatrMc</NzProc>
    <TextProc>
CREATE PROCEDURE KPGenStanZatrMc
      @0 int, --lp naliczenia
      @1 int, --rok stanu
      @2 int, --miesiac stanu
      @3 varchar(10) --login operatora
      AS
      BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON
      --zmienne: klucz w tabeli KPKHP
      DECLARE @typUmowy CHAR(1);
      DECLARE @nrEwid INT;
      DECLARE @nrUmowy VARCHAR(10);
      DECLARE @dataZmiany DATETIME;

      --zmienne: składowe rekorku KPStArchS
      DECLARE @statusZatrudn VARCHAR(3)
      DECLARE @kodUmowy VARCHAR(7)
      DECLARE @kodZwoln VARCHAR(7)
      DECLARE @zaklad VARCHAR(7)
      DECLARE @komorka VARCHAR(7)
      DECLARE @stanowPr VARCHAR(7)
      DECLARE @rodzStanPr CHAR(1)
      DECLARE @sysWynagr VARCHAR(7)
      DECLARE @miejsceWypl VARCHAR(7)
      DECLARE @kodZawiesz VARCHAR(7)
      DECLARE @kodInwal VARCHAR(7)
      DECLARE @kodWykszt VARCHAR(7)
      DECLARE @kodWyksztGUS VARCHAR(7)
      DECLARE @kodZawodu VARCHAR(7)
      DECLARE @kodZawoduGUS VARCHAR(7)
      DECLARE @statusUmowy CHAR(1)
      DECLARE @wiek SMALLINT
      DECLARE @plec CHAR(1)
      DECLARE @etat VARCHAR(7)
      DECLARE @dniEtatoPracy DECIMAL(10, 6)
      declare @dniEtatoChoroby decimal(10,6)
      DECLARE @podstDodat CHAR(1)

      --zmienne: sk³adowe rekorku KPStArchS, uzywane gdy jest zmiana umowy
      DECLARE @kodUmowyZmiana VARCHAR(7)
      DECLARE @kodZwolnZmiana VARCHAR(7)
      DECLARE @zakladZmiana VARCHAR(7)
      DECLARE @komorkaZmiana VARCHAR(7)
      DECLARE @stanowPrZmiana VARCHAR(7)
      DECLARE @sysWynagrZmiana VARCHAR(7)
      DECLARE @miejsceWyplZmiana VARCHAR(7)
      DECLARE @kodZawieszZmiana VARCHAR(7)
      DECLARE @etatZmiana VARCHAR(7)

      --zmienne: zmienne pomocnicze, wyznaczaja przedzial poszikiwania zmian umowy
      DECLARE @dataStop DATETIME
      DECLARE @dataNastZmiany DATETIME
      DECLARE @typZmiany CHAR(1)
      DECLARE @typZmianyPoprzedni CHAR(1)
      DECLARE @dZawieszDo DATETIME
      DECLARE @dZawieszDoZmiana DATETIME

      --zmienne: zmienne pomocnicze do sterowania petli
      DECLARE @koniec BIT

      --zmienne: parametry wywolania procedury (tu beda przepisane)
      DECLARE @lpNaliczenia INT
      DECLARE @rokStanu INT
      DECLARE @mcStanu INT
      DECLARE @operator VARCHAR(10)

      --zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
      DECLARE @dataOdStrPom VARCHAR(12)
      DECLARE @dataOd DATETIME
      DECLARE @dataDo DATETIME

      --zmienne: stale
      DECLARE @sySlow VARCHAR(3)
      DECLARE @sySlowKpSlStPr VARCHAR(3)
      DECLARE @sySlowWyksztGUS VARCHAR(3)
      DECLARE @sySlowZawodGUS VARCHAR(3)

      --przypisanie wartosci stalym, oraz przepisanie parametrow procedury
      SET @lpNaliczenia = @0
      SET @rokStanu = @1
      SET @mcStanu = @2
      SET @operator = @3
      SET @sySlow = 'XKP'
      SET @sySlowKpSlStPr = 'XSS'
      SET @sySlowWyksztGUS = '104'
      SET @sySlowZawodGUS = '103'

      --Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
      --dla danego roku stanu i miesiaca stanu
      SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
      SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
      SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

      --kursor po umowach
      DECLARE c_kupic CURSOR FOR
      SELECT TypUmowy, NrEwid, NrUmowy
      FROM KPKUPiC
      WHERE  COALESCE(DataZakoncz, DataUmowyDo, '9999-12-31') &gt;= @dataOd
                  AND DataUmowyOd &lt;= @dataDo

      --1. wstaw wiersz do KPStArchS
      INSERT INTO KPStArchS (SySlow, LpNaliczenia, RokStanu, McStanu, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @rokStanu, @mcStanu, @operator, GETDATE())

      --2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw dla nich wiersze do KPStZatrS
      OPEN c_kupic
      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;

      WHILE @@FETCH_STATUS = 0
      BEGIN
      --2.1. wyzeruj zmienne pomocnicze
      SET @dniEtatoPracy = 0
      set @dniEtatoChoroby = 0
      SET @dataStop = @dataDo
      SET @dataNastZmiany = NULL

      --2.2. znajdz mniejsza z dwoch dat: ostatniej zmiany o typie U lub A przed
      --       @dataOd, oraz ostatniej zmiany o typie U lub A przed @dataDo
      SELECT @dataZmiany = MIN(DataZmiany)
      FROM
      (
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE (KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataOd
      UNION
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE (KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataDo
      ) Daty

      --2.3. Wybierz wszystkie dane pracownika
      SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
      @kodUmowy = KPKHP.KodUmowy,
      @kodZwoln = ISNULL(KPKUPiC.KodZakoncz, ''),
      @zaklad = ISNULL(KPKHP.Zaklad, ''),
      @komorka = ISNULL(KPKHP.Komorka, ''),
      @stanowPr = ISNULL(KPKHP.StanowPr, ''),
      @rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
      @sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWypl = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
      @kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
      @kodZawodu = KPKOP.KodZawoduWykon,
      @kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
      @statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany),
      XKOP.DataUrodz) &gt; @dataZmiany
      THEN DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) END
      ELSE 0 END,
      @plec = ISNULL(XKOP.Plec, ''),
      @etat = ISNULL(KPKHP.Etat, ''),
      @podstDodat = KPKUPiC.PodstDodat,
      @typZmiany = KPKHP.typZmiany,
      --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDo = KPKHP.DZawieszDo --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      FROM KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
      LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
      LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataZmiany AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

      SET @typZmianyPoprzedni = @typZmiany
      --2.4. Dla kazdej zmiany umowy pracownika, wpisz wiersz w KPStArchS
      --     [notatna_techniczna]Tutaj mozna uzyc kursora, ktory bedzie zwracal kolejne
      --       daty zmiany. Zysk: jedno zapytanie zamiast kliku w petli, gdy jest kilka zmian w miesiacu.
      --       strata: jezeli w wiekszosci wypadkow jest jedna umowa w miesiacu, deklaracja i zwalnianie
      --       kursora moze spowolnic dzialanie.[/notatka_techniczna]
      SET @koniec = 0
      WHILE @koniec = 0
      BEGIN
      --2.4.1. Wyznaczenie daty nastepnej zmiany
      SELECT @dataNastZmiany = MIN(DataZmiany)
      FROM (
      SELECT KHP.dataZmiany AS DataZmiany
      FROM   KPKHP KHP
      WHERE  KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy
      UNION  --Zmiana to takze przyznanie stopnia inwalidzkiego
      SELECT KPKOPInwal.DataPrzyznania AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze zakonczenie waznosci stopnia inwalidzkiego
      SELECT KPKOPInwal.DataWaznosci AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze urodziny pracownika
      SELECT DATEADD(YEAR, DATEDIFF(YEAR, XKOP.DataUrodz, @dataOd), XKOP.DataUrodz)
      FROM   XKOP
      WHERE  XKOP.NrEwid = @nrEwid AND SySlow = @sySlow AND
      XKOP.DataUrodz IS NOT NULL AND MONTH(XKOP.DataUrodz) = MONTH(@dataOd)
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION
      SELECT DataZmiany
      FROM   KPKUPiCSlowSO
      WHERE  KPKUPiCSlowSO.NrEwid = @nrEwid AND KPKUPiCSlowSO.TypUmowy = @typUmowy AND KPKUPiCSlowSO.NrUmowy = @nrUmowy
      UNION  --poczatek okresu tez ma wywolac zmiane
      SELECT @dataOd AS DataZmiany
      ) Daty
      WHERE DataZmiany &gt; @dataZmiany AND DataZmiany &lt;= @dataDo

      --2.4.2. Jesli typ zmiany jest C, to nalezy skorygowac dateNastepnejZmiany
      --          aby uwzgledniala date konca okresu zawieszenia
      IF @typZmiany = 'C' AND
      (@dataNastZmiany IS NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt;= @dataDo
      OR
      (@dataNastZmiany IS NOT NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt; @dataNastZmiany))
      SET @dataNastZmiany = DATEADD(DAY, 1, @dZawieszDo)

      --2.4.3. Zmien dateStop, jezeli jest nastepna zmiana
      IF @dataNastZmiany IS NOT NULL
      SET @dataStop = @dataNastZmiany
      ELSE
      SET @dataStop = @dataDo

      --2.4.4. Jezeli rozpatrywana zmiana miesci sie w okresie @dataOd i @dataDo
      IF @dataNastZmiany IS NULL OR @dataZmiany BETWEEN @dataOd AND @dataDo
      BEGIN
      --2.4.4.1. Wylicz dni etato-pracy
      IF @typZmiany = 'Z'
      SET @dniEtatoPracy = 1
      ELSE IF @typZmiany = 'U' OR @typZmiany = 'A' OR @typZmiany = 'P'
      BEGIN
      SET @dniEtatoPracy = DATEDIFF(DAY, @dataZmiany, @dataStop) + (CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END)
      --IF @dataNastZmiany IS NULL
      --SET @dniEtatoPracy = @dniEtatoPracy + 1
      END
      -- tu by³o ELSE IF @typZmiany = 'C'

      -- zmiana HF
      IF @typZmiany = 'C'
      SET @dniEtatoPracy = 0
      ELSE
      BEGIN
      declare @pomDni int
      select @pomDni = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END,
      CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      + 1)   --(CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END))
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      (XSlSkPl.TypSkPl='B' and XSlSkPl.ZawieszaUmowe=0 and KPAbsenc.DniKalend&gt;29 or
      XSlSkPl.ZawieszaUmowe=1)
      select @pomDni = ISNULL(@pomDni,0);
      select @dniEtatoPracy = @dniEtatoPracy - abs(@pomDni)
      END


      -- 1.2.3 nowe HF
      declare @pomDniChor int
      select @pomDniChor = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END,
      CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      --TUTAJ ZMIANY --&gt;&gt;&gt;&gt; TEGO NA TO CO NIZEJ --&gt;&gt;&gt; + 1)  --(CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END))
      + CASE WHEN (@dataNastZmiany IS NULL AND @dataStop = @dataDo) OR (@dataNastZmiany IS NOT NULL AND @dataNastZmiany &gt; KPAbsenc.DataDo) THEN 1 ELSE 0 END)
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and KPAbsenc.PodstDodat = @podstDodat and
      KPAbsenc.Anulowanie=0 and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      left(XSlSkPl.TypSkPl,1)='C' and XSlSkPl.KodZusP&gt;'300' and XSlSkPl.KodZusP&lt;'330'
      select @dniEtatoChoroby = case when 30 &lt; abs(@pomDniChor) then -30 else -1 * abs(@pomDniChor) end

      select @dniEtatoPracy = isnull(@dniEtatoPracy,0);
      select @dniEtatoChoroby = isnull(@dniEtatoChoroby,0);

      --2.4.4.2. Dopisz wiersz do KPStZatrS
      INSERT INTO KPStZatrS (SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanowPr, SysWynagr, MiejsceWypl, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, DniEtatoPrac, PodstDodat, DniEtatoChoroby, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWypl, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @dniEtatoPracy, @podstDodat, @dniEtatoChoroby, @operator, GETDATE())
      END

      --2.4.5. Jezeli jest kolejna zmiana - pobierz dane z tabeli do zmiennych
      --       dla nastepnej zmiany umowy
      --          w przeciwnym wypadku koniec petli
      IF @dataNastZmiany IS NOT NULL
      BEGIN
      SET @dataZmiany = @dataNastZmiany
      --2.4.5.1. Pobranie danych do zmiennych pomocniczych
      SELECT  @kodUmowyZmiana = ISNULL(KPKHP.KodUmowy, ''),
      @kodZwolnZmiana = ISNULL(KPKHP.KodZwoln, ''),
      @zakladZmiana = ISNULL(KPKHP.Zaklad, ''),
      @komorkaZmiana = ISNULL(KPKHP.Komorka, ''),
      @stanowPrZmiana = ISNULL(KPKHP.StanowPr, ''),
      @sysWynagrZmiana = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWyplZmiana = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawieszZmiana = ISNULL(KPKHP.KodZawiesz, ''),
      @typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDoZmiana = KPKHP.DZawieszDo, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany), XKOP.DataUrodz) &gt; @dataZmiany
      THEN
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany)
      END
      ELSE
      0
      END,
      @etatZmiana = ISNULL(KPKHP.Etat, '')
      FROM KPKUPiC
      LEFT OUTER JOIN KPKHP ON KPKUPiC.NrEwid = KPKHP.NrEwid AND
      KPKUPiC.TypUmowy = KPKHP.TypUmowy AND
      KPKUPiC.NrUmowy = KPKHP.NrUmowy AND
      KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND
      XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid
      AND KodInwal.DataPrzyznania = (
      SELECT MAX(DataPrzyznania)
      FROM KPKOPInwal
      WHERE DataPrzyznania &lt;= @dataZmiany AND
      NrEwid = @nrEwid) AND
      (KodInwal.DataWaznosci IS NULL OR
      KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND
      KPKUPiC.NrUmowy = @nrUmowy

      --2.4.5.2. Przepisanie danych ze zmiennych pomocniczych do zmiennych wlasciwych
      -- w zaleznosci od typu zmiany
      IF @typZmiany = 'U'
      BEGIN
      SET @kodUmowy = @kodUmowyZmiana
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      END
      ELSE IF @typZmiany = 'A'
      BEGIN
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'Z'
      BEGIN
      SET @kodZwoln = @kodZwolnZmiana
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'C'
      BEGIN
      SET @kodZawiesz = @kodZawieszZmiana
      SET @dZawieszDo = @dZawieszDoZmiana
      END
      ELSE IF @typZmiany = 'P'
      BEGIN
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany IS NULL --Jezeli aktualna @dataZmiany nie wiaze sie z wpisem w KPKHP
      BEGIN
      --to w zaleznosci od tego czy trwa okres zawieszenia pracownika
      --typ zmiany ustawiany jest albo na 'C' (zawieszony)
      --albo na poprzedni typ zmiany inny od 'C' i 'Z'
      IF @dZawieszDo IS NOT NULL AND @dataZmiany &lt;= @dZawieszDo
      SET @typZmiany = 'C'
      ELSE
      BEGIN
      SET @typZmiany = @typZmianyPoprzedni
      SET @kodZawiesz = ''
      SET @dZawieszDo = NULL
      END
      END
      END
      ELSE
      SET @koniec = 1

      END --petla zmian dla jednej umowy

      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;
      END

      CLOSE c_kupic
      DEALLOCATE c_kupic

      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>357</Id>
    <NrLog>3</NrLog>
    <NrTab>74</NrTab>
    <NrProc>147</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>358</Id>
    <NrLog>3</NrLog>
    <NrTab>75</NrTab>
    <NrProc>147</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>


  <TabProcki>
    <Id>359</Id>
    <NrLog>3</NrLog>
    <NrTab>76</NrTab>
    <NrProc>148</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>KPGenStanZatrMc</NzProc>
    <TextProc>
CREATE PROCEDURE KPGenStanZatrMc
      @0 int, --lp naliczenia
      @1 int, --rok stanu
      @2 int, --miesiac stanu
      @3 varchar(10) --login operatora
      AS
      BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON
      --zmienne: klucz w tabeli KPKHP
      DECLARE @typUmowy CHAR(1);
      DECLARE @nrEwid INT;
      DECLARE @nrUmowy VARCHAR(10);
      DECLARE @dataZmiany DATETIME;

      --zmienne: składowe rekorku KPStArchS
      DECLARE @statusZatrudn VARCHAR(3)
      DECLARE @kodUmowy VARCHAR(7)
      DECLARE @kodZwoln VARCHAR(7)
      DECLARE @zaklad VARCHAR(7)
      DECLARE @komorka VARCHAR(7)
      DECLARE @stanowPr VARCHAR(7)
      DECLARE @rodzStanPr CHAR(1)
      DECLARE @sysWynagr VARCHAR(7)
      DECLARE @miejsceWypl VARCHAR(7)
      DECLARE @kodZawiesz VARCHAR(7)
      DECLARE @kodInwal VARCHAR(7)
      DECLARE @kodWykszt VARCHAR(7)
      DECLARE @kodWyksztGUS VARCHAR(7)
      DECLARE @kodZawodu VARCHAR(7)
      DECLARE @kodZawoduGUS VARCHAR(7)
      DECLARE @statusUmowy CHAR(1)
      DECLARE @wiek SMALLINT
      DECLARE @plec CHAR(1)
      DECLARE @etat VARCHAR(7)
      DECLARE @dniEtatoPracy DECIMAL(10, 6)
      declare @dniEtatoChoroby decimal(10,6)
      DECLARE @podstDodat CHAR(1)

      --zmienne: sk³adowe rekorku KPStArchS, uzywane gdy jest zmiana umowy
      DECLARE @kodUmowyZmiana VARCHAR(7)
      DECLARE @kodZwolnZmiana VARCHAR(7)
      DECLARE @zakladZmiana VARCHAR(7)
      DECLARE @komorkaZmiana VARCHAR(7)
      DECLARE @stanowPrZmiana VARCHAR(7)
      DECLARE @sysWynagrZmiana VARCHAR(7)
      DECLARE @miejsceWyplZmiana VARCHAR(7)
      DECLARE @kodZawieszZmiana VARCHAR(7)
      DECLARE @etatZmiana VARCHAR(7)

      --zmienne: zmienne pomocnicze, wyznaczaja przedzial poszikiwania zmian umowy
      DECLARE @dataStop DATETIME
      DECLARE @dataNastZmiany DATETIME
      DECLARE @typZmiany CHAR(1)
      DECLARE @typZmianyPoprzedni CHAR(1)
      DECLARE @dZawieszDo DATETIME
      DECLARE @dZawieszDoZmiana DATETIME

      --zmienne: zmienne pomocnicze do sterowania petli
      DECLARE @koniec BIT

      --zmienne: parametry wywolania procedury (tu beda przepisane)
      DECLARE @lpNaliczenia INT
      DECLARE @rokStanu INT
      DECLARE @mcStanu INT
      DECLARE @operator VARCHAR(10)

      --zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
      DECLARE @dataOdStrPom VARCHAR(12)
      DECLARE @dataOd DATETIME
      DECLARE @dataDo DATETIME

      --zmienne: stale
      DECLARE @sySlow VARCHAR(3)
      DECLARE @sySlowKpSlStPr VARCHAR(3)
      DECLARE @sySlowWyksztGUS VARCHAR(3)
      DECLARE @sySlowZawodGUS VARCHAR(3)

      --przypisanie wartosci stalym, oraz przepisanie parametrow procedury
      SET @lpNaliczenia = @0
      SET @rokStanu = @1
      SET @mcStanu = @2
      SET @operator = @3
      SET @sySlow = 'XKP'
      SET @sySlowKpSlStPr = 'XSS'
      SET @sySlowWyksztGUS = '104'
      SET @sySlowZawodGUS = '103'

      --Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
      --dla danego roku stanu i miesiaca stanu
      SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
      SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
      SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

      --kursor po umowach
      DECLARE c_kupic CURSOR FOR
      SELECT TypUmowy, NrEwid, NrUmowy
      FROM KPKUPiC
      WHERE  COALESCE(DataZakoncz, DataUmowyDo, CONVERT(DATETIME, '12/31/9999', 101)) &gt;= @dataOd --101 okresla format (mm/dd/yyyy) daty
                  AND DataUmowyOd &lt;= @dataDo
      
      --1. wstaw wiersz do KPStArchS
      INSERT INTO KPStArchS (SySlow, LpNaliczenia, RokStanu, McStanu, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @rokStanu, @mcStanu, @operator, GETDATE())

      --2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw dla nich wiersze do KPStZatrS
      OPEN c_kupic
      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;

      WHILE @@FETCH_STATUS = 0
      BEGIN
      --2.1. wyzeruj zmienne pomocnicze
      SET @dniEtatoPracy = 0
      set @dniEtatoChoroby = 0
      SET @dataStop = @dataDo
      SET @dataNastZmiany = NULL

      --2.2. znajdz mniejsza z dwoch dat: ostatniej zmiany o typie U lub A przed
      --       @dataOd, oraz ostatniej zmiany o typie U lub A przed @dataDo
      SELECT @dataZmiany = MIN(DataZmiany)
      FROM
      (
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE (KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataOd
      UNION
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE (KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataDo
      ) Daty

      --2.3. Wybierz wszystkie dane pracownika
      SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
      @kodUmowy = KPKHP.KodUmowy,
      @kodZwoln = ISNULL(KPKUPiC.KodZakoncz, ''),
      @zaklad = ISNULL(KPKHP.Zaklad, ''),
      @komorka = ISNULL(KPKHP.Komorka, ''),
      @stanowPr = ISNULL(KPKHP.StanowPr, ''),
      @rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
      @sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWypl = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
      @kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
      @kodZawodu = KPKOP.KodZawoduWykon,
      @kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
      @statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany),
      XKOP.DataUrodz) &gt; @dataZmiany
      THEN DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) END
      ELSE 0 END,
      @plec = ISNULL(XKOP.Plec, ''),
      @etat = ISNULL(KPKHP.Etat, ''),
      @podstDodat = KPKUPiC.PodstDodat,
      @typZmiany = KPKHP.typZmiany,
      --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDo = KPKHP.DZawieszDo --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      FROM KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
      LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
      LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataZmiany AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

      SET @typZmianyPoprzedni = @typZmiany
      --2.4. Dla kazdej zmiany umowy pracownika, wpisz wiersz w KPStArchS
      --     [notatna_techniczna]Tutaj mozna uzyc kursora, ktory bedzie zwracal kolejne
      --       daty zmiany. Zysk: jedno zapytanie zamiast kliku w petli, gdy jest kilka zmian w miesiacu.
      --       strata: jezeli w wiekszosci wypadkow jest jedna umowa w miesiacu, deklaracja i zwalnianie
      --       kursora moze spowolnic dzialanie.[/notatka_techniczna]
      SET @koniec = 0
      WHILE @koniec = 0
      BEGIN
      --2.4.1. Wyznaczenie daty nastepnej zmiany
      SELECT @dataNastZmiany = MIN(DataZmiany)
      FROM (
      SELECT KHP.dataZmiany AS DataZmiany
      FROM   KPKHP KHP
      WHERE  KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy
      UNION  --Zmiana to takze przyznanie stopnia inwalidzkiego
      SELECT KPKOPInwal.DataPrzyznania AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze zakonczenie waznosci stopnia inwalidzkiego
      SELECT KPKOPInwal.DataWaznosci AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze urodziny pracownika
      SELECT DATEADD(YEAR, DATEDIFF(YEAR, XKOP.DataUrodz, @dataOd), XKOP.DataUrodz)
      FROM   XKOP
      WHERE  XKOP.NrEwid = @nrEwid AND SySlow = @sySlow AND
      XKOP.DataUrodz IS NOT NULL AND MONTH(XKOP.DataUrodz) = MONTH(@dataOd)
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION
      SELECT DataZmiany
      FROM   KPKUPiCSlowSO
      WHERE  KPKUPiCSlowSO.NrEwid = @nrEwid AND KPKUPiCSlowSO.TypUmowy = @typUmowy AND KPKUPiCSlowSO.NrUmowy = @nrUmowy
      UNION  --poczatek okresu tez ma wywolac zmiane
      SELECT @dataOd AS DataZmiany
      ) Daty
      WHERE DataZmiany &gt; @dataZmiany AND DataZmiany &lt;= @dataDo

      --2.4.2. Jesli typ zmiany jest C, to nalezy skorygowac dateNastepnejZmiany
      --          aby uwzgledniala date konca okresu zawieszenia
      IF @typZmiany = 'C' AND
      (@dataNastZmiany IS NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt;= @dataDo
      OR
      (@dataNastZmiany IS NOT NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt; @dataNastZmiany))
      SET @dataNastZmiany = DATEADD(DAY, 1, @dZawieszDo)

      --2.4.3. Zmien dateStop, jezeli jest nastepna zmiana
      IF @dataNastZmiany IS NOT NULL
      SET @dataStop = @dataNastZmiany
      ELSE
      SET @dataStop = @dataDo

      --2.4.4. Jezeli rozpatrywana zmiana miesci sie w okresie @dataOd i @dataDo
      IF @dataNastZmiany IS NULL OR @dataZmiany BETWEEN @dataOd AND @dataDo
      BEGIN
      --2.4.4.1. Wylicz dni etato-pracy
      IF @typZmiany = 'Z'
      SET @dniEtatoPracy = 1
      ELSE IF @typZmiany = 'U' OR @typZmiany = 'A' OR @typZmiany = 'P'
      BEGIN
      SET @dniEtatoPracy = DATEDIFF(DAY, @dataZmiany, @dataStop) + (CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END)
      --IF @dataNastZmiany IS NULL
      --SET @dniEtatoPracy = @dniEtatoPracy + 1
      END
      -- tu by³o ELSE IF @typZmiany = 'C'

      -- zmiana HF
      IF @typZmiany = 'C'
      SET @dniEtatoPracy = 0
      ELSE
      BEGIN
      declare @pomDni int
      select @pomDni = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END,
      CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      + 1)   --(CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END))
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      (XSlSkPl.TypSkPl='B' and XSlSkPl.ZawieszaUmowe=0 and KPAbsenc.DniKalend&gt;29 or
      XSlSkPl.ZawieszaUmowe=1)
      select @pomDni = ISNULL(@pomDni,0);
      select @dniEtatoPracy = @dniEtatoPracy - abs(@pomDni)
      END


      -- 1.2.3 nowe HF
      declare @pomDniChor int
      select @pomDniChor = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END,
      CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      --TUTAJ ZMIANY --&gt;&gt;&gt;&gt; TEGO NA TO CO NIZEJ --&gt;&gt;&gt; + 1)  --(CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END))
      + CASE WHEN (@dataNastZmiany IS NULL AND @dataStop = @dataDo) OR (@dataNastZmiany IS NOT NULL AND @dataNastZmiany &gt; KPAbsenc.DataDo) THEN 1 ELSE 0 END)
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and KPAbsenc.PodstDodat = @podstDodat and
      KPAbsenc.Anulowanie=0 and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      left(XSlSkPl.TypSkPl,1)='C' and XSlSkPl.KodZusP&gt;'300' and XSlSkPl.KodZusP&lt;'330'
      select @dniEtatoChoroby = case when 30 &lt; abs(@pomDniChor) then -30 else -1 * abs(@pomDniChor) end

      select @dniEtatoPracy = isnull(@dniEtatoPracy,0);
      select @dniEtatoChoroby = isnull(@dniEtatoChoroby,0);

      --2.4.4.2. Dopisz wiersz do KPStZatrS
      INSERT INTO KPStZatrS (SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanowPr, SysWynagr, MiejsceWypl, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, DniEtatoPrac, PodstDodat, DniEtatoChoroby, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWypl, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @dniEtatoPracy, @podstDodat, @dniEtatoChoroby, @operator, GETDATE())
      END

      --2.4.5. Jezeli jest kolejna zmiana - pobierz dane z tabeli do zmiennych
      --       dla nastepnej zmiany umowy
      --          w przeciwnym wypadku koniec petli
      IF @dataNastZmiany IS NOT NULL
      BEGIN
      SET @dataZmiany = @dataNastZmiany
      --2.4.5.1. Pobranie danych do zmiennych pomocniczych
      SELECT  @kodUmowyZmiana = ISNULL(KPKHP.KodUmowy, ''),
      @kodZwolnZmiana = ISNULL(KPKHP.KodZwoln, ''),
      @zakladZmiana = ISNULL(KPKHP.Zaklad, ''),
      @komorkaZmiana = ISNULL(KPKHP.Komorka, ''),
      @stanowPrZmiana = ISNULL(KPKHP.StanowPr, ''),
      @sysWynagrZmiana = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWyplZmiana = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawieszZmiana = ISNULL(KPKHP.KodZawiesz, ''),
      @typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDoZmiana = KPKHP.DZawieszDo, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany), XKOP.DataUrodz) &gt; @dataZmiany
      THEN
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany)
      END
      ELSE
      0
      END,
      @etatZmiana = ISNULL(KPKHP.Etat, '')
      FROM KPKUPiC
      LEFT OUTER JOIN KPKHP ON KPKUPiC.NrEwid = KPKHP.NrEwid AND
      KPKUPiC.TypUmowy = KPKHP.TypUmowy AND
      KPKUPiC.NrUmowy = KPKHP.NrUmowy AND
      KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND
      XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid
      AND KodInwal.DataPrzyznania = (
      SELECT MAX(DataPrzyznania)
      FROM KPKOPInwal
      WHERE DataPrzyznania &lt;= @dataZmiany AND
      NrEwid = @nrEwid) AND
      (KodInwal.DataWaznosci IS NULL OR
      KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND
      KPKUPiC.NrUmowy = @nrUmowy

      --2.4.5.2. Przepisanie danych ze zmiennych pomocniczych do zmiennych wlasciwych
      -- w zaleznosci od typu zmiany
      IF @typZmiany = 'U'
      BEGIN
      SET @kodUmowy = @kodUmowyZmiana
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      END
      ELSE IF @typZmiany = 'A'
      BEGIN
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'Z'
      BEGIN
      SET @kodZwoln = @kodZwolnZmiana
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'C'
      BEGIN
      SET @kodZawiesz = @kodZawieszZmiana
      SET @dZawieszDo = @dZawieszDoZmiana
      END
      ELSE IF @typZmiany = 'P'
      BEGIN
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany IS NULL --Jezeli aktualna @dataZmiany nie wiaze sie z wpisem w KPKHP
      BEGIN
      --to w zaleznosci od tego czy trwa okres zawieszenia pracownika
      --typ zmiany ustawiany jest albo na 'C' (zawieszony)
      --albo na poprzedni typ zmiany inny od 'C' i 'Z'
      IF @dZawieszDo IS NOT NULL AND @dataZmiany &lt;= @dZawieszDo
      SET @typZmiany = 'C'
      ELSE
      BEGIN
      SET @typZmiany = @typZmianyPoprzedni
      SET @kodZawiesz = ''
      SET @dZawieszDo = NULL
      END
      END
      END
      ELSE
      SET @koniec = 1

      END --petla zmian dla jednej umowy

      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;
      END

      CLOSE c_kupic
      DEALLOCATE c_kupic

      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>360</Id>
    <NrLog>3</NrLog>
    <NrTab>77</NrTab>
    <NrProc>148</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>361</Id>
    <NrLog>3</NrLog>
    <NrTab>78</NrTab>
    <NrProc>148</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>362</Id>
    <NrLog>3</NrLog>
    <NrTab>79</NrTab>
    <NrProc>148</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>363</Id>
    <NrLog>3</NrLog>
    <NrTab>80</NrTab>
    <NrProc>148</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>364</Id>
    <NrLog>3</NrLog>
    <NrTab>81</NrTab>
    <NrProc>148</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>364</Id>
    <NrLog>3</NrLog>
    <NrTab>82</NrTab>
    <NrProc>148</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>365</Id>
    <NrLog>3</NrLog>
    <NrTab>83</NrTab>
    <NrProc>148</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>366</Id>
    <NrLog>3</NrLog>
    <NrTab>84</NrTab>
    <NrProc>148</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>367</Id>
    <NrLog>3</NrLog>
    <NrTab>85</NrTab>
    <NrProc>148</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>368</Id>
    <NrLog>3</NrLog>
    <NrTab>86</NrTab>
    <NrProc>148</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>369</Id>
    <NrLog>3</NrLog>
    <NrTab>87</NrTab>
    <NrProc>148</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>370</Id>
    <NrLog>3</NrLog>
    <NrTab>88</NrTab>
    <NrProc>148</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>371</Id>
    <NrLog>3</NrLog>
    <NrTab>89</NrTab>
    <NrProc>149</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplacono</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplacono(@NrDec Varchar(22)) RETURNS Decimal(10,2)
      BEGIN
      DECLARE @ret decimal(10,2)
             select @ret=
                   COALESCE(case d.WskOdsetki
                          WHEN 1 
                                 THEN (select sum(ws.Naleznosc) from MDTWplatySzczegoly ws where ws.NrDec=d.nrdec)
                          WHEN 0 
                                 THEN (select sum(kwota)+sum(oplataKomornicza)+sum(prowizjaBankowa) from MDTWplaty w where w.NrDec=d.NrDec) END , 0)
             FROM MDTDecyzje d WHERE d.NrDec=@NrDec
             RETURN @ret
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>371</Id>
    <NrLog>3</NrLog>
    <NrTab>89</NrTab>
    <NrProc>150</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwota</NzProc>
    <TextProc>
      CREATE FUNCTION dbo.MDTDecAktualnaKwota(@NrDec Varchar(22)) RETURNS Decimal(10,2)
      BEGIN
      DECLARE @ret decimal(10,2)
             SELECT @ret=
             SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                   WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                   WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.DataGITD IS NOT NULL) THEN d.KwotaGITD
                   WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                   WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                   WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                   WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                   WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                   WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                   WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
             FROM MDTDecyzje d WHERE d.NrDec=@NrDec
             RETURN @ret
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>372</Id>
    <NrLog>3</NrLog>
    <NrTab>90</NrTab>
    <NrProc>151</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplacono</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplacono(@NrDec Varchar(22)) RETURNS Decimal(10,2)
      BEGIN
      DECLARE @ret decimal(10,2)
             select @ret=
                   COALESCE(case d.WskOdsetki
                          WHEN 1 
                                 THEN COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegoly ws where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3')), 0)+COALESCE((select sum(kwota)+sum(oplataKomornicza)+sum(prowizjaBankowa) from MDTWplaty w1 where w1.NrDec=d.NrDec and (select count(*) from MDTWplatySzczegoly ws where ws.NrDec=d.nrdec and ws.NrWplaty=w1.NrKol)=0),0)
                          WHEN 0 
                                 THEN (select sum(kwota)+sum(oplataKomornicza)+sum(prowizjaBankowa) from MDTWplaty w where w.NrDec=d.NrDec) END , 0)
             FROM MDTDecyzje d WHERE d.NrDec=@NrDec
             RETURN @ret
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>373</Id>
    <NrLog>3</NrLog>
    <NrTab>91</NrTab>
    <NrProc>151</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>374</Id>
    <NrLog>3</NrLog>
    <NrTab>92</NrTab>
    <NrProc>151</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>375</Id>
    <NrLog>3</NrLog>
    <NrTab>93</NrTab>
    <NrProc>152</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplacono</NzProc>
    <TextProc>
      CREATE FUNCTION [dbo].[MDTDecZaplacono](@NrDec Varchar(22)) RETURNS Decimal(10,2)
      BEGIN
      DECLARE @ret decimal(10,2)
             select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegoly ws where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3')), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplaty w1 where w1.NrDec=d.NrDec), 0)
             FROM MDTDecyzje d WHERE d.NrDec=@NrDec
             RETURN @ret
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>378</Id>
    <NrLog>3</NrLog>
    <NrTab>94</NrTab>
    <NrProc>152</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>379</Id>
    <NrLog>3</NrLog>
    <NrTab>95</NrTab>
    <NrProc>152</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>380</Id>
    <NrLog>3</NrLog>
    <NrTab>96</NrTab>
    <NrProc>152</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>381</Id>
    <NrLog>3</NrLog>
    <NrTab>97</NrTab>
    <NrProc>152</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>


  <TabProcki>
    <Id>382</Id>
    <NrLog>3</NrLog>
    <NrTab>98</NrTab>
    <NrProc>153</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwota</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwota(@NrDec Varchar(22)) RETURNS Decimal(10,2)
      BEGIN
      DECLARE @ret decimal(10,2)
             SELECT @ret=
             SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                   WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                   WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                   WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                   WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                   WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                   WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                   WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                   WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                   WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
             FROM MDTDecyzje d WHERE d.NrDec=@NrDec
             RETURN @ret
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>383</Id>
    <NrLog>3</NrLog>
    <NrTab>99</NrTab>
    <NrProc>153</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>384</Id>
    <NrLog>4</NrLog>
    <NrTab>01</NrTab>
    <NrProc>153</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>385</Id>
    <NrLog>4</NrLog>
    <NrTab>02</NrTab>
    <NrProc>154</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplacono</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplacono(@NrDec Varchar(128)) RETURNS Decimal(10,2)
      BEGIN
      DECLARE @ret decimal(10,2)
             select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegoly ws where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3')), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplaty w1 where w1.NrDec=d.NrDec), 0)
             FROM MDTDecyzje d WHERE d.NrDec=@NrDec
             RETURN @ret
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>386</Id>
    <NrLog>4</NrLog>
    <NrTab>02</NrTab>
    <NrProc>155</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwota</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwota(@NrDec Varchar(128)) RETURNS Decimal(10,2)
      BEGIN
      DECLARE @ret decimal(10,2)
             SELECT @ret=
             SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                   WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                   WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                   WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                   WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                   WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                   WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                   WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                   WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                   WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
             FROM MDTDecyzje d WHERE d.NrDec=@NrDec
             RETURN @ret
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>387</Id>
    <NrLog>4</NrLog>
    <NrTab>03</NrTab>
    <NrProc>156</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoNaDzien</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoNaDzien(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegoly ws, MDTWplaty wp where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3') and wp.NrDec=ws.NrDec and wp.NrKol=ws.NrWplaty and wp.Data&lt;=@NaDzien), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplaty w1 where w1.NrDec=d.NrDec and w1.Data&lt;=@NaDzien), 0)
                   FROM MDTDecyzje d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>388</Id>
    <NrLog>4</NrLog>
    <NrTab>03</NrTab>
    <NrProc>157</NrProc>
    <ProcFun>FUNCTION</ProcFun> 
    <NzProc>MDTDecAktualnaKwotaNaDzien</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwotaNaDzien(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   SELECT @ret=
                   SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                   FROM MDTDecyzje d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>389</Id>
    <NrLog>4</NrLog>
    <NrTab>04</NrTab>
    <NrProc>157</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>390</Id>
    <NrLog>4</NrLog>
    <NrTab>05</NrTab>
    <NrProc>157</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>391</Id>
    <NrLog>4</NrLog>
    <NrTab>06</NrTab>
    <NrProc>157</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>392</Id>
    <NrLog>4</NrLog>
    <NrTab>07</NrTab>
    <NrProc>157</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>393</Id>
    <NrLog>4</NrLog>
    <NrTab>08</NrTab>
    <NrProc>158</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>TRIGGER_XIDokDoD_SetDatyNull</NzProc>
    <TextProc>
      CREATE TRIGGER TRIGGER_XIDokDoD_SetDatyNull ON XIDokDod
      AFTER INSERT, UPDATE
      AS  
      IF (@@ROWCOUNT  = 0)
	      RETURN;

      UPDATE	D
      SET
	      DataSprzedazyWplywu = CASE WHEN D.DataSprzedazyWplywu &lt;= CONVERT(DATETIME, '1900-01-01', 120) THEN NULL ELSE D.DataSprzedazyWplywu END,
	      TerminZaplaty = CASE WHEN D.TerminZaplaty &lt;= CONVERT(DATETIME, '1900-01-01', 120) THEN NULL ELSE D.TerminZaplaty END,
	      DataKursu = CASE WHEN D.DataKursu &lt;= CONVERT(DATETIME, '1900-01-01', 120) THEN NULL ELSE D.DataKursu END,
	      DataPrzekroczGranicy = CASE WHEN D.DataPrzekroczGranicy &lt;= CONVERT(DATETIME, '1900-01-01', 120) THEN NULL ELSE D.DataPrzekroczGranicy END,
	      DataWplywu = CASE WHEN D.DataWplywu &lt;= CONVERT(DATETIME, '1900-01-01', 120) THEN NULL ELSE D.DataWplywu END,
	      DataKsiegowa = CASE WHEN D.DataKsiegowa &lt;= CONVERT(DATETIME, '1900-01-01', 120) THEN NULL ELSE D.DataKsiegowa END,
	      DataObVATNalezny = CASE WHEN D.DataObVATNalezny &lt;= CONVERT(DATETIME, '1900-01-01', 120) THEN NULL ELSE D.DataObVATNalezny END,
	      DataObVATNaliczony = CASE WHEN D.DataObVATNaliczony &lt;= CONVERT(DATETIME, '1900-01-01', 120) THEN NULL ELSE D.DataObVATNaliczony END
      FROM	XIDokDoD D
      INNER JOIN INSERTED I
	      ON	D.Rok = I.Rok
	      AND	D.RodzajDokumentow = I.RodzajDokumentow
	      AND D.NrSystemu = I.NrSystemu
	      AND D.CzyZaksFK = I.CzyZaksFK
	      AND D.Info1 = I.Info1
	      AND D.Info2 = I.Info2
	      AND D.Info3 = I.Info3
      WHERE	I.DataSprzedazyWplywu &lt;= CONVERT(DATETIME, '1900-01-01', 120)
	      OR	I.TerminZaplaty &lt;= CONVERT(DATETIME, '1900-01-01', 120)
	      OR	I.DataKursu &lt;= CONVERT(DATETIME, '1900-01-01', 120)
	      OR	I.DataPrzekroczGranicy &lt;= CONVERT(DATETIME, '1900-01-01', 120)
	      OR	I.DataWplywu &lt;= CONVERT(DATETIME, '1900-01-01', 120)
	      OR	I.DataKsiegowa &lt;= CONVERT(DATETIME, '1900-01-01', 120)
	      OR	I.DataObVATNalezny &lt;= CONVERT(DATETIME, '1900-01-01', 120)
	      OR	I.DataObVATNaliczony &lt;= CONVERT(DATETIME, '1900-01-01', 120)
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>394</Id>
    <NrLog>4</NrLog>
    <NrTab>08</NrTab>
    <NrProc>159</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>TRIGGER_XIPozDoD_SetDatyNull</NzProc>
    <TextProc>
      CREATE TRIGGER TRIGGER_XIPozDoD_SetDatyNull ON XIPozDod
      AFTER INSERT, UPDATE
      AS  
      IF (@@ROWCOUNT  = 0)
	      RETURN;

      UPDATE	D
      SET
	      DataDostawy = CASE WHEN D.DataDostawy &lt;= CONVERT(DATETIME, '1900-01-01', 120) THEN NULL ELSE D.DataDostawy END,
	      DataKursu = CASE WHEN D.DataKursu &lt;= CONVERT(DATETIME, '1900-01-01', 120) THEN NULL ELSE D.DataKursu END,
	      DataObVATNalezny = CASE WHEN D.DataObVATNalezny &lt;= CONVERT(DATETIME, '1900-01-01', 120) THEN NULL ELSE D.DataObVATNalezny END,
	      DataObVATNaliczony = CASE WHEN D.DataObVATNaliczony &lt;= CONVERT(DATETIME, '1900-01-01', 120) THEN NULL ELSE D.DataObVATNaliczony END
      FROM	XIPozDoD D
      INNER JOIN INSERTED I
	      ON	D.Rok = I.Rok
	      AND	D.RodzajDokumentow = I.RodzajDokumentow
	      AND D.NrSystemu = I.NrSystemu
	      AND D.CzyZaksFK = I.CzyZaksFK
	      AND D.Info1 = I.Info1
	      AND D.Info2 = I.Info2
	      AND D.Info3 = I.Info3
	      AND D.NrDokumentu = I.NrDokumentu
	      AND D.Indeks = I.Indeks
	      AND D.LpPozDok = I.LpPozDok
      WHERE	I.DataDostawy &lt;= CONVERT(DATETIME, '1900-01-01', 120)
	      OR	I.DataKursu &lt;= CONVERT(DATETIME, '1900-01-01', 120)
	      OR	I.DataObVATNalezny &lt;= CONVERT(DATETIME, '1900-01-01', 120)
	      OR	I.DataObVATNaliczony &lt;= CONVERT(DATETIME, '1900-01-01', 120)
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>395</Id>
    <NrLog>4</NrLog>
    <NrTab>09</NrTab>
    <NrProc>160</NrProc>
    <ProcFun>VIEW</ProcFun>
    <NzProc>GetMDTDluznicyW</NzProc>
    <TextProc>
      CREATE VIEW GetMDTDluznicyW
      AS
      SELECT Symbol, NIP, NzSkr, RodzPlat, NrUS, NrMiasta, Nz1, Nz2, Nz3, Ulica, NrDomu, NrLokalu, Kod, Poczta, Regon, Oper, DataCzas
      FROM
      (SELECT 
             d.*, 'd' tabela
      FROM MDTDluznicy d
      UNION
      SELECT
             dw.*, 'dw' tabela
      FROM MDTDluznicyW dw) t
      WHERE t.tabela = (CASE (SELECT TekstParam FROM MDTParGlob WHERE SyParam='80WspDluz') WHEN 'True' THEN 'd' ELSE 'dw' END)
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>396</Id>
    <NrLog>4</NrLog>
    <NrTab>10</NrTab>
    <NrProc>161</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwotaNaDzienW</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwotaNaDzienW(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
          BEGIN
          DECLARE @ret decimal(10,2)
                 SELECT @ret=
                 SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                       WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                       WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                       WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                       WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                       WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                       WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                       WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                       WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                       WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                 FROM MDTDecyzjeW d WHERE d.NrDec=@NrDec
                 RETURN @ret
          END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>397</Id>
    <NrLog>4</NrLog>
    <NrTab>10</NrTab>
    <NrProc>162</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwotaW</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwotaW(@NrDec Varchar(128)) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   SELECT @ret=
                   SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                   FROM MDTDecyzjeW d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>398</Id>
    <NrLog>4</NrLog>
    <NrTab>10</NrTab>
    <NrProc>163</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoNaDzienW</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoNaDzienW(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegolyW ws, MDTWplatyW wp where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3') and wp.NrDec=ws.NrDec and wp.NrKol=ws.NrWplaty and wp.Data&lt;=@NaDzien), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplatyW w1 where w1.NrDec=d.NrDec and w1.Data&lt;=@NaDzien), 0)
                   FROM MDTDecyzjeW d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>399</Id>
    <NrLog>4</NrLog>
    <NrTab>10</NrTab>
    <NrProc>164</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoW</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoW(@NrDec Varchar(128)) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                  select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegolyW ws where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3')), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplatyW w1 where w1.NrDec=d.NrDec), 0)
                   FROM MDTDecyzjeW d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>
 
  <TabProcki>
    <Id>400</Id>
    <NrLog>4</NrLog>
    <NrTab>11</NrTab>
    <NrProc>164</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

    <TabProcki>
    <Id>401</Id>
    <NrLog>4</NrLog>
    <NrTab>12</NrTab>
    <NrProc>165</NrProc>
    <ProcFun>VIEW</ProcFun>
    <NzProc>GetMDTDluznicyWITD</NzProc>
    <TextProc>
      CREATE VIEW GetMDTDluznicyWITD
      AS
      SELECT Symbol, NIP, NzSkr, RodzPlat, NrUS, NrMiasta, Nz1, Nz2, Nz3, Ulica, NrDomu, NrLokalu, Kod, Poczta, Regon, Oper, DataCzas
      FROM
      (SELECT 
             d.SyKth Symbol, 
                d.NIP, 
                d.NaSkrKth NzSkr, 
                CASE(d.SyKraj) WHEN 'PL' THEN x.OsobaPrawna ELSE '-' END RodzPlat,
                NULL NrUS,
                d.IdMiejscowosc NrMiasta,
                d.NaKTH1 Nz1,
                d.NaKTH2 Nz2,
                d.NaKTH3 Nz3, 
                d.Ulica,
                d.NrDomu,
                d.NrLokalu,
                d.KodPoczt Kod,
                CASE(d.SyKraj) WHEN 'PL' THEN mp.NMiasta ELSE 'ZAGRANICA' END Poczta,
                d.Regon,
                d.Oper,
                d.DataCzas,
                'd' tabela
      FROM XSlKth d LEFT OUTER JOIN XFormyPrawne x ON d.SyFormyPraw=x.SyFormyPraw LEFT OUTER JOIN XSlMiast mp ON d.IdPocztaMiejsc=mp.NrMiasta
      UNION
      SELECT
             dw.Symbol, dw.NIP, dw.NzSkr, dw.RodzPlat, dw.NrUS, dw.NrMiasta, dw.Nz1, dw.Nz2, dw.Nz3, dw.Ulica, dw.NrDomu, dw.NrLokalu, dw.Kod, dw.Poczta, dw.Regon, dw.Oper, dw.DataCzas, 'dw' tabela
      FROM MDTDluznicyWITD dw) t
      WHERE t.tabela = (CASE (SELECT TekstParam FROM MDTParGlob WHERE SyParam='100ProgFK_') WHEN 'INFRA' THEN 'd' ELSE 'dw' END)
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>402</Id>
    <NrLog>4</NrLog>
    <NrTab>12</NrTab>
    <NrProc>166</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwotaNaDzienWITD</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwotaNaDzienWITD(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   SELECT @ret=
                   SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND (d.KwotaGITD IS NULL OR d.DataRozstGITD>@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                   FROM MDTDecyzje d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>403</Id>
    <NrLog>4</NrLog>
    <NrTab>12</NrTab>
    <NrProc>167</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwotaWITD</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwotaWITD(@NrDec Varchar(128)) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   SELECT @ret=
                   SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                   FROM MDTDecyzje d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>404</Id>
    <NrLog>4</NrLog>
    <NrTab>12</NrTab>
    <NrProc>168</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoNaDzienWITD</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoNaDzienWITD(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegoly ws, MDTWplaty wp where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3') and wp.NrDec=ws.NrDec and wp.NrKol=ws.NrWplaty and wp.Data&lt;=@NaDzien), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplaty w1 where w1.NrDec=d.NrDec and w1.Data&lt;=@NaDzien), 0)
                   FROM MDTDecyzje d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END  
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>405</Id>
    <NrLog>4</NrLog>
    <NrTab>12</NrTab>
    <NrProc>169</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoWITD</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoWITD(@NrDec Varchar(128)) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegoly ws where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3')), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplaty w1 where w1.NrDec=d.NrDec), 0)
                   FROM MDTDecyzje d WHERE d.NrDec=@NrDec
                   RETURN @ret
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>406</Id>
    <NrLog>4</NrLog>
    <NrTab>13</NrTab>
    <NrProc>170</NrProc>
    <ProcFun>VIEW</ProcFun>
    <NzProc>GetMDTDluznicyWITD</NzProc>
    <TextProc>
      CREATE VIEW GetMDTDluznicyWITD
      AS
      SELECT Symbol, NIP, NzSkr, RodzPlat, NrUS, NrMiasta, Nz1, Nz2, Nz3, Ulica, NrDomu, NrLokalu, Kod, Poczta, Regon, Oper, DataCzas
      FROM
      (SELECT 
             d.SyKth Symbol, 
                d.NIP, 
                d.NaSkrKth NzSkr, 
                CASE(d.SyKraj) WHEN 'PL' THEN CONVERT(VARCHAR, x.OsobaPrawna) ELSE '-' END RodzPlat,
                NULL NrUS,
                d.IdMiejscowosc NrMiasta,
                d.NaKTH1 Nz1,
                d.NaKTH2 Nz2,
                d.NaKTH3 Nz3, 
                d.Ulica,
                d.NrDomu,
                d.NrLokalu,
                d.KodPoczt Kod,
                CASE(d.SyKraj) WHEN 'PL' THEN mp.NMiasta ELSE 'ZAGRANICA' END Poczta,
                d.Regon,
                d.Oper,
                d.DataCzas,
                'd' tabela
      FROM XSlKth d LEFT OUTER JOIN XFormyPrawne x ON d.SyFormyPraw=x.SyFormyPraw LEFT OUTER JOIN XSlMiast mp ON d.IdPocztaMiejsc=mp.NrMiasta
      UNION
      SELECT
             dw.Symbol, dw.NIP, dw.NzSkr, dw.RodzPlat, dw.NrUS, dw.NrMiasta, dw.Nz1, dw.Nz2, dw.Nz3, dw.Ulica, dw.NrDomu, dw.NrLokalu, dw.Kod, dw.Poczta, dw.Regon, dw.Oper, dw.DataCzas, 'dw' tabela
      FROM MDTDluznicyWITD dw) t
      WHERE t.tabela = (CASE (SELECT TekstParam FROM MDTParGlob WHERE SyParam='100ProgFK_') WHEN 'INFRA' THEN 'd' ELSE 'dw' END)
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>407</Id>
    <NrLog>4</NrLog>
    <NrTab>14</NrTab>
    <NrProc>171</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwotaWITD</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwotaWITD(@NrDec Varchar(128)) RETURNS Decimal(10,2)
                  BEGIN
                  DECLARE @ret decimal(10,2)
                         SELECT @ret=
                         SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                               WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                               WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                               WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                               WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                               WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                               WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                               WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                               WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                               WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                         FROM MDTDecyzjeWITD d WHERE d.NrDec=@NrDec
                         RETURN @ret
                  END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>408</Id>
    <NrLog>4</NrLog>
    <NrTab>14</NrTab>
    <NrProc>172</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwotaNaDzienWITD</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwotaNaDzienWITD(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   SELECT @ret=
                   SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND (d.KwotaGITD IS NULL OR d.DataRozstGITD>@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                   FROM MDTDecyzjeWITD d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>409</Id>
    <NrLog>4</NrLog>
    <NrTab>14</NrTab>
    <NrProc>173</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoNaDzienWITD</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoNaDzienWITD(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegoly ws, MDTWplaty wp where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3') and wp.NrDec=ws.NrDec and wp.NrKol=ws.NrWplaty and wp.Data&lt;=@NaDzien), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplaty w1 where w1.NrDec=d.NrDec and w1.Data&lt;=@NaDzien), 0)
                   FROM MDTDecyzjeWITD d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>410</Id>
    <NrLog>4</NrLog>
    <NrTab>14</NrTab>
    <NrProc>174</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoWITD</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoWITD(@NrDec Varchar(128)) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegoly ws where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3')), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplaty w1 where w1.NrDec=d.NrDec), 0)
                   FROM MDTDecyzjeWITD d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

    <TabProcki>
    <Id>411</Id>
    <NrLog>4</NrLog>
    <NrTab>15</NrTab>
    <NrProc>175</NrProc>
    <ProcFun>VIEW</ProcFun>
    <NzProc>GetMDTDluznicyW</NzProc>
    <TextProc>
      CREATE VIEW GetMDTDluznicyW
      AS
      SELECT Symbol, NIP, NzSkr, RodzPlat, NrUS, NrMiasta, Nz1, Nz2, Nz3, Ulica, NrDomu, NrLokalu, Kod, Poczta, Regon, Oper, DataCzas
      FROM
      (SELECT 
             d.*, 'd' tabela
      FROM MDTDluznicy d
      UNION
      SELECT
             dw.*, 'dw' tabela
      FROM MDTDluznicyW dw) t
      WHERE t.tabela = (CASE (SELECT TekstParam FROM MDTParGlob WHERE SyParam='80WspDluz') WHEN 'True' THEN 'd' ELSE 'dw' END)
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>412</Id>
    <NrLog>4</NrLog>
    <NrTab>15</NrTab>
    <NrProc>176</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwotaNaDzienW</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwotaNaDzienW(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   SELECT @ret=
                   SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                   FROM MDTDecyzjeW d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>413</Id>
    <NrLog>4</NrLog>
    <NrTab>15</NrTab>
    <NrProc>177</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwotaW</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwotaW(@NrDec Varchar(128)) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   SELECT @ret=
                   SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                   FROM MDTDecyzjeW d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>
  
  <TabProcki>
    <Id>414</Id>
    <NrLog>4</NrLog>
    <NrTab>15</NrTab>
    <NrProc>178</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoNaDzienW</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoNaDzienW(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegolyW ws, MDTWplatyW wp where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3') and wp.NrDec=ws.NrDec and wp.NrKol=ws.NrWplaty and wp.Data&lt;=@NaDzien), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplatyW w1 where w1.NrDec=d.NrDec and w1.Data&lt;=@NaDzien), 0)
                   FROM MDTDecyzjeW d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>
  
  <TabProcki>
    <Id>415</Id>
    <NrLog>4</NrLog>
    <NrTab>15</NrTab>
    <NrProc>179</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoW</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoW(@NrDec Varchar(128)) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegolyW ws where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3')), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplatyW w1 where w1.NrDec=d.NrDec), 0)
                   FROM MDTDecyzjeW d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>
  
  <TabProcki>
    <Id>416</Id>
    <NrLog>4</NrLog>
    <NrTab>15</NrTab>
    <NrProc>180</NrProc>
    <ProcFun>VIEW</ProcFun>
    <NzProc>GetMDTDluznicyWITD</NzProc>
    <TextProc>
      CREATE VIEW GetMDTDluznicyWITD
      AS
      SELECT Symbol, NIP, NzSkr, RodzPlat, NrUS, NrMiasta, Nz1, Nz2, Nz3, Ulica, NrDomu, NrLokalu, Kod, Poczta, Regon, Oper, DataCzas
      FROM
      (SELECT 
             SyKth Symbol, 
                d.NIP, 
                d.NaSkrKth NzSkr, 
                CASE(d.SyKraj) WHEN 'PL' THEN CONVERT(VARCHAR, x.OsobaPrawna) ELSE '-' END RodzPlat,
                NULL NrUS,
                d.IdMiejscowosc NrMiasta,
                d.NaKTH1 Nz1,
                d.NaKTH2 Nz2,
                d.NaKTH3 Nz3, 
                d.Ulica,
                d.NrDomu,
                d.NrLokalu,
                d.KodPoczt Kod,
                CASE(d.SyKraj) WHEN 'PL' THEN mp.NMiasta ELSE 'ZAGRANICA' END Poczta,
                d.Regon,
                d.SySlow,
                d.SyKth SyAnal,
                d.Oper,
                d.DataCzas,
                'd' tabela
      FROM XSlKth d LEFT OUTER JOIN XFormyPrawne x ON d.SyFormyPraw=x.SyFormyPraw LEFT OUTER JOIN XSlMiast mp ON d.IdPocztaMiejsc=mp.NrMiasta WHERE d.SySlow=(SELECT p.TekstParam FROM MDTPARGLOB p WHERE p.SyParam='110SySlow_')
      UNION
      SELECT
             dw.Symbol, dw.NIP, dw.NzSkr, dw.RodzPlat, dw.NrUS, dw.NrMiasta, dw.Nz1, dw.Nz2, dw.Nz3, dw.Ulica, dw.NrDomu, dw.NrLokalu, dw.Kod, dw.Poczta, dw.Regon, dw.SySlow, dw.SyAnal, dw.Oper, dw.DataCzas, 'dw' tabela
      FROM MDTDluznicyWITD dw) t
      WHERE t.tabela = (CASE (SELECT TekstParam FROM MDTParGlob WHERE SyParam='100ProgFK_') WHEN 'INFRA' THEN 'd' ELSE 'dw' END)
    </TextProc>
  </TabProcki>
  
  <TabProcki>
    <Id>417</Id>
    <NrLog>4</NrLog>
    <NrTab>15</NrTab>
    <NrProc>181</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwotaNaDzienWITD</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwotaNaDzienWITD(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   SELECT @ret=
                   SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                   FROM MDTDecyzjeWITD d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>
  
  <TabProcki>
    <Id>418</Id>
    <NrLog>4</NrLog>
    <NrTab>15</NrTab>
    <NrProc>182</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwotaWITD</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwotaWITD(@NrDec Varchar(128)) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   SELECT @ret=
                   SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                   FROM MDTDecyzjeWITD d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>
  
  <TabProcki>
    <Id>419</Id>
    <NrLog>4</NrLog>
    <NrTab>15</NrTab>
    <NrProc>183</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoNaDzienWITD</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoNaDzienWITD(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegoly ws, MDTWplaty wp where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3') and wp.NrDec=ws.NrDec and wp.NrKol=ws.NrWplaty and wp.Data&lt;=@NaDzien), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplaty w1 where w1.NrDec=d.NrDec and w1.Data&lt;=@NaDzien), 0)
                   FROM MDTDecyzjeWITD d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>
  
  <TabProcki>
    <Id>420</Id>
    <NrLog>4</NrLog>
    <NrTab>15</NrTab>
    <NrProc>184</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoWITD</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoWITD(@NrDec Varchar(128)) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegoly ws where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3')), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplaty w1 where w1.NrDec=d.NrDec), 0)
                   FROM MDTDecyzjeWITD d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>
 
  <TabProcki>
    <Id>421</Id>
    <NrLog>4</NrLog>
    <NrTab>16</NrTab>
    <NrProc>184</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>422</Id>
    <NrLog>4</NrLog>
    <NrTab>17</NrTab>
    <NrProc>184</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>423</Id>
    <NrLog>4</NrLog>
    <NrTab>18</NrTab>
    <NrProc>184</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>424</Id>
    <NrLog>4</NrLog>
    <NrTab>19</NrTab>
    <NrProc>184</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>425</Id>
    <NrLog>4</NrLog>
    <NrTab>20</NrTab>
    <NrProc>184</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>426</Id>
    <NrLog>4</NrLog>
    <NrTab>21</NrTab>
    <NrProc>184</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>427</Id>
    <NrLog>4</NrLog>
    <NrTab>22</NrTab>
    <NrProc>185</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwota</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwota(@NrDec Varchar(128)) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   SELECT @ret=
                   SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                   FROM MDTDecyzje d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>428</Id>
    <NrLog>4</NrLog>
    <NrTab>22</NrTab>
    <NrProc>186</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwotaNaDzien</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwotaNaDzien(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   SELECT @ret=
                   SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                   FROM MDTDecyzje d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>
  
  <TabProcki>
    <Id>429</Id>
    <NrLog>4</NrLog>
    <NrTab>22</NrTab>
    <NrProc>187</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplacono</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplacono(@NrDec Varchar(128)) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegoly ws where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3')), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplaty w1 where w1.NrDec=d.NrDec), 0)
                   FROM MDTDecyzje d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>430</Id>
    <NrLog>4</NrLog>
    <NrTab>22</NrTab>
    <NrProc>188</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoNaDzien</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoNaDzien(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegoly ws, MDTWplaty wp where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3') and wp.NrDec=ws.NrDec and wp.NrKol=ws.NrWplaty and wp.Data&lt;=@NaDzien), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplaty w1 where w1.NrDec=d.NrDec and w1.Data&lt;=@NaDzien), 0)
             FROM MDTDecyzje d WHERE d.NrDec=@NrDec
             RETURN @ret
      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>431</Id>
    <NrLog>4</NrLog>
    <NrTab>22</NrTab>
    <NrProc>189</NrProc>
    <ProcFun>VIEW</ProcFun>
    <NzProc>GetMDTDluznicyW</NzProc>
    <TextProc>
      CREATE VIEW GetMDTDluznicyW
      AS
      SELECT Symbol, NIP, NzSkr, RodzPlat, NrUS, NrMiasta, Nz1, Nz2, Nz3, Ulica, NrDomu, NrLokalu, Kod, Poczta, Regon, Oper, DataCzas
      FROM
      (SELECT 
             d.*, 'd' tabela
      FROM MDTDluznicy d
      UNION
      SELECT
             dw.*, 'dw' tabela
      FROM MDTDluznicyW dw) t
      WHERE t.tabela = (CASE (SELECT TekstParam FROM MDTParGlob WHERE SyParam='80WspDluz') WHEN 'True' THEN 'd' ELSE 'dw' END)
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>431</Id>
    <NrLog>4</NrLog>
    <NrTab>22</NrTab>
    <NrProc>190</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwotaNaDzienW</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwotaNaDzienW(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   SELECT @ret=
                   SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                   FROM MDTDecyzjeW d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>432</Id>
    <NrLog>4</NrLog>
    <NrTab>22</NrTab>
    <NrProc>191</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwotaW</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwotaW(@NrDec Varchar(128)) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   SELECT @ret=
                   SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                   FROM MDTDecyzjeW d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

    <TabProcki>
    <Id>433</Id>
    <NrLog>4</NrLog>
    <NrTab>22</NrTab>
    <NrProc>192</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoNaDzienW</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoNaDzienW(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegolyW ws, MDTWplatyW wp where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3') and wp.NrDec=ws.NrDec and wp.NrKol=ws.NrWplaty and wp.Data&lt;=@NaDzien), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplatyW w1 where w1.NrDec=d.NrDec and w1.Data&lt;=@NaDzien), 0)
                   FROM MDTDecyzjeW d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>434</Id>
    <NrLog>4</NrLog>
    <NrTab>22</NrTab>
    <NrProc>193</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoW</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoW(@NrDec Varchar(128)) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegolyW ws where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3')), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplatyW w1 where w1.NrDec=d.NrDec), 0)
                   FROM MDTDecyzjeW d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>435</Id>
    <NrLog>4</NrLog>
    <NrTab>22</NrTab>
    <NrProc>194</NrProc>
    <ProcFun>VIEW</ProcFun>
    <NzProc>GetMDTDluznicyWITD</NzProc>
    <TextProc>
      CREATE VIEW GetMDTDluznicyWITD
      AS
      SELECT Symbol, NIP, NzSkr, RodzPlat, NrUS, NrMiasta, Nz1, Nz2, Nz3, Ulica, NrDomu, NrLokalu, Kod, Poczta, Regon, SySlow, SyAnal, Oper, DataCzas
      FROM
      (SELECT 
             SyKth Symbol, 
                d.NIP, 
                d.NaSkrKth NzSkr, 
                CASE(d.SyKraj) WHEN 'PL' THEN CONVERT(VARCHAR, x.OsobaPrawna) ELSE '-' END RodzPlat,
                NULL NrUS,
                d.IdMiejscowosc NrMiasta,
                d.NaKTH1 Nz1,
                d.NaKTH2 Nz2,
                d.NaKTH3 Nz3, 
                d.Ulica,
                d.NrDomu,
                d.NrLokalu,
                d.KodPoczt Kod,
                CASE(d.SyKraj) WHEN 'PL' THEN mp.NMiasta ELSE 'ZAGRANICA' END Poczta,
                d.Regon,
                d.SySlow,
                d.SyKth SyAnal,
                d.Oper,
                d.DataCzas,
                'd' tabela
      FROM XSlKth d LEFT OUTER JOIN XFormyPrawne x ON d.SyFormyPraw=x.SyFormyPraw LEFT OUTER JOIN XSlMiast mp ON d.IdPocztaMiejsc=mp.NrMiasta WHERE d.SySlow=(SELECT p.TekstParam FROM MDTPARGLOB p WHERE p.SyParam='110SySlow_')
      UNION
      SELECT
             dw.Symbol, dw.NIP, dw.NzSkr, dw.RodzPlat, dw.NrUS, dw.NrMiasta, dw.Nz1, dw.Nz2, dw.Nz3, dw.Ulica, dw.NrDomu, dw.NrLokalu, dw.Kod, dw.Poczta, dw.Regon, dw.SySlow, dw.SyAnal, dw.Oper, dw.DataCzas, 'dw' tabela
      FROM MDTDluznicyWITD dw) t
      WHERE t.tabela = (CASE (SELECT TekstParam FROM MDTParGlob WHERE SyParam='100ProgFK_') WHEN 'INFRA' THEN 'd' ELSE 'dw' END)
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>436</Id>
    <NrLog>4</NrLog>
    <NrTab>22</NrTab>
    <NrProc>195</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwotaNaDzienWITD</NzProc> 
    <TextProc>
      CREATE FUNCTION MDTDecAktualnaKwotaNaDzienWITD(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   SELECT @ret=
                   SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND (d.KwotaGITD IS NULL OR d.DataRozstGITD&gt;@NaDzien)) THEN d.KwotaDecyzji
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND (d.KwotaSad IS NULL OR d.DataSad&gt;@NaDzien) AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                         WHEN (d.WskRaty=1 AND (d.KwotaRaty IS NULL OR d.DataRozstRaty&gt;@NaDzien) AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                         WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                   FROM MDTDecyzjeWITD d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>437</Id>
    <NrLog>4</NrLog>
    <NrTab>22</NrTab>
    <NrProc>196</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecAktualnaKwotaWITD</NzProc>
    <TextProc>
     CREATE FUNCTION MDTDecAktualnaKwotaWITD(@NrDec Varchar(128)) RETURNS Decimal(10,2)
          BEGIN
          DECLARE @ret decimal(10,2)
                 SELECT @ret=
                 SUM(CASE WHEN (d.WskGITD=0 AND d.WskRaty=0 AND d.WskSad=0) THEN d.KwotaDecyzji
                       WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                       WHEN (d.WskGITD=1 AND d.WskRaty=0 AND d.WskSad=0 AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                       WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                       WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                       WHEN (d.WskSad=1 AND d.WskRaty=0 AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                       WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NULL) THEN d.KwotaDecyzji
                       WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NULL AND d.KwotaGITD IS NOT NULL) THEN d.KwotaGITD
                       WHEN (d.WskRaty=1 AND d.KwotaRaty IS NULL AND d.KwotaSad IS NOT NULL) THEN d.KwotaSad
                       WHEN (d.WskRaty=1 AND d.KwotaRaty IS NOT NULL) THEN d.KwotaRaty END)
                 FROM MDTDecyzjeWITD d WHERE d.NrDec=@NrDec
                 RETURN @ret
          END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>438</Id>
    <NrLog>4</NrLog>
    <NrTab>22</NrTab>
    <NrProc>197</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoNaDzienWITD</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoNaDzienWITD(@NrDec Varchar(128), @NaDzien DateTime) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegolyWITD ws, MDTWplatyWITD wp where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3') and wp.NrDec=ws.NrDec and wp.NrKol=ws.NrWplaty and wp.Data&lt;=@NaDzien), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplatyWITD w1 where w1.NrDec=d.NrDec and w1.Data&lt;=@NaDzien), 0)
                   FROM MDTDecyzjeWITD d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>439</Id>
    <NrLog>4</NrLog>
    <NrTab>22</NrTab>
    <NrProc>198</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTDecZaplaconoWITD</NzProc>
    <TextProc>
      CREATE FUNCTION MDTDecZaplaconoWITD(@NrDec Varchar(128)) RETURNS Decimal(10,2)
            BEGIN
            DECLARE @ret decimal(10,2)
                   select @ret=COALESCE((select sum(ws.Naleznosc) from MDTWplatySzczegolyWITD ws where ws.NrDec=d.nrdec and ws.rodzwplaty in ('G', 'R', 'U', '1', '3')), 0) + COALESCE((select sum(prowizjaBankowa) from MDTWplatyWITD w1 where w1.NrDec=d.NrDec), 0)
                   FROM MDTDecyzjeWITD d WHERE d.NrDec=@NrDec
                   RETURN @ret
            END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>440</Id>
    <NrLog>4</NrLog>
    <NrTab>23</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>441</Id>
    <NrLog>4</NrLog>
    <NrTab>24</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>442</Id>
    <NrLog>4</NrLog>
    <NrTab>25</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>443</Id>
    <NrLog>4</NrLog>
    <NrTab>26</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>444</Id>
    <NrLog>4</NrLog>
    <NrTab>27</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>445</Id>
    <NrLog>4</NrLog>
    <NrTab>28</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>446</Id>
    <NrLog>4</NrLog>
    <NrTab>29</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>447</Id>
    <NrLog>4</NrLog>
    <NrTab>30</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>448</Id>
    <NrLog>4</NrLog>
    <NrTab>31</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>449</Id>
    <NrLog>4</NrLog>
    <NrTab>32</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>450</Id>
    <NrLog>4</NrLog>
    <NrTab>33</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>451</Id>
    <NrLog>4</NrLog>
    <NrTab>34</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>451</Id>
    <NrLog>4</NrLog>
    <NrTab>35</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>452</Id>
    <NrLog>4</NrLog>
    <NrTab>36</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>453</Id>
    <NrLog>4</NrLog>
    <NrTab>37</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>454</Id>
    <NrLog>4</NrLog>
    <NrTab>38</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>455</Id>
    <NrLog>4</NrLog>
    <NrTab>39</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>456</Id>
    <NrLog>4</NrLog>
    <NrTab>41</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>457</Id>
    <NrLog>4</NrLog>
    <NrTab>42</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>458</Id>
    <NrLog>4</NrLog>
    <NrTab>43</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>459</Id>
    <NrLog>4</NrLog>
    <NrTab>44</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>460</Id>
    <NrLog>4</NrLog>
    <NrTab>45</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>461</Id>
    <NrLog>4</NrLog>
    <NrTab>46</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>462</Id>
    <NrLog>4</NrLog>
    <NrTab>47</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>462</Id>
    <NrLog>4</NrLog>
    <NrTab>48</NrTab>
    <NrProc>198</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>463</Id>
    <NrLog>4</NrLog>
    <NrTab>49</NrTab>
    <NrProc>199</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKRDekretyOkres</NzProc>
    <TextProc>
CREATE FUNCTION [dbo].[FKRDekretyOkres](@okresO int, @okresORdekretu smallint=null, @rok smallint=null, @mies smallint=null, @dowodNr varchar(15)=null, 
                                @nrPozycjiKs smallint=null, @nrDekretu smallint=null, @zStrony varchar(2)=null, @nrPozycjiRozr smallint=null)
RETURNS @wynik TABLE 
(
      OkresO smallint not null, 
      Rok smallint not null, 
      Mies smallint not null, 
      DowodNr varchar(15) not null, 
      NrPozycjiKs smallint not null, 
      NrDekretu smallint not null, 
      ZStrony varchar(2) not null, 
      NrPozycjiRozr smallint not null, 
      OstatnieKonto varchar(30) not null 
) 
AS
BEGIN
      IF (@okresORdekretu IS NULL
            OR @rok IS NULL
            OR @mies IS NULL
            OR @dowodNr IS NULL
            OR @nrPozycjiKs IS NULL
            OR @nrDekretu IS NULL
            OR @zStrony IS NULL
            OR @nrPozycjiRozr IS NULL)

            INSERT INTO @wynik(OkresO, Rok, Mies, DowodNr, NrPozycjiKs, NrDekretu, ZStrony, NrPozycjiRozr, OstatnieKonto)
            SELECT      FKRDekrety.OkresO,
                        FKRDekrety.Rok,
                        FKRDekrety.Mies,
                        FKRDekrety.DowodNr,
                        FKRDekrety.NrPozycjiKs,
                        FKRDekrety.NrDekretu,
                        FKRDekrety.ZStrony,
                        FKRDekrety.NrPozycjiRozr,
                        CASE WHEN WarstwaRozNast.WarstwaRoz IS NOT NULL AND FKDekretyKonwersja.Konto IS NOT NULL THEN FKDekretyKonwersja.Konto
                             ELSE FKRdekrety.OstatnieKonto
                        END OstatnieKonto
            FROM  FKRDekrety
            LEFT OUTER JOIN FKOkresyWarstwyRoz WarstwaRozBiez
                  ON    WarstwaRozBiez.OkresO = @okresO
            OUTER APPLY 
            ( 
                  SELECT      TOP(1) WarstwaRoz 
                  FROM  FKOkresyWarstwyRoz WarstwaRozNastWew
                  WHERE WarstwaRozNastWew.OkresO &gt; @okresO
                        AND   WarstwaRozNastWew.WarstwaRoz &lt;&gt; WarstwaRozBiez.WarstwaRoz
            ) WarstwaRozNast
            LEFT OUTER JOIN FKDekretyKonwersja
                  ON    FKDekretyKonwersja.WarstwaRoz = WarstwaRozBiez.WarstwaRoz
                  AND   FKDekretyKonwersja.OkresO = FKRdekrety.OkresO
                  AND FKDekretyKonwersja.Rok = FKRdekrety.Rok
                  AND FKDekretyKonwersja.Mies = FKRdekrety.Mies
                  AND FKDekretyKonwersja.DowodNr = FKRdekrety.DowodNr
                  AND FKDekretyKonwersja.NrPozycjiKs = FKRdekrety.NrPozycjiKs
                  AND FKDekretyKonwersja.NrDekretu = FKRdekrety.NrDekretu
                  AND FKDekretyKonwersja.ZStrony = FKRdekrety.ZStrony
      ELSE
            INSERT INTO @wynik(OkresO, Rok, Mies, DowodNr, NrPozycjiKs, NrDekretu, ZStrony, NrPozycjiRozr, OstatnieKonto)
            SELECT      FKRDekrety.OkresO,
                        FKRDekrety.Rok,
                        FKRDekrety.Mies,
                        FKRDekrety.DowodNr,
                        FKRDekrety.NrPozycjiKs,
                        FKRDekrety.NrDekretu,
                        FKRDekrety.ZStrony,
                        FKRDekrety.NrPozycjiRozr,
                        CASE WHEN WarstwaRozNast.WarstwaRoz IS NOT NULL AND FKDekretyKonwersja.Konto IS NOT NULL THEN FKDekretyKonwersja.Konto
                             ELSE FKRdekrety.OstatnieKonto
                        END OstatnieKonto
            FROM  FKRDekrety
            LEFT OUTER JOIN FKOkresyWarstwyRoz WarstwaRozBiez
                  ON    WarstwaRozBiez.OkresO = @okresO
            OUTER APPLY 
            ( 
                  SELECT      TOP(1) WarstwaRoz 
                  FROM  FKOkresyWarstwyRoz WarstwaRozNastWew
                  WHERE WarstwaRozNastWew.OkresO &gt; @okresO
                        AND   WarstwaRozNastWew.WarstwaRoz &lt;&gt; WarstwaRozBiez.WarstwaRoz
            ) WarstwaRozNast
            LEFT OUTER JOIN FKDekretyKonwersja
                  ON    FKDekretyKonwersja.WarstwaRoz = WarstwaRozBiez.WarstwaRoz
                  AND   FKDekretyKonwersja.OkresO = FKRdekrety.OkresO
                  AND FKDekretyKonwersja.Rok = FKRdekrety.Rok
                  AND FKDekretyKonwersja.Mies = FKRdekrety.Mies
                  AND FKDekretyKonwersja.DowodNr = FKRdekrety.DowodNr
                  AND FKDekretyKonwersja.NrPozycjiKs = FKRdekrety.NrPozycjiKs
                  AND FKDekretyKonwersja.NrDekretu = FKRdekrety.NrDekretu
                  AND FKDekretyKonwersja.ZStrony = FKRdekrety.ZStrony
            WHERE
                  FKRDekrety.OkresO = @okresORdekretu
                  AND FKRDekrety.Rok = @rok
                  AND FKRDekrety.Mies = @mies
                  AND FKRDekrety.DowodNr = @dowodNr
                  AND FKRDekrety.NrPozycjiKs = @nrPozycjiKs
                  AND FKRDekrety.NrDekretu = @nrDekretu
                  AND FKRDekrety.ZStrony = @zStrony
                  AND FKRDekrety.NrPozycjiRozr = @nrPozycjiRozr
  
   RETURN
END

   </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>464</Id>
    <NrLog>4</NrLog>
    <NrTab>50</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>465</Id>
    <NrLog>4</NrLog>
    <NrTab>51</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>466</Id>
    <NrLog>4</NrLog>
    <NrTab>52</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>467</Id>
    <NrLog>4</NrLog>
    <NrTab>53</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>468</Id>
    <NrLog>4</NrLog>
    <NrTab>54</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>467</Id>
    <NrLog>4</NrLog>
    <NrTab>55</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>468</Id>
    <NrLog>4</NrLog>
    <NrTab>56</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>469</Id>
    <NrLog>4</NrLog>
    <NrTab>57</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>470</Id>
    <NrLog>4</NrLog>
    <NrTab>58</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>471</Id>
    <NrLog>4</NrLog>
    <NrTab>59</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>472</Id>
    <NrLog>4</NrLog>
    <NrTab>60</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>473</Id>
    <NrLog>4</NrLog>
    <NrTab>61</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>474</Id>
    <NrLog>4</NrLog>
    <NrTab>62</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>475</Id>
    <NrLog>4</NrLog>
    <NrTab>63</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>476</Id>
    <NrLog>4</NrLog>
    <NrTab>64</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>477</Id>
    <NrLog>4</NrLog>
    <NrTab>65</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>478</Id>
    <NrLog>4</NrLog>
    <NrTab>66</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>479</Id>
    <NrLog>4</NrLog>
    <NrTab>67</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>480</Id>
    <NrLog>4</NrLog>
    <NrTab>68</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>481</Id>
    <NrLog>4</NrLog>
    <NrTab>69</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>482</Id>
    <NrLog>4</NrLog>
    <NrTab>70</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>483</Id>
    <NrLog>4</NrLog>
    <NrTab>71</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>484</Id>
    <NrLog>4</NrLog>
    <NrTab>72</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>485</Id>
    <NrLog>4</NrLog>
    <NrTab>73</NrTab>
    <NrProc>199</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>486</Id>
    <NrLog>4</NrLog>
    <NrTab>74</NrTab>
    <NrProc>200</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>KPGenStanZatrMc</NzProc>
    <TextProc>
CREATE PROCEDURE KPGenStanZatrMc
      @0 int, --lp naliczenia
      @1 int, --rok stanu
      @2 int, --miesiac stanu
      @3 varchar(10) --login operatora
      AS
      BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON
      --zmienne: klucz w tabeli KPKHP
      DECLARE @typUmowy CHAR(1);
      DECLARE @nrEwid INT;
      DECLARE @nrUmowy VARCHAR(10);
      DECLARE @dataZmiany DATETIME;

      --zmienne: składowe rekorku KPStArchS
      DECLARE @statusZatrudn VARCHAR(3)
      DECLARE @kodUmowy VARCHAR(7)
      DECLARE @kodZwoln VARCHAR(7)
      DECLARE @zaklad VARCHAR(7)
      DECLARE @komorka VARCHAR(7)
      DECLARE @stanowPr VARCHAR(7)
      DECLARE @rodzStanPr CHAR(1)
      DECLARE @sysWynagr VARCHAR(7)
      DECLARE @miejsceWypl VARCHAR(7)
      DECLARE @kodZawiesz VARCHAR(7)
      DECLARE @kodInwal VARCHAR(7)
      DECLARE @kodWykszt VARCHAR(7)
      DECLARE @kodWyksztGUS VARCHAR(7)
      DECLARE @kodZawodu VARCHAR(7)
      DECLARE @kodZawoduGUS VARCHAR(7)
      DECLARE @statusUmowy CHAR(1)
      DECLARE @wiek SMALLINT
      DECLARE @plec CHAR(1)
      DECLARE @etat VARCHAR(7)
      DECLARE @dniEtatoPracy DECIMAL(10, 6)
      declare @dniEtatoChoroby decimal(10,6)
      DECLARE @podstDodat CHAR(1)

      --zmienne: składowe rekorku KPStArchS, uzywane gdy jest zmiana umowy
      DECLARE @kodUmowyZmiana VARCHAR(7)
      DECLARE @kodZwolnZmiana VARCHAR(7)
      DECLARE @zakladZmiana VARCHAR(7)
      DECLARE @komorkaZmiana VARCHAR(7)
      DECLARE @stanowPrZmiana VARCHAR(7)
      DECLARE @sysWynagrZmiana VARCHAR(7)
      DECLARE @miejsceWyplZmiana VARCHAR(7)
      DECLARE @kodZawieszZmiana VARCHAR(7)
      DECLARE @etatZmiana VARCHAR(7)

      --zmienne: zmienne pomocnicze, wyznaczaja przedzial poszikiwania zmian umowy
      DECLARE @dataStop DATETIME
      DECLARE @dataNastZmiany DATETIME
      DECLARE @typZmiany CHAR(1)
      DECLARE @typZmianyPoprzedni CHAR(1)
      DECLARE @dZawieszDo DATETIME
      DECLARE @dZawieszDoZmiana DATETIME

      --zmienne: zmienne pomocnicze do sterowania petli
      DECLARE @koniec BIT

      --zmienne: parametry wywolania procedury (tu beda przepisane)
      DECLARE @lpNaliczenia INT
      DECLARE @rokStanu INT
      DECLARE @mcStanu INT
      DECLARE @operator VARCHAR(10)

      --zmienne: pierszy i ostniego dnia miesiaca (granice przedzialu do wyliczenia statystyk)
      DECLARE @dataOdStrPom VARCHAR(12)
      DECLARE @dataOd DATETIME
      DECLARE @dataDo DATETIME

      --zmienne: stale
      DECLARE @sySlow VARCHAR(3)
      DECLARE @sySlowKpSlStPr VARCHAR(3)
      DECLARE @sySlowWyksztGUS VARCHAR(3)
      DECLARE @sySlowZawodGUS VARCHAR(3)

      --przypisanie wartosci stalym, oraz przepisanie parametrow procedury
      SET @lpNaliczenia = @0
      SET @rokStanu = @1
      SET @mcStanu = @2
      SET @operator = @3
      SET @sySlow = 'XKP'
      SET @sySlowKpSlStPr = 'XSS'
      SET @sySlowWyksztGUS = '104'
      SET @sySlowZawodGUS = '103'

      --Wylicz wartosci dataOd i dataDo, jako pierwszy i ostatni dzien miesiaca
      --dla danego roku stanu i miesiaca stanu
      SET @dataOdStrPom = CAST(@mcStanu AS VARCHAR) + '/01/' + CAST(@rokStanu AS VARCHAR)
      SET @dataOd = CONVERT(DATETIME, @dataOdStrPom, 101)  --101 okresla format daty w ciagu @dataOdStrPom
      SET @dataDo = DATEADD(Day, -1, (DATEADD(Month, 1, @dataOd)))

      --kursor po umowach
      DECLARE c_kupic CURSOR FOR
      SELECT TypUmowy, NrEwid, NrUmowy
      FROM KPKUPiC
      WHERE  COALESCE(DataZakoncz, DataUmowyDo, CONVERT(DATETIME, '12/31/9999', 101)) &gt;= @dataOd --101 okresla format (mm/dd/yyyy) daty
                  AND DataUmowyOd &lt;= @dataDo
      
      --1. wstaw wiersz do KPStArchS
      INSERT INTO KPStArchS (SySlow, LpNaliczenia, RokStanu, McStanu, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @rokStanu, @mcStanu, @operator, GETDATE())

      --2. Iteruj przez wszystkie umowy z KPKUPiC i wstaw dla nich wiersze do KPStZatrS
      OPEN c_kupic
      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;

      WHILE @@FETCH_STATUS = 0
      BEGIN
      --2.1. wyzeruj zmienne pomocnicze
      SET @dniEtatoPracy = 0
      set @dniEtatoChoroby = 0
      SET @dataStop = @dataDo
      SET @dataNastZmiany = NULL

      --2.2. znajdz mniejsza z dwoch dat: ostatniej zmiany o typie U lub A przed
      --       @dataOd, oraz ostatniej zmiany o typie U lub A przed @dataDo
      SELECT @dataZmiany = MIN(DataZmiany)
      FROM
      (
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE (KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataOd
      UNION
      SELECT MAX(KHP.DataZmiany) DataZmiany
      FROM KPKHP KHP
      WHERE (KHP.TypZmiany = 'U' OR KHP.TypZmiany = 'A')
      AND KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy AND DataZmiany &lt;= @dataDo
      ) Daty

      --2.3. Wybierz wszystkie dane pracownika
      SELECT  @statusZatrudn = KPKUPiC.StatusZatrudn,
      @kodUmowy = KPKHP.KodUmowy,
      @kodZwoln = ISNULL(KPKUPiC.KodZakoncz, ''),
      @zaklad = ISNULL(KPKHP.Zaklad, ''),
      @komorka = ISNULL(KPKHP.Komorka, ''),
      @stanowPr = ISNULL(KPKHP.StanowPr, ''),
      @rodzStanPr = ISNULL(KPSLSTPR.RodzajStPr, ''),
      @sysWynagr = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWypl = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawiesz = ISNULL(KPKHP.KodZawiesz, ''),
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @kodWykszt = ISNULL(KPKOP.KodWykszt, ''),
      @kodWyksztGUS = ISNULL(WyksztGUS.KodGUS, ''),
      @kodZawodu = KPKOP.KodZawoduWykon,
      @kodZawoduGUS = ISNULL(ZawodGUS.KodGUS, ''),
      @statusUmowy = CASE WHEN KPKHP.Etat &lt;&gt; '' THEN '' ELSE 'C' END,
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany),
      XKOP.DataUrodz) &gt; @dataZmiany
      THEN DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) END
      ELSE 0 END,
      @plec = ISNULL(XKOP.Plec, ''),
      @etat = ISNULL(KPKHP.Etat, ''),
      @podstDodat = KPKUPiC.PodstDodat,
      @typZmiany = KPKHP.typZmiany,
      --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDo = KPKHP.DZawieszDo --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      FROM KPKUPiC LEFT OUTER JOIN KPKOP ON KPKUPiC.NrEwid = KPKOP.NrEwid
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKHP ON KPKUPiC.TypUmowy = KPKHP.TypUmowy AND KPKUPiC.NrEwid = KPKHP.NrEwid AND KPKUPiC.NrUmowy = KPKHP.NrUmowy AND KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN KPSLSTPR ON KPKHP.StanowPr = KPSLSTPR.Kod AND KPSLSTPR.SySlow = @sySlowKpSlStPr
      LEFT OUTER JOIN KPSlRozne WyksztGUS ON WyksztGUS.SymbSlow = @sySlowWyksztGUS AND WyksztGUS.Kod = KPKOP.KodWykszt
      LEFT OUTER JOIN KPSlRozne ZawodGUS ON ZawodGUS.SymbSlow = @sySlowZawodGUS AND ZawodGUS.Kod = KPKOP.KodZawoduWykon
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid AND KodInwal.DataPrzyznania = (SELECT MAX(DataPrzyznania) FROM KPKOPInwal WHERE DataPrzyznania &lt;= @dataZmiany AND NrEwid = @nrEwid) AND (KodInwal.DataWaznosci IS NULL OR KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND KPKUPiC.NrUmowy = @nrUmowy

      SET @typZmianyPoprzedni = @typZmiany
      --2.4. Dla kazdej zmiany umowy pracownika, wpisz wiersz w KPStArchS
      --     [notatna_techniczna]Tutaj mozna uzyc kursora, ktory bedzie zwracal kolejne
      --       daty zmiany. Zysk: jedno zapytanie zamiast kliku w petli, gdy jest kilka zmian w miesiacu.
      --       strata: jezeli w wiekszosci wypadkow jest jedna umowa w miesiacu, deklaracja i zwalnianie
      --       kursora moze spowolnic dzialanie.[/notatka_techniczna]
      SET @koniec = 0
      WHILE @koniec = 0
      BEGIN
      --2.4.1. Wyznaczenie daty nastepnej zmiany
      SELECT @dataNastZmiany = MIN(DataZmiany)
      FROM (
      SELECT KHP.dataZmiany AS DataZmiany
      FROM   KPKHP KHP
      WHERE  KHP.NrEwid = @nrEwid AND KHP.TypUmowy = @typUmowy AND KHP.NrUmowy = @nrUmowy
      UNION  --Zmiana to takze przyznanie stopnia inwalidzkiego
      SELECT KPKOPInwal.DataPrzyznania AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze zakonczenie waznosci stopnia inwalidzkiego
      SELECT KPKOPInwal.DataWaznosci AS DataZmiany
      FROM   KPKOPInwal
      WHERE  KPKOPInwal.NrEwid = @nrEwid
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION  --Zmiana to takze urodziny pracownika
      SELECT DATEADD(YEAR, DATEDIFF(YEAR, XKOP.DataUrodz, @dataOd), XKOP.DataUrodz)
      FROM   XKOP
      WHERE  XKOP.NrEwid = @nrEwid AND SySlow = @sySlow AND
      XKOP.DataUrodz IS NOT NULL AND MONTH(XKOP.DataUrodz) = MONTH(@dataOd)
      AND @typZmiany &lt;&gt; 'Z'  --Jesli ostatnia zmiana w umowie to zwolnienie, to nie uwzgledniamy tego
      UNION
      SELECT DataZmiany
      FROM   KPKUPiCSlowSO
      WHERE  KPKUPiCSlowSO.NrEwid = @nrEwid AND KPKUPiCSlowSO.TypUmowy = @typUmowy AND KPKUPiCSlowSO.NrUmowy = @nrUmowy
      UNION  --poczatek okresu tez ma wywolac zmiane
      SELECT @dataOd AS DataZmiany
      ) Daty
      WHERE DataZmiany &gt; @dataZmiany AND DataZmiany &lt;= @dataDo

      --2.4.2. Jesli typ zmiany jest C, to nalezy skorygowac dateNastepnejZmiany
      --          aby uwzgledniala date konca okresu zawieszenia
      IF @typZmiany = 'C' AND
      (@dataNastZmiany IS NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt;= @dataDo
      OR
      (@dataNastZmiany IS NOT NULL AND @dZawieszDo IS NOT NULL AND DATEADD(DAY, 1, @dZawieszDo) &lt; @dataNastZmiany))
      SET @dataNastZmiany = DATEADD(DAY, 1, @dZawieszDo)

      --2.4.3. Zmien dateStop, jezeli jest nastepna zmiana
      IF @dataNastZmiany IS NOT NULL
      SET @dataStop = @dataNastZmiany
      ELSE
      SET @dataStop = @dataDo

      --2.4.4. Jezeli rozpatrywana zmiana miesci sie w okresie @dataOd i @dataDo
      IF @dataNastZmiany IS NULL OR @dataZmiany BETWEEN @dataOd AND @dataDo
      BEGIN
      --2.4.4.1. Wylicz dni etato-pracy
      IF @typZmiany = 'Z'
      SET @dniEtatoPracy = 1
      ELSE IF @typZmiany = 'U' OR @typZmiany = 'A' OR @typZmiany = 'P'
      BEGIN
      SET @dniEtatoPracy = DATEDIFF(DAY, @dataZmiany, @dataStop) + (CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END)
      --IF @dataNastZmiany IS NULL
      --SET @dniEtatoPracy = @dniEtatoPracy + 1
      END
      -- tu było ELSE IF @typZmiany = 'C'

      -- zmiana HF
      IF @typZmiany = 'C'
      SET @dniEtatoPracy = 0
      ELSE
      BEGIN
      declare @pomDni int
      select @pomDni = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END,
      CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      + CASE WHEN (@dataNastZmiany IS NULL AND @dataStop = @dataDo) OR (@dataNastZmiany IS NOT NULL AND @dataNastZmiany &gt; KPAbsenc.DataDo) THEN 1 ELSE 0 END)
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      (XSlSkPl.TypSkPl='B' and XSlSkPl.ZawieszaUmowe=0 and KPAbsenc.DniKalend&gt;29 or
      XSlSkPl.ZawieszaUmowe=1)
      select @pomDni = ISNULL(@pomDni,0);
      select @dniEtatoPracy = @dniEtatoPracy - abs(@pomDni)
      END


      -- 1.2.3 nowe HF
      declare @pomDniChor int
      select @pomDniChor = sum(abs(DATEDIFF (day, CASE WHEN KPAbsenc.DataDo&lt;@dataStop THEN KPAbsenc.DataDo ELSE @dataStop END,
      CASE WHEN KPAbsenc.DataOd&lt;@dataZmiany THEN @dataZmiany else KPAbsenc.DataOd END))
      --TUTAJ ZMIANY -->>>> TEGO NA TO CO NIZEJ -->>> + 1)  --(CASE WHEN @dataNastZmiany IS NULL AND @dataStop = @dataDo THEN 1 ELSE 0 END))
      + CASE WHEN (@dataNastZmiany IS NULL AND @dataStop = @dataDo) OR (@dataNastZmiany IS NOT NULL AND @dataNastZmiany &gt; KPAbsenc.DataDo) THEN 1 ELSE 0 END)
      from KPAbsenc
      left outer join XSlSkPl
      on KPAbsenc.KodAbsencji=XSlSkPl.KodSkl
      where KPAbsenc.TypUmowy=@typUmowy and KPAbsenc.NrEwid=@nrEwid and KPAbsenc.PodstDodat = @podstDodat and
      KPAbsenc.Anulowanie=0 and
      not(KPAbsenc.DataDo&lt;@dataZmiany) and not(KPAbsenc.DataOd&gt;@dataStop) and
      left(XSlSkPl.TypSkPl,1)='C' and XSlSkPl.KodZusP&gt;'300' and XSlSkPl.KodZusP&lt;'330'
      select @dniEtatoChoroby = case when 30 &lt; abs(@pomDniChor) then -30 else -1 * abs(@pomDniChor) end

      select @dniEtatoPracy = isnull(@dniEtatoPracy,0);
      select @dniEtatoChoroby = isnull(@dniEtatoChoroby,0);

      --2.4.4.2. Dopisz wiersz do KPStZatrS
      INSERT INTO KPStZatrS (SySlow, LpNaliczenia, NrEwid, NrUmowy, TypUmowy, DataZmiany, StatusZatrudn, KodUmowy, KodZwoln, Zaklad, Komorka, StanowPr, RodzStanowPr, SysWynagr, MiejsceWypl, KodZawiesz, KodInwal, KodWykszt, KodWyksztGUS, KodZawodu, KodZawoduGUS, StatusUmowy, Wiek, Plec, Etat, DniEtatoPrac, PodstDodat, DniEtatoChoroby, Oper, DataCzas)
      VALUES (@sySlow, @lpNaliczenia, @nrEwid, @nrUmowy, @typUmowy, @dataZmiany, @statusZatrudn, @kodUmowy, @kodZwoln, @zaklad, @komorka, @stanowPr, @rodzStanPr, @sysWynagr, @miejsceWypl, @kodZawiesz, @kodInwal, @kodWykszt, @kodWyksztGUS, @kodZawodu, @kodZawoduGUS, @statusUmowy, @wiek, @plec, @etat, @dniEtatoPracy, @podstDodat, @dniEtatoChoroby, @operator, GETDATE())
      END

      --2.4.5. Jezeli jest kolejna zmiana - pobierz dane z tabeli do zmiennych
      --       dla nastepnej zmiany umowy
      --          w przeciwnym wypadku koniec petli
      IF @dataNastZmiany IS NOT NULL
      BEGIN
      SET @dataZmiany = @dataNastZmiany
      --2.4.5.1. Pobranie danych do zmiennych pomocniczych
      SELECT  @kodUmowyZmiana = ISNULL(KPKHP.KodUmowy, ''),
      @kodZwolnZmiana = ISNULL(KPKHP.KodZwoln, ''),
      @zakladZmiana = ISNULL(KPKHP.Zaklad, ''),
      @komorkaZmiana = ISNULL(KPKHP.Komorka, ''),
      @stanowPrZmiana = ISNULL(KPKHP.StanowPr, ''),
      @sysWynagrZmiana = ISNULL(KPKHP.SysWynagr, ''),
      @miejsceWyplZmiana = ISNULL(KPKHP.MiejsceWypl, ''),
      @kodZawieszZmiana = ISNULL(KPKHP.KodZawiesz, ''),
      @typZmiany = KPKHP.typZmiany, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana w petli ponizej
      @dZawieszDoZmiana = KPKHP.DZawieszDo, --zmienna nie stanowi skladowej rekordu KPStArchS, uzywana do wyzaczania daty nastepnej zminy w petli ponizej
      @kodInwal = ISNULL(KodInwal.StopNiepelnospr, ''),
      @wiek = CASE WHEN XKOP.DataUrodz IS NOT NULL
      THEN
      CASE WHEN DATEADD(year, DATEDIFF (year, XKOP.DataUrodz, @dataZmiany), XKOP.DataUrodz) &gt; @dataZmiany
      THEN
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany) - 1
      ELSE
      DATEDIFF (year, XKOP.DataUrodz, @dataZmiany)
      END
      ELSE
      0
      END,
      @etatZmiana = ISNULL(KPKHP.Etat, '')
      FROM KPKUPiC
      LEFT OUTER JOIN KPKHP ON KPKUPiC.NrEwid = KPKHP.NrEwid AND
      KPKUPiC.TypUmowy = KPKHP.TypUmowy AND
      KPKUPiC.NrUmowy = KPKHP.NrUmowy AND
      KPKHP.DataZmiany = @dataZmiany
      LEFT OUTER JOIN XKOP ON KPKUPiC.NrEwid = XKOP.NrEwid AND
      XKOP.SySlow = @sySlow
      LEFT OUTER JOIN KPKOPInwal KodInwal ON KodInwal.NrEwid = KPKUPiC.NrEwid
      AND KodInwal.DataPrzyznania = (
      SELECT MAX(DataPrzyznania)
      FROM KPKOPInwal
      WHERE DataPrzyznania &lt;= @dataZmiany AND
      NrEwid = @nrEwid) AND
      (KodInwal.DataWaznosci IS NULL OR
      KodInwal.DataWaznosci &gt;= @dataZmiany)
      WHERE KPKUPiC.TypUmowy = @typUmowy AND KPKUPiC.NrEwid = @nrEwid AND
      KPKUPiC.NrUmowy = @nrUmowy

      --2.4.5.2. Przepisanie danych ze zmiennych pomocniczych do zmiennych wlasciwych
      -- w zaleznosci od typu zmiany
      IF @typZmiany = 'U'
      BEGIN
      SET @kodUmowy = @kodUmowyZmiana
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      END
      ELSE IF @typZmiany = 'A'
      BEGIN
      SET @zaklad = @zakladZmiana
      SET @komorka = @komorkaZmiana
      SET @stanowPr = @stanowPrZmiana
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @etat = @etatZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'Z'
      BEGIN
      SET @kodZwoln = @kodZwolnZmiana
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany = 'C'
      BEGIN
      SET @kodZawiesz = @kodZawieszZmiana
      SET @dZawieszDo = @dZawieszDoZmiana
      END
      ELSE IF @typZmiany = 'P'
      BEGIN
      SET @sysWynagr = @sysWynagrZmiana
      SET @miejsceWypl = @miejsceWyplZmiana
      SET @typZmianyPoprzedni = @typZmiany
      SET @dZawieszDo = NULL
      END
      ELSE IF @typZmiany IS NULL --Jezeli aktualna @dataZmiany nie wiaze sie z wpisem w KPKHP
      BEGIN
      --to w zaleznosci od tego czy trwa okres zawieszenia pracownika
      --typ zmiany ustawiany jest albo na 'C' (zawieszony)
      --albo na poprzedni typ zmiany inny od 'C' i 'Z'
      IF @dZawieszDo IS NOT NULL AND @dataZmiany &lt;= @dZawieszDo
      SET @typZmiany = 'C'
      ELSE
      BEGIN
      SET @typZmiany = @typZmianyPoprzedni
      SET @kodZawiesz = ''
      SET @dZawieszDo = NULL
      END
      END
      END
      ELSE
      SET @koniec = 1

      END --petla zmian dla jednej umowy

      FETCH NEXT FROM c_kupic
      INTO @typUmowy, @nrEwid, @nrUmowy;
      END

      CLOSE c_kupic
      DEALLOCATE c_kupic

      END
    </TextProc>
    </TabProcki>
  <TabProcki>
    <Id>487</Id>
    <NrLog>4</NrLog>
    <NrTab>75</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>488</Id>
    <NrLog>4</NrLog>
    <NrTab>76</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>489</Id>
    <NrLog>4</NrLog>
    <NrTab>77</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>490</Id>
    <NrLog>4</NrLog>
    <NrTab>78</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>491</Id>
    <NrLog>4</NrLog>
    <NrTab>79</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>492</Id>
    <NrLog>4</NrLog>
    <NrTab>80</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>493</Id>
    <NrLog>4</NrLog>
    <NrTab>81</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>494</Id>
    <NrLog>4</NrLog>
    <NrTab>82</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>495</Id>
    <NrLog>4</NrLog>
    <NrTab>83</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>496</Id>
    <NrLog>4</NrLog>
    <NrTab>84</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>497</Id>
    <NrLog>4</NrLog>
    <NrTab>85</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>498</Id>
    <NrLog>4</NrLog>
    <NrTab>86</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki> 
  <TabProcki>
    <Id>500</Id>
    <NrLog>4</NrLog>
    <NrTab>88</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>501</Id>
    <NrLog>4</NrLog>
    <NrTab>89</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>502</Id>
    <NrLog>4</NrLog>
    <NrTab>90</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>503</Id>
    <NrLog>4</NrLog>
    <NrTab>91</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>504</Id>
    <NrLog>4</NrLog>
    <NrTab>92</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>505</Id>
    <NrLog>4</NrLog>
    <NrTab>93</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>505</Id>
    <NrLog>4</NrLog>
    <NrTab>94</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>506</Id>
    <NrLog>4</NrLog>
    <NrTab>95</NrTab>
    <NrProc>200</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>507</Id>
    <NrLog>4</NrLog>
    <NrTab>96</NrTab>
    <NrProc>201</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>XTpkOpis_AFTER_DELETE_UsunDefinicjeKontaBezSubkont</NzProc>
    <TextProc>
      CREATE TRIGGER XTpkOpis_AFTER_DELETE_UsunDefinicjeKontaBezSubkont
      ON XTpkOpis
      AFTER DELETE
      AS
      Declare @ile int
      Declare @okresO smallint
      Declare @kontoParent varchar(50)

      select @kontoparent=kontoparent from deleted
      select @okresO=OkresO from deleted
      select @ile=count(*) from XTpkOpis where KontoParent=@kontoParent
      and KontoParent&lt;>Konto
      and OkresO=@okresO

      if(@ile=0)
      Delete from FKTpkDefinicjaKonta where konto=@kontoParent and OkresO=@okresO
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>508</Id>
    <NrLog>4</NrLog>
    <NrTab>96</NrTab>
    <NrProc>202</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>XTpkProjekty_AFTER_DELETE_UsunDefinicjeKontaBezSubkont</NzProc>
    <TextProc>
      CREATE TRIGGER XTpkProjekty_AFTER_DELETE_UsunDefinicjeKontaBezSubkont
      ON XTpkProjekty
      AFTER DELETE
      AS
      Declare @ile int
      Declare @symbolProjektu smallint
      Declare @kontoParent varchar(50)

      select @kontoparent=kontoparent from deleted
      select @symbolProjektu=SymbolProjektu from deleted
      select @ile=count(*) from XTpkProjekty where KontoParent=@kontoParent
      and KontoParent&lt;>Konto
      and SymbolProjektu=@symbolProjektu

      if(@ile=0) Delete from FKTpkDefinicjaKontaProjekty
      where konto=@kontoParent and SymbolProjektu=@symbolProjektu
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>509</Id>
    <NrLog>4</NrLog>
    <NrTab>96</NrTab>
    <NrProc>203</NrProc>
    <ProcFun>TRIGGER</ProcFun>
    <NzProc>XTpkWzorce_AFTER_DELETE_UsunDefinicjeKontaBezSubkont</NzProc>
    <TextProc>
      CREATE TRIGGER XTpkWzorce_AFTER_DELETE_UsunDefinicjeKontaBezSubkont
      ON XTpkWzorce
      AFTER DELETE
      AS
      Declare @ile int
      Declare @symbolWzorca smallint
      Declare @kontoParent varchar(50)

      select @kontoparent=kontoparent from deleted
      select @symbolWzorca=SymbolWzorca from deleted
      select @ile=count(*) from XTpkWzorce where KontoParent=@kontoParent
      and KontoParent&lt;>Konto
      and SymbolWzorca=@symbolWzorca

      if(@ile=0) Delete from FKTpkDefinicjaKontaWzorce
      where konto=@kontoParent and SymbolWzorca=@symbolWzorca
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>510</Id>
    <NrLog>4</NrLog>
    <NrTab>96</NrTab>
    <NrProc>204</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKTPKDefinicjaKontaDlugoscKonta</NzProc>
    <TextProc>
      create function FKTPKDefinicjaKontaDlugoscKonta
      (
      @OkresO smallint,
      @Konto varchar(50)
      )
      RETURNS int
      AS
      BEGIN
      declare @ret int
      declare @rodzDefAnal char(1)
      declare @poziom int
      declare @dlsymb int
      declare @kontoparent varchar(50)

      select @rodzdefanal=rodzdefanal, @poziom=poziom, @dlsymb=dlsymb
      from fktpkdefinicjakonta where konto=@konto and okreso=@okreso

      if  @poziom=0
      begin
      select @ret=len(@konto)+1+@dlsymb
      end
      else
      begin
      select @kontoparent=kontoparent from xtpkopis
      where okreso=@okreso and konto=@konto
      select @ret=dbo.FKTPKDefinicjaKontaDlugoscKonta(@okreso, @kontoparent)+1+@dlsymb
      end

      return @ret
      end
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>511</Id>
    <NrLog>4</NrLog>
    <NrTab>96</NrTab>
    <NrProc>205</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKTPKDefinicjaKontaProjektyDlugoscKonta</NzProc>
    <TextProc>
      create function FKTPKDefinicjaKontaProjektyDlugoscKonta
      (
      @SymbolProjektu smallint,
      @Konto varchar(50)
      )
      RETURNS int
      AS
      BEGIN
      declare @ret int
      declare @rodzDefAnal char(1)
      declare @poziom int
      declare @dlsymb int
      declare @kontoparent varchar(50)

      select @rodzdefanal=rodzdefanal, @poziom=poziom, @dlsymb=dlsymb
      from fktpkdefinicjakontaProjekty where konto=@konto and symbolprojektu=@SymbolProjektu

      if  @poziom=0
      begin
      select @ret=len(@konto)+1+@dlsymb
      end
      else
      begin
      select @kontoparent=kontoparent from xtpkprojekty
      where symbolprojektu=@symbolprojektu and konto=@konto
      select @ret=dbo.FKTPKDefinicjaKontaProjektyDlugoscKonta(@symbolprojektu, @kontoparent)+1+@dlsymb
      end

      return @ret
      end
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>512</Id>
    <NrLog>4</NrLog>
    <NrTab>96</NrTab>
    <NrProc>206</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKTPKDefinicjaKontaWzorceDlugoscKonta</NzProc>
    <TextProc>
      create function FKTPKDefinicjaKontaWzorceDlugoscKonta
      (
      @Symbolwzorca smallint,
      @Konto varchar(50)
      )
      RETURNS int
      AS
      BEGIN
      declare @ret int
      declare @rodzDefAnal char(1)
      declare @poziom int
      declare @dlsymb int
      declare @kontoparent varchar(50)

      select @rodzdefanal=rodzdefanal, @poziom=poziom, @dlsymb=dlsymb
      from fktpkdefinicjakontawzorce where konto=@konto and symbolwzorca=@SymbolWzorca

      if  @poziom=0
      begin
      select @ret=len(@konto)+1+@dlsymb
      end
      else
      begin
      select @kontoparent=kontoparent from xtpkwzorce
      where symbolwzorca=@symbolwzorca and konto=@konto
      select @ret=dbo.FKTPKDefinicjaKontaWzorceDlugoscKonta(@symbolwzorca, @kontoparent)+1+@dlsymb
      end

      return @ret
      end
    </TextProc> />
  </TabProcki>
  <TabProcki>
    <Id>513</Id>
    <NrLog>4</NrLog>
    <NrTab>96</NrTab>
    <NrProc>207</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>PoziomRKonta</NzProc>
    <TextProc>
      CREATE FUNCTION PoziomRKonta
      (
      @okresO SMALLINT,
      @konto VARCHAR(50)
      )
      RETURNS SMALLINT
      AS
      BEGIN
      DECLARE @rozrachunkowe BIT;
      DECLARE @kontoParent VARCHAR(50);
      DECLARE @ileRozrachunkowych SMALLINT;

      SET @ileRozrachunkowych = -1;


      SELECT  @rozrachunkowe = XTPKOpis.Rozrachunkowe,
      @kontoParent = XTPKOpis.KontoParent
      FROM	XTPKOpis
      WHERE	OkresO = @okresO
      AND	Konto = @konto;

      WHILE @rozrachunkowe = 1
      BEGIN
      SET @ileRozrachunkowych = @ileRozrachunkowych + 1;

      IF @kontoParent &lt;&gt; @konto
      BEGIN
      SET @konto = @kontoParent;
      SELECT  @rozrachunkowe = XTPKOpis.Rozrachunkowe,
      @kontoParent = XTPKOpis.KontoParent
      FROM	XTPKOpis
      WHERE	OkresO = @okresO
      AND	Konto = @konto;
      END
      ELSE
      BEGIN
      --przerwij petle bo jestesmy w syntetyce
      set @rozrachunkowe = 0
      END
      END

      RETURN @ileRozrachunkowych;
      END
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>514</Id>
    <NrLog>4</NrLog>
    <NrTab>96</NrTab>
    <NrProc>208</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>NrWyjatkuKonta</NzProc>
    <TextProc>
      CREATE FUNCTION NrWyjatkuKonta
      (
      @okresO SMALLINT,
      @konto VARCHAR(50)
      )
      RETURNS SMALLINT
      AS
      BEGIN
      DECLARE @nrWyjatkuKtrKnt INT;
      DECLARE @nrWyjatkuKtr INT;
      DECLARE @nrWyjatkuKnt INT;
      DECLARE @sySlow VARCHAR(3);
      DECLARE @analityka VARCHAR(20);
      DECLARE @kontoParent VARCHAR(50);

      SELECT	@sySlow = SySlow,
      @analityka = Analityka
      FROM	XTPKOpis
      WHERE	OkresO = @okresO
      AND	Konto = @konto

      --COALESCE(KtrKnt.NrWyjatku, Ktr.NrWyjatku, Knt.NrWyjatku)
      SELECT	@kontoParent = XTPKOpis.KontoParent,
      @nrWyjatkuKtrKnt = KtrKnt.NrWyjatku,
      @nrWyjatkuKtr = Ktr.NrWyjatku,
      @nrWyjatkuKnt = Knt.NrWyjatku
      FROM	XTPKOpis
      LEFT OUTER JOIN FKRozrachunkiCechy KtrKnt
      ON	XTPKOpis.OkresO = KtrKnt.OkresO
      AND	XTPKOpis.Konto = KtrKnt.Konto
      AND KtrKnt.SySlow = @sySlow
      AND KtrKnt.Analityka = @analityka
      LEFT OUTER JOIN FKRozrachunkiCechy Ktr
      ON	XTPKOpis.OkresO = Ktr.OkresO
      AND	Ktr.Konto IS NULL
      AND Ktr.SySlow = @sySlow
      AND Ktr.Analityka = @analityka
      LEFT OUTER JOIN FKRozrachunkiCechy Knt
      ON	XTPKOpis.OkresO = Knt.OkresO
      AND	XTPKOpis.Konto = Knt.Konto
      AND Knt.SySlow IS NULL
      AND (Knt.Analityka IS NULL
      OR Knt.Analityka = '')
      WHERE	XTPKOpis.OkresO = @okresO
      AND XTPKOpis.Konto = @konto;

      WHILE @nrWyjatkuKtrKnt IS NULL AND @konto &lt;&gt; @kontoParent
      BEGIN
      SET @konto = @kontoParent;
      SELECT	@kontoParent = XTPKOpis.KontoParent,
      @nrWyjatkuKtrKnt = CASE WHEN @nrWyjatkuKtrKnt IS NOT NULL THEN @nrWyjatkuKtrKnt ELSE KtrKnt.NrWyjatku END,
      @nrWyjatkuKnt = CASE WHEN @nrWyjatkuKnt IS NOT NULL THEN @nrWyjatkuKnt ELSE Knt.NrWyjatku END
      FROM	XTPKOpis
      LEFT OUTER JOIN FKRozrachunkiCechy KtrKnt
      ON	XTPKOpis.OkresO = KtrKnt.OkresO
      AND	XTPKOpis.Konto = KtrKnt.Konto
      AND KtrKnt.SySlow = @sySlow
      AND KtrKnt.Analityka = @analityka
      LEFT OUTER JOIN FKRozrachunkiCechy Knt
      ON	XTPKOpis.OkresO = Knt.OkresO
      AND	XTPKOpis.Konto = Knt.Konto
      AND Knt.SySlow IS NULL
      AND (Knt.Analityka IS NULL
      OR Knt.Analityka = '')
      WHERE	XTPKOpis.OkresO = @okresO
      AND XTPKOpis.Konto = @konto;
      END

      RETURN COALESCE(@nrWyjatkuKtrKnt, @nrWyjatkuKtr, @nrWyjatkuKnt, 0);
      END
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>515</Id>
    <NrLog>4</NrLog>
    <NrTab>96</NrTab>
    <NrProc>209</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKRDekretyOkres</NzProc>
    <TextProc>
      CREATE FUNCTION [dbo].[FKRDekretyOkres](@okresO int, @okresORdekretu smallint=null, @rok smallint=null, @mies smallint=null, 
      @dowodNr varchar(15)=null,
      @nrPozycjiKs smallint=null, @nrDekretu smallint=null, @zStrony varchar(2)=null, @nrPozycjiRozr smallint=null)
      RETURNS @wynik TABLE
      (
      OkresO smallint not null,
      Rok smallint not null,
      Mies smallint not null,
      DowodNr varchar(15) not null,
      NrPozycjiKs smallint not null,
      NrDekretu smallint not null,
      ZStrony varchar(2) not null,
      NrPozycjiRozr smallint not null,
      OstatnieKonto varchar(50) not null
      )
      AS
      BEGIN
      IF (@okresORdekretu IS NULL
      OR @rok IS NULL
      OR @mies IS NULL
      OR @dowodNr IS NULL
      OR @nrPozycjiKs IS NULL
      OR @nrDekretu IS NULL
      OR @zStrony IS NULL
      OR @nrPozycjiRozr IS NULL)

      INSERT INTO @wynik(OkresO, Rok, Mies, DowodNr, NrPozycjiKs, NrDekretu, ZStrony, NrPozycjiRozr, OstatnieKonto)
      SELECT      FKRDekrety.OkresO,
      FKRDekrety.Rok,
      FKRDekrety.Mies,
      FKRDekrety.DowodNr,
      FKRDekrety.NrPozycjiKs,
      FKRDekrety.NrDekretu,
      FKRDekrety.ZStrony,
      FKRDekrety.NrPozycjiRozr,
      CASE WHEN WarstwaRozNast.WarstwaRoz IS NOT NULL AND FKDekretyKonwersja.Konto IS NOT NULL THEN FKDekretyKonwersja.Konto
      ELSE FKRdekrety.OstatnieKonto
      END OstatnieKonto
      FROM  FKRDekrety
      LEFT OUTER JOIN FKOkresyWarstwyRoz WarstwaRozBiez
      ON    WarstwaRozBiez.OkresO = @okresO
      OUTER APPLY
      (
      SELECT      TOP(1) WarstwaRoz
      FROM  FKOkresyWarstwyRoz WarstwaRozNastWew
      WHERE WarstwaRozNastWew.OkresO &gt; @okresO
      AND   WarstwaRozNastWew.WarstwaRoz &lt;&gt; WarstwaRozBiez.WarstwaRoz
      ) WarstwaRozNast
      LEFT OUTER JOIN FKDekretyKonwersja
      ON    FKDekretyKonwersja.WarstwaRoz = WarstwaRozBiez.WarstwaRoz
      AND   FKDekretyKonwersja.OkresO = FKRdekrety.OkresO
      AND FKDekretyKonwersja.Rok = FKRdekrety.Rok
      AND FKDekretyKonwersja.Mies = FKRdekrety.Mies
      AND FKDekretyKonwersja.DowodNr = FKRdekrety.DowodNr
      AND FKDekretyKonwersja.NrPozycjiKs = FKRdekrety.NrPozycjiKs
      AND FKDekretyKonwersja.NrDekretu = FKRdekrety.NrDekretu
      AND FKDekretyKonwersja.ZStrony = FKRdekrety.ZStrony
      ELSE
      INSERT INTO @wynik(OkresO, Rok, Mies, DowodNr, NrPozycjiKs, NrDekretu, ZStrony, NrPozycjiRozr, OstatnieKonto)
      SELECT      FKRDekrety.OkresO,
      FKRDekrety.Rok,
      FKRDekrety.Mies,
      FKRDekrety.DowodNr,
      FKRDekrety.NrPozycjiKs,
      FKRDekrety.NrDekretu,
      FKRDekrety.ZStrony,
      FKRDekrety.NrPozycjiRozr,
      CASE WHEN WarstwaRozNast.WarstwaRoz IS NOT NULL AND FKDekretyKonwersja.Konto IS NOT NULL THEN FKDekretyKonwersja.Konto
      ELSE FKRdekrety.OstatnieKonto
      END OstatnieKonto
      FROM  FKRDekrety
      LEFT OUTER JOIN FKOkresyWarstwyRoz WarstwaRozBiez
      ON    WarstwaRozBiez.OkresO = @okresO
      OUTER APPLY
      (
      SELECT      TOP(1) WarstwaRoz
      FROM  FKOkresyWarstwyRoz WarstwaRozNastWew
      WHERE WarstwaRozNastWew.OkresO &gt; @okresO
      AND   WarstwaRozNastWew.WarstwaRoz &lt;&gt; WarstwaRozBiez.WarstwaRoz
      ) WarstwaRozNast
      LEFT OUTER JOIN FKDekretyKonwersja
      ON    FKDekretyKonwersja.WarstwaRoz = WarstwaRozBiez.WarstwaRoz
      AND   FKDekretyKonwersja.OkresO = FKRdekrety.OkresO
      AND FKDekretyKonwersja.Rok = FKRdekrety.Rok
      AND FKDekretyKonwersja.Mies = FKRdekrety.Mies
      AND FKDekretyKonwersja.DowodNr = FKRdekrety.DowodNr
      AND FKDekretyKonwersja.NrPozycjiKs = FKRdekrety.NrPozycjiKs
      AND FKDekretyKonwersja.NrDekretu = FKRdekrety.NrDekretu
      AND FKDekretyKonwersja.ZStrony = FKRdekrety.ZStrony
      WHERE
      FKRDekrety.OkresO = @okresORdekretu
      AND FKRDekrety.Rok = @rok
      AND FKRDekrety.Mies = @mies
      AND FKRDekrety.DowodNr = @dowodNr
      AND FKRDekrety.NrPozycjiKs = @nrPozycjiKs
      AND FKRDekrety.NrDekretu = @nrDekretu
      AND FKRDekrety.ZStrony = @zStrony
      AND FKRDekrety.NrPozycjiRozr = @nrPozycjiRozr

      RETURN
      END

    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>516</Id>
    <NrLog>4</NrLog>
    <NrTab>97</NrTab>
    <NrProc>209</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>517</Id>
    <NrLog>4</NrLog>
    <NrTab>98</NrTab>
    <NrProc>209</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>518</Id>
    <NrLog>4</NrLog>
    <NrTab>99</NrTab>
    <NrProc>210</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>RegexMatch</NzProc>
    <TextProc>
      CREATE FUNCTION RegexMatch(@0 [nvarchar](max), @1 [nvarchar](4000))
      RETURNS [bit] WITH EXECUTE AS CALLER
      AS
      EXTERNAL NAME [InfraSqlCLR].[UserDefinedFunctions].[RegexMatch]
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>519</Id>
    <NrLog>5</NrLog>
    <NrTab>1</NrTab>
    <NrProc>211</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>FKDajKontaWgDefWyboru</NzProc>
    <TextProc>
      CREATE PROCEDURE FKDajKontaWgDefWyboru
      @0 [smallint],
      @1 [nvarchar](4000),
      @2 [nvarchar](4000),
      @3 [nvarchar](4000)
      WITH EXECUTE AS CALLER
      AS
      EXTERNAL NAME [InfraSqlCLR].[StoredProcedures].[FKDajKontaWgDefWyboru]
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>520</Id>
    <NrLog>5</NrLog>
    <NrTab>2</NrTab>
    <NrProc>211</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>521</Id>
    <NrLog>5</NrLog>
    <NrTab>3</NrTab>
    <NrProc>211</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>522</Id>
    <NrLog>5</NrLog>
    <NrTab>4</NrTab>
    <NrProc>212</NrProc>
    <ProcFun>Trigger</ProcFun>
    <NzProc>XTpkOpis_BEFORE_DELETE_UsunFKEtykietyFunkcjeJakKonta</NzProc>
    <TextProc>
      CREATE TRIGGER XTpkOpis_BEFORE_DELETE_UsunFKEtykietyFunkcjeJakKonta
      ON [dbo].[XTPKOpis]
      INSTEAD OF DELETE
      AS
      BEGIN

      DELETE K
      FROM FKEtykietyFunkcjeJakKonta K
      INNER JOIN DELETED D
      ON K.OkresO = D.OkresO
      AND K.KontoPodstawy = D.Konto

      DELETE K
      FROM FKEtykietyFunkcjeJakKonta K
      INNER JOIN DELETED D
      ON K.OkresODocelowy = D.OkresO
      AND K.KontoDocelowe = D.Konto

      DELETE O
      FROM DELETED D
      INNER JOIN XTPKOpis O
      ON     O.OkresO = D.OkresO
      AND    O.Konto = D.Konto

      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>523</Id>
    <NrLog>5</NrLog>
    <NrTab>5</NrTab>
    <NrProc>212</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>524</Id>
    <NrLog>5</NrLog>
    <NrTab>6</NrTab>
    <NrProc>212</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>525</Id>
    <NrLog>5</NrLog>
    <NrTab>7</NrTab>
    <NrProc>212</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>526</Id>
    <NrLog>5</NrLog>
    <NrTab>8</NrTab>
    <NrProc>212</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>527</Id>
    <NrLog>5</NrLog>
    <NrTab>9</NrTab>
    <NrProc>212</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>528</Id>
    <NrLog>5</NrLog>
    <NrTab>10</NrTab>
    <NrProc>213</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>RegexMatch</NzProc>
    <TextProc>
      CREATE FUNCTION RegexMatch(@0 [nvarchar](max), @1 [nvarchar](4000))
      RETURNS [bit] WITH EXECUTE AS CALLER
      AS
      EXTERNAL NAME [InfraSqlCLR].[UserDefinedFunctions].[RegexMatch]
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>529</Id>
    <NrLog>5</NrLog>
    <NrTab>10</NrTab>
    <NrProc>214</NrProc>
    <ProcFun>PROCEDURE</ProcFun>
    <NzProc>FKDajKontaWgDefWyboru</NzProc>
    <TextProc>
      CREATE PROCEDURE FKDajKontaWgDefWyboru
      @0 [smallint],
      @1 [nvarchar](4000),
      @2 [nvarchar](4000),
      @3 [nvarchar](4000)
      WITH EXECUTE AS CALLER
      AS
      EXTERNAL NAME [InfraSqlCLR].[StoredProcedures].[FKDajKontaWgDefWyboru]
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>530</Id>
    <NrLog>5</NrLog>
    <NrTab>11</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>531</Id>
    <NrLog>5</NrLog>
    <NrTab>12</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>532</Id>
    <NrLog>5</NrLog>
    <NrTab>13</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>533</Id>
    <NrLog>5</NrLog>
    <NrTab>14</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>534</Id>
    <NrLog>5</NrLog>
    <NrTab>15</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>535</Id>
    <NrLog>5</NrLog>
    <NrTab>16</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>536</Id>
    <NrLog>5</NrLog>
    <NrTab>17</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>537</Id>
    <NrLog>5</NrLog>
    <NrTab>18</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
   
  <TabProcki>
    <Id>538</Id>
    <NrLog>5</NrLog>
    <NrTab>19</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>539</Id>
    <NrLog>5</NrLog>
    <NrTab>20</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>540</Id>
    <NrLog>5</NrLog>
    <NrTab>21</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>541</Id>
    <NrLog>5</NrLog>
    <NrTab>22</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>542</Id>
    <NrLog>5</NrLog>
    <NrTab>23</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>542</Id>
    <NrLog>5</NrLog>
    <NrTab>24</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>543</Id>
    <NrLog>5</NrLog>
    <NrTab>25</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>544</Id>
    <NrLog>5</NrLog>
    <NrTab>26</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>545</Id>
    <NrLog>5</NrLog>
    <NrTab>27</NrTab>
    <NrProc>214</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>546</Id>
    <NrLog>5</NrLog>
    <NrTab>28</NrTab>
    <NrProc>215</NrProc>
    <ProcFun>procedure</ProcFun>
    <NzProc>KontaNierozliczoneStronaOkresO</NzProc>
    <TextProc>
      CREATE PROCEDURE [dbo].[KontaNierozliczoneStronaOkresO]
      (
             @0 INT
      )
      AS

      WITH CTE_Konta
      AS
      (
                   SELECT Dek.Konto Konto, 'WN' Strona
                   FROM   XTPKOpis Dek
                   WHERE  Dek.OkresO=@0
             UNION
                   SELECT Dek.Konto Konto, 'MA' Strona
                   FROM   XTPKOpis Dek
                   WHERE  Dek.OkresO=@0
      ) 
      SELECT CTE_Konta.Konto,
                   CTE_Konta.Strona
      FROM   FKRDekrety RDek
      LEFT OUTER JOIN FKOkresyWarstwyRoz WarstwaRozBiez
             ON     WarstwaRozBiez.OkresO = @0
      OUTER APPLY 
      ( 
             SELECT TOP(1) WarstwaRoz 
             FROM   FKOkresyWarstwyRoz WarstwaRozNastWew
             WHERE  WarstwaRozNastWew.OkresO &gt; @0
                   AND    WarstwaRozNastWew.WarstwaRoz &lt;&gt; WarstwaRozBiez.WarstwaRoz
      ) WarstwaRozNast
      LEFT OUTER JOIN FKDekretyKonwersja
             ON     FKDekretyKonwersja.WarstwaRoz = WarstwaRozBiez.WarstwaRoz
             AND    FKDekretyKonwersja.OkresO = RDek.OkresO
             AND FKDekretyKonwersja.Rok = RDek.Rok
             AND FKDekretyKonwersja.Mies = RDek.Mies
             AND FKDekretyKonwersja.DowodNr = RDek.DowodNr
             AND FKDekretyKonwersja.NrPozycjiKs = RDek.NrPozycjiKs
             AND FKDekretyKonwersja.NrDekretu = RDek.NrDekretu
             AND FKDekretyKonwersja.ZStrony = RDek.ZStrony
      LEFT OUTER JOIN XTPKOpis tpkOstatnieKonto
             ON     tpkOstatnieKonto.OkresO = @0
             AND tpkOstatnieKonto.Konto = RDek.OstatnieKonto
      LEFT OUTER JOIN XTPKOpis tpkKonwersja
             ON     tpkKonwersja.OkresO = @0
             AND tpkKonwersja.Konto = FKDekretyKonwersja.Konto
      INNER JOIN   CTE_Konta
             ON     CTE_Konta.Konto = CASE WHEN WarstwaRozNast.WarstwaRoz IS NOT NULL AND tpkKonwersja.Konto IS NOT NULL THEN tpkKonwersja.Konto ELSE tpkOstatnieKonto.Konto END
      WHERE  
                   --UWAGA: pomono, że poniższy warunek jest zupełnie niepotrzebny (INNER JOIN go realizuje), dodanie go ma OGROMNY, pozytywny wpływ na wydajność
                   CASE WHEN WarstwaRozNast.WarstwaRoz IS NOT NULL AND tpkKonwersja.Konto IS NOT NULL THEN tpkKonwersja.Konto ELSE tpkOstatnieKonto.Konto END IN (SELECT Konto FROM CTE_KONTA)
             AND 
             (      
                          (CTE_Konta.Strona = 'WN' 
                                 AND (RDek.SaldoRozlMA &gt; 0 
                                        OR     SaldoRozlWN &lt; 0 
                                        OR     SaldoRozlWalMA &gt; 0 
                                        OR     SaldoRozlWalWN &lt; 0)) 
                   OR     
                          (CTE_Konta.Strona = 'MA' 
                                 AND (RDek.SaldoRozlMA &lt; 0 
                                        OR     SaldoRozlWN &gt; 0 
                                        OR     SaldoRozlWalMA &lt; 0 
                                        OR     SaldoRozlWalWN &gt; 0))
             )
      GROUP BY CTE_Konta.Konto, CTE_Konta.Strona
      ORDER BY CTE_Konta.Konto, CTE_Konta.Strona
      
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>547</Id>
    <NrLog>5</NrLog>
    <NrTab>29</NrTab>
    <NrProc>215</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>548</Id>
    <NrLog>5</NrLog>
    <NrTab>30</NrTab>
    <NrProc>215</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>549</Id>
    <NrLog>5</NrLog>
    <NrTab>31</NrTab>
    <NrProc>215</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>550</Id>
    <NrLog>5</NrLog>
    <NrTab>32</NrTab>
    <NrProc>215</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>551</Id>
    <NrLog>5</NrLog>
    <NrTab>33</NrTab>
    <NrProc>215</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>552</Id>
    <NrLog>5</NrLog>
    <NrTab>34</NrTab>
    <NrProc>215</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>553</Id>
    <NrLog>5</NrLog>
    <NrTab>35</NrTab>
    <NrProc>215</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>554</Id>
    <NrLog>5</NrLog>
    <NrTab>36</NrTab>
    <NrProc>215</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>555</Id>
    <NrLog>5</NrLog>
    <NrTab>37</NrTab>
    <NrProc>216</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FADajCzlonNumeru</NzProc>
    <TextProc>
      CREATE FUNCTION FADajCzlonNumeru
      (
      @numer int,
      @rejestr varchar(10),
      @miesiac int,
      @rok int,
      @rozdzielacz varchar(1),
      @format varchar(10),
      @formatFK int,
      @znakFormatu int
      )
      RETURNS VARCHAR(10)
      AS
      BEGIN
      --znaczenie znaków formatu:
      --'1' - numer faktury
      --'2' - rejestr
      --'3' - miesiac
      --'4' - rok

      DECLARE @wynik varchar(10)
      DECLARE @miesiacStr VARCHAR(4)
      DECLARE @rokStr VARCHAR(4)
      DECLARE @numerStr VARCHAR(10)

      DECLARE @znak CHAR(1) select @znak = LEFT(RIGHT(@format, LEN(@format) - @znakFormatu), 1)

      SELECT @miesiacStr = CASE WHEN @formatFK &lt; 10 THEN REPLACE(STR(@miesiac,2),' ','0') ELSE CONVERT(VARCHAR, @miesiac) END
       SELECT @rokStr = CASE WHEN @formatFK IN (2, 3, 12) THEN RIGHT(CONVERT(VARCHAR, @rok), 2)  ELSE CONVERT(VARCHAR, @rok) END
       SELECT @numerStr = CASE WHEN @formatFK &lt; 10 THEN REPLACE(STR(@numer, 4),' ','0') ELSE CONVERT(VARCHAR, @numer) END

       select @rozdzielacz = CASE WHEN @formatFK = 3 THEN '' ELSE @rozdzielacz END

       -- Add the T-SQL statements to compute the return value here
       SELECT @wynik = CASE WHEN @znak &lt;&gt; '0' AND @znakFormatu &gt; 0 THEN @rozdzielacz ELSE '' END + CASE @znak WHEN '1' THEN @numerStr WHEN '2' THEN @rejestr WHEN '3' THEN @miesiacStr WHEN '4' THEN @rokStr ELSE '' END

      -- Return the result of the function
      RETURN @wynik

      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>556</Id>
    <NrLog>5</NrLog>
    <NrTab>37</NrTab>
    <NrProc>217</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FADajNumer</NzProc>
    <TextProc>
      CREATE FUNCTION FADajNumer
      (
      @numer int,
      @rejestr varchar(10),
      @miesiac int,
      @rok int,
      @rozdzielacz varchar(1),
      @format varchar(10),
      @formatFK int = 10
      )
      RETURNS VARCHAR(30)
      AS
      BEGIN
      DECLARE @wynik varchar(30)

      -- Add the T-SQL statements to compute the return value here
      SELECT @wynik = dbo.FADajCzlonNumeru(@numer, @rejestr, @miesiac, @rok, @rozdzielacz, @format, @formatFK, 0)
      + dbo.FADajCzlonNumeru(@numer, @rejestr, @miesiac, @rok, @rozdzielacz, @format, @formatFK, 1)
      + dbo.FADajCzlonNumeru(@numer, @rejestr, @miesiac, @rok, @rozdzielacz, @format, @formatFK, 2)
      + dbo.FADajCzlonNumeru(@numer, @rejestr, @miesiac, @rok, @rozdzielacz, @format, @formatFK, 3)

      -- Return the result of the function
      RETURN @wynik

      END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>557</Id>
    <NrLog>5</NrLog>
    <NrTab>38</NrTab>
    <NrProc>217</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>558</Id>
    <NrLog>5</NrLog>
    <NrTab>39</NrTab>
    <NrProc>217</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>559</Id>
    <NrLog>5</NrLog>
    <NrTab>40</NrTab>
    <NrProc>217</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>560</Id>
    <NrLog>5</NrLog>
    <NrTab>41</NrTab>
    <NrProc>217</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>561</Id>
    <NrLog>5</NrLog>
    <NrTab>42</NrTab>
    <NrProc>217</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>561</Id>
    <NrLog>5</NrLog>
    <NrTab>43</NrTab>
    <NrProc>217</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>562</Id>
    <NrLog>5</NrLog>
    <NrTab>44</NrTab>
    <NrProc>217</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>563</Id>
    <NrLog>5</NrLog>
    <NrTab>45</NrTab>
    <NrProc>218</NrProc>
    <ProcFun>Function</ProcFun>
    <NzProc>PozycjeSlownika</NzProc>
    <TextProc>
      CREATE FUNCTION PozycjeSlownika (
      @SySlow VARCHAR(3),
      @OkresO INT = NULL
      )
      RETURNS @wynik TABLE
      (
      OkresO INT,
      SySlow VARCHAR(3),
      SyAnal VARCHAR(15),
      NzSkr VARCHAR(35),
      NzPelna VARCHAR(120)
      )
      AS
      BEGIN
      IF LEFT(@SySlow, 1) = 'I'
      INSERT INTO @wynik
      SELECT @OkresO, SySlow, SyAnal, NazwaSkr NzSkr, NzPelna
      FROM   XSlAnal
      WHERE  SySlow = @SySlow
      AND    OkresO = @OkresO
      ELSE IF LEFT (@SySlow, 1) = 'K'
      INSERT INTO @wynik
      SELECT @OkresO, SySlow, SyKth SyAnal, NaSkrKth, RTRIM(NaKth1 + ' ' + NaKth2 + ' ' + NaKth3) NzPelna
      FROM   XSlKth
      WHERE  SySlow = @SySlow
      ELSE IF LEFT(@SySlow, 1) = 'S'
      INSERT INTO @wynik
      SELECT @OkresO, SySlow, Kod SyAnal, NazwaSkr NzSkr, Opis NzPelna
      FROM   XSlowSO
      WHERE  SySlow = @SySlow
      AND    OkresO = @OkresO
      ELSE IF @SySlow = 'XMW'
      INSERT INTO @wynik
      SELECT @OkresO, @SySlow, NrMWyp SyAnal, NazwaSkr NzSkr, NazwaSkr NzPelna
      FROM   KPSlMWyp
      ELSE IF @SySlow = 'XKP'
      INSERT INTO @wynik
      SELECT @OkresO, SySlow, NrEwid SyAnal, NazwaSkr NzSkr, Imie1 + ' ' + Nazwisko NzPelna
      FROM   XKOP
      WHERE  SySlow = @SySlow
      --dodawać kolejne słowniki
      RETURN
      END

    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>564</Id>
    <NrLog>5</NrLog>
    <NrTab>46</NrTab>
    <NrProc>218</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>565</Id>
    <NrLog>5</NrLog>
    <NrTab>47</NrTab>
    <NrProc>218</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>566</Id>
    <NrLog>5</NrLog>
    <NrTab>48</NrTab>
    <NrProc>218</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>567</Id>
    <NrLog>5</NrLog>
    <NrTab>49</NrTab>
    <NrProc>219</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>MDTWyliczDatePrzedawnienia</NzProc>
    <TextProc>
CREATE   FUNCTION [dbo].[MDTWyliczDatePrzedawnienia](@date DATETIME)
RETURNS DATETIME
AS
BEGIN
    DECLARE @start_date DATETIME
    DECLARE @end_date DATETIME
    DECLARE @overlap INT
       DECLARE @result DATETIME
    SET @result = DATEADD(YEAR, 5, @date)

    DECLARE period_cursor CURSOR FOR
    SELECT DataOd, DataDo FROM MDTOkresyNieprzedawniajace ORDER BY DataOd ASC

    OPEN period_cursor

    FETCH NEXT FROM period_cursor INTO @start_date, @end_date

    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @overlap = 0

        If @start_date&lt;=@date AND @end_date&lt;=@result
                    SET @overlap = DATEDIFF(day, @date, @end_date)+1

             If @start_date&gt;=@date AND @end_date&lt;=@result
                    SET @overlap = DATEDIFF(day, @start_date, @end_date)

             If @start_date&lt;=@result AND @end_date&gt;=@result
                    SET @overlap = DATEDIFF(day, @start_date, @end_date)-1

             set @result = DATEADD(DAY, @overlap, @result)
        FETCH NEXT FROM period_cursor INTO @start_date, @end_date
    END

    CLOSE period_cursor
    DEALLOCATE period_cursor
       RETURN @result
END
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>568</Id>
    <NrLog>5</NrLog>
    <NrTab>50</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>569</Id>
    <NrLog>5</NrLog>
    <NrTab>51</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>570</Id>
    <NrLog>5</NrLog>
    <NrTab>52</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>571</Id>
    <NrLog>5</NrLog>
    <NrTab>53</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>572</Id>
    <NrLog>5</NrLog>
    <NrTab>54</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>573</Id>
    <NrLog>5</NrLog>
    <NrTab>55</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>574</Id>
    <NrLog>5</NrLog>
    <NrTab>56</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>575</Id>
    <NrLog>5</NrLog>
    <NrTab>57</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>576</Id>
    <NrLog>5</NrLog>
    <NrTab>58</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>577</Id>
    <NrLog>5</NrLog>
    <NrTab>59</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>578</Id>
    <NrLog>5</NrLog>
    <NrTab>60</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>579</Id>
    <NrLog>5</NrLog>
    <NrTab>61</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>580</Id>
    <NrLog>5</NrLog>
    <NrTab>62</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>581</Id>
    <NrLog>5</NrLog>
    <NrTab>63</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>582</Id>
    <NrLog>5</NrLog>
    <NrTab>64</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>583</Id>
    <NrLog>5</NrLog>
    <NrTab>65</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>584</Id>
    <NrLog>5</NrLog>
    <NrTab>66</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>585</Id>
    <NrLog>5</NrLog>
    <NrTab>67</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>585</Id>
    <NrLog>5</NrLog>
    <NrTab>68</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>586</Id>
    <NrLog>5</NrLog>
    <NrTab>69</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>587</Id>
    <NrLog>5</NrLog>
    <NrTab>70</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>588</Id>
    <NrLog>5</NrLog>
    <NrTab>71</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>589</Id>
    <NrLog>5</NrLog>
    <NrTab>72</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>590</Id>
    <NrLog>5</NrLog>
    <NrTab>73</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>591</Id>
    <NrLog>5</NrLog>
    <NrTab>74</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>592</Id>
    <NrLog>5</NrLog>
    <NrTab>75</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>593</Id>
    <NrLog>5</NrLog>
    <NrTab>76</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>594</Id>
    <NrLog>5</NrLog>
    <NrTab>77</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>
  <TabProcki>
    <Id>595</Id>
    <NrLog>5</NrLog>
    <NrTab>78</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>596</Id>
    <NrLog>5</NrLog>
    <NrTab>79</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>596</Id>
    <NrLog>5</NrLog>
    <NrTab>80</NrTab> 
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>597</Id>
    <NrLog>5</NrLog>
    <NrTab>81</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>598</Id>
    <NrLog>5</NrLog>
    <NrTab>82</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>599</Id>
    <NrLog>5</NrLog>
    <NrTab>83</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>600</Id>
    <NrLog>5</NrLog>
    <NrTab>84</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>601</Id>
    <NrLog>5</NrLog>
    <NrTab>85</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>602</Id>
    <NrLog>5</NrLog>
    <NrTab>86</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>603</Id>
    <NrLog>5</NrLog>
    <NrTab>87</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>604</Id>
    <NrLog>5</NrLog>
    <NrTab>88</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>605</Id>
    <NrLog>5</NrLog>
    <NrTab>89</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>606</Id>
    <NrLog>5</NrLog>
    <NrTab>90</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>  
    <Id>608</Id>
    <NrLog>5</NrLog>
    <NrTab>91</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>609</Id>
    <NrLog>5</NrLog>
    <NrTab>92</NrTab>
    <NrProc>219</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>610</Id>
    <NrLog>5</NrLog>
    <NrTab>93</NrTab>
    <NrProc>220</NrProc>
    <ProcFun>FUNCTION</ProcFun>
    <NzProc>FKRDekretyOkres</NzProc>
    <TextProc>
      CREATE FUNCTION [dbo].[FKRDekretyOkres](@okresO int, @okresORdekretu smallint=null, @rok smallint=null, @mies smallint=null,
      @dowodNr varchar(50)=null,
      @nrPozycjiKs smallint=null, @nrDekretu smallint=null, @zStrony varchar(2)=null, @nrPozycjiRozr smallint=null)
      RETURNS @wynik TABLE
      (
      OkresO smallint not null,
      Rok smallint not null,
      Mies smallint not null,
      DowodNr varchar(50) not null,
      NrPozycjiKs smallint not null,
      NrDekretu smallint not null,
      ZStrony varchar(2) not null,
      NrPozycjiRozr smallint not null,
      OstatnieKonto varchar(50) not null
      )
      AS
      BEGIN
      IF (@okresORdekretu IS NULL
      OR @rok IS NULL
      OR @mies IS NULL
      OR @dowodNr IS NULL
      OR @nrPozycjiKs IS NULL
      OR @nrDekretu IS NULL
      OR @zStrony IS NULL
      OR @nrPozycjiRozr IS NULL)

      INSERT INTO @wynik(OkresO, Rok, Mies, DowodNr, NrPozycjiKs, NrDekretu, ZStrony, NrPozycjiRozr, OstatnieKonto)
      SELECT      FKRDekrety.OkresO,
      FKRDekrety.Rok,
      FKRDekrety.Mies,
      FKRDekrety.DowodNr,
      FKRDekrety.NrPozycjiKs,
      FKRDekrety.NrDekretu,
      FKRDekrety.ZStrony,
      FKRDekrety.NrPozycjiRozr,
      CASE WHEN WarstwaRozNast.WarstwaRoz IS NOT NULL AND FKDekretyKonwersja.Konto IS NOT NULL THEN FKDekretyKonwersja.Konto
      ELSE FKRdekrety.OstatnieKonto
      END OstatnieKonto
      FROM  FKRDekrety
      LEFT OUTER JOIN FKOkresyWarstwyRoz WarstwaRozBiez
      ON    WarstwaRozBiez.OkresO = @okresO
      OUTER APPLY
      (
      SELECT      TOP(1) WarstwaRoz
      FROM  FKOkresyWarstwyRoz WarstwaRozNastWew
      WHERE WarstwaRozNastWew.OkresO &gt; @okresO
      AND   WarstwaRozNastWew.WarstwaRoz &lt;&gt; WarstwaRozBiez.WarstwaRoz
      ) WarstwaRozNast
      LEFT OUTER JOIN FKDekretyKonwersja
      ON    FKDekretyKonwersja.WarstwaRoz = WarstwaRozBiez.WarstwaRoz
      AND   FKDekretyKonwersja.OkresO = FKRdekrety.OkresO
      AND FKDekretyKonwersja.Rok = FKRdekrety.Rok
      AND FKDekretyKonwersja.Mies = FKRdekrety.Mies
      AND FKDekretyKonwersja.DowodNr = FKRdekrety.DowodNr
      AND FKDekretyKonwersja.NrPozycjiKs = FKRdekrety.NrPozycjiKs
      AND FKDekretyKonwersja.NrDekretu = FKRdekrety.NrDekretu
      AND FKDekretyKonwersja.ZStrony = FKRdekrety.ZStrony
      ELSE
      INSERT INTO @wynik(OkresO, Rok, Mies, DowodNr, NrPozycjiKs, NrDekretu, ZStrony, NrPozycjiRozr, OstatnieKonto)
      SELECT      FKRDekrety.OkresO,
      FKRDekrety.Rok,
      FKRDekrety.Mies,
      FKRDekrety.DowodNr,
      FKRDekrety.NrPozycjiKs,
      FKRDekrety.NrDekretu,
      FKRDekrety.ZStrony,
      FKRDekrety.NrPozycjiRozr,
      CASE WHEN WarstwaRozNast.WarstwaRoz IS NOT NULL AND FKDekretyKonwersja.Konto IS NOT NULL THEN FKDekretyKonwersja.Konto
      ELSE FKRdekrety.OstatnieKonto
      END OstatnieKonto
      FROM  FKRDekrety
      LEFT OUTER JOIN FKOkresyWarstwyRoz WarstwaRozBiez
      ON    WarstwaRozBiez.OkresO = @okresO
      OUTER APPLY
      (
      SELECT      TOP(1) WarstwaRoz
      FROM  FKOkresyWarstwyRoz WarstwaRozNastWew
      WHERE WarstwaRozNastWew.OkresO &gt; @okresO
      AND   WarstwaRozNastWew.WarstwaRoz &lt;&gt; WarstwaRozBiez.WarstwaRoz
      ) WarstwaRozNast
      LEFT OUTER JOIN FKDekretyKonwersja
      ON    FKDekretyKonwersja.WarstwaRoz = WarstwaRozBiez.WarstwaRoz
      AND   FKDekretyKonwersja.OkresO = FKRdekrety.OkresO
      AND FKDekretyKonwersja.Rok = FKRdekrety.Rok
      AND FKDekretyKonwersja.Mies = FKRdekrety.Mies
      AND FKDekretyKonwersja.DowodNr = FKRdekrety.DowodNr
      AND FKDekretyKonwersja.NrPozycjiKs = FKRdekrety.NrPozycjiKs
      AND FKDekretyKonwersja.NrDekretu = FKRdekrety.NrDekretu
      AND FKDekretyKonwersja.ZStrony = FKRdekrety.ZStrony
      WHERE
      FKRDekrety.OkresO = @okresORdekretu
      AND FKRDekrety.Rok = @rok
      AND FKRDekrety.Mies = @mies
      AND FKRDekrety.DowodNr = @dowodNr
      AND FKRDekrety.NrPozycjiKs = @nrPozycjiKs
      AND FKRDekrety.NrDekretu = @nrDekretu
      AND FKRDekrety.ZStrony = @zStrony
      AND FKRDekrety.NrPozycjiRozr = @nrPozycjiRozr

      RETURN
      END

    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>611</Id>
    <NrLog>5</NrLog>
    <NrTab>94</NrTab>
    <NrProc>220</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>612</Id>
    <NrLog>5</NrLog>
    <NrTab>95</NrTab>
    <NrProc>220</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

  <TabProcki>
    <Id>613</Id>
    <NrLog>5</NrLog>
    <NrTab>96</NrTab>
    <NrProc>220</NrProc>
    <ProcFun></ProcFun>
    <NzProc></NzProc>
    <TextProc>
    </TextProc>
  </TabProcki>

</TabProckiDS>

