USE [Vertragsverwaltung_20160404] GO /****** Object: StoredProcedure [dbo].[sp_rpt_AN_31] Script Date: 02.12.2016 09:08:53 ******/ DROP PROCEDURE [dbo].[sp_rpt_AN_31] GO /****** Object: StoredProcedure [dbo].[sp_rpt_AN_31] Script Date: 02.12.2016 09:08:55 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: -- Create date: -- Description: -- ============================================= CREATE PROCEDURE [dbo].[sp_rpt_AN_31] @von DATETIME = NULL , @bis DATETIME = NULL , @oestruktur INTEGER = NULL , @struktur_Ausschluss VARCHAR(255) = NULL , @Honoris_Ausschluss VARCHAR(255) = NULL , @iBereich VARCHAR(255) = NULL AS BEGIN SET NOCOUNT ON; DECLARE @rtb_anteil INT DECLARE @abwesenheit_anteil INT SET @rtb_anteil = 30 SET @abwesenheit_anteil = 15 IF @ibereich IS NULL SET @ibereich = '' IF @von IS NULL SET @von = '2015-01-01 00:00:00' IF @bis IS NULL SET @bis = '2015-03-31 00:00:00' IF @oestruktur IS NULL SET @oestruktur = 42 IF @struktur_ausschluss IS NULL SET @struktur_ausschluss = '' IF @honoris_ausschluss IS NULL SET @honoris_ausschluss = '' -- **************************************************************************** -- Planaufwand der AN_Tickets auslesen --**************************************************************************** DECLARE @planaufwand TABLE ( tgnummer VARCHAR(255) , TicketID VARCHAR(55) , Kurzbeschreibung VARCHAR(1024) NULL , STATUS VARCHAR(255) , Bereich VARCHAR(255) , Aufwand INT , Aufwand_P INT , Aufwand_A INT , geleistet FLOAT , noch_zu_leisten FLOAT , noch_zu_leisten_P FLOAT NULL , noch_zu_leisten_A FLOAT NULL , noch_zu_leisten_1 FLOAT NULL , noch_zu_leisten_1P FLOAT NULL , noch_zu_leisten_1A FLOAT NULL , g_start DATETIME , g_erledigung DATETIME , SOLL_AZ FLOAT NULL , Fhr_Anteil FLOAT NULL , Abwesenheiten FLOAT NULL , RTB FLOAT NULL , pt_fhranteil FLOAT NULL , pt_abwesenheiten FLOAT NULL , pt_rtb FLOAT NULL , Pensum FLOAT NULL, Projekt VARCHAR(255) null ) DECLARE @ticketid VARCHAR(255) , @tgnummer VARCHAR(255) , @g_erledigung DATETIME , @g_start DATETIME , @status VARCHAR(255) , @bereich VARCHAR(255) DECLARE @ma1 VARCHAR(255) , @p1 INT , @ma2 VARCHAR(255) , @p2 INT , @ma3 VARCHAR(255) , @p3 INT , @ma4 VARCHAR(255) , @p4 INT , @ma5 VARCHAR(255) , @p5 INT DECLARE @ma6 VARCHAR(255) , @p6 INT , @ma7 VARCHAR(255) , @p7 INT , @ma8 VARCHAR(255) , @p8 INT , @ma9 VARCHAR(255) , @p9 INT DECLARE @pos1 INT DECLARE @pos2 INT DECLARE @x VARCHAR(255) DECLARE @y INT DECLARE @yy VARCHAR(255) DECLARE @mm VARCHAR(255) DECLARE @tt VARCHAR(255) DECLARE @ap VARCHAR(255) DECLARE @pa INT DECLARE @aa INT DECLARE xx CURSOR FOR SELECT DISTINCT fullid , mitarbeiter_1 , planaufwand_1 , mitarbeiter_2 , planaufwand_2 , mitarbeiter_3 , planaufwand_3 , mitarbeiter_4 , planaufwand_4 , mitarbeiter_5 , planaufwand_5 , mitarbeiter_6 , planaufwand_6 , mitarbeiter_7 , planaufwand_7 , mitarbeiter_8 , planaufwand_8 , mitarbeiter_9 , planaufwand_9 , Geplantes_Erledigungsdatum , Geplantes_Startdatum AS Geplantes_Startdatum , Status , Bereich , ausloeser_projekt FROM dbo.shu_view_an_excelexport_lst OPEN xx FETCH NEXT FROM xx INTO @ticketid, @ma1, @p1, @ma2, @p2, @ma3, @p3, @ma4, @p4, @ma5, @p5, @ma6, @p6, @ma7, @p7, @ma8, @p8, @ma9, @p9, @g_erledigung, @g_start, @status, @bereich, @ap WHILE @@FETCH_STATUS = 0 BEGIN IF NOT @g_erledigung IS NULL BEGIN SET @yy = YEAR(@g_erledigung) SET @mm = MONTH(@g_erledigung) SET @tt = DAY(@g_erledigung) SET @g_erledigung = @tt + '.' + @mm + '.' + @yy + ' 00:00:00' SET @g_erledigung = DATEADD(DAY, 1, @g_erledigung) END IF NOT @g_start IS NULL BEGIN SET @yy = YEAR(@g_start) SET @mm = MONTH(@g_start) SET @tt = DAY(@g_start) SET @g_start = @tt + '.' + @mm + '.' + @yy + ' 00:00:00' SET @g_start = DATEADD(DAY, 1, @g_start) END IF LEN(@ma1) > 0 BEGIN SET @x = @ma1 SET @y = @p1 SET @pos1 = 0 SET @pos2 = 0 SET @pos1 = CHARINDEX('(', @x) SET @pos2 = CHARINDEX(')', @x) IF @ap = 'Ja' BEGIN SET @pa = @y SET @aa = 0 END ELSE BEGIN SET @pa = 0 SET @aa = @y END IF @pos1 > 0 AND @pos2 > 0 BEGIN SET @pos1 = @pos1 + 1 SET @x = SUBSTRING(@x, @pos1, @pos2 - @pos1) INSERT @planaufwand ( tgnummer , ticketid , aufwand , Aufwand_P , Aufwand_A , g_erledigung , g_start , status , bereich, Projekt ) VALUES ( @x , @ticketid , @y , @pa , @aa , @g_erledigung , @g_start , @status , @bereich, @ap ) END END IF LEN(@ma2) > 0 BEGIN SET @x = @ma2 SET @y = @p2 SET @pos1 = 0 SET @pos2 = 0 SET @pos1 = CHARINDEX('(', @x) SET @pos2 = CHARINDEX(')', @x) IF @ap = 'Ja' BEGIN SET @pa = @y SET @aa = 0 END ELSE BEGIN SET @pa = 0 SET @aa = @y END IF @pos1 > 0 AND @pos2 > 0 BEGIN SET @pos1 = @pos1 + 1 SET @x = SUBSTRING(@x, @pos1, @pos2 - @pos1) INSERT @planaufwand ( tgnummer , ticketid , aufwand , Aufwand_P , Aufwand_A , g_erledigung , g_start , status , bereich, Projekt ) VALUES ( @x , @ticketid , @y , @pa , @aa , @g_erledigung , @g_start , @status , @bereich, @ap ) END END IF LEN(@ma3) > 0 BEGIN SET @x = @ma3 SET @y = @p3 SET @pos1 = 0 SET @pos2 = 0 SET @pos1 = CHARINDEX('(', @x) SET @pos2 = CHARINDEX(')', @x) IF @ap = 'Ja' BEGIN SET @pa = @y SET @aa = 0 END ELSE BEGIN SET @pa = 0 SET @aa = @y END IF @pos1 > 0 AND @pos2 > 0 BEGIN SET @pos1 = @pos1 + 1 SET @x = SUBSTRING(@x, @pos1, @pos2 - @pos1) INSERT @planaufwand ( tgnummer , ticketid , aufwand , Aufwand_P , Aufwand_A , g_erledigung , g_start , status , bereich, Projekt ) VALUES ( @x , @ticketid , @y , @pa , @aa , @g_erledigung , @g_start , @status , @bereich, @ap ) END END IF LEN(@ma4) > 0 BEGIN SET @x = @ma4 SET @y = @p4 SET @pos1 = 0 SET @pos2 = 0 SET @pos1 = CHARINDEX('(', @x) SET @pos2 = CHARINDEX(')', @x) IF @ap = 'Ja' BEGIN SET @pa = @y SET @aa = 0 END ELSE BEGIN SET @pa = 0 SET @aa = @y END IF @pos1 > 0 AND @pos2 > 0 BEGIN SET @pos1 = @pos1 + 1 SET @x = SUBSTRING(@x, @pos1, @pos2 - @pos1) INSERT @planaufwand ( tgnummer , ticketid , aufwand , Aufwand_P , Aufwand_A , g_erledigung , g_start , status , bereich, Projekt ) VALUES ( @x , @ticketid , @y , @pa , @aa , @g_erledigung , @g_start , @status , @bereich, @ap ) END END IF LEN(@ma5) > 0 BEGIN SET @x = @ma5 SET @y = @p5 SET @pos1 = 0 SET @pos2 = 0 SET @pos1 = CHARINDEX('(', @x) SET @pos2 = CHARINDEX(')', @x) IF @ap = 'Ja' BEGIN SET @pa = @y SET @aa = 0 END ELSE BEGIN SET @pa = 0 SET @aa = @y END IF @pos1 > 0 AND @pos2 > 0 BEGIN SET @pos1 = @pos1 + 1 SET @x = SUBSTRING(@x, @pos1, @pos2 - @pos1) INSERT @planaufwand ( tgnummer , ticketid , aufwand , Aufwand_P , Aufwand_A , g_erledigung , g_start , status , bereich, Projekt ) VALUES ( @x , @ticketid , @y , @pa , @aa , @g_erledigung , @g_start , @status , @bereich, @ap ) END END IF LEN(@ma6) > 0 BEGIN SET @x = @ma6 SET @y = @p6 SET @pos1 = 0 SET @pos2 = 0 SET @pos1 = CHARINDEX('(', @x) SET @pos2 = CHARINDEX(')', @x) IF @ap = 'Ja' BEGIN SET @pa = @y SET @aa = 0 END ELSE BEGIN SET @pa = 0 SET @aa = @y END IF @pos1 > 0 AND @pos2 > 0 BEGIN SET @pos1 = @pos1 + 1 SET @x = SUBSTRING(@x, @pos1, @pos2 - @pos1) INSERT @planaufwand ( tgnummer , ticketid , aufwand , Aufwand_P , Aufwand_A , g_erledigung , g_start , status , bereich, Projekt ) VALUES ( @x , @ticketid , @y , @pa , @aa , @g_erledigung , @g_start , @status , @bereich, @ap ) END END IF LEN(@ma7) > 0 BEGIN SET @x = @ma7 SET @y = @p7 SET @pos1 = 0 SET @pos2 = 0 SET @pos1 = CHARINDEX('(', @x) SET @pos2 = CHARINDEX(')', @x) IF @ap = 'Ja' BEGIN SET @pa = @y SET @aa = 0 END ELSE BEGIN SET @pa = 0 SET @aa = @y END IF @pos1 > 0 AND @pos2 > 0 BEGIN SET @pos1 = @pos1 + 1 SET @x = SUBSTRING(@x, @pos1, @pos2 - @pos1) INSERT @planaufwand ( tgnummer , ticketid , aufwand , Aufwand_P , Aufwand_A , g_erledigung , g_start , status , bereich, Projekt ) VALUES ( @x , @ticketid , @y , @pa , @aa , @g_erledigung , @g_start , @status , @bereich, @ap ) END END IF LEN(@ma8) > 0 BEGIN SET @x = @ma8 SET @y = @p8 SET @pos1 = 0 SET @pos2 = 0 SET @pos1 = CHARINDEX('(', @x) SET @pos2 = CHARINDEX(')', @x) IF @ap = 'Ja' BEGIN SET @pa = @y SET @aa = 0 END ELSE BEGIN SET @pa = 0 SET @aa = @y END IF @pos1 > 0 AND @pos2 > 0 BEGIN SET @pos1 = @pos1 + 1 SET @x = SUBSTRING(@x, @pos1, @pos2 - @pos1) INSERT @planaufwand ( tgnummer , ticketid , aufwand , Aufwand_P , Aufwand_A , g_erledigung , g_start , status , bereich, Projekt ) VALUES ( @x , @ticketid , @y , @pa , @aa , @g_erledigung , @g_start , @status , @bereich, @ap ) END END IF LEN(@ma9) > 0 BEGIN SET @x = @ma9 SET @y = @p9 SET @pos1 = 0 SET @pos2 = 0 SET @pos1 = CHARINDEX('(', @x) SET @pos2 = CHARINDEX(')', @x) IF @ap = 'Ja' BEGIN SET @pa = @y SET @aa = 0 END ELSE BEGIN SET @pa = 0 SET @aa = @y END IF @pos1 > 0 AND @pos2 > 0 BEGIN SET @pos1 = @pos1 + 1 SET @x = SUBSTRING(@x, @pos1, @pos2 - @pos1) INSERT @planaufwand ( tgnummer , ticketid , aufwand , Aufwand_P , Aufwand_A , g_erledigung , g_start , status , bereich, Projekt ) VALUES ( @x , @ticketid , @y , @pa , @aa , @g_erledigung , @g_start , @status , @bereich, @ap ) END END FETCH NEXT FROM xx INTO @ticketid, @ma1, @p1, @ma2, @p2, @ma3, @p3, @ma4, @p4, @ma5, @p5, @ma6, @p6, @ma7, @p7, @ma8, @p8, @ma9, @p9, @g_erledigung, @g_start, @status, @bereich, @ap END CLOSE xx DEALLOCATE xx -- **************************************************************************** -- Ende Planaufwand der AN_Tickets auslesen -- **************************************************************************** insert @planaufwand ( tgnummer , ticketid , aufwand , Aufwand_P , Aufwand_A , g_erledigung , g_start , status , bereich, Projekt ) select ma.TGNummer,'',0,0,0,null,null,'','',0 FROM dbo.MA INNER JOIN dbo.MADetails ON dbo.MA.MANr = dbo.MADetails.MANr WHERE dbo.MADetails.OENr IN (SELECT ID FROM dbo.fnkt_get_KPI_hierarchie(@oestruktur) AS fnkt_get_KPI_hierarchie_1) -- and tgnummer not in (select tgnummer from #ttg) -- **************************************************************************** -- Geleistete, noch zu leistende Tage -- **************************************************************************** UPDATE @planaufwand SET geleistet = 0.00 , noch_zu_leisten = 00 DECLARE xx CURSOR FOR SELECT [Ticket_ID] , [ForUserID] , [CalculatedValue] FROM TXP_LVer_IN_AU WHERE ticket_id LIKE 'AN%' AND [Statusdatum] < @von OPEN xx FETCH NEXT FROM xx INTO @ticketid, @tgnummer, @y WHILE @@FETCH_STATUS = 0 BEGIN UPDATE @planaufwand SET geleistet = geleistet + @y WHERE tgnummer = @tgnummer AND ticketid = @ticketid FETCH NEXT FROM xx INTO @ticketid, @tgnummer, @y END CLOSE xx DEALLOCATE xx UPDATE @planaufwand SET geleistet = ROUND(geleistet / 8, 2) UPDATE @planaufwand SET noch_zu_leisten = aufwand - geleistet , noch_zu_leisten_p = aufwand_p - geleistet , noch_zu_leisten_a = aufwand_a - geleistet UPDATE @planaufwand SET noch_zu_leisten_1 = 0.00 , noch_zu_leisten_1a = 0.00 , noch_zu_leisten_1p = 0.00 DELETE FROM @planaufwand WHERE g_start > @bis DELETE FROM @planaufwand WHERE g_erledigung < @von UPDATE @planaufwand SET noch_zu_leisten_1 = noch_zu_leisten , noch_zu_leisten_1p = noch_zu_leisten_p , noch_zu_leisten_1a = noch_zu_leisten_a DECLARE @gp_dauer FLOAT DECLARE @rn_dauer FLOAT DECLARE @faktor FLOAT DECLARE xx CURSOR FOR SELECT ticketid , tgnummer , g_erledigung , g_start , noch_zu_leisten FROM @planaufwand WHERE g_erledigung > @bis OPEN xx FETCH NEXT FROM xx INTO @ticketid, @tgnummer, @g_erledigung, @g_start, @y WHILE @@FETCH_STATUS = 0 BEGIN SET @gp_dauer = DATEDIFF(DAY, @g_start, @g_erledigung) IF @g_start <= @von SET @gp_dauer = DATEDIFF(day, @von, @g_erledigung) IF @g_start > @von BEGIN SET @rn_dauer = DATEDIFF(DAY, @g_start, @bis) END ELSE BEGIN SET @rn_dauer = DATEDIFF(DAY, @von, @bis) END SET @faktor = @rn_dauer / @gp_dauer UPDATE @planaufwand SET noch_zu_leisten_1 = ROUND(noch_zu_leisten_1 * ( @rn_dauer / @gp_dauer ), 2) WHERE ticketid = @ticketid AND tgnummer = @tgnummer UPDATE @planaufwand SET noch_zu_leisten_1p = ROUND(noch_zu_leisten_1p * ( @rn_dauer / @gp_dauer ), 2) WHERE ticketid = @ticketid AND tgnummer = @tgnummer UPDATE @planaufwand SET noch_zu_leisten_1a = ROUND(noch_zu_leisten_1a * ( @rn_dauer / @gp_dauer ), 2) WHERE ticketid = @ticketid AND tgnummer = @tgnummer FETCH NEXT FROM xx INTO @ticketid, @tgnummer, @g_erledigung, @g_start, @y END CLOSE xx DEALLOCATE xx --**************************************************************************** -- Ende Geleistete, noch zu leistende Tage -- **************************************************************************** DECLARE @an4 TABLE ( [JJMM] [varchar](255) NULL , [OE] [varchar](50) NULL , [OESort] [int] NULL , [tgnummer] [varchar](50) NULL , [Name] [varchar](50) NULL , [Vorname] [varchar](50) NULL , [Sortierung] [int] NULL , [START] [datetime] NULL , [ende] [datetime] NULL , [Sort] [int] NULL , [Pensum] [varchar](255) NULL , [Soll] [float] NULL , [Geleistet] [float] NOT NULL , [Engagement_Effektiv] [float] NOT NULL , [Fuehrungsanteil] [float] NULL , [Soll_Zeit] [float] NOT NULL , [abwesenheiten] [float] NOT NULL , [CTB] [float] NULL , [RTB] [float] NULL ) INSERT @an4 EXEC dbo.sp_rpt_AN_4_Summary @von = @von, @bis = @bis, @oestruktur = @oestruktur, @struktur_Ausschluss = @struktur_ausschluss, @honoris_ausschluss = @honoris_ausschluss UPDATE @an4 SET Soll_Zeit = ROUND(Soll_Zeit / 100 * Pensum, 2) DECLARE @p FLOAT DECLARE @s FLOAT DECLARE @f FLOAT DECLARE xx CURSOR FOR SELECT tgnummer FROM @planaufwand OPEN xx FETCH NEXT FROM xx INTO @tgnummer WHILE @@FETCH_STATUS = 0 BEGIN SELECT @p = Pensum , @s = SUM(Soll) , @f = Fuehrungsanteil FROM @an4 GROUP BY tgnummer , Pensum , Fuehrungsanteil HAVING ( tgnummer = @tgnummer ) SELECT @rtb_anteil = dbo.MADetails.Planwert_Anteil_RTB_Person FROM dbo.MA INNER JOIN dbo.MADetails ON dbo.MA.MANr = dbo.MADetails.MANr where ma.TGNummer=@tgnummer UPDATE @planaufwand SET soll_az = @s , fhr_anteil = @f , abwesenheiten = @abwesenheit_anteil , rtb = @rtb_anteil , pensum = @p WHERE tgnummer = @tgnummer FETCH NEXT FROM xx INTO @tgnummer END CLOSE xx DEALLOCATE xx UPDATE @planaufwand SET pt_fhranteil = soll_az / 100 * fhr_anteil , pt_abwesenheiten = soll_az / 100 * abwesenheiten , pt_rtb = soll_az / 100 * rtb -- **************************************************************************** -- Ressourcen ohne AN-Zuordnung -- **************************************************************************** DECLARE @tmpa TABLE ( [TGNummer] [varchar](50) NULL , oenr INT , sortierung INT , START DATETIME , Ende DATETIME , Vorhaben VARCHAR(255) , Std [float] NOT NULL , Engagement_Effektiv FLOAT NOT NULL , Soll_Zeit FLOAT NOT NULL , JJMM VARCHAR(255) , pensum FLOAT NULL ) DECLARE @tmpb TABLE ( [TGNummer] [varchar](50) NULL , oenr INT , sortierung INT , START DATETIME , Ende DATETIME , Pensum VARCHAR(255) , Soll_Zeit FLOAT NOT NULL , Std_Geleistet [float] NOT NULL , Engagement_Effektiv FLOAT NOT NULL , Abwesenheiten FLOAT NOT NULL , JJMM VARCHAR(255) ) DECLARE @ansatz FLOAT SET @ansatz = 8.0 DECLARE @mnr INT DECLARE @rc INT DECLARE xm CURSOR FOR SELECT * FROM dbo.get_monatstabelle(@von, @bis) ORDER BY start_date OPEN xm FETCH NEXT FROM xm INTO @von, @bis WHILE @@FETCH_STATUS = 0 BEGIN DECLARE xc CURSOR FOR SELECT manr FROM ma WHERE aktiv = 1 AND gueltig_bis >= @bis OPEN xc FETCH NEXT FROM xc INTO @mnr WHILE @@FETCH_STATUS = 0 BEGIN SELECT @rc = COUNT(*) FROM dbo.MADetails WHERE manr = @mnr AND aktiv = 1 AND Gueltig_ab <= @von INSERT @tmpa SELECT TOP 1 dbo.MA.TGNummer , madetails.OENr , ma.sortierung , @von , @bis , '' , madetails.Engagement , dbo.get_anteil(engagement, MitarbeiterTypNr) , dbo.get_plantage(YEAR(@von), MONTH(@von)) , '' , madetails.Engagement FROM dbo.MA LEFT OUTER JOIN dbo.MADetails ON dbo.MA.MANr = dbo.MADetails.MANr WHERE dbo.MADetails.manr = @mnr AND dbo.MADetails.Aktiv = 1 AND Gueltig_ab <= @von ORDER BY Gueltig_ab DESC FETCH NEXT FROM xc INTO @mnr END CLOSE xc DEALLOCATE xc DECLARE @anzahl FLOAT DECLARE @ma VARCHAR(255) FETCH NEXT FROM xm INTO @von, @bis END CLOSE xm DEALLOCATE xm UPDATE @tmpa SET jjmm = LTRIM(STR(YEAR(start))) + '' + LTRIM(STR(MONTH(start))) SELECT TOP ( 100 ) PERCENT dbo.OE.Bezeichnung AS OE , dbo.OE.Sortierung AS OESort , dbo.MA.Name , dbo.MA.Vorname , dbo.MA.Sortierung , a.TGNummer , a.START , a.ende , a.sortierung AS Expr1 , a.vorhaben , a.Std , a.Engagement_Effektiv , a.Soll_Zeit , a.JJMM , a.pensum INTO #tmpfhr FROM @tmpa a INNER JOIN dbo.MA ON a.TGNummer = dbo.MA.TGNummer INNER JOIN dbo.OE ON a.oenr = dbo.OE.OeNr WHERE dbo.OE.oenr IN ( SELECT id FROM dbo.fnkt_get_kpi_hierarchie(@oestruktur) ) AND dbo.oe.oenr NOT IN ( SELECT item FROM dbo.fnkt_split(@struktur_Ausschluss, ',', 1) ) DELETE FROM #tmpfhr WHERE tgnummer IN ( SELECT tgnummer FROM @planaufwand ) DECLARE @pe FLOAT DECLARE xv CURSOR FOR SELECT DISTINCT tgnummer FROM #tmpfhr OPEN xv FETCH NEXT FROM xv INTO @tgnummer WHILE @@FETCH_STATUS = 0 BEGIN SELECT @p = engagement_effektiv , @s = SUM(Soll_zeit) / 100 * std , @f = ( 100 - ( 100 / std * engagement_effektiv ) ) , @pe = pensum FROM #tmpfhr GROUP BY tgnummer , engagement_effektiv , std , pensum HAVING ( tgnummer = @tgnummer ) SELECT @rtb_anteil = dbo.MADetails.Planwert_Anteil_RTB_Person FROM dbo.MA INNER JOIN dbo.MADetails ON dbo.MA.MANr = dbo.MADetails.MANr where ma.TGNummer=@tgnummer INSERT @planaufwand ( tgnummer , TicketID , STATUS , Bereich , Aufwand , Aufwand_P , Aufwand_A , geleistet , noch_zu_leisten , noch_zu_leisten_p , noch_zu_leisten_a , noch_zu_leisten_1 , noch_zu_leisten_1p , noch_zu_leisten_1a , g_start , g_erledigung , SOLL_AZ , Fhr_Anteil , Abwesenheiten , RTB , pt_fhranteil , pt_abwesenheiten , pt_rtb , pensum,projekt ) VALUES ( @tgnummer , '' , '' , '' , 0 , 0 , 0 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , GETDATE() , GETDATE() , @s , @f , @abwesenheit_anteil , @rtb_anteil , NULL , NULL , NULL , @pe,'' ) FETCH NEXT FROM xv INTO @tgnummer END CLOSE xv DEALLOCATE xv UPDATE @planaufwand SET kurzbeschreibung = a.Kurzbeschreibung FROM @planaufwand INNER JOIN shu_view_an_excelexport_lst a ON fullid = ticketid UPDATE @planaufwand SET pt_fhranteil = soll_az / 100 * fhr_anteil , pt_abwesenheiten = soll_az / 100 * abwesenheiten , pt_rtb = soll_az / 100 * rtb SELECT TOP ( 100 ) PERCENT dbo.OE.Bezeichnung AS OE , dbo.OE.Sortierung AS OESort , dbo.MA.Name , dbo.MA.Vorname , dbo.MA.Sortierung , a.TGNummer , a.START , a.ende , a.sortierung AS Expr1 , a.vorhaben , a.Std , a.Engagement_Effektiv , a.Soll_Zeit , a.JJMM INTO #tmpfhr1 FROM @tmpa a INNER JOIN dbo.MA ON a.TGNummer = dbo.MA.TGNummer INNER JOIN dbo.OE ON a.oenr = dbo.OE.OeNr WHERE dbo.OE.oenr IN ( SELECT id FROM dbo.fnkt_get_kpi_hierarchie(@oestruktur) ) AND dbo.oe.oenr NOT IN ( SELECT item FROM dbo.fnkt_split(@struktur_Ausschluss, ',', 1) ) SELECT a.* , oe , oesort , sortierung , name , vorname INTO #a FROM @planaufwand a INNER JOIN #tmpfhr1 ON a.TGNummer = #tmpfhr1.TGNummer --DROP TABLE _an_03 DELETE FROM #a WHERE ( g_erledigung IS NULL AND TicketID <> '' ) OR ( STATUS = 'abgelehnt' ) --delete from #a where (g_start SELECT DISTINCT * INTO #b FROM #a DECLARE @tg VARCHAR(255) , @it INT , @tga VARCHAR(255) , @pp1 FLOAT , @pp2 FLOAT , @pp3 FLOAT , @pp4 FLOAT , @pp5 FLOAT , @SUM_WE FLOAT , @sum_delta FLOAT SET @it = 0 SET @tga = '' ALTER TABLE #b ADD idtemp INT IDENTITY(1,1) ALTER TABLE #b ADD SUM_WE FLOAT ALTER TABLE #b ADD SUM_Delta FLOAT DECLARE xc CURSOR FOR SELECT tgnummer , pt_fhranteil , pt_abwesenheiten , pt_rtb , idtemp , soll_az FROM #b ORDER BY tgnummer , g_erledigung ASC , ticketid DESC OPEN xc FETCH NEXT FROM xc INTO @tg, @pp1, @pp2, @pp3, @pp4, @pp5 WHILE @@FETCH_STATUS = 0 BEGIN IF @tg <> @tga BEGIN PRINT @tg UPDATE #b SET pt_abwesenheiten = 0 WHERE tgnummer = @tg UPDATE #b SET pt_fhranteil = 0 WHERE tgnummer = @tg UPDATE #b SET pt_rtb = 0 WHERE tgnummer = @tg UPDATE #b SET soll_az = 0 WHERE tgnummer = @tg SELECT @SUM_WE = SUM(noch_zu_leisten_1) FROM #b WHERE tgnummer = @tg SET @sum_WE = @sum_we + ( @pp1 + @pp2 + @pp3 ) SET @sum_delta = @pp5 - @sum_we UPDATE #b SET soll_az = @pp5 , pt_fhranteil = @pp1 , pt_abwesenheiten = @pp2 , pt_rtb = @pp3 , sum_we = @sum_we , sum_delta = @sum_delta WHERE idtemp = @pp4 SET @tga = @tg END FETCH NEXT FROM xc INTO @tg, @pp1, @pp2, @pp3, @pp4, @pp5 END CLOSE xc DEALLOCATE xc ALTER TABLE #b DROP COLUMN idtemp --select * from #b where Name='Breitler' order by g_erledigung desc, TicketID asc --return --DROP TABLE _an_03 UPDATE #b SET noch_zu_leisten_1p =0 WHERE noch_zu_leisten_1p <0 UPDATE #b SET noch_zu_leisten_1a =0 WHERE noch_zu_leisten_1a <0 UPDATE #b SET noch_zu_leisten_a =0 WHERE noch_zu_leisten_a <0 UPDATE #b SET noch_zu_leisten_p =0 WHERE noch_zu_leisten_p <0 update #b set sum_we=0 where sum_we is null update #b set sum_delta=0 where sum_delta is null update #b set kurzbeschreibung='' where kurzbeschreibung is null IF @ibereich <> '' SELECT DISTINCT * FROM #b WHERE bereich = @ibereich ORDER BY g_erledigung DESC , TicketID ASC ELSE SELECT DISTINCT * FROM #b ORDER BY g_erledigung DESC , TicketID ASC DROP TABLE #a DROP TABLE #b DROP TABLE #tmpfhr DROP TABLE #tmpfhr1 END GO