You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ITSM/.svn/pristine/4d/4d75b7bd2440086dd10f1c052af...

126 lines
11 KiB

USE [Vertragsverwaltung_20160404]
GO
/****** Object: StoredProcedure [dbo].[sp_mittelfristplanung] Script Date: 02.12.2016 09:08:53 ******/
DROP PROCEDURE [dbo].[sp_mittelfristplanung]
GO
/****** Object: StoredProcedure [dbo].[sp_mittelfristplanung] Script Date: 02.12.2016 09:08:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[sp_mittelfristplanung]
@datumvon datetime,
@datumbis datetime,
@mitarbeiternr int
AS
BEGIN
declare @tmptabl1 varchar(255)
declare @xsql varchar(4096)
declare @cnt int
declare @year int
-- =============================================
-- Temporäre Tabelle löschen
-- =============================================
set @tmptabl1 = str(@mitarbeiternr)
while left(@tmptabl1,1)=' ' begin
set @tmptabl1=right(@tmptabl1,len(@tmptabl1)-1)
end
set @tmptabl1 = 'tmp_mfp_' + @tmptabl1
IF EXISTS (SELECT name FROM sysobjects WHERE name = @tmptabl1) begin
set @xsql = 'drop table dbo.' + @tmptabl1
execute (@xsql)
end
set @tmptabl1='dbo.'+@tmptabl1
-- =============================================
-- Temporäre Tabelle mit Anzahl Spalten nach Jahren anlegen
-- =============================================
set @xsql='Create table ' + @tmptabl1 + '([Ereignisnr] [int] NULL'
set @cnt=YEAR(@datumbis) - YEAR(@datumvon)
set @year = YEAR(@datumvon)
while @year < YEAR(@datumbis)+1 begin
set @xsql = @xsql + ' ,[Kosten_'+LTRIM(str(@year))+'] [decimal] (18,2) NULL'
set @xsql = @xsql + ' ,[Mwst_'+LTRIM(str(@year))+'] [decimal] (18,2) NULL'
set @xsql = @xsql + ' ,[Total_'+LTRIM(str(@year))+'] [decimal] (18,2) NULL'
set @year=@year+1
end
set @xsql=@xsql+') on [default]'
execute(@xsql)
-- =============================================
-- Ereignisse verarbeiten - Initialverarbeitung
-- =============================================
declare @enr int
declare xc cursor for
select ereignisnr from dbo.Vertragsereignis where ereignistypnr=3
and periodizitaetnr <> 0
--and ereignisnr not in (select ereignisnr from Vertragsereignis where Datum<>'1900-01-01' and Start<>'1900-01-01' and Ende <> '1900-01-01')
open xc
fetch next from xc into @enr
while @@FETCH_STATUS=0 begin
execute dbo.sp_mittelfristplanung_berechnung @datumvon, @datumbis, @mitarbeiternr, @enr
fetch next from xc into @enr
end
close xc
deallocate xc
-- =============================================
-- Nullvalues mit 0 ersetzen
-- =============================================
set @year = YEAR(@datumvon)
while @year < YEAR(@datumbis)+1 begin
set @xsql = 'update ' + @tmptabl1 + ' set ' + '[Kosten_'+LTRIM(str(@year))+']' + ' = 0 where ' + '[Kosten_'+LTRIM(str(@year))+']' + ' is null'
execute (@xsql)
set @xsql = 'update ' + @tmptabl1 + ' set ' + '[Mwst_'+LTRIM(str(@year))+']' + ' = 0 where ' + '[Mwst_'+LTRIM(str(@year))+']' + ' is null'
execute (@xsql)
set @xsql = 'update ' + @tmptabl1 + ' set ' + '[Total_'+LTRIM(str(@year))+']' + ' = 0 where ' + '[Total_'+LTRIM(str(@year))+']' + ' is null'
execute (@xsql)
set @year=@year+1
end
-- =============================================
-- Resultat ausgeben
-- =============================================
set @xsql='SELECT dbo.Kostenart.Bezeichnung AS Kostenart, dbo.Vertragspartner.NameZ1 AS Vertragspartner, Vertragselement_1.Bezeichnung AS Uebergeordnetes_VE, '
set @xsql=@xsql+' dbo.Vertragselement.Nummer AS Vertragsnummer, dbo.Vertragselement.Bezeichnung AS Bezeichnung_VE, dbo.Vertragsereignis.Bezeichnung AS Bezeichnung_EG, '
set @xsql=@xsql+' dbo.Periodizitaet.Bezeichnung AS Periodizitaet, dbo.Vertragsereignis.InklMwSt AS InklMwst, ' + @tmptabl1 +'.*'
set @xsql=@xsql+' FROM dbo.Vertragsereignis INNER JOIN'
set @xsql=@xsql+' dbo.Vertragselement ON dbo.Vertragsereignis.Vertragselementnr = dbo.Vertragselement.Vertragselementnr INNER JOIN'
set @xsql=@xsql+' dbo.Kostenart ON dbo.Vertragsereignis.KostenartNr = dbo.Kostenart.KostenartNr INNER JOIN'
set @xsql=@xsql+' dbo.Periodizitaet ON dbo.Vertragsereignis.PeriodizitaetNr = dbo.Periodizitaet.PeriodizitaetNr INNER JOIN'
set @xsql=@xsql+' dbo.Vertragspartner ON dbo.Vertragselement.VertragspartnerNr = dbo.Vertragspartner.VertragspartnerNr INNER JOIN'
set @xsql=@xsql+' ' + @tmptabl1 + ' ON dbo.Vertragsereignis.EreignisNr = ' + @tmptabl1+'.Ereignisnr LEFT OUTER JOIN'
set @xsql=@xsql+' dbo.Vertragselement AS Vertragselement_1 ON dbo.Vertragselement.ParentID = Vertragselement_1.Vertragselementnr'
print @xsql
execute (@xsql)
-- =============================================
-- Temporäre Tabelle löschen
-- =============================================
set @tmptabl1 = str(@mitarbeiternr)
while left(@tmptabl1,1)=' ' begin
set @tmptabl1=right(@tmptabl1,len(@tmptabl1)-1)
end
set @tmptabl1 = 'tmp_mfp_' + @tmptabl1
IF EXISTS (SELECT name FROM sysobjects WHERE name = @tmptabl1) begin
set @xsql = 'drop table dbo.' + @tmptabl1
execute (@xsql)
end
END
GO