Forum
See question

Erro ao abrir ficha de imobilizado   

79 views
0
0

É comum acontecer ao abrir uma ficha de imobilizado o seguinte erro:

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

3621: The statement has been terminated.”

 

Como ultrapassar?

Faça login para poder traduzir
Equipamentos e Ativos
Marked as spam
Criado há 4 anos e 8 meses maria
maria Most Valuable Professional
1 answers
1
Private answer

O módulo de EAP necessita que existam definidos todos os exercícios entre o primeiro e o último.

Pelo erro reportado podem faltar alguns exercícios.

Segue uma script para introduzir os exercícios em falta e reconstruir os dados básicos de EAP para os "novos" exercícios.

 

 

-- Insere as Fichas em falta na tabela NovosEquipamentos

-------------------------------------------------------------------------------

INSERT INTO NodosEquipamentos

SELECT newid(), NULL, '99C0DA87-5FC8-4842-B660-F87143821583', Ficha FROM Fichas

WHERE Ficha NOT IN (SELECT Equipamento FROM NodosEquipamentos)

GO

 

-------------------------------------------------------------------------------

-- ExerciciosERP vs ParametrosExercicioEAP

-------------------------------------------------------------------------------

SELECT * FROM ExerciciosERP

SELECT * FROM ParametrosExercicioEAP

GO

 

-------------------------------------------------------------------------------

-- Reconstrução dos Exercícios ERP

-------------------------------------------------------------------------------

DECLARE @Ano            SMALLINT

DECLARE @AnoUltimo        SMALLINT

 

SET @Ano                = (SELECT MIN(Ano) FROM ExerciciosERP)

SET @AnoUltimo            = (SELECT MAX(Ano) FROM ExerciciosERP)

 

DECLARE @tblExercicios    TABLE

(

Ano            SMALLINT

,    AnoOrigem    SMALLINT

)

 

WHILE @Ano < @AnoUltimo

BEGIN

INSERT INTO @tblExercicios SELECT @Ano, NULL WHERE NOT EXISTS (SELECT Ano FROM ExerciciosERP WHERE Ano = @Ano)

SET @Ano = @Ano + 1

END

 

INSERT INTO ExerciciosERP SELECT * FROM @tblExercicios

GO

 

-------------------------------------------------------------------------------

-- Reconstrução Parâmetros Exercício EAP

-------------------------------------------------------------------------------

SELECT        E.Ano, PE.*

INTO #TMP_EXERCICIOS_EAP

FROM

ExerciciosERP    E

CROSS JOIN    (SELECT TOP 1 * FROM ParametrosExercicioEAP ORDER BY Exercicio DESC)    PE

WHERE

NOT EXISTS (SELECT TOP 1 1 FROM ParametrosExercicioEAP WHERE Exercicio = E.Ano)

GO

UPDATE #TMP_EXERCICIOS_EAP SET Exercicio = Ano, Fecho = 1

GO

ALTER TABLE #TMP_EXERCICIOS_EAP DROP COLUMN Ano

GO

INSERT INTO ParametrosExercicioEAP SELECT * FROM #TMP_EXERCICIOS_EAP

GO

DROP TABLE #TMP_EXERCICIOS_EAP

GO

 

 

-------------------------------------------------------------------------------

-- Reconstrução Dados de Depreciação

-------------------------------------------------------------------------------

INSERT INTO PlanosCriteriosDepreciacao

(        Plano

,    Exercicio

,    UnitarioReduzidoValor

,    TotalReduzidoValor

,    CoeficienteReduzidoValor

,    Periodicidade

,    Metodo

,    TaxaBase

,    VariacaoTaxaDepreciacao

,    NumeroTurnos

,    NormaExcepcao

,    ExcluirTaxasPerdidas

,    TratamentoIndividual

)

SELECT

Plano                        = P.Plano

,    Exercicio                    = (SELECT Exercicio FROM ParametrosEAP)

,    UnitarioReduzidoValor        = 199.52

,    TotalReduzidoValor            = 0

,    CoeficienteReduzidoValor    = 0

,    Periodicidade                = 1

,    Metodo                        = 0

,    TaxaBase                    = (CASE P.Tipo WHEN 1 THEN 0 ELSE 2 END)

,    VariacaoTaxaDepreciacao        = 0

,    NumeroTurnos                = 1

,    NormaExcepcao                = NULL

,    ExcluirTaxasPerdidas        = 0

,    TratamentoIndividual        = 0

FROM

(SELECT Plano, Tipo FROM PlanosDepreciacao) P

WHERE

NOT EXISTS (SELECT TOP 1 1 FROM PlanosCriteriosDepreciacao WHERE Plano = P.Plano)

GO

 

INSERT INTO PlanosCriteriosDepreciacao

(        Plano

,    Exercicio

,    UnitarioReduzidoValor

,    TotalReduzidoValor

,    CoeficienteReduzidoValor

,    Periodicidade

,    Metodo

,    TaxaBase

,    VariacaoTaxaDepreciacao

,    NumeroTurnos

,    NormaExcepcao

,    ExcluirTaxasPerdidas

,    TratamentoIndividual

)

SELECT

Plano                        = PE.Plano

,    Exercicio                    = P.Exercicio

,    UnitarioReduzidoValor        = PE.UnitarioReduzidoValor

,    TotalReduzidoValor            = PE.TotalReduzidoValor

,    CoeficienteReduzidoValor    = PE.CoeficienteReduzidoValor

,    Periodicidade                = PE.Periodicidade

,    Metodo                        = PE.Metodo

,    TaxaBase                    = PE.TaxaBase

,    VariacaoTaxaDepreciacao        = PE.VariacaoTaxaDepreciacao

,    NumeroTurnos                = PE.NumeroTurnos

,    NormaExcepcao                = PE.NormaExcepcao

,    ExcluirTaxasPerdidas        = PE.ExcluirTaxasPerdidas

,    TratamentoIndividual        = PE.TratamentoIndividual

FROM

PlanosCriteriosDepreciacao    PE

CROSS JOIN    ParametrosExercicioEAP        P

WHERE

PE.Exercicio =

(

SELECT    MAX(Exercicio)

FROM    PlanosCriteriosDepreciacao

WHERE    Plano = PE.Plano

)

AND P.Exercicio NOT IN

(

SELECT    DISTINCT Exercicio

FROM    PlanosCriteriosDepreciacao

WHERE    Plano = PE.Plano

)

GO

 

INSERT INTO ClassificacoesCriteriosDepreciacao

(

IdClassificacao

,    Plano

,    Exercicio

,    Periodicidade

,    Metodo

,    TaxaBase

,    VariacaoTaxaDepreciacao

,    NumeroTurnos

,    Imobilizado

,    Conta

,    NormaExcepcao

,    Ajuste

,    Beneficio

,    Tributacao

,    SujeitoDepreciacao

,    TratamentoIndividual

)

SELECT

IdClassificacao                = CE.IdClassificacao

,    Plano                        = CE.Plano

,    Exercicio                    = P.Exercicio

,    Periodicidade                = CE.Periodicidade

,    Metodo                        = CE.Metodo

,    TaxaBase                    = CE.TaxaBase

,    VariacaoTaxaDepreciacao        = CE.VariacaoTaxaDepreciacao

,    NumeroTurnos                = CE.NumeroTurnos

,    Imobilizado                    = CE.Imobilizado

,    Conta                        = CE.Conta

,    NormaExcepcao                = CE.NormaExcepcao

,    Ajuste                        = CE.Ajuste

,    Beneficio                    = CE.Beneficio

,    Tributacao                    = CE.Tributacao

,    SujeitoDepreciacao            = CE.SujeitoDepreciacao

,    TratamentoIndividual        = CE.TratamentoIndividual

FROM

ClassificacoesCriteriosDepreciacao    CE

CROSS JOIN    ParametrosExercicioEAP                P

WHERE

CE.Exercicio =

(

SELECT    MAX(Exercicio)

FROM    ClassificacoesCriteriosDepreciacao

WHERE    Plano            = CE.Plano

AND IdClassificacao = CE.IdClassificacao

)

AND P.Exercicio NOT IN

(

SELECT DISTINCT Exercicio

FROM    ClassificacoesCriteriosDepreciacao

WHERE    Plano            = CE.Plano

AND IdClassificacao = CE.IdClassificacao

)

GO

INSERT INTO ClassificacoesCriteriosDepreciacao

(

IdClassificacao

,    Plano

,    Exercicio

,    Periodicidade

,    Metodo

,    TaxaBase

,    VariacaoTaxaDepreciacao

,    NumeroTurnos

,    Imobilizado

,    Conta

,    NormaExcepcao

,    Ajuste

,    Beneficio

,    Tributacao

,    SujeitoDepreciacao

,    TratamentoIndividual

)

SELECT

IdClassificacao                = CF.IdClassificacao

,    Plano                        = PD.Plano

,    Exercicio                    = PE.Exercicio

,    Periodicidade                = 1

,    Metodo                        = 0

,    TaxaBase                    = (CASE PD.Tipo WHEN 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

FROM

(SELECT IdClassificacao, TaxaFiscal 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

 

 

 

 

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

 

 

 

INSERT INTO AlteracoesPatrimoniaisNumeradores

SELECT AP.Tipo, AP.Alteracao, PE.Exercicio, 0

FROM AlteracoesPatrimoniais AP

CROSS JOIN ParametrosExercicioEAP PE

WHERE NOT EXISTS (SELECT 1 FROM AlteracoesPatrimoniaisNumeradores apn WHERE apn.Tipo = AP.Tipo AND apn.Alteracao = AP.Alteracao AND apn.Exercicio = PE.Exercicio)

ORDER BY AP.Tipo, AP.Alteracao, PE.Exercicio DESC

GO

Faça login para poder traduzir
Marked as spam
Criado há 4 anos e 8 meses maria
maria Most Valuable Professional