O que pode causar o erro Inválido em um Execauto

No artigo de hoje, vamos dar 6 dicas do que fazer quando acontece um erro com o resultado Inválido em um ExecAuto.

Quem nunca, ao programar em AdvPL e fazer um ExecAuto, se deparou com a mensagem de erro Inválido em um ExecAuto, apontando por exemplo para um campo.

Abaixo vamos dar 7 dicas do que fazer, caso isso ocorrer com sua customização.

  1. Testar Manualmente

O primeiro passo, é você testar a operação manualmente. Supondo que o ExecAuto é do cadastro de produtos, a operação é uma Alteração.

O que você vai fazer é:

  1. Abrir o mesmo cadastro (o de produtos)
  2. Vai posicionar no registro que deseja e fazer a mesma operação (alterar)
  3. Vai informar os campos do seu array, na mesma ordem que você adicionou
  4. Vai clicar em confirmar

Se acontecer o erro aqui, provavelmente ele vai mostrar um HELP falando qual é o problema, ai basta você analisar e aplicar a correção.

  1. Nome de algum Campo

Analise a mensagem do log, e veja se em alguma linha, ele traz o conteúdo do campo, mas não traz o nome do campo, conforme o print abaixo:

Exemplo de campo sem a descrição na esquerda

Esse print foi enviado por um aluno, no nosso grupo do WhatsApp, e notem que todos os campos têm a descrição na esquerda, menos esse, mas por qual motivo?

É que na verdade, o nome do campo é D1_SERIORI, mas foi digitado no fonte como D1_SERIEORI, então caso você encontre um cenário parecido com o seu, revise o nome do campo.

  1. Falha na Validação do Campo

Dando continuidade, tomemos como exemplo que, o campo onde está escrito “<– Inválido”, o ideal é você ver se tem alguma validação padrão (X3_VALID) ou validação de usuário (X3_VLDUSER).

Se tiver validações, ai você precisa estudar o que elas fazem, como por exemplo, se for algum ExistCPO ele vai validar se o código digitado no campo existe na outra tabela, pois pode ser que o registro não foi encontrado.

  1. Ordem dos Campos

O que pode impactar também nesse contexto, é a ordem dos campos, pois imagina o seguinte cenário:

  1. Você informa o campo A1_MUN
  2. Você informa o campo A1_EST
  3. Você informa o campo A1_COD_MUN
  4. Por trás o sistema vai disparar um gatilho e vai preencher o campo A1_MUN

Conforme o exemplo acima, o ideal é passar os campos na mesma ordem que estão na tela de cadastro. E para isso, existe a função FWVetByDic, que pode te ajudar, conforme exemplo abaixo:

//Adiciona os campos
aAdd(aDadosOrig, {"BM_DESC",    "Grupo Teste - Maratona", Nil})
aAdd(aDadosOrig, {"BM_PROORI",  "1",                      Nil})
aAdd(aDadosOrig, {"BM_CLASGRU", "1",                      Nil})
aAdd(aDadosOrig, {"BM_GRUPO",   "X001",                   Nil})
 
//Ordena os campos para ficar igual no dicionário
aDadosOrde := FWVetByDic(aDadosOrig, "SBM")
  1. Espaços na Direita

Conforme relatamos no artigo sobre o erro A260Local (clique aqui), o que acontece, é que existem tabelas que tem o índice composto por vários campos, e ai você precisa passar a informação com o tamanho exato.

Então por exemplo, na SB2, temos o campo Código e Armazém, ai supondo que meu produto seja “F0001” e o armazém “02”, quando a rotina padrão vai validar, ele vai tentar validar “F000102” e vai dar erro que não encontrou.

Por isso, devemos adicionar espaços a direita, conforme o tamanho do campo no dicionário, então se for 15 caracteres, vai ficar “F0001          ” e ai a chave consequentemente de pesquisa vai ficar “F0001          02”.

Para esse cenário, existe a função AvKey, onde você passa qual é o campo, e ele já deixa com o tamanho igual do dicionário.

//Deixa a informação com o mesmo tamanho do campo no banco
cProduto := "F0001"
cProduto := AvKey(cProduto, "B1_COD")
  
//Adiciona no array que será usado no execauto
aAdd(aLinha,{"D3_COD",     cProduto,     Nil})
  1. Testar em um RPO Zerado

Se mesmo após todos os cenários acima, o problema persistir, faça o seguinte procedimento:

  1. Baixe um RPO zerado do portal do cliente
  2. Compile apenas o fonte que tem seu ExecAuto
  3. Teste a rotina

Se der certo, ai é alguma customização impactando, então será necessário revisar os fontes, gatilhos e validações.

Agora de se der errado, sobrou apenas o último tópico.

  1. Abrir Chamado Evidenciando

Se mesmo revisando todos os 6 tópicos acima, o problema persistir, o ideal é abrir um chamado evidenciando o problema, e use como exemplo o tópico 6 acima, onde mesmo com um RPO zerado o problema persiste.

Se possível faça um vídeo demonstrando, e solicite um exemplo funcional de ExecAuto.

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação