O campo D3_DOC na tabela SD3 do Protheus armazena números de documentos em movimentos de estoque, controlados pela variável cDocumento nas rotinas MATA241 e MATA242 de acordo digitação do usuário. A numeração é sequencial automática, mas pode ser alterada manualmente, o que pode causar inconsistências, especialmente com caracteres especiais ou espaços. Recomenda-se evitar digitação manual, revisar a base e garantir collation correto no banco. Correções podem ser feitas via estorno, ajuste por DBA, customização ou bloqueio da digitação manual.
Tempo aproximado para leitura: 00:02:00 min
Dúvida
Como funciona o controle de numeração do campo D3_DOC no Protheus?
Ambiente
Cross Segmento - TOTVS Backoffice (Linha Protheus) - Estoque/Custos - Todas as versões.
Solução
O campo D3_DOC, da tabela SD3, é responsável por armazenar o número do documento associado a determinados movimentos de estoque.
O controle e a numeração deste campo são realizados por meio de funções internas, que pegam o proximo numero maior disponivel na base de dados em relação a tabela SD3, utilizada nas rotinas de movimentações, onde vamos abordar aqui no caso as rotinas MATA241,MATA242 E MATA261.
Este KCS tem como objetivo esclarecer:
- Como o campo D3_DOC é gravado;
- Quais cuidados devem ser observados;
- Como proceder em caso de inconsistências;
- Quais alternativas existem para correção e controle.
Onde o campo é usado nas rotinas em questão
- Movimentação Múltipla (MATA241)
- Desmontagem de Produto (MATA242)
- Transferência Múltipla (MATA261)
utilizam a variável cDocumento para definir o valor do campo D3_DOC durante a digitação.
Por padrão, não há restrição quanto ao que pode ser digitado nesse campo. Entretanto, é necessário cautela no uso de caracteres especiais, tais como:
! @ # $ % ^ & * ( ) _ - + = { }
[ ] | \ : ; " ' < > , . ? / ~ ` "espaço"O uso desses caracteres pode:
- Impactar processos internos do sistema;
- Causar a busca incorreta do próximo número sequencial (tratamento alfanumérico);
- Gerar inconsistências dependendo do SGBD utilizado (ex.: Oracle, PostgreSQL, etc.).
Como o sistema gera a numeração
Para garantir um controle saudável da numeração, o sistema possui uma regra interna padrão, que sugere o preenchimento sequencial do campo D3_DOC:
cDocumento := IIf(Empty(cDocumento), NextNumero("SD3", 2, "D3_DOC", .T.), cDocumento)Ou seja:
- Se a variável cDocumento estiver vazia, o sistema busca automaticamente o próximo número disponível;
- Caso o usuário digite manualmente um valor, esse será considerado como base para a sequência.
Exemplo prático
Imagine que sua numeração atual esteja em 000099.
Se, por engano, alguém digitar manualmente o valor 100050, o próximo documento gravado será 100051, pois o sistema sempre identifica o maior número sequencial disponível.
Com isso, a sequência esperada (000100) será quebrada.
Possíveis inconsistências
O campo D3_DOC pode apresentar problemas quando contém:
- Caracteres especiais;
- Espaços em branco;
- Sequências manuais fora do padrão.
Essas situações não configuram erro do sistema, mas sim efeitos colaterais de digitação indevida.
Além disso, é essencial verificar se o Collation do banco de dados está configurado corretamente.
Clique aqui e acesse a FAQ com orientações sobre Collation por SGBD.
Como corrigir a sequência?
Se ocorrer erro de digitação ou quebra da sequência, existem quatro alternativas:
1. Estorno do movimento e exclusão física do mesmo
Caso tenha sido movimentos recentes e houver a possibilidade de estorno, e processar a rotina Recalculo do Custo Médio (MATA330) com o pergunte "Apaga Estornos = SIM" para que os estornos sejam excluídos fisicamente do banco. Forma mais rápida e ágil para solução.
2. Ajuste com DBA ou ANALISTA IN LOCO
Nos casos em que o campo D3_DOC apresente conteúdos incorretos e o sistema impeça o estorno pelos meios convencionais, que não possa ser realizado pelo cliente, impossibilitando o retorno ao sequencial anterior.
Recomendamos não realizar ajustes manuais via banco de dados sem supervisão técnica. Para restabelecer a integridade do sequencial e das tabelas de movimentação, a orientação é o acionamento de um consultor especialista in loco, com domínio em Estoque e Custos e banco de dados, para a realização de ajustes pontuais e seguros na base de dados.
3. Customização do campo
Implementar uma regra personalizada para que a numeração seja gravada de acordo com a necessidade do cliente, após ajustes necessarios dos dados incorretos. Veja mais informações na Documentação: Ajuste da Numeração do Campo D3_DOC por customização do campo
4. Bloqueio da digitação manual
Configurar o sistema para que o campo cDocumento (D3_DOC) não possa ser digitado manualmente, mantendo assim apenas o controle automático sequencial.
Possuo de forma legado, campos com caracter minusculo e maiusculo, e preciso considerar os minusculos, o que fazer?
Criado o parametro MV_ESTMINU que ativo vai permitir o uso de minusculas no documento, pois nas versões mais recentes, o controle de numeração segue apenas para caracteres maiusculos sequenciais.
No Configurador (SIGACFG), acesse Ambientes / Cadastros / Parâmetros (CFGX017). Crie o parâmetro a seguir:
| Nome | MV_ESTMINU |
|---|---|
| Tipo | L |
| Cont. Por | .T. |
| Descrição | Define se permite o uso de minusculas no numero do documento .T. = Sim; .F. = Não (default) |
Recomendações finais
- Sempre que possível, evite a digitação manual no campo D3_DOC;
- Prefira o uso do controle automático oferecido pela regra interna do sistema;
- Revise periodicamente a base de dados para identificar inconsistências;
- Garanta que o Collation esteja correto para evitar problemas de ordenação.
Saiba mais:
Clique aqui e veja mais artigos sobre Movimentações no Estoque
0 Comentários