Histórico da Página
Ajuste do Controle de Numeração automática
Produto: | Microsiga Protheus | |||||
Ocorrência: | Procedimentos para ajustar o Controle de Numeração automática de Formulários (Tabelas / ALIAS) diversos no Protheus | |||||
Ambiente: | SIGAFAT - Faturamento | |||||
O controle de numeração do Protheus utiliza a Tabela ASCII para definição de sequência. Antigamente utilizava-se o Hard Lock conectado ao servidor. Posteriormente esse controle foi migrado para as Tabelas SXE / SXF físicas no diretório do ambiente. A partir do Protheus V12 o controle de numeração deve ser exclusivamente via License Server (Release 25 inclusive já valida no momento do Upgrade para não permitir virada do release sem uso do License - DFRM1-16558). Além do fato de o desempenho ser muito superior neste modelo em relação ao modelo nas tabelas SXE/SXF, existe também o fato de que as tabelas SXE/SXF serem gerenciadas pelo FileSystem, e por conta disto podem sofrer corrompimento em casos de encerramentos inesperados, como quedas de energia. A numeração das tabelas em License Server é armazenada em memória, enquanto o License Server está ativo. Quando o serviço do License Server é parado, é criado um arquivo chamado LSNumber.val na pasta do Application Server. Neste arquivo são gravadas as últimas sequências das chaves em uso no License, das tabelas que possuem numeração automática. Quando o License é reiniciado, esses dados são lidos desse arquivo e carregados em memória novamente, para dar continuidade na sequência da numeração automática. Todos os detalhes em: Numeração automática pelo License Server 1 - Validar que seu controle de numeração está devidamente configurado para utilizar o License Server:Verifique no arquivo appserver.ini como está preenchida a chave (ENABLENUMER) da sessão [licenseserver]. Deve estar configurado: Enablenumber=1 o que indica controle no License Server (Enablenumber=0 indica controle pelas antigas tabelas SXE/SXF)
Colocações IMPORTANTES:
2 - Validar que o Formulário (a tabela / rotina) em questão possui realmente a função de numeração automática:Nem todas as Tabelas / as Rotinas do Protheus possuem por padrão a função de sugerir numeração automática. Para que, por exemplo, cadastro de clientes, traga na inclusão automaticamente o próximo número disponível, utiliza-se a seguinte sintaxe no inicializador padrão (SX3) do campo A1_COD: GetSx8Num("SA1","A1_COD") É necessário verificar se o X3 do campo que deseja está com esta informação no inicializador padrão! Na maioria das vezes o inicializador padrão do campo está cadastrado como: GetSx8Num("SA1") (Observação: Particularmente se o caso for referente ao Cadastro de Cliente SA1 é importante verificar também se a configuração não está Nativa do módulo SIGALOJA:SIGALOJA Geração do código de cliente a partir do CPF/CNPJ) Quando uma mesma tabela tiver MAIS DE UM CAMPO com numeração automática, a função deve estar conforme exemplo: CAMPO: A1_COD û GETSXENUM(SA1, A1_COD, A1_COD)
Esta configuração no SX3 para geração automática de numeração sequencial deve ser utilizada apenas por campos nos quais já consta a definição no nativo do Protheus. Não deve ser incluída manualmente em campos que não possuem este controle automático por padrão (como por exemplo no campoC5_NUM). Isto porque, este tratamento por si só não trata abandono de numeração reservada não utilizada (este tratamento é realizado no código fonte das rotinas). Ou seja, ao reservar a próxima numeraçãoclicando em "Incluir"(registro 000010 por exemplo) mas não efetivar a gravação, abandonando o registro, depois de já ter sido utilizada a numeração seguinte (depois de outra instância ter gravado a 000011 por exemplo) serão provocadas lacunas fazendo com que o controle automático se perca. Desta forma, seria necessário verificar a possibilidade de uso de ponto de entrada na rotina que deseja implementar o uso de numeração automática para o fiel comportamento da ferramenta, de forma a tratar abandonos de reserva de numeração. 3 - Ajuste da numeração automática:Para acertar a numeração automática, quando ela sai de ordem por algum motivo, deve-se executar a rotina APCFG110 pelo Configurador. Verifique primeiramente o último/maior número gravado na Tabela (registro "000004" por exemplo) a partir da qual deseja dar sequência (Atente-se à numeração de acordo com a Filial). OBSERVAÇÃO: Suponhamos que o License Server seja parado de forma inesperada, como uma queda de energia ou fechamento inadequado, o arquivo não é gerado, e não reinicialização do License, as informações da última numeração são lidas diretamente das tabelas no banco e carregadas em memória. Ou seja, se houver uma numeração discrepante na sequência da tabela, como por exemplo, alguma numeração iniciada com uma letra, em meio a uma sequência de números (no banco de dados, as letras vem depois dos números, então o código iniciado com letra vai ser considerado o último número da sequência, depois de qualquer número), toda vez que o servidor é reiniciado sem execução do processo correto (via console ou no fim do serviço), esse código será carregado com base nessa numeração "incorreta" do banco. Vamos tomar, como exemplo, a numeração automática no campo A1_COD da tabela de Clientes (SA1). Na imagem abaixo, note que existem 4 clientes cadastrados, portanto a última numeração é 000004: Na rotina APCFG110, a numeração deverá estar conforme a imagem abaixo:
OBSERVAÇÃO: Certifique-se de que tanto na seção inferior quanto na superior exista apenas uma linha (um registro) de sugestão da numeração para o ALIAS. Se houver registro duplicado, com ALIAS e Chave idênticos, reinicie o License Server e valide se foi ajustado de modo a possuir apenas uma linha (Dúvidas ou dificuldades nesse procedimento, acionar o Suporte Framework Protheus). | ||||||
Pode lhe interessar: |