Se alguma pergunta ou resposta lhe foi útil, não deixe de dar seu voto positivo!

Bugs com PO UI e validação de campos definidas no dicionário

Prezados bom dia,

Sou consultor, e também desenvolvedor em ADVPL, até o momento não trabalho com desenvolvimento em PO UI, porém como consultor estou tendo muitos problemas relacionados ao uso desta linguagem no Protheus, principalmente no que diz respeito a não observância de certos legados conceituais do Protheus.

Sabemos que o Protheus é um sistema bastante customizavel, e uma das customizações mais comuns é a mudança de ordem de campos para melhor exibição no browse. Muitas vezes para atender ao "interesse geral" essas mudanças são feitas diretamente no configurador, base de dados.

Pois bem, o problema que tenho observado é que os formulários de cadastro desenvolvidos em PO UI não tratam corretamente as validações de campos carregados em memória (M->) quando estas envolvem outros campos na mesma tabela.

Vou usar como exemplo no próprio Protheus a FINA716 - APLICAÇÕES E EMPRÉSTIMOS que foi totalmente reformulada no release 12.1.2210 e agora é PO UI. Quando se vai fazer uma baixa de parcela de empréstimo, existe uma validação no campo E2_VENCREA (X3_VALID) que é "m->e2_vencrea>=m->e2_vencto .AND. FA050Venc(2)" onde essa ultima função basicamente dispara um help FANODATA se a data de vencimento for menor que a data de emissão (M->E2_VENCTO < M->E2_EMISSAO) e não deixa seguir.

Aqui está o problema, se na base de dados o cliente tiver alterado a ordem (X3_ORDEM) do campo E2_VENCREA de modo que o mesmo venha "antes" dos campos E2_EMISSAO e E2_VENCTO, o PO UI dispara a validação tão logo os valores sejam carregados no campo E2_VENCREA (que vem primeiro) porém ao tentar executar essa validações parece que os demais campos ainda não foram "carregados os dados" ou simplesmente "não existem" de modo que sempre retorna erro de validação!

Em outras palavras em formulários PO UI ao que me parece toda vez que um campo é "carregado com dados" já dispara as validações antes mesmo de ter carregado todos os demais campos. E dai se existir uma validação no campo, que envolve outros campos da mesma tabela porém que estão com ordenação "posterior" o PO UI simplesmente não consegue validar estes campos como se não estivessem carregados ou com dados.

Outro exemplo na mesma rotina é o campo EH_GERPARC que tem a validação X3_VALID = 'M->EH_APLEMP == "EMP" .And. M->EH_TIPO == "EMP"'. Se esse campo estiver ordenado (X3_ORDEM) de modo que vem "antes" dos campos que constam na validação (EH_APLEMP e EH_TIPO) simplesmente fica impossível incluir um novo registro de empréstimo no formulário PO UI pois ele sempre diz que o valor atribuído ao EH_GERPARC é invalido (como se quando dispara a validação deste campo o EH_APLEMP e EH_TIPO não tem dados, por mais que no formulário esteja lá como EMP).

Estou com um ticket aberto no suporte da TOTVS (#17582074) bastante extenso por sinal pois o até então parece um comportamento desconhecido (além de que a coleta de dados e debug em PO UI é bem ruim de extrair informações, muito limitada), gostaria de ajuda dos colegas que trabalham com PO UI para entender se isso é um comportamento da linguagem ou se é um bug causado por lógica de programação da FINA716 (nisso o suporte não consegue me ajudar).

Obrigado.

EDIT 1: estou adicionando alguns prints com evidencia para melhor exemplificação.

EDIT 2: em 08/08/2023 a TOTVS enfim reconheceu a falha/bug e abriu a ISSUE DSTFC-6200. Persiste a duvida se o bug é relacionado a linguagem PO UI conflitando com o conceito de validações de campos existente no dicionário de dados do Protheus.

PRINT da ordenação dos campos da tabela SE2 na SX3, veja o ordem dos campos citados e destacados.

PRINT3.JPG

PRINT do ERROAUTO que ocorre ao tentar finalizar o formulário PO UI (no caso confirmar o "pagamento" da parcela do empréstimo). Veja que ele critica a data de vencimento menor que a emissão porém na mesma tela as datas mostram que isso não é verdade. O fato gerador do erro é tão somente que a validação está disparando no campo E2_VENCREA assim que o mesmo recebe um conteúdo, e antes de os campos E2_EMISSAO e E2_VENCTO terem sido carregados.

PRINTERROAUTO.JPG

PRINT demonstrando a mesmas situação de bug porém com o campo EH_GERPARC (ao tentar incluir um empréstimo) veja a ordem do campo em relação aos demais envolvidos na validação (X3_VALID).

PRINT6.JPG

PRINT do ERROAUTO nesse caso onde o formulário PO UI igualmente critica valor inválido a partir do X3_VALID = 'M->EH_APLEMP == "EMP" .And. M->EH_TIPO == "EMP"', porém isso não é verdade os campos relacionados estão com o valor correto "EMP".

PRINT5.JPG

compartilhar
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags bug poui ou faça a sua própria pergunta.