O artigo explica que no campo D3_DOC do sistema SIGAEST a numeração dos documentos segue a maior numeração registrada, somando um, podendo gerar numerações indevidas. O sistema prioriza numeração manual, e a TOTVS recomenda usar funções customizadas para controle de numeração, apresentando um exemplo de função para evitar conflitos.
Tempo aproximado para leitura: 00:03:00 min
Ocorrência
No campo de código do documento (D3_DOC) foi inserida uma numeração indevida e agora o sistema está dando continuidade à ela nos novos documentos.
Ambiente
Cross Segmento - TOTVS Backoffice (Linha Protheus) - SIGAEST - Todas as versões
Causa
Conforme detalhado na documentação Controle de numeração D3_DOC a numeração do documento sempre vai pegar a maior numeração já registrada na tabela e somar um.
Ou seja, se você possui uma numeração "A00001" e uma numeração "000030" na tabela SD3, a próxima numeração sugerida pelo sistema será a "A00002", porque os códigos com letras são considerados maiores que os números.
Solução
Um ponto importante é que, apesar da sugestão da numeração realizada pelo sistema, caso o usuário preencha a numeração manualmente o sistema dará prioridade ao que foi digitado:
cDocumento := IIf(Empty(cDocumento), NextNumero("SD3", 2, "D3_DOC", .T.), cDocumento)Dessa forma, existe a possibilidade de inserir uma função de usuário no Inicializador padrão do Campo D3_DOC.
Alguns clientes utilizam a função GetSXENum, que não existe por padrão no campo de Numero do Documento (D3_DOC), porém algumas particularidades não são tratadas pela função.
A orientação da TOTVS, caso necessite alterar a forma de sugestão da numeração, é que seja utilizada uma função customizada para tratar o controle de numeração.
Abaixo indicamos um exemplo de função:
Atenção! Trata-se apenas de um exemplo, caso necessite customizar, solicite o acompanhamento de seu analista programador.
#Include 'TOTVS.ch'
User Function NextSD3Doc()
Local cNum := GETSXENUM("SD3","D3_DOC")
DbSelectArea("SD3")
SA1->(DbSetOrder(2))
While (DbSeek(xFilial("SD3")+cNum))
ConfirmSX8()
cNum := GETSXENUM("SD3","D3_DOC")
Enddo
DbCloseArea()
RollbackSx8()
Return cNum
Saiba mais:
Clique aqui e veja mais artigos sobre Movimentações no Estoque
1 Comentários