Pragiva — Tecnologia na prática

Inventário no Protheus: contagem, recontagem e seleção do resultado

Inventário no Protheus: digitar a contagem grava a SB7, mas não acerta o saldo. Como a seleção escolhe a contagem oficial (B7_ESCOLHA).

Protheus Guia de processo 4 min de leitura

Assista o vídeo

Resposta rápida

Rotina de digitação
MATA270, que grava na tabela SB7.
Rotina do acerto
MATA340, que gera as requisições e devoluções.
Ligação entre as duas
B7_ESCOLHA = 'S', a contagem oficial.
Controle de contagens
só existe com o parâmetro MV_CONTINV ligado.
Armadilha
digitar ou selecionar contagem não mexe no saldo.
Nesta página6 seções

Contar o estoque e acertar o estoque são duas etapas com rotinas diferentes. Quando o mesmo item é contado mais de uma vez, existe uma terceira decisão no meio: qual das contagens vale. Este artigo mostra onde o Protheus guarda cada uma dessas informações. Para comparar saldos do sistema (SB2, SB8 e SBF) antes ou depois do inventário, veja divergência de estoque: como comparar SB2, SB8 e SBF.

Onde a contagem fica gravada

A digitação do inventário grava um registro por contagem na . Ela não movimenta saldo. Além da SB7, na inclusão ela pode criar a do produto e armazém, quando ainda não existe. Com o parâmetro ligado e endereço informado, marca o endereço na com o status 6 (bloqueio de inventário).

CampoTipo e tamanhoO que guarda
DataData do inventário
Numérico, 12,2Quantidade inventariada
Caractere, 3Número da contagem
Caractere, 1Contagem escolhida (aceita S, N ou vazio)
Caractere, 4Marca temporária da tela de seleção
Caractere, 11 = não processado, 2 = processado

O índice 1 da tabela identifica cada registro por data, produto, armazém, endereço, número de série, lote, sub-lote e contagem. É o número da contagem que permite guardar uma segunda e uma terceira contagem do mesmo item. A mensagem de registro já gravado, por sua vez, só aparece na inclusão de item com número de série informado.

O parâmetro que liga o controle de contagens

O controle depende do parâmetro , lido com padrão desligado. Ligado:

  • o número da contagem passa a ser obrigatório na digitação, e uma contagem repetida para o mesmo item e data é recusada;
  • o browse da rotina ganha a legenda de escolha (verde para B7_ESCOLHA = 'S', vermelho para o restante);
  • o menu ganha as opções de seleção manual, seleção automática e legenda.
Confira no seu ambienteSQL
SELECT X6_VAR, X6_TIPO, X6_DESCRIC, X6_CONTEUD
  FROM SX6010
 WHERE X6_VAR = 'MV_CONTINV'

O MV_WMSNEW é o parâmetro do novo conceito de WMS (movimentações e estoque por endereço), e o padrão é desligado. Confira o seu:

Confira no seu ambienteSQL
SELECT X6_VAR, X6_TIPO, X6_DESCRIC, X6_CONTEUD
  FROM SX6010
 WHERE X6_VAR = 'MV_WMSNEW'

Para ver as contagens de um item numa data, sem alterar nada:

Confira no seu ambienteSQL
SELECT B7_DATA, B7_COD, B7_LOCAL, B7_LOCALIZ, B7_LOTECTL,
       B7_CONTAGE, B7_QUANT, B7_ESCOLHA, B7_STATUS
  FROM SB7010
 WHERE D_E_L_E_T_ = ' '
   AND B7_DATA = '20260928'
   AND B7_COD = 'PRODUTO_EXEMPLO'
 ORDER BY B7_LOCAL, B7_LOCALIZ, B7_LOTECTL, B7_CONTAGE

Ajuste sufixo de tabela, data e produto ao seu ambiente.

Como a contagem oficial é escolhida

Há três caminhos. Em todos, o resultado é o mesmo: B7_ESCOLHA = 'S' em uma contagem por item.

Seleção manual por produto. A tela lista as contagens do item e pré-marca uma quando existe uma quantidade que se repete mais do que as outras (ou quando há uma contagem só). Em empate, nada vem pré-marcado. Marcar uma contagem desmarca as demais do mesmo item, e confirmar grava o S nela e limpa o campo nas outras. A pré-marcação é uma sugestão da tela: quem confirma é a pessoa.

Seleção manual por data e contagem. Informe a data e o número da contagem e a tela lista os itens dessa contagem, já marcados. Confirmar grava S nos marcados e limpa B7_ESCOLHA nos demais registros daquela data. Serve para dizer “a terceira contagem vale para tudo”. Se nenhum item existir com essa data e contagem, a rotina avisa e não abre a seleção.

Seleção automática. Para a data informada, agrupa as contagens de cada item por quantidade, conta quantas contagens têm a mesma quantidade e marca como escolhida a do grupo mais numeroso; dentro do grupo, a de menor número de contagem. Pontos que o código deixa claros:

  • é maioria de contagens iguais, não média nem soma;
  • em empate entre grupos, pela leitura do fonte, prevalece o de maior quantidade; confira no seu ambiente antes de depender disso;
  • o item que tem uma única contagem também recebe S;
  • se você informar o número de uma contagem na pergunta, só ela entra no cálculo, e cada item vira um grupo de uma;
  • a rotina não limpa escolhas anteriores e não olha o B7_STATUS.

O que o acerto lê

O acerto (MATA340) descreve-se no fonte como a rotina que gera requisições e devoluções para acertar o estoque conforme a digitação do inventário. Com MV_CONTINV ligado, na execução normal (fora do modo em lote) ele considera só registros com B7_ESCOLHA = 'S' e B7_STATUS diferente de 2. Depois de processar, grava B7_STATUS = '2' nos registros.

Consequências práticas:

  • contagem digitada e não selecionada não entra no acerto;
  • selecionar não é acertar: enquanto o acerto não rodar, o saldo do sistema continua o mesmo;
  • o dicionário descreve B7_STATUS = '2' como processado: registro nesse estado fica fora de um novo acerto.

Fluxo de conferência

  1. Confirme MV_CONTINV e informe o número da contagem em cada digitação.
  2. Rode a segunda contagem só dos itens duvidosos, com outro número.
  3. Consulte a SB7 com a SQL acima: quantidades por contagem e B7_ESCOLHA.
  4. Escolha a contagem oficial (manual ou automática) e confira o S.
  5. Só então rode o acerto e confira B7_STATUS e o estoque.

Armadilhas

  • Contagem digitada não é estoque acertado. Duas etapas, duas rotinas.
  • Automática sem revisão. Ela devolve a quantidade mais repetida, não a correta. Para itens de valor alto, confirme fisicamente.
  • Mais de um S no mesmo item. A seleção manual grava um por item; se a consulta mostrar dois, confira antes de rodar o acerto.

Continue por aqui