Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

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.

...

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 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.

icon
Informações
falsetitleIMPORTANTE!

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

Sistema reflita o armazenamento físico e remova o saldo do endereço fictício chamado de INVENTARIO.

Opção 3 - Ajuste de Saldo Produto

...

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   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. Para que os registros de ajuste sejam criados gerados na tabela SD3 é adotada a seguinte regra:

3.1.  Se produto não tiver controle de lote , é feita 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á criado;gerado.

3.2.  Se o produto tiver controle de lote , é feita 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á criadogerado.
Caso somente Se apenas a tabela SB2 esteja estiver incorreta , e as tabelas SB8 e D14 corretas (com a mesma quantidade), não será criado gerado o registro de ajuste. O ajuste da tabela SB2 deverá ser feito realizado manualmente , pois, até então, não há processo de ajuste no módulo de estoques 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 Estoques (SB2 e SB8) com base no módulo WMS (D14), será criado gerado um registro de ajuste, na tabela SD3, com quantidade 145 (32+108+5). Esse registro fará a correção da quantidade nas tabela 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.

false
Informações
icon
titleIMPORTANTE!
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

  1. Se  Se a versão do sistema Sistema for inferior a 12.1.27, é necessário aplicar o sdfbra via Configurador (SIGACFG) para gerar os Perguntes (SX1) das novas rotinas.

  2. Se  Se a versão do sistema Sistema for inferior a 12.1.27, as rotinas WMSA580 e WMSA585 devem ser incluídas no Menu de forma manual, via Configurador (SIGACFG).

  3. Deve  Deve ser realizado um backup da base antes do processamento.
  4. Deve  Deve existir um endereço INVENTARIO (exatamente com essa nomenclatura) no Cadastro de Endereço (SBE).

  5. O  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 Materiais ou realizar o ajuste manual.

  6. A  A utilização das rotinas WMSA580 e WMSA585 deve ser pontual, pois o ideal é sempre identificar a origem do desbalanceamento de saldo.

  7. Após  Após utilizar essas rotinas é recomendável realizar o Inventário, para garantir que o saldo do sistema 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.

  8. O  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.
  9. É  É 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
languagesql
titleAnálise Diferenças Entre D13 e D14
collapsetrue
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_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.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
languagesql
titleAnálise Diferenças Entre D14 e SB8
collapsetrue
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

CampoDescrição
Armazém Dede?
Armazém Atéaté?

Armazéns que deverão ser considerados na seleção para a análise do Kardex por endereço.

false
Informações
icon
titleImportante!

Se estes campos permanecerem em branco, na seleção serão considerados todos os armazéns.

Produto Dede?
Produto Atéaté?

Produtos origem que deverão ser considerados na análise do Kardex por endereço.

Informações
iconfalse
titleImportante!
  • Se estes campos permanecerem em branco, na seleção serão considerados todos os produtos origem.
  • Quando não há controle de produto x componente, o produto origem e o produto são os mesmos.
Análise / Ajusteajuste?

Forma como deverá ser efetuada a análise ou o ajuste:

  • Por Kardex Endereço;
  • Por Estoque Endereço;
  • Por Saldo Produto.
Lote?

Código do lote do produto que deverá ser considerado na análise do Kardex por endereço.

false
Informações
icon
titleImportante!
Se este campo permanecer em branco, na seleção serão considerados todos os lotes.
Sublote?

Código do sublote do produto que deverá ser considerado na análise do kardex por endereço.

icon
Informações
falsetitleImportante!
Se este campo permanecer em branco, na seleção serão considerados todos os lotes.
Número de Sériesérie?

Número de série que deverá ser considerado na análise do Kardex por endereço.

icon
Informações
falsetitleImportante!
Se este campo permanecer em branco, na seleção serão considerados todos os números de série.
Unitizador?

Unitizador que deverá ser considerado na análise do Kardex por endereço.

false
Informações
icon
titleImportante!
Se este campo permanecer em branco, na seleção serão considerados todos os unitizadores.

...