Histórico da Página
...
Essa rotina permite ajustar o saldo do produto e seu Kardex, de acordo com a opção de processamento selecionada. Cada opção tem uma finalidade e ocasionará resultados diferentes. Deve ser selecionada apenas a opção que atenda a sua necessidade:
Opção 1 - Ajuste de Kardex Endereço
...
Ao final do processamento, caso seja identificada alguma divergência para mais ou para menos, é realizada a inclusão de um registro de Kardex com o valor da divergência, sendo que este pode ser localizado pelo D13_DOC igual a AJT_D14.
Exemplo de Utilização
Essa opção pode ser utilizada quando o saldo por endereço WMS (D14) está correto, porém, o Kardex encontra-se com divergência.
Opção 2 - Ajuste de Estoque Endereço
Objetivo
Realizar o ajuste do saldo por endereço WMS (D14) e do Kardex (D13), com base no saldo em estoque (SB2 ou SB8).
...
Essa opção executa as seguintes ações:
1, Executa o ajuste de Kardex por endereço, conforme descrito na Opção 1.
2. Compara o saldo por endereço WMS (D14) com o saldo do produto (SB2) ou o saldo do produto por lote (SB8), dependendo da característica do produto.
3. Existindo divergência para mais ou para menos, o sistema gerará Sistema gera um saldo negativo ou positivo no endereço INVENTARIO.
4. O Kardex também será ajustado para registrar essa movimentação de entrada ou saída do endereço INVENTARIO, sendo que esse registro de Kardex pode ser identificado pelo D13_DOC igual a AJT_SB2.
...
Exemplo de Utilização
Essa opção não ajusta pode ser utilizada quando o saldo do produto (SB2 ) e o saldo do produto por lote ( SB8) está correto, portanto, é imprescindível a realização do Inventário (por produto ou endereço) para que o sistema porém, o saldo por endereço WMS (D14) encontra-se com divergência.
Informações | ||
---|---|---|
| ||
Essa opção não ajusta o saldo do produto (SB2) e o saldo do produto por lote (SB8), portanto, é imprescindível a realização do Inventário (por produto ou endereço), para que o Sistema reflita o armazenamento físico e remova o saldo do endereço fictício chamado de INVENTARIO. |
Exemplo de Utilização
Opção 3 - Ajuste de Saldo Produto
Objetivo
Realizar o ajuste do Essa opção pode ser utilizada quando o saldo do produto (SB2 e SB8) está correto, porém, o saldo por endereço WMS (D14) encontra-se com divergência.
Opção 3 - Ajuste de Saldo Produto
Objetivo
Realizar o ajuste do saldo do produto (SB2 e SB8), de acordo com o saldo , de acordo com o saldo por endereço do WMS (D14).
...
Essa opção executa as seguintes ações:
1. Ajuste de Kardex por endereço, conforme descrito na Opção 1.
2. Ajuste de saldo WMS, conforme descrito na Opção 2.
3. Verifica o saldo da divergência registrado no endereço INVENTARIO e efetua o ajuste na SB2 e SB8, para mais ou para menos, pelos movimentos internos (SD3). Esse registro de movimentação interna pode ser identificado pelo D3_DOC igual a AJT_SB2.
Importante!
Se no final do processamento houver sobra de saldo no endereço INVENTARIO, por conta de um ajuste no qual o saldo de estoque (SB2/SB8) é maior que o saldo por endereço WMS (D14), é imprescindível que o Inventário (por produto ou endereço) seja realizado, para que possa refletir o armazenamento físico e remova o saldo desse endereço fictício.
Exemplo de Utilização
Essa opção pode ser utilizada quando o saldo por endereço WMS (D14) está correto, porém, o saldo de estoque (SB2 e SB8) encontra-se com divergência.
02. PRÉ-REQUISITOS / RECOMENDAÇÕES
Se a versão do sistema for inferior a 12.1.27, é necessário aplicar o sdfbra via Configurador (SIGACFG) para gerar os Perguntes (SX1) das novas rotinas.
Se a versão do sistema for inferior a 12.1.27, as rotinas WMSA580 e WMSA585 devem ser incluídas no Menu de forma manual, via Configurador (SIGACFG).
- Deve ser realizado um backup da base antes do processamento.
Deve existir um endereço INVENTARIO (exatamente com essa nomenclatura) no Cadastro de Endereço (SBE).
O saldo por produto (SB2) e o saldo por lote (SB8) não podem apresentar divergências. Caso contrário, será necessário utilizar o refaz saldos do módulo de materiais ou realizar o ajuste manual.
A utilização das rotinas WMSA580 e WMSA585 deve ser pontual, pois o ideal é sempre identificar a origem do desbalanceamento de saldo.
Após utilizar essas rotinas é recomendável realizar o Inventário, para garantir que o saldo do sistema reflita o saldo físico. Principalmente se o endereço INVENTARIO constar com alguma quantidade (positiva ou negativa) pois isso significa que existiu uma diferença entre SB2/SB8 e D14 que precisou ser ajustada.
- É indispensável a verificação das divergências de saldo antes e depois de processamento, para maior garantia que o processo foi devidamente executado. Para tanto, as queries abaixo podem ser utilizadas como exemplo:
Para que os registros de ajuste sejam gerados na tabela SD3 é adotada a seguinte regra:
3.1. Se produto não tiver controle de lote é efetuada a comparação do somatório do saldo existente na tabela D14 (D14_QTDEST) com o saldo existente na tabela SB2 (B2_QATU). Se for diferente, o registro de ajuste será gerado.
3.2. Se o produto tiver controle de lote é efetuada a comparação do somatório do saldo por lote na tabela D14 (D14_QTDEST) com o saldo existente na tabela SB8 (B8_SALDO). Se for diferente, o registro de ajuste será gerado.
Se apenas a tabela SB2 estiver incorreta e as tabelas SB8 e D14 corretas (com a mesma quantidade), não será gerado o registro de ajuste. O ajuste da tabela SB2 deverá ser realizado manualmente pois, até então, não há processo de ajuste no módulo de Estoques para esta situação.
Exemplo de cenário com ajuste, existindo controle de produto por lote (haverá criação de registros para acerto da quantidade em estoque):
- SB2 - Incorreta (0)
- SB8 - Incorreta (0)
- D14 - Correta (32+108+5)
Como o objetivo é atualizar o módulo de Estoques (SB2 e SB8) com base no módulo WMS (D14), será gerado um registro de ajuste, na tabela SD3, com quantidade 145 (32+108+5). Esse registro fará a correção da quantidade nas tabelas SB2 e SB8:
- SB2 - Correta (0+145)
- SB8 - Correta (0+145)
- D14 - Correta (32+108+5)
Exemplo de Utilização
Essa opção pode ser utilizada quando o saldo por endereço WMS (D14) está correto, porém, o saldo de estoque (SB2 e SB8) encontra-se com divergência.
Informações | ||
---|---|---|
| ||
Se no final do processamento houver sobra de saldo no endereço INVENTARIO, por conta de um ajuste no qual o saldo de estoque (SB2/SB8) é maior que o saldo por endereço WMS (D14), é imprescindível que o Inventário (por produto ou endereço) seja realizado, para que possa refletir o armazenamento físico e remova o saldo desse endereço fictício. |
02. PRÉ-REQUISITOS / RECOMENDAÇÕES
Se a versão do Sistema for inferior a 12.1.27, é necessário aplicar o sdfbra via Configurador (SIGACFG) para gerar os Perguntes (SX1) das novas rotinas.
Se a versão do Sistema for inferior a 12.1.27, as rotinas WMSA580 e WMSA585 devem ser incluídas no Menu de forma manual, via Configurador (SIGACFG).
- Deve ser realizado um backup da base antes do processamento.
Deve existir um endereço INVENTARIO (exatamente com essa nomenclatura) no Cadastro de Endereço (SBE).
O saldo por produto (SB2) e o saldo por lote (SB8) não podem apresentar divergências. Caso contrário, será necessário utilizar o refaz saldos do módulo de Materiais ou realizar o ajuste manual.
A utilização das rotinas WMSA580 e WMSA585 deve ser pontual, pois o ideal é sempre identificar a origem do desbalanceamento de saldo.
Após utilizar essas rotinas é recomendável realizar o Inventário, para garantir que o saldo do Sistema reflita o saldo físico. Principalmente se o endereço INVENTARIO constar com alguma quantidade (positiva ou negativa), pois isso significa que existiu uma diferença entre SB2/SB8 e D14 que precisou ser ajustada.
- O processamento da rotina ignora os produtos componentes (onde D14_PRODUT é diferente do D14_PRDORI), pois ainda não encontra-se preparada para acertar o saldo desses produtos.
- É indispensável a verificação das divergências de saldo antes e depois de processamento, para maior garantia que o processo foi devidamente executado. Para tanto, as queries abaixo podem ser utilizadas como exemplo:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
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 | ||||||
Bloco de código | ||||||
| ||||||
DECLARE @DataFechamento DATE; SET @DataFechamento = '20191218'; DECLARE @ProdutoOrigem VARCHAR(15); SET @ProdutoOrigem = 'PC'; 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'19800101' ELSE ENTFCH.ENTFCH_SALDODATA END ) AS DECIMAL(12, 3)) TOT_QTDENTDATA ,CAST (( CASE WHEN SAI.SAISLD_SALDOQTDEST IS NULL THEN 0 ELSE SAI.SAISLD_SALDOQTDEST END ) AS DECIMAL(12, 3)) TOT_QTDSAIQTDEST FROM ,CAST (( SELECT D14.D14_LOCAL TOT_LOCAL CASE ,D14.D14_ENDER TOT_ENDER WHEN FCH.FCH_SALDO IS NULL ,D14.D14_PRDORI TOT_PRDORI ,D14.D14_PRODUT TOT_PRODUTTHEN 0 ,D14.D14_LOTECT TOT_LOTECT ELSE FCH.FCH_SALDO ,D14.D14_NUMLOT TOT_NUMLOT END ,D14.D14_NUMSER ) AS DECIMAL(12, 3)) TOT_NUMSERQTDINI ,D14.D14_IDUNIT TOT_IDUNITCAST (( FROM D14990 D14 CASE WHERE D14.D14_FILIAL = '01' WHEN ENT.ENT_SALDO IS NULL 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 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 SLDTOT_LOCAL ,D14.D14_ENDER SLDTOT_ENDER ,D14.D14_PRDORI SLDTOT_PRDORI ,D14.D14_PRODUT SLDTOT_PRODUT ,D14.D14_LOTECT SLDTOT_LOTECT ,D14.D14_NUMLOT SLDTOT_NUMLOT ,D14.D14_NUMSER SLDTOT_NUMSER ,D14.D14_IDUNIT SLDTOT_IDUNIT FROM D14990 D14 ,WHERE 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.TOTUNION ALL SELECT D13.D13_LOCAL TOT_LOCAL AND SLD.SLD ,D13.D13_ENDER = TOT.TOT_ENDER AND SLD.SLD ,D13.D13_PRDORI = TOT.TOT_PRDORI AND SLD.SLD ,D13.D13_PRODUT = TOT.TOT_PRODUT AND SLD.SLD ,D13.D13_LOTECT = TOT.TOT_LOTECT AND SLD.SLD,D13.D13_NUMLOT = TOT.TOT_NUMLOT AND SLD.SLD ,D13.D13_NUMSER = TOT.TOT_NUMSER AND SLD.SLD,D13.D13_IDUNIT = TOT.TOT_IDUNIT LEFTFROM JOIND13990 (D13 SELECTWHERE MAX(D15D13.D15D13_DATA) FCH_DATA ,D15.D15_LOCAL FCHFILIAL = '01' AND D13.D_E_L_E_T_ = ' ' ) TOT LEFT JOIN ( SELECT D14.D14_LOCAL SLD_LOCAL ,D15D14.D15D14_ENDER FCHSLD_ENDER ,D15D14.D15D14_PRDORI FCHSLD_PRDORI ,D15D14.D15D14_PRODUT FCHSLD_PRODUT ,D15D14.D15D14_LOTECT FCHSLD_LOTECT ,D15D14.D15D14_NUMLOT FCHSLD_NUMLOT ,D15D14.D15D14_NUMSER FCHSLD_NUMSER ,D15D14.D15D14_IDUNIT FCHSLD_IDUNIT ,D15D14.D15D14_QINIQTDEST FCHSLD_SALDOQTDEST FROM D15990D14990 D15D14 WHERE D15D14.D15D14_FILIAL = '01' AND D15.D15_DATA = @DataFechamento AND D15.D14.D_E_L_E_T_ = ' ' GROUP) SLD BYON D15SLD.D15SLD_LOCAL ,D15.D15_ENDER ,D15.D15 = TOT.TOT_LOCAL AND SLD.SLD_ENDER = TOT.TOT_ENDER AND SLD.SLD_PRDORI = TOT.TOT_PRDORI ,D15.D15AND SLD.SLD_PRODUT = TOT.TOT_PRODUT ,D15.D15AND SLD.SLD_LOTECT = TOT.TOT_LOTECT ,D15.D15_NUMLOT ,D15.D15_NUMSER ,D15.D15_IDUNIT ,D15.D15_QINI ) FCH ON FCH.FCH_LOCALAND SLD.SLD_NUMLOT = TOT.TOT_NUMLOT AND SLD.SLD_NUMSER = TOT.TOT_LOCALNUMSER AND FCHSLD.FCHSLD_ENDERIDUNIT = TOT.TOT_ENDERIDUNIT AND FCH.FCH_PRDORI = TOT.TOT_PRDORILEFT JOIN ( ANDSELECT FCHD15.FCHD15_PRODUT = TOT.TOT_PRODUTDATA FCH_DATA, AND FCHD15.FCHD15_LOTECT = TOT.TOT_LOTECTLOCAL FCH_LOCAL, AND FCHD15.FCHD15_NUMLOT = TOT.TOT_NUMLOTENDER FCH_ENDER, AND FCHD15.FCHD15_NUMSER = TOT.TOT_NUMSERPRDORI FCH_PRDORI, AND FCHD15.FCHD15_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 > @DataFechamento 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 ,D13.D13_PRDORI ,D13.D13_PRODUT ,D13.D13_LOTECT ,D13.D13_NUMLOT ,D13.D13_NUMSER ,D13.D13_IDUNIT ) ENT ON ENT.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_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 > @DataFechamento 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.SAIPRODUT 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 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 SAIFCH.SAIFCH_ENDER = TOT.TOT_ENDER AND SAIFCH.SAIFCH_PRDORI = TOT.TOT_PRDORI AND SAIFCH.SAIFCH_PRODUT = TOT.TOT_PRODUT AND SAIFCH.SAIFCH_LOTECT = TOT.TOT_LOTECT AND SAIFCH.SAIFCH_NUMLOT = TOT.TOT_NUMLOT AND SAIFCH.SAIFCH_NUMSER = TOT.TOT_NUMSER AND SAIFCH.SAIFCH_IDUNIT = TOT.TOT_IDUNIT GROUP BY TOT.TOTLEFT JOIN ( SELECT D13.D13_LOCAL ENT_LOCAL ,TOT.TOTD13.D13_ENDER ENT_ENDER ,TOT.TOTD13.D13_PRDORI ENT_PRDORI ,TOT.TOTD13.D13_PRODUT ENT_PRODUT ,TOT.TOTD13.D13_LOTECT ENT_LOTECT ,TOT.TOTD13.D13_NUMLOT ENT_NUMLOT ,TOT.TOTD13.D13_NUMSER ENT_NUMSER ,TOT.TOTD13.D13_IDUNIT ENT_IDUNIT ,FCH.FCH_DATA ,SLDSUM(D13.SLDD13_QTDEST ,FCH.FCH) ENT_SALDO ,ENT.ENT_SALDOFROM D13990 D13 ,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 | ||||||
Bloco de código | ||||||
| ||||||
DECLARE @DataFechamento DATE; SET @DataFechamento = '20191218'; DECLARE @ProdutoOrigem VARCHAR(15); SET @ProdutoOrigem = 'PC'; DECLARE @Produto VARCHAR(15); SET @Produto = 'PC'; DECLARE @Armazem VARCHAR(2); SET @Armazem = '02'; SELECT SUM(D14.D14_QTDEST) D14_QTDEST ,SB2.B2_QATU ,D14.D14_LOCAL ,D14.D14_PRODUT FROM D14990 D14 INNER JOIN SB2990 SB2 ON SB2.B2_FILIAL = '01' AND SB2.B2_COD = D14.D14_PRODUT AND SB2.B2_LOCAL = D14.D14_LOCAL AND SB2.D_E_L_E_T_ = ' ' WHERE D14WHERE 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_ = ' ' AND D14.D14_PRODUT = @Produto GROUP BY D14.D14_PRODUT ,D14.D14_LOCAL ,B2_QATU HAVING CAST(SUM(D14.D14_QTDEST) AS DECIMAL(12, 3)) <> CAST(SB2.B2_QATU AS DECIMAL(12, 3)) |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
DECLARE @DataFechamento DATE;
SET @DataFechamento = '20191218';
DECLARE @ProdutoOrigem VARCHAR(15);
SET @ProdutoOrigem = 'PC';
DECLARE @Produto VARCHAR(15);
SET @Produto = 'PC';
DECLARE @Armazem VARCHAR(2);
SET @Armazem = '02';
SELECT SUM(D14.D14_QTDEST) D14_QTDEST
,SB8.B8_SALDO
,D14.D14_LOCAL
,D14.D14_PRODUT
FROM D14990 D14
INNER JOIN (
SELECT SUM(SB8.B8_SALDO) B8_SALDO
,SB8.B8_PRODUTO
,SB8.B8_LOCAL
FROM SB8990 SB8
WHERE SB8.B8_FILIAL = '01'
AND SB8.D_E_L_E_T_ = ' '
GROUP BY SB8.B8_PRODUTO
,SB8.B8_LOCAL
) SB8 ON SB8.B8_PRODUTO = D14.D14_PRDORI
AND SB8.B8_LOCAL = D14.D14_LOCAL
WHERE D14.D_E_L_E_T_ = ' '
AND D14.D14_PRODUT = @Produto
GROUP BY D14.D14_PRODUT
,D14.D14_LOCAL
,SB8.B8_SALDO
HAVING CAST(SUM(D14.D14_QTDEST) AS DECIMAL(12, 3)) <> CAST(SB8.B8_SALDO AS DECIMAL(12, 3)) |
03. TELA PARÂMETROS
Principais Campos e Parâmetros
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
) ENT ON ENT.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_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 > (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
|
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
DECLARE @Produto VARCHAR(15);
SET @Produto = 'PC';
SELECT SUM(D14.D14_QTDEST) D14_QTDEST
,SB2.B2_QATU
,D14.D14_LOCAL
,D14.D14_PRODUT
FROM D14990 D14
INNER JOIN SB2990 SB2 ON SB2.B2_FILIAL = '01'
AND SB2.B2_COD = D14.D14_PRODUT
AND SB2.B2_LOCAL = D14.D14_LOCAL
AND SB2.D_E_L_E_T_ = ' '
WHERE D14.D_E_L_E_T_ = ' '
AND D14.D14_PRODUT = @Produto
GROUP BY D14.D14_PRODUT
,D14.D14_LOCAL
,B2_QATU
HAVING CAST (SUM(D14.D14_QTDEST) AS DECIMAL(12, 3)) <> CAST (SB2.B2_QATU AS DECIMAL(12, 3))
|
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
DECLARE @Produto VARCHAR(15);
SET @Produto = 'PC';
SELECT SUM(D14.D14_QTDEST) D14_QTDEST
,SB8.B8_SALDO
,D14.D14_LOCAL
,D14.D14_PRODUT
FROM D14990 D14
INNER JOIN (
SELECT SUM(SB8.B8_SALDO) B8_SALDO
,SB8.B8_PRODUTO
,SB8.B8_LOCAL
FROM SB8990 SB8
WHERE SB8.B8_FILIAL = '01'
AND SB8.D_E_L_E_T_ = ' '
GROUP BY SB8.B8_PRODUTO
,SB8.B8_LOCAL
) SB8 ON SB8.B8_PRODUTO = D14.D14_PRDORI
AND SB8.B8_LOCAL = D14.D14_LOCAL
WHERE D14.D14_PRODUT = @Produto
AND D14.D_E_L_E_T_ = ' '
GROUP BY D14.D14_PRODUT
,D14.D14_LOCAL
,SB8.B8_SALDO
HAVING CAST (SUM(D14.D14_QTDEST) AS DECIMAL(12, 3)) <> CAST (SB8.B8_SALDO AS DECIMAL(12, 3)) |
03. TELA PARÂMETROS
Principais Campos e Parâmetros
Campo | Descrição | |||||||
---|---|---|---|---|---|---|---|---|
Armazém de? Armazém até? | Armazéns que deverão ser considerados na seleção para a análise do Kardex por endereço.
| |||||||
Campo | Descrição | |||||||
Armazém De? Armazém Até? | Armazéns que deverão ser considerados na seleção para a análise do Kardex por endereço.
| |||||||
Produto De? Produto Até? | Produtos origem que deverão ser considerados na análise do Kardex por endereço.
| |||||||
Análise / Ajuste? | Forma como deverá ser efetuada a análise ou o ajuste:
| |||||||
Lote? | Código do lote do produto que deverá ser considerado na análise do Kardex por endereço.
| |||||||
Sublote? | ||||||||
Informações | ||||||||
|
| lotes
| Número de Série? | Número de série que deverá ser considerado|||||
Produto de? | Produtos origem que deverão ser considerados na análise do Kardex por endereço.
| |||||||
icon | false |
| !
| este campo permanecer
| números de série.Unitizador? | |||
Informações | ||||||||
|
| |||||||
Análise / ajuste? | Forma como deverá ser efetuada a análise ou o ajuste:
|
04. TABELAS UTILIZADAS
- D14 - Estoque por Endereço WMS
- D13 - Movto Estoque por Endereço WMS
- D12 - Movimentos Internos WMS
- DCF - Ordem de Serviço
HTML |
---|
<!-- esconder o menu --> <style> div.theme-default .ia-splitter #main { margin-left: 0px; } .ia-fixed-sidebar, .ia-splitter-left { display: none; } #main { padding-left: 10px; padding-right: 10px; overflow-x: hidden; } .aui-header-primary .aui-nav, .aui-page-panel { margin-left: 0px !important; } .aui-header-primary .aui-nav { margin-left: 0px !important; } </style> |
05. ASSUNTOS RELACIONADOS
- Ajustes de quantidades de entradas e saídas previstas: Análise das Quantidades Reservadas WMS (WMSA585 - SIGAWMS)