Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: A Arte (e Desafio) de Dialogar com a IA: Mais Inteligência, Menos "Burrice"?

_Créditos das imagens: ChatGPT (DALL·E) ** A Arte (e Desafio) de Dialogar com a IA: Mais Inteligência, Menos "Burrice"? Recentemente, me deparei com um exemplo fascinante da capacidade das IAs generativas: um prompt detalhado que resultou na criação de um jogo 3D de labirinto com um soldado (você pode ver a versão em português do prompt/projeto aqui: [naldodj-3DMazeGameWithSoldier](https://raw.githubusercontent.com/naldodj/naldodj-3DMazeGameWithSoldier/refs/heads/main/README.md), baseado no original de [@nobody_qwert no X](https://x.com/nobody_qwert/status/1893584330095509843)). O resultado é impressionante, mas o que realmente me chamou a atenção foi a **complexidade e o detalhamento do prompt** necessário para chegar lá. Isso ilustra perfeitamente um ponto crucial: fazer a IA gerar *exatamente* o que queremos, seja código complexo ou texto coeso e específico, não é trivial. Exige clareza, precisão, antecipação de ambiguidades e, muitas vezes, várias iterações. É a chamad...

Protheus :: Advpl :: FINR530 :: PE F530QRY :: Eu acho que vi um gatinho!

 

Cliente gostaria que os Bancos/Agências/Contas usadas no Cadastro de Funcionários não aparecessem no Relatório de Movimento Financeiro Diário (FINR530). Sugeri-lhe:

  1. Deixar esses registros como Bloqueados (A6_BLOCKED=’1’); e
  2. Incluir um Filtro, na emissão do relatório, para só emitir os Bancos em que o Campo A6_BLOCKED seja diferente de ‘1’

Mas, considerando que o Filtro salvo não é restaurado automaticamente, dependendo da ação do usuário, perguntou se teria como isso ser feito automaticamente pelo sistema. A resposta, sim, poderemos implementar o Ponto de Entrada F530QRY (Normalmente utilizado para Filtrar os Registros da Tabela SE5) para esse fim.

Mas, aí vem a surpresa! Ao implementar o PE F530QRY quem aparece “Frajola”:

TOTVS Build 7.00.101202A-20110330
ERRO THREAD ([5456], <user>, <computer>)   09/12/2011   12:41:51
variable does not exist NINDEX on FA530IMP(FINR530.PRX) 06/07/2010 15:47:56 line : 278

Mas porque “Frajola” resolve aparecer logo após a implementação do Ponto de Entrada? Vamos analisar o código:

image

Irá verificar se o Ponto de Entrada foi compilado e atribui valor inicial a cQueryADD que será utilizado na Complementação do “Filtro”

image

Se a Função Referente ao Ponto de Entrada foi encontrada e se o tipo da variável cQueryAdd for Caractere (e sempre vai ser), executa o “Ponto de Entrada” armazenando o retorno em cQueryADD (na realidade isso deveria estar a 2 linhas acima), mas, até aqui tudo bem. Frajola resolve aparecer quando:

image

O sistema tenta usar nIndex. nIndex não foi formalmente declarada em nenhum ponto do sistema, sua atribuição ocorre (ou ocorria) logo apos a chamada a IndRegua de forma a obter o retorno de RetIndex() que se TOPCONN será 0, caso contrário, o último índice da tabela SE5. Ocorre que, ou a “Vovó” deixou nIndex “de castigo”, restringindo-lhe àlguma condição, ou mandou-lhe passear e…

image

quando o sistema tenta usá-la… (@#&$*!) crash....

TOTVS Build 7.00.101202A-20110330
ERRO THREAD ([5456], <user>, <computer>) 09/12/2011 12:41:51
variable does not exist NINDEX on FA530IMP(FINR530.PRX) 06/07/2010 15:47:56 line : 278

É um erro com “Solução/Contorno” (paliativo é claro). Ei-la: Usaremos _SetNamedPrvt() para fazer o trabalho do programador, e restituir nIndex onde de direito.

image

“Piu-Piu agradece”.

[]s

иαldσ dj

Comentários

  1. Naldo, por que usar _SetNamedPrvt ao invés de private ou public?

    ResponderExcluir
  2. Pelo simples fato de inserir a variável em seu contexto. Public iria usar um espaço desnecessário em memória e Private não atenderia à solução pela limitação de escopo. Já _SetNamedPrvt() (salve salve Weber por tê-la criado) irá "por a variável em seu devido lugar" e quando FINR350 "deixar de existir" levará com ele a variável.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas