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.
126 lines
11 KiB
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
|