Voce pode encontrar erros inesperados em produção no Protheus que nao ocorrem em desenvolvimento. Muitas vezes, esses erros estao ligados a limites intrinsecos da linguagem AdvPL que so se manifestam com volume de dados ou tempo de execucao maiores. Este guia aborda os limites mais comuns e como soluciona-los.

Limite de Tamanho de String

A linguagem AdvPL suporta strings de ate 1 MB (1024 KB) por padrao. Builds superiores a 7.00.131227A-20140829 permitem alterar este comportamento com o parametro MaxStringSize.

Causa Comum: Loops que anexam strings a mesma variavel repetidamente sem necessidade.

Solucao: Revise o codigo fonte da funcao que esta gerando o erro para otimizar o uso de strings.

Limite de Tamanho de Filtro (2000 bytes)

Ao usar a RDD TOPCONN com o DBAccess, existe um limite de 2000 bytes para a expressao de um filtro. Se um programa AdvPL tentar definir um filtro maior que isso, a aplicacao tera um erro fatal: "Filter greater than 2000 bytes."

Solucao: Verifique o programa AdvPL e reduza o tamanho da expressao do filtro. Consulte a funcao DBSetFilter para mais detalhes sobre como definir filtros.

Limite de Tamanho de Query (15980 bytes)

A abertura de queries via DBAccess tem um limite de 15980 bytes para a string que define a query. Queries maiores que este limite resultarao no erro "Query greater than 15980 bytes."

Solucao: Analise o programa AdvPL que executa a query e simplifique-a para ficar abaixo do limite.

Limite de Campos em Query (255 colunas)

Uma query AdvPL nao pode retornar mais de 255 colunas. Tentar abrir uma query com mais colunas gera o erro "Too many fields in query (limit is 255)."

Observacao: A partir da build 7.00.070309A do Servidor de Aplicacao, este erro passou a ser uma advertencia registrada no log do console, em vez de um erro fatal.

Solucao: Revise a definicao da sua query para garantir que ela retorne no maximo 255 colunas.

Limite de Áreas de Trabalho (512 tabelas)

Cada thread do Servidor de Aplicacao tem um limite de 512 tabelas abertas simultaneamente, independentemente do banco de dados ou RDD utilizado. Tentar abrir mais tabelas que este limite causa o erro "Protheus Work area table full (Max= 512)."

Solucao: Verifique o arquivo error.log para identificar quais tabelas estao abertas. Procure por rotinas que possam estar deixando tabelas temporarias abertas indevidamente ou abrindo a mesma tabela mais de uma vez com aliases diferentes sem fechar os anteriores.

Fontes oficiais

Paginas publicadas pela TOTVS na Developer Network.