DECLARE @DataFechamento DATE;
SET @DataFechamento = '20191218';
DECLARE @Produto VARCHAR(15);
SET @Produto = 'PC';
DECLARE @Armazem VARCHAR(2);
SET @Armazem = '02';
SELECT TOT.TOT_LOCAL
,TOT.TOT_ENDER
,TOT.TOT_PRDORI
,TOT.TOT_PRODUT
,TOT.TOT_LOTECT
,TOT.TOT_NUMLOT
,TOT.TOT_NUMSER
,TOT.TOT_IDUNIT
,TOT.TOT_QTDEST - ((TOT.TOT_QTDINI + TOT.TOT_QTDENT) - TOT.TOT_QTDSAI) DIFERENCA_D14_D13
FROM (
SELECT TOT_LOCAL
,TOT_ENDER
,TOT_PRDORI
,TOT_PRODUT
,TOT_LOTECT
,TOT_NUMLOT
,TOT_NUMSER
,TOT_IDUNIT
,CASE
WHEN FCH.FCH_DATA IS NULL
THEN '19800101'
ELSE FCH.FCH_DATA
END TOT_DATA
,CAST ((
CASE
WHEN SLD_QTDEST IS NULL
THEN 0
ELSE SLD_QTDEST
END
) AS DECIMAL(12, 3)) TOT_QTDEST
,CAST ((
CASE
WHEN FCH.FCH_SALDO IS NULL
THEN 0
ELSE FCH.FCH_SALDO
END
) AS DECIMAL(12, 3)) TOT_QTDINI
,CAST ((
CASE
WHEN ENT.ENT_SALDO IS NULL
THEN 0
ELSE ENT.ENT_SALDO
END
) AS DECIMAL(12, 3)) TOT_QTDENT
,CAST ((
CASE
WHEN SAI.SAI_SALDO IS NULL
THEN 0
ELSE SAI.SAI_SALDO
END
) AS DECIMAL(12, 3)) TOT_QTDSAI
FROM (
SELECT D14.D14_LOCAL TOT_LOCAL
,D14.D14_ENDER TOT_ENDER
,D14.D14_PRDORI TOT_PRDORI
,D14.D14_PRODUT TOT_PRODUT
,D14.D14_LOTECT TOT_LOTECT
,D14.D14_NUMLOT TOT_NUMLOT
,D14.D14_NUMSER TOT_NUMSER
,D14.D14_IDUNIT TOT_IDUNIT
FROM D14990 D14
WHERE D14.D14_FILIAL = '01'
AND D14.D_E_L_E_T_ = ' '
UNION ALL
SELECT D13.D13_LOCAL TOT_LOCAL
,D13.D13_ENDER TOT_ENDER
,D13.D13_PRDORI TOT_PRDORI
,D13.D13_PRODUT TOT_PRODUT
,D13.D13_LOTECT TOT_LOTECT
,D13.D13_NUMLOT TOT_NUMLOT
,D13.D13_NUMSER TOT_NUMSER
,D13.D13_IDUNIT TOT_IDUNIT
FROM D13990 D13
WHERE D13.D13_FILIAL = '01'
AND D13.D_E_L_E_T_ = ' '
) TOT
LEFT JOIN (
SELECT D14.D14_LOCAL SLD_LOCAL
,D14.D14_ENDER SLD_ENDER
,D14.D14_PRDORI SLD_PRDORI
,D14.D14_PRODUT SLD_PRODUT
,D14.D14_LOTECT SLD_LOTECT
,D14.D14_NUMLOT SLD_NUMLOT
,D14.D14_NUMSER SLD_NUMSER
,D14.D14_IDUNIT SLD_IDUNIT
,D14.D14_QTDEST SLD_QTDEST
FROM D14990 D14
WHERE D14.D14_FILIAL = '01'
AND D14.D_E_L_E_T_ = ' '
) SLD ON SLD.SLD_LOCAL = TOT.TOT_LOCAL
AND SLD.SLD_ENDER = TOT.TOT_ENDER
AND SLD.SLD_PRDORI = TOT.TOT_PRDORI
AND SLD.SLD_PRODUT = TOT.TOT_PRODUT
AND SLD.SLD_LOTECT = TOT.TOT_LOTECT
AND SLD.SLD_NUMLOT = TOT.TOT_NUMLOT
AND SLD.SLD_NUMSER = TOT.TOT_NUMSER
AND SLD.SLD_IDUNIT = TOT.TOT_IDUNIT
LEFT JOIN (
SELECT MAX(D15.D15_DATA) FCH_DATA,
, D15.D15_LOCAL FCH_LOCAL,
, D15.D15_ENDER FCH_ENDER,
, D15.D15_PRDORI FCH_PRDORI,
, D15.D15_PRODUT FCH_PRODUT,
, D15.D15_LOTECT FCH_LOTECT,
, D15.D15_NUMLOT FCH_NUMLOT,
, D15.D15_NUMSER FCH_NUMSER,
, D15.D15_IDUNIT FCH_IDUNIT,
, D15.D15_QINI FCH_SALDO
FROM D15990 D15
WHERE D15.D15_FILIAL = '01'
AND D15.D15_DATA = @DataFechamento
AND D15.D_E_L_E_T_ = ' '
GROUP BY D15.D15_LOCAL
,D15.D15_ENDER
,D15.D15_PRDORI
,D15.D15_PRODUT
,D15.D15_LOTECT
,D15.D15_NUMLOT
,D15.D15_NUMSER
,D15.D15_IDUNIT
,D15.D15_QINI
) FCH ON FCH.FCH_LOCAL = TOT.TOT_LOCAL
AND FCH.FCH_ENDER = TOT.TOT_ENDER
AND FCH.FCH_PRDORI = TOT.TOT_PRDORI
AND FCH.FCH_PRODUT = TOT.TOT_PRODUT
AND FCH.FCH_LOTECT = TOT.TOT_LOTECT
AND FCH.FCH_NUMLOT = TOT.TOT_NUMLOT
AND FCH.FCH_NUMSER = TOT.TOT_NUMSER
AND FCH.FCH_IDUNIT = TOT.TOT_IDUNIT
LEFT JOIN (
SELECT D13.D13_LOCAL ENT INNER JOIN (SELECT MAX(D15_DATA) D15_DATA,
D15_LOCAL,
D15_ENDER,
D15_PRDORI,
D15_PRODUT,
D15_LOTECT,
D15_NUMLOT,
D15_NUMSER,
D15_IDUNIT
FROM D15990 D153
WHERE D153.D15_FILIAL = '01'
AND D153.D15_DATA <= @DataFechamento
AND D153.D_E_L_E_T_ = ' '
GROUP BY D153.D15_LOCAL,
D153.D15_ENDER,
D153.D15_PRDORI,
D153.D15_PRODUT,
D153.D15_LOTECT,
D153.D15_NUMLOT,
D153.D15_NUMSER,
D153.D15_IDUNIT) D15MAX
ON D15MAX.D15_LOCAL = D15.D15_LOCAL
AND D15MAX.D15_ENDER = D15.D15_ENDER
AND D15MAX.D15_PRDORI = D15.D15_PRDORI
AND D15MAX.D15_PRODUT = D15.D15_PRODUT
AND D15MAX.D15_LOTECT = D15.D15_LOTECT
AND D15MAX.D15_NUMLOT = D15.D15_NUMLOT
AND D15MAX.D15_NUMSER = D15.D15_NUMSER
AND D15MAX.D15_IDUNIT = D15.D15_IDUNIT
AND D15MAX.D15_DATA = D15.D15_DATA
WHERE D15.D15_FILIAL = '01'
AND D15.D_E_L_E_T_ = ' '
) FCH ON FCH.FCH_LOCAL = TOT.TOT_LOCAL
AND FCH.FCH_ENDER = TOT.TOT_ENDER
AND FCH.FCH_PRDORI = TOT.TOT_PRDORI
AND FCH.FCH_PRODUT = TOT.TOT_PRODUT
AND FCH.FCH_LOTECT = TOT.TOT_LOTECT
AND FCH.FCH_NUMLOT = TOT.TOT_NUMLOT
AND FCH.FCH_NUMSER = TOT.TOT_NUMSER
AND FCH.FCH_IDUNIT = TOT.TOT_IDUNIT
LEFT JOIN (
SELECT D13.D13_LOCAL ENT_LOCAL
,D13.D13_ENDER ENT_ENDER
,D13.D13_PRDORI ENT_PRDORI
,D13.D13_PRODUT ENT_PRODUT
,D13.D13_LOTECT ENT_LOTECT
,D13.D13_NUMLOT ENT_NUMLOT
,D13.D13_NUMSER ENT_NUMSER
,D13.D13_IDUNIT ENT_IDUNIT
,SUM(D13.D13_QTDEST) ENT_SALDO
FROM D13990 D13
WHERE D13.D13_FILIAL = '01'
AND D13.D13_DTESTO > (SELECT COALESCE(MAX(D151.D15_DATA),' ')
FROM D15990 D151
WHERE D151.D15_FILIAL = '01'
AND D151.D15_DATA <= @DataFechamento
AND D151.D_E_L_E_T_ = ' '
AND D151.D15_ENDER = D13.D13_ENDER
AND D151.D15_PRDORI = D13.D13_PRDORI
AND D151.D15_PRODUT = D13.D13_PRODUT
AND D151.D15_LOTECT = D13.D13_LOTECT
AND D151.D15_NUMLOT = D13.D13_NUMLOT
AND D151.D15_NUMSER = D13.D13_NUMSER
AND D151.D15_IDUNIT = D13.D13_IDUNIT)
AND D13.D13_TM = '499'
AND D13.D13_USACAL <> '2'
AND D13.D_E_L_E_T_ = ' '
GROUP BY D13.D13_LOCAL
,D13.D13_ENDER ENT_ENDER
,D13.D13_PRDORI ENT_PRDORI
,D13.D13_PRODUT ENT_PRODUT
,D13.D13_LOTECT ENT_LOTECT
,D13.D13_NUMLOT ENT_NUMLOT
,D13.D13_NUMSER ENT_NUMSER
,D13.D13_IDUNIT
) ENT ON ENT_IDUNIT
,SUM(D13.D13_QTDEST) ENT_SALDO
FROM D13990 D13
WHERE D13.D13_FILIAL = '01'
AND D13.D13_DTESTO > @DataFechamento
AND D13.D13_TM = '499'
AND D13.D13_USACAL <> '2'
AND D13.D_E_L_E_T_ = ' '
GROUP BY D13.D13.ENT_LOCAL = TOT.TOT_LOCAL
AND ENT.ENT_ENDER = TOT.TOT_ENDER
AND ENT.ENT_PRDORI = TOT.TOT_PRDORI
AND ENT.ENT_PRODUT = TOT.TOT_PRODUT
AND ENT.ENT_LOTECT = TOT.TOT_LOTECT
AND ENT.ENT_NUMLOT = TOT.TOT_NUMLOT
AND ENT.ENT_NUMSER = TOT.TOT_NUMSER
AND ENT.ENT_IDUNIT = TOT.TOT_IDUNIT
LEFT JOIN (
SELECT D13.D13_LOCAL SAI_LOCAL
,D13.D13_ENDER SAI_ENDER
,D13.D13_PRDORI SAI_PRDORI
,D13.D13_PRODUT SAI_PRODUT
,D13.D13_LOTECT SAI_LOTECT
,D13.D13_NUMLOT SAI_NUMLOT
,D13.D13_NUMSERD13_NUMSER SAI_NUMSER
,D13.D13_IDUNIT SAI_IDUNIT
,SUM(D13.D13_IDUNITQTDEST) SAI_SALDO
)FROM ENT ON ENT.ENT_LOCAL = TOT.TOT_LOCALD13990 D13
WHERE D13.D13_FILIAL = '01'
AND ENTD13.ENTD13_ENDER = TOT.TOT_ENDER
AND ENT.ENT_PRDORI = TOT.TOT_PRDORI
AND ENT.ENT_PRODUT = TOT.TOT_PRODUT
AND ENT.ENT_LOTECT = TOT.TOT_LOTECT
AND ENT.ENT_NUMLOT = TOT.TOT_NUMLOT
AND ENT.ENT_NUMSER = TOT.TOT_NUMSER
AND ENT.ENT_IDUNIT = TOT.TOT_IDUNIT
LEFT JOIN (
SELECT D13.D13_LOCAL SAI_LOCAL
,D13.D13_ENDER SAI_ENDER
,D13.D13_PRDORI SAI_PRDORI
,D13.D13_PRODUT SAI_PRODUT
,D13.D13_LOTECT SAI_LOTECT
,D13.D13_NUMLOT SAI_NUMLOT
,D13.D13_NUMSER SAI_NUMSER
,D13.D13_IDUNIT SAI_IDUNIT
,SUM(D13.D13_QTDEST) SAI_SALDO
FROM D13990 D13
WHERE D13.D13_FILIAL = '01'
AND D13.D13_DTESTO > @DataFechamentoDTESTO > (SELECT COALESCE(MAX(D151.D15_DATA),' ')
FROM D15990 D151
WHERE D151.D15_FILIAL = '01'
AND D151.D15_DATA <= @DataFechamento
AND D151.D_E_L_E_T_ = ' '
AND D151.D15_ENDER = D13.D13_ENDER
AND D151.D15_PRDORI = D13.D13_PRDORI
AND D151.D15_PRODUT = D13.D13_PRODUT
AND D151.D15_LOTECT = D13.D13_LOTECT
AND D151.D15_NUMLOT = D13.D13_NUMLOT
AND D151.D15_NUMSER = D13.D13_NUMSER
AND D151.D15_IDUNIT = D13.D13_IDUNIT)
AND D13.D13_TM = '999'
AND D13.D13_USACAL <> '2'
AND D13.D_E_L_E_T_ = ' '
GROUP BY D13.D13_LOCAL
,D13.D13_ENDER
,D13.D13_PRDORI
,D13.D13_PRODUT
,D13.D13_LOTECT
,D13.D13_NUMLOT
,D13.D13_NUMSER
,D13.D13_IDUNIT
) SAI ON SAI.SAI_LOCAL = TOT.TOT_LOCAL
AND SAI.SAI_ENDER = TOT.TOT_ENDER
AND SAI.SAI_PRDORI = TOT.TOT_PRDORI
AND SAI.SAI_PRODUT = TOT.TOT_PRODUT
AND SAI.SAI_LOTECT = TOT.TOT_LOTECT
AND SAI.SAI_NUMLOT = TOT.TOT_NUMLOT
AND SAI.SAI_NUMSER = TOT.TOT_NUMSER
AND SAI.SAI_IDUNIT = TOT.TOT_IDUNIT
GROUP BY TOT.TOT_LOCAL
,TOT.TOT_ENDER
,TOT.TOT_PRDORI
,TOT.TOT_PRODUT
,TOT.TOT_LOTECT
,TOT.TOT_NUMLOT
,TOT.TOT_NUMSER
,TOT.TOT_IDUNIT
,FCH.FCH_DATA
,SLD.SLD_QTDEST
,FCH.FCH_SALDO
,ENT.ENT_SALDO
,SAI.SAI_SALDO
) TOT
WHERE (TOT.TOT_QTDEST - ((TOT.TOT_QTDINI + TOT.TOT_QTDENT) - TOT.TOT_QTDSAI)) <> 0
AND TOT.TOT_LOCAL = @Armazem
AND TOT.TOT_PRDORI = @Produto
|