DECLARE @DataInicio AS DATETIME = '01/01/2021' -- exemplo, inicio da análise a 1 de janeiro de 2021 DECLARE @DataFim AS DATETIME = '01/31/2021' -- exemplo, fim da análise a 31 de janeiro de 2021 --------------------------------------------------------------------------- -- lançamentos na em inventário VS CBL -- --------------------------------------------------------------------------- SELECT * FROM ( SELECT * , DiferencaInventario = CASE WHEN TipoMov = 'Saída' THEN ValorValorizacoes ELSE ValInv END - ISNULL(TotalCBLInventario,0) , DiferencaContrapartida = ISNULL(ValorCMVMC_ENC_DES_VPTs,ValorValorizacoes)-ISNULL(TotalCBLContrapartida,0) FROM ( SELECT DOCS2.Documento ,DOCS2.MesDoc ,DOCS2.Data ,DOCS2.TipoMov ,ValInv = ABS(SUM(ValorInventario)) ,ValorCMVMC_ENC_DES_VPTs = ABS(SUM(ValorCMVMC_ENC_DES_VPTs)) ,ValorValorizacoes = ABS(SUM(ValorValorizacoes)) ,DOCS2.Modulo ,TotalCBLInventario ,TotalCBLContrapartida FROM ( SELECT DOCS.Documento ,DOCS.MesDoc ,DOCS.Data ,TipoMov = CASE WHEN Docs.TotalCusteio IS NULL THEN 'Saída' ELSE 'Entrada' END ,ValorInventario = ROUND(ISNULL(Docs.TotalCusteio,0),4) ,ValorValorizacoes = ROUND(Docs.TotalValorizacao,4) ,ValorCMVMC_ENC_DES_VPTs = ROUND(Docs.TotalCMVMC_ENC_DES_VPT,4) ,DOCS.Modulo ,TotalCBLInventario = CONVERT(DECIMAL(28,10),CBLInv.TotalCBLInventario) ,TotalCBLContrapartida = CONVERT(DECIMAL(28,10),CBLCon.TotalCBLContrapartida) FROM ( SELECT o.Documento, o.IdChave1 , TotalCusteio = SUM (c.ValorMBase * CASE WHEN c.TipoLancamentoCusteio = 0 THEN 1 ELSE CASE WHEN stk.ExistenciasActual <= 0 THEN 0 ELSE 1 END END) * CASE WHEN c.TipoMovimento = 'S' THEN -1 ELSE 1 END , TotalValorizacao = SUM(val.CustoMBase * val.Quantidade) , TotalCMVMC_ENC_DES_VPT = SUM(VARIs.TotalVARIs) ,MesDoc = Month(o.Data) ,tor.Modulo , Data = CONVERT(DATETIME, CONVERT(DATE, o.Data), 120) FROM INV_Origens o INNER JOIN INV_TiposOrigem tor ON tor.Id = o.IdTipoOrigem LEFT JOIN INV_Custeio c ON c.IdOrigem = o.Id OUTER APPLY ( SELECT TOP 1 ExistenciasActual = CASE WHEN c.Lote <> '' THEN mov.ExistenciasGrpCstLot_Actual ELSE mov.ExistenciasGrpCst_Actual END FROM INV_Movimentos mov INNER JOIN Armazens A ON A.Armazem = mov.Armazem INNER JoIN INV_GruposCustos g On g.Grupo = A.GrupoCustos WHERE mov.Artigo = c.Artigo AND A.GrupoCustos = c.GrupoCustos AND ((c.Lote = mov.Lote AND g.ValorizacaoLote =1 ) OR g.ValorizacaoLote = 0) AND mov.Data <= c.Data ORDER BY Data DESC, NumRegisto DESC ) stk LEFT JOIN INV_Valorizacoes val ON val.IdOrigem = o.Id LEFT JOIN (SELECT IdCusteioVariacao, TotalVARIs = SUM (ValorMBase) FROM INV_Variacoes GROUP BY IdCusteioVariacao) VARIs ON VARIs.IdCusteioVariacao = c.Id --WHERE (c.artigo = 'NOMEARTIGO' OR m.artigo = 'NOMEARTIGO') AND tor.Modulo not in ('T','U') -- Filtros adicionais (artigo ou modulo) GROUP BY o.Documento, tor.Modulo, Month(o.Data),o.IdChave1,c.tipoLancamentoCusteio, c.TipoMovimento,CONVERT(DATETIME, CONVERT(DATE, o.Data), 120) ) DOCS OUTER APPLY ( SELECT MesCBLOrig = m.Mes, TotalCBLInventario = ABS(SUM(m.Valor * CASE WHEN m.Natureza = 'D' THEN 1 ELSE -1 END)) FROM Movimentos m INNER JOIN CabecMovCBL c ON c.Id = m.IdCabec WHERE c.IdDocOrig = DOCS.IdChave1 AND ((m.Conta LIKE '32%' OR m.Conta LIKE '33%')AND m.Conta <> '3253') -- colocar aqui as contas de inventário que pretende contemplar ou excluir GROUP BY m.Serie,m.NumDoc,m.Mes )CBLInv OUTER APPLY ( SELECT MesCBLOrig = m.Mes,TotalCBLContrapartida = ABS(SUM(m.Valor * CASE WHEN m.Natureza = 'D' THEN 1 ELSE -1 END)) FROM Movimentos m INNER JOIN CabecMovCBL c ON c.Id = m.IdCabec WHERE c.IdDocOrig = DOCS.IdChave1 AND (m.Conta LIKE '61%' OR m.Conta LIKE '68%' OR m.Conta LIKE '38%') -- colocar aqui as contas de contrapartida de inventário a contemplar ou excluir GROUP BY m.Serie,m.NumDoc,m.Mes )CBLCon WHERE (DOCS.TotalCusteio IS NOT NULL OR DOCS.TotalValorizacao IS NOT NULL) ) DOCS2 GROUP BY DOCS2.Documento ,DOCS2.MesDoc ,DOCS2.Data ,DOCS2.TipoMov ,DOCS2.Modulo ,TotalCBLInventario ,TotalCBLContrapartida ) B )A WHERE (ABS(A.DiferencaInventario) > 0.1 OR (ABS(A.DiferencaContrapartida) > 0.1 AND ((Modulo <> 'C' OR Modulo = 'C' AND TipoMov <> 'Saída')))) and Data >= @DataInicio and data < DATEADD(dd,1,@DataFim) ORDER BY A.DiferencaInventario desc, a.DiferencaContrapartida desc