Forum
See question

Erro na importação de Fichas   

40 views
0
0

Bom dia,

Solicito ajudar para ultrapassar o erro abaixo na importação de fichas em equipamentos e activos:

‘The INSERT statement conflicted with the FOREIGN KEY constraint “FichasCriteriosDepreciacao_PlanosCriteriosDepreciacao_FK”. The conflict occurred in database “PRIBEW007RHR”, table “dbo.PlanosCriteriosDepreciacao”.
The INSERT statement conflicted with the

Faça login para poder traduzir
Equipamentos e Ativos
Primavera
Marked as spam
Criado há 3 anos e 7 meses fidelinoseifane
f
fidelinoseifane Responsiveness Member
1 answers
0
Private answer

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

Faça login para poder traduzir
Marked as spam
Criado há 3 anos e 7 meses marcoribeiro
marcoribeiro Loyal Contributor