Tecnologia – Regra LSP – Regra XX: Estouro no número de variáveis. (Linha XX, Coluna XX)
Incidente
No módulo de Recursos, em Regras, ao tentar compilar uma regra, é apresentada a mensagem: Regra XX: Estouro no número de variáveis. (Linha XX, Coluna XX).
Causa
Esta mensagem é apresentada, quando as regras possuem um grande número de funções chamadas de forma recursiva, ou de fato há estouro do número de variáveis, excedendo o limite.
Atualmente o compilador de regras aloca um valor dinâmico para execução, todo espaço é alocado na carga do binário, que contém a seguinte distribuição:
Constantes: 25% do espaço disponível (atualmente, 8.192 constantes diferentes);
Pilha de execução: 20% do espaço disponível (atualmente, 6.553 entradas);
Variáveis: 50% do espaço disponível (atualmente, 16.384 variáveis diferentes);
Registradores intermediários: 5% do espaço disponível (atualmente, 1.638 entradas).
Segue link da documentação onde essa informação está Documentada: https://documentacao.senior.com.br/tecnologia/6.2.35/#lsp/limite-das-regras.html
Quando a mensagem "Estouro no número de variáveis" é gerada, isso indica que o valor de memória utilizado durante o processo de compilação ultrapassa 50% do valor disponibilizado para as variáveis.
Solução
Para que a mensagem não seja apresentada ao compilar regras, seguem alternativas:
1. Revise as regras e valide se de fato todas as variáveis declaradas estão sendo utilizadas. É comum a declaração de variáveis em tempo de desenvolvimento e depuração para auxiliar na análise de situações, no entanto, essas variáveis não são de fato utilizadas para a rotina principal da regra.
2. Conversão de Tabelas e suas respectivas variáveis em processos que armazenam dados no próprio banco através de tabelas/campos de usuários que possam ser posteriormente utilizadas nas rotinas customizadas.
3. Verifique as rotinas customizadas que atualmente já são feitas de forma nativa pelo sistema, com isso elimine parte das regras customizadas e consequentemente as variáveis definidas nas mesmas.
4. Verifique a possibilidade de migração de trechos de regras LSP para WebServices customizados, onde é possível inserir a regra LSP já existente.
Essa alternativa é pertinente porque as regras existentes nos Webservices customizados são gravadas em um binário diferente (na própria base base de dados do ERP), deste modo, é possível reduzir bastante o tamanho do binário convencional (o binário convencional possui o nome SARHLSP.BIN e fica armazenado na pasta de Regras do ERP).
Na regra LSP convencional, ao invés de se efetuar todo o tratamento/desenvolvimento na própria regra, basta invocar o Webservice customizado (modo local ou middleware) para execução do trecho específico.
5. Avalie a possibilidade de declaração de funções em regras específicas, para serem utilizadas por outras regras, sendo apenas efetuada a chamada da função, eliminando assim a redundância de trechos existentes em outras regras.
Observação
Segue link da documentação onde é possível encontrar maiores informações sobre o Conceito de Funções: https://documentacao.senior.com.br/tecnologia/6.2.35/index.htm#lsp/sintaxe-de-comandos-e-operadores.htm
Alterações no conceito atual da Tecnologia de Customização da Senior, conforme conceitos descritos acima, demandariam uma Implementação bastante grande na estrutura do sistema. Caso haja interesse em sugerir essa Implementação, a sugestão poderá ser direcionada ao Fórum de Produtos da Senior e seguirá a validação da nossa equipe de Produto conforme o processo padrão do Fórum.