Como acertar a numeração do D3_DOC

Hoje vou mostrar uma forma de arrumar a numeração no campo D3_DOC.

Algumas vezes os usuários, sem querer batem o dedo e acabam alterando a sequência de algum campo do Protheus.

No caso da SD3, o campo D3_DOC, utiliza na inicialização do campo a função NextNumero, e essa função efetua a busca direto no banco de dados, sem passar pelo controle de numerações do License, então você não consegue simplesmente ir e alterar via configurador.

Então para acertarmos isso, primeiro precisamos saber quantos registros estão errados, e se não houve movimentação no estoque desses itens.

Para isso, iremos executar a seguinte query:

SELECT 
	R_E_C_N_O_, 
	D3_FILIAL,
	D3_DOC 
FROM 
	dbo.SD3020 
WHERE 
	D3_FILIAL = '01' 
	AND D3_DOC  < 'INVENT   ' 
	AND D_E_L_E_T_ = ' ' 
ORDER BY 
	D3_FILIAL DESC ,
	D3_DOC DESC ,
	D3_COD DESC ,
	R_E_C_N_O_ DESC 

Feito isso, guarde a lista de documentos, e solicite ao usuário estornar um a um desses documentos.

Após o usuário estornar, devemos agora prosseguir com a exclusão (pois a NextNumero, não filtra o campo D3_ESTORNO).

Para isso, iremos dar um UPDATE na tabela SD3, atualizando o campo D_E_L_E_T_ para * (somente dos registros que foram estornados), e se na sua instalação tiver o R_E_C_D_E_L_, preencha ele com R_E_C_N_O_. Caso você não tenha familiaridade com queries SQL, você pode fazer esse procedimento de exclusão via APSDU, filtrando os registros na SD3 com Ctrl+F e excluindo um a um apertando o botão Delete no teclado.

UPDATE 
	SD3020 
SET 
	D_E_L_E_T_ = '*'  
WHERE 
	D3_DOC >= '40 ' 
	AND D3_ESTORNO = 'S' 
	AND D3_DOC  < 'INVENT   '
	AND D_E_L_E_T_ = ' ' 

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

3 Responses

  1. Renato Pereira disse:

    Dan_Atilio! Obrigado por compartilhar o conhecimento!

    Tenho um cenário que é um pouco mais complicado, onde usuário digitou em algum momento “ZERAR” no D3_DOC, e a partir desse, seguiu a sequência, aí já sabe, e como a função “NEXTNUMERO()” está interna nas rotinas, a conclusão que cheguei é que vou ter que preparar uma rotina para atualizar esse campo para uma sequência numérica correta, prevendo atualização do estorno e alguma tabela que contenha essa informação (D3_DOC). Fazer em base teste inicialmente, claro para validar a aderência!

    Motivo: Toda vez usuários e diretoria questiona o motivo de aparecer “ZERARxxxxxx” no documento, pois os relatórios padrões apresentam essa informação, e a origem “RE0/RE1, etc” não é visualmente rápido de entender.
    Consequência: Usuário e diretoria questiona. Ex: Esse Zerar foi inventário? Ou Ex: Utilizaram a rotina de Internos para baixar saldo. Coisas do tipo!

    Com sua experiência, alguma ressalva do descrito acima? Ou alternativa ?

  2. Renato Pereira disse:

    Complementando, esse campo D3_DOC é tão mal pensado, que a rotina de inventário gera ele como “INVENT”, já rotinas de Baixas do CQ, gera com uma sequência alfanumérica de 6 Dígitos controlada por um parâmetro, já quando você aponta uma OP, ele grava o número da OP!

    Cara, é um inferno.

    Esse campo deveria ser bloqueado, e sempre trabalhar uma sequência numérica, simples assim, independente da rotina de origem que gerar.

    Já no campo RE/DE, onde grava a origem; deveria ser mais detalhado e apresentar nos relatórios a origem por extenso, para que usuário rapidamente soubesse a origem!

    Diário de experiência ruim!!

Deixe uma resposta