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 |
IMPORTANTE: No PROTHEUS 12 o controle deve ser somente via License Server. Para validar em seu ambiente, consulte abaixo.
Validação do Controle de Numeração
Como está definido o controle(ENABLENUMER)? É pelo License Server ou pelo SXE e SXF? Para analisar como é controlada, verificar como está configurado na sessão [licenseserver] - chave EnableNumber:
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)
|
Seguir esta ordem de verificação para acerto de numeração automática:
1 - Usuário ADMIN
|
Colocações IMPORTANTES:
|
|
|
|
Se estiver ok, passe ao item seguinte.
2 - Pasta SYSTEM
2.1. SXE e SXF ou Hardlock.
Mais de uma pasta System = USO OBRIGATÓRIO DE HARDLOCK. NÃO FUNCIONA com SXE e SXF para mais de um SYSTEM.
2.2. Possui mais de um ambiente
|
|
a) Obrigatório uso da chave SpecialKey (detalhes em http://tdn.totvs.com/display/tec/SpecialKey).
Exemplo:
[ENVDBF]
SourcePath=C:\Protheus10\APO\R13
RootPath=C:\Protheus10\Protheus_Data\R13
StartPath=\system\\13
x2_path=
RpoDb=dbf
RpoLanguage=portuguese
RpoVersion=101
LocalFiles=ads
Trace=0
localdbextension=.dbf
SPECIALKEY=ENVDBF
com a chave CheckSpecialKey
[general]
CheckSpecialKey=0
b) Ambientes DIFERENTES.
|
Se 2.1 e 2.2 estiverem ok, passe ao item seguinte.
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 |
. |
4 - Procedimento para Acerto de Numeração Automática
IMPORTANTE: Quando a numeração é controlada pelo License Server (antigo HARDLOCK), ao reiniciar o License Server "está se perdendo na numeração".
- Atualize o License Server para uma versão igual ou superior a 1.03.014. Detalhes em: Habilitada geração do arquivo LSNumber.val
Com esta atualização volta a ser gravado o arquivo LSNumber.val (quando o servidor de licenças é encerrado corretamente, via console ou no fim do serviço).
Esse arquivo grava a última sequência disponível para as chaves em uso no License, quando o servidor de licenças é reiniciado esses dados são carregados para a aplicação e no momento de obter a próxima sequência serão considerado os dados que estiverem nesse arquivo.
A funcionalidade é recomendada pois uma vez que a sequencia estiver corrigida o License irá guardar o conteúdo e continuar sempre a partir dele; ao invés de buscar na tabela do sistema a próxima sequencia para a chave.
Se estiver com License Server anterior à versão 1.03.014 e com builds superior a 7.00.131227A - 1.0.3 então, neste caso, o sistema não irá gravar o arquivo LSNumber.val e passará a buscar na Tabela a maior numeração já gravada para dar sequência. Detalhes em: Criação do LSNumber.val / Numeração automática pelo License Server
Ou seja, o License Server irá varrer a Tabela em questão (exemplo SC5) no Banco de Dados e irá se basear na maior numeração que possui gravada e incrementar em +1
Exemplo: A sequência do campo está na numeração 000096 , 000097 , 000098 , 000099 , 000100 .... Mas, por algum motivo, essa tabela já possui um registro gravado com a numeração 142535. Ao reiniciar o LS, irá varrer a tabela para encontrar a última numeração e como o número 142535 é maior que o 000100, seguirá a numeração a partir do 142535 respeitando a regra da maior numeração que possui gravada e incrementar em +1
Observação: Para ambientes que possuam lacunas na numeração automática como exemplificado acima, é possível utilizar o ponto de entrada CRIASXE, que consegue varrer a tabela e setar a numeração.Maiores informações: ADV0071_PE_CRIASXE_CONTROLE_DE_NUMERAÇÃO
Conferência: Verifique na tabela em questão qual é a maior numeração já gerada na Tabela (ou qual a última numeração gerada na sequência que deseja dar contiuidade) - Exemplo: 000100
4.1. Ajuste SXE / SXF
- Na tabela SXF - deixe o campo do código com o próximo número a ser gerado - Exemplo: 000101
- Na tabela SXE - deixe o campo do código com SXF+1 - Exemplo: 000102
- Deixe apenas uma linha para o ALIAS tanto na SXF quanto na SXE. Se houver outras linhas, delete.
4.2. Ajuste LICENSE SERVER
a) Inclusão da rotina APCFG110 no MENU
- Configurador SIGACFG > Ambiente > Ccadastro > Menu;
- Selecionar somente o menu no configurador clicar em OK;
- Adicionar o menu para a coluna "novo menu";
- Selecionar onde deverá ser salva a rotina
- Clicar em novo item
- Preencher o nome em port/ ingl e esp
- Em "programa" APCFG110 selecionar o módulo de configurador clicar em ok
- Gerar como sigacfg/ sair do configurador e entrar novamente para visualizar a nova rotina
OBS: A rotina APCFG110 também pode ser consultada executando a fórmula: apcfg110() em campo macro executável como por exemplo campo CT5_VLR01
b) Linhas únicas por ALIAS / Filial
- Verificar na rotina APCFG110 a sessão "Próximos números" e principalmente a sessão "EM USO". Deverá conter apenas uma linha para cada ALIAS (por Filial).
Exemplo, ALIAS SC5, pode haver apenas uma linha de numeração para a SC5 para cada Filial. Caso esteja exibindo mais de uma linha para o mesmo ALIAS, reiniciar o License Server.
c) Correção
- Na sessão "Números em uso / números liberados" deixe o campo do código com o próximo número a ser gerado - Exemplo: 000101
- Na sessão "Próximos números" deixe o campo do código com +1 - Exemplo: 000102
5 - Nota complementar sobre Uso simultâneo
O uso simultâneo da Tabela faz com que o sistema se comporte de forma a atender todas as chamadas de numeração. O resultado da ordem da numeração está sujeito à efetivação realizada pelo usuário que a reservou.
A reserva de numeração compromete a ordem quando há mais de um usuário manipulando a tabela ao mesmo tempo, se determinado usuário já reservou a numeração e não efetivou o registro, após um segundo usuário ter reservado a numeração seguinte; podendo ocasionar em duplicidade de registros na SXF para garantir todas as reservas feitas. Desta forma, a não efetivação das reservas, compromete a numeração subsequente.
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: |