Forum
See question

reconstruir a tabela inv_custeio e inv_valorização   

18 views
0
0

Boa tarde

Por lapso adulterei os dados das tabelas inv_custeio e inv_valorizacao sem ser possivel repor um backup neste momento.

alguém tem algum script para reconstruir essa informação?

 

obrigado

Faça login para poder traduzir
Inventário
Marked as spam
Criado há 4 anos e 6 meses miguelmartins
m
miguelmartins Miguel Martins Responsiveness Member
1 answers
0
Private answer

Boa tarde,

 

fora a script comum de recálculo, apenas existe a script abaixo que introduz os dados nessas tabelas:

 

BEGIN TRAN

DECLARE @DataRegistos AS DATETIME = GETDATE()

INSERT INTO [dbo].[INV_Custeio]
([Id]
,[IdOrigem]
,[TipoLancamentoCusteio]
,[IdMovimentoStock]
,[Data]
,[Artigo]
,[GrupoCustos]
,[Lote]
,[TipoMovimento]
,[Quantidade]
,[ValorMBase]
,[ValorMAlt]
,[ValorOrigMBase]
,[ValorOrigMAlt])
SELECT
NEWID(),
O.Id,
0,
m.Id,
o.Data,
m.Artigo,
A.GrupoCustos,
CASE WHEN G.ValorizacaoLote = 1 THEN m.Lote ELSE '<L01>' END ,
m.TipoMovimento,
m.Quantidade,
ValorMBase = ROUND(o.Quantidade * o.ValorUnitario ,2),
ValorMBAlt = ROUND(o.Quantidade * o.ValorUnitario ,2),
ValorOrigMBase = ROUND(o.Quantidade * o.ValorUnitario ,2),
ValorOrigMAlt = ROUND(o.Quantidade * o.ValorUnitario ,2)
FROM [INV_Origens] o
INNER JOIN INV_Movimentos m On m.IdOrigem = o.Id
INNER JOIN Armazens A ON A.Armazem = m.Armazem
INNER JOIN INV_GruposCustos G ON G.Grupo = A.GrupoCustos
LEFT JOIN INV_Custeio C ON c.IdOrigem = o.Id
WHERE o.ActualizaCusto = 1 AND o.AplicaValorizacao = 0
AND C.Id IS NULL AND m.TipoMovimento <>'S'

 

-- reconstuir movimentos de custeio
exec std_droptemptable '#tempregistoscalcvariacoes'

select a.* into #tempregistoscalcvariacoes
from
(
select artigo = m.artigo, grupocustos = m.grupocustos, m.lote, data = min(m.[data])
,actquantidades = 1
, idcusteio = convert(uniqueidentifier, null)
,apenascalculocusto = convert(bit,0)
from inv_custeio m
inner join
(
select distinct artigo
from inv_custeio
where dataref is not null
) a on a.artigo = m.artigo
group by m.artigo, m.grupocustos, m.lote
union all
select artigo = m.artigo, grupocustos = m.grupocustos, m.lote, data = min(m.[data])
,actquantidades = 1
, idcusteio = convert(uniqueidentifier, null)
,apenascalculocusto = convert(bit,1)
from inv_custeio m
inner join
(
select distinct artigo
from inv_custeio
where dataref is null
) a on a.artigo = m.artigo
group by m.artigo, m.grupocustos, m.lote
) a
WHERE a.artigo IN (SELECT Distinct Artigo FROM INV_Custeio WHERE DataIntegracao >= @DataRegistos)

exec [inv_calculavariacoescusteio] @putilizador = 'upgrade', @pperformancename = ''
GO

INSERT INTO INV_Valorizacoes
(
Id, IdOrigem, IdMovimentoStock, IdCustoPadrao, Quantidade, Data, DataValor, CustoMBase, CustoMAlt, ValorMBase, ValorMAlt
)
SELECT Id = NEWID(), IdOrigem = O.[ID], IdMovimentoStock = stk.[Id], IdCustoPadrao = NULL, Quantidade = stk.Quantidade, stk.Data,DataValor = cust.Data,
CustoMBase = ISNULL(CASE WHEN ISNULL(cust.Lote,cust2.Lote) = '<L01>' THEN ISNULL(cust.CustoGrpCstMBase_Actual,cust2.CustoGrpCstMBase_Actual) ELSE ISNULL(cust.CustoGrpCstLotMBase_Actual,cust2.CustoGrpCstLotMBase_Actual) END,0),
CustoMAlt = ISNULL(CASE WHEN ISNULL(cust.Lote,cust2.Lote) = '<L01>' THEN ISNULL(cust.CustoGrpCstMAlt_Actual,cust2.CustoGrpCstMAlt_Actual) ELSE ISNULL(cust.CustoGrpCstLotMAlt_Actual,cust2.CustoGrpCstLotMAlt_Actual) END,0),
ValorMBase = ROUND(ISNULL(CASE WHEN ISNULL(cust.Lote,cust2.Lote) = '<L01>' THEN ISNULL(cust.CustoGrpCstMBase_Actual,cust2.CustoGrpCstMBase_Actual) ELSE ISNULL(cust.CustoGrpCstLotMBase_Actual,cust2.CustoGrpCstLotMBase_Actual) END,0) * stk.Quantidade,2),
ValorMAlt = ROUND(ISNULL(CASE WHEN ISNULL(cust.Lote,cust2.Lote) = '<L01>' THEN ISNULL(cust.CustoGrpCstMAlt_Actual,cust2.CustoGrpCstMAlt_Actual) ELSE ISNULL(cust.CustoGrpCstLotMAlt_Actual,cust2.CustoGrpCstLotMAlt_Actual) END,0) * stk.Quantidade,2)
FROM INV_Origens O WITH(NOLOCK)
INNER JOIN INV_Movimentos stk WITH(READPAST) ON stk.IdOrigem = O.Id
INNER JOIN Armazens a WITH(NOLOCK) ON a.Armazem = stk.Armazem
INNER JOIN INV_Estados e WITH(NOLOCK) ON e.Estado = stk.EstadoStock
LEFT JOIN INV_Valorizacoes val WITH(NOLOCK) ON val.IdMovimentoStock = stk.Id
OUTER APPLY (
SELECT TOP 1 C.*
FROM INV_Custeio C WITH(READPAST)
INNER JOIN INV_GruposCustos g WITH(NOLOCK) ON g.Grupo = C.GrupoCustos
WHERE C.Artigo = stk.Artigo and C.GrupoCustos = a.GrupoCustos AND ((C.Lote = stk.Lote AND g.ValorizacaoLote =1 ) OR g.ValorizacaoLote = 0)
AND C.Data < stk.[Data]
ORDER BY [Data] DESC, [NumRegisto] DESC
) cust2
OUTER APPLY (
SELECT TOP 1 C.*
FROM INV_Custeio C WITH(READPAST)
INNER JOIN INV_GruposCustos g WITH(NOLOCK) ON g.Grupo = C.GrupoCustos
LEFT JOIN INV_Movimentos mo ON mo.Id = C.IdMovimentoStock
WHERE C.Artigo = stk.Artigo and C.GrupoCustos = a.GrupoCustos AND ((C.Lote = stk.Lote AND g.ValorizacaoLote =1 ) OR g.ValorizacaoLote = 0)
AND (C.Data = stk.Data AND ISNULL(mo.NumRegisto,0) < stk.NumRegisto)
ORDER BY [Data] DESC, [NumRegisto] DESC
) cust
WHERE stk.TipoMovimento = 'S'
AND O.AplicaValorizacao = 1 AND stk.IdReserva IS NULL
AND e.Previsto = 0 AND e.EstadoReserva = 0
AND val.Id IS NULL

Commit

 

Se a mesma não corresponder com o que é pretendido coloque p.f. um ticket no portal de suporte.

Faça login para poder traduzir
Marked as spam
Criado há 4 anos e 4 meses filipesantos
f
filipesantos Moderador Loyal Contributor