Boa tarde,
Deve usar a query
DELETE FROM ClassificacoesCriteriosDepreciacao
GO
INSERT INTO ClassificacoesCriteriosDepreciacao
(
IdClassificacao
, Plano
, Exercicio
, Periodicidade
, Metodo
, TaxaBase
, VariacaoTaxaDepreciacao
, NumeroTurnos
, Imobilizado
, Conta
, NormaExcepcao
, Ajuste
, Beneficio
, Tributacao
, SujeitoDepreciacao
, TratamentoIndividual
, TaxaDepreciacao
, VidaUtil
)
SELECT
IdClassificacao = CF.IdClassificacao
, Plano = PD.Plano
, Exercicio = PE.Exercicio
, Periodicidade = 1
, Metodo = 0
, TaxaBase = (CASE WHEN PD.Tipo = 1 THEN 0 ELSE 2 END)
, VariacaoTaxaDepreciacao = 0
, NumeroTurnos = 1
, Imobilizado = NULL
, Conta = NULL
, NormaExcepcao = NULL
, Ajuste = NULL
, Beneficio = NULL
, Tributacao = NULL
, SujeitoDepreciacao = 1
, TratamentoIndividual = 0
, TaxaDepreciacao = (CASE WHEN PD.Tipo = 0 THEN 0 ELSE CF.TaxaFiscal END)
, VidaUtil = (CASE WHEN PD.Tipo = 1 THEN 0 ELSE ROUND(CF.VidaMaxima / 2.0, 0) END)
FROM
(SELECT IdClassificacao, TaxaFiscal, VidaMaxima FROM ClassificacoesFiscais) CF
CROSS JOIN (SELECT Plano, Tipo FROM PlanosDepreciacao) PD
CROSS JOIN (SELECT Exercicio FROM ParametrosExercicioEAP) PE
WHERE
NOT EXISTS
(
SELECT TOP 1 1
FROM ClassificacoesCriteriosDepreciacao
WHERE IdClassificacao = CF.IdClassificacao
AND Plano = PD.Plano
AND Exercicio = PE.Exercicio
)
GO
UPDATE FCD
SET
TaxaBase = (CASE WHEN PD.Tipo = 0 THEN 2 ELSE FCD.TaxaBase END)
, TaxaDepreciacao = (CASE WHEN PD.Tipo = 0 THEN 0 ELSE (CASE FCD.TaxaBase WHEN 0 THEN CF.TaxaFiscal WHEN 1 THEN ROUND(CF.TaxaFiscal / 2.0, 2) ELSE FCD.TaxaDepreciacao END) END)
, VidaUtil = (CASE WHEN PD.Tipo = 1 THEN 0 ELSE ROUND(CF.VidaMaxima / 2.0, 0) END)
, SujeitoDepreciacao = 1
FROM
Fichas F
INNER JOIN FichasCriteriosDepreciacao FCD ON FCD.Ficha = F.Ficha
INNER JOIN ClassificacoesFiscais CF ON CF.IdClassificacao = F.IdClassificacao
INNER JOIN PlanosDepreciacao PD ON PD.Plano = FCD.Plano
GO
UPDATE FichasCriteriosDepreciacao SET VidaRemanescente = VidaUtil WHERE VidaUtil <> 0
GO
-- Actualiza a Vida Remanescente
DECLARE @Plano AS NVARCHAR(25)
DECLARE @IndicePlano AS INT
DECLARE @TotalPlanos AS INT
DECLARE @tblPLANOS TABLE
(
Indice INT IDENTITY(1,1)
, Plano NVARCHAR(25)
)
INSERT INTO @tblPLANOS (Plano) SELECT Plano FROM PlanosDepreciacao WHERE Tipo = 0
SET @IndicePlano = 1
SET @TotalPlanos = (SELECT COUNT(1) FROM @tblPLANOS)
WHILE (@IndicePlano <= @TotalPlanos)
BEGIN
SELECT @Plano = Plano FROM @tblPLANOS WHERE Indice = @IndicePlano
EXEC dbo.[EAP_ReconstroiFichaCriterioVidaRemanescente] @Plano, 0, 0, 1
SET @IndicePlano = @IndicePlano + 1
END
GO