Para a utilização de numeração automática, é recomendável que se utilize o modo de controle via License Server (Enablenumber=1).
A partir da Release 25 do Protheus, a numeração automática será feita obrigatoriamente através do License Server. 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.
Segue um exemplo ilustrativo da diferença de desempenho entre os 2 modelos:
Os dados abaixo foram retirados de uma base local , ou seja, os valores em produção para uma busca via SXE/SXF podem ser maiores devido a concorrência dos dados:
Busca de 100 números via numeração automática no License Server: GETSXENUM (WFWSXESXF.PRW) LN 40 C 100 T 0.093 M 0.020
Busca de 100 números via numeração automática via SXE e SXF: GETSXENUM (WFWSXESXF.PRW) LN 40 C 100 T 3.375 M 0.106
Conforme vemos nos números do gráfico, foi verificado que no teste em questão o uso da numeração via SXE/SXF foi 36 vezes mais lenta que a numeração via License Server. Conforme vemos nos números do gráfico, foi verificado que no teste em questão o uso da numeração via SXE/SXF foi 36 vezes mais lenta que a numeração via License Server.
Observação:
Ao utilizar o Dicionário de Dados no Banco de Dados, a Numeração Automática através do License Server (Enablenumber=1) é obrigatória em qualquer Release do Protheus.
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.
Caso 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.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.
Caso 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.
Nota:
Caso necessário, a geração do arquivo pode ser desligada, adicionando a linha Numberval=0 na seção [LicenseServer] do arquivo appserver.ini do License.Nota:
Caso ocorra algum problema na numeração automática, de sequência incorreta por exemplo, é necessário tomar as medidas abaixo:
- Executar a rotina APCFG110 pelo Configurador, para fazer o "Acerto de Numeração Automática" (mais detalhes sobre a rotina, abaixo)
- 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 for reiniciado, esse código virá incorreto. Desta forma, recomendamos abrir a tabela manualmente e efetuar a correção, caso seja possível. Caso tenha dúvidas nesse processo, favor entrar em contato com a equipe responsável pelo respectivo módulo responsável por esta tabela.
Rotina APCFG110
Esta rotina precisa ser inserida manualmente no menu do Configurador. Ao executá-la, são exibidas a numeração atual e a próxima numeração das tabelas, podendo ser editada essa informação para corrigir a sequência.
1. Acesse o Configurador > Ambiente > Cadastros > Menu
2. Selecione somente o menu do Configurador, e clique em OK
3. Adicione o menu para a coluna Novo Menu
4. Selecione a pasta onde deverá ser criada a nova rotina
5. Clique em Novo Item
6. Preencha o nome que deseja para a rotina no menu
7. Em Programa digite APCFG110
8. Em Módulo selecione Configurador, e clique em OK
9. Clique em Gerar, e selecione o nome para o menu (para manter o padrão, digite SIGACFG)
10. Clique em Gerar
11. Após criado o item de menu, saia do Configurador e entre novamente para visualizar a nova rotina
Após ter criado a rotina no menu, acesse-a e siga os passos abaixo para acertar a numeração:
1. Acesse a rotina APCFG110 no Configurador
2. Vamos tomar como exemplo uma 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:Caso ocorra algum problema na numeração automática, de sequência incorreta por exemplo, é necessário tomar as medidas abaixo:
- Executar a rotina APCFG110 pelo Configurador, para fazer o "Acerto de Numeração Automática" (mais detalhes sobre a rotina, abaixo)
- 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 for reiniciado, esse código virá incorreto. Desta forma, recomendamos abrir a tabela manualmente e efetuar a correção, caso seja possível. Caso tenha dúvidas nesse processo, favor entrar em contato com a equipe responsável pelo respectivo módulo responsável por esta tabela.
Rotina APCFG110
Esta rotina precisa ser inserida manualmente no menu do Configurador. Ao executá-la, são exibidas a numeração atual e a próxima numeração das tabelas, podendo ser editada essa informação para corrigir a sequência.
1. Acesse o Configurador > Ambiente > Cadastros > Menu
2. Selecione somente o menu do Configurador, e clique em OK
3. Adicione o menu para a coluna Novo Menu
4. Selecione a pasta onde deverá ser criada a nova rotina
5. Clique em Novo Item
6. Preencha o nome que deseja para a rotina no menu
7. Em Programa digite APCFG110
8. Em Módulo selecione Configurador, e clique em OK
9. Clique em Gerar, e selecione o nome para o menu (para manter o padrão, digite SIGACFG)
10. Clique em Gerar
11. Após criado o item de menu, saia do Configurador e entre novamente para visualizar a nova rotina
Após ter criado a rotina no menu, acesse-a e siga os passos abaixo para acertar a numeração:
1. Acesse a rotina APCFG110 no Configurador
2. Vamos tomar como exemplo uma 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:
3. Na rotina APCFG110, a numeração deverá estar conforme a imagem abaixo: 3. Na rotina APCFG110, a numeração deverá estar conforme a imagem abaixo:
Na área Números em uso / Números liberados, irá aparecer o que deverá ser o próximo número quando alguém incluir um novo Cliente, neste caso, 000005.
Na área Próximos números será exibido o número subsequente na ordem, neste caso, 000006.
Se por algum motivo, ao incluir um Novo Cliente na rotina de Clientes, a próxima numeração não estiver sendo 000005, então você deve clicar 2 vezes no número que está em Números em uso, alterar para o que seria o próximo, e na área Próximos números inserir o subsequente correto. Com isso você redefine a ordem que o sistema de numeração automática deve seguir.
Múltiplos Ambientes utilizando o mesmo License Server
Quando sua estrutura possui mais de um ambiente (mais de um Appserver) apontando para o mesmo License Server, a numeração de uma base pode influenciar na outra. Por isso, é necessário configurar a chave SpecialKey no arquivo appserver.ini de cada base, para que cada ambiente possua uma chave diferente no License Server.
Alteração de modo: SXE/SXF para License Server
Ao alterar o modo de numeração para o modo License Server (Enablenumber=0 para Enablenumber=1) as tabelas SXE e SXF serão deletadas no momento em que acessar a primeira rotina que utilize numeração automática, e nesse momento, o License Server irá buscar a última numeração de cada tabela com numeração automática, e carregar em memória. Desta forma, recomendamos que faça um backup das tabelas SXE e SXF antes de alterar o modo de numeração, e após a alteração, caso a numeração esteja na ordem incorreta, utilizar a rotina APCFG110 para acertar.
Como alterar o modo de numeração automática
A alteração do modo de numeração automática é feita no arquivo appserver.ini do License Server, na seção [LicenseServer]. Enablenumber=0 é pelas tabelas SXE/SXF. Enablenumber=1 é no License Server (padrão).
Exemplo:
Numeração nas tabelas SXE/SXF:
[LicenseServer]
Enable=1
Enablenumber=0
Numeração no License Server:
[LicenseServer]
Enable=1
Enablenumber=1
Obs.: se não existir a linha Enablenumber na seção [LicenseServer], assume-se o padrão, que é numeração no License Server.Alteração de modo: SXE/SXF para License Server
Ao alterar o modo de numeração para o modo License Server (Enablenumber=0 para Enablenumber=1) as tabelas SXE e SXF serão deletadas no momento em que acessar a primeira rotina que utilize numeração automática, e nesse momento, o License Server irá buscar a última numeração de cada tabela com numeração automática, e carregar em memória. Desta forma, recomendamos que faça um backup das tabelas SXE e SXF antes de alterar o modo de numeração, e após a alteração, caso a numeração esteja na ordem incorreta, utilizar a rotina APCFG110 para acertar.
Como alterar o modo de numeração automática
A alteração do modo de numeração automática é feita no arquivo appserver.ini do License Server, na seção [LicenseServer]. Enablenumber=0 é pelas tabelas SXE/SXF. Enablenumber=1 é no License Server (padrão).
Exemplo:
Numeração nas tabelas SXE/SXF:
[LicenseServer]
Enable=1
Enablenumber=0
Numeração no License Server:
[LicenseServer]
Enable=1
Enablenumber=1
Obs.: se não existir a linha Enablenumber na seção [LicenseServer], assume-se o padrão, que é numeração no License Server.