Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: Implementando Funções de Criptografia com "Nós" e "Trançados"

_Créditos da imagem: Gerada com auxílio do ChatGPT_ # Implementando Funções de Criptografia com "Nós" e "Trançados" A criptografia é um dos campos mais fascinantes da ciência da computação. Recentemente, no projeto experimental [Braided Encryption Message](https://github.com/naldodj/naldodj-braided_encryption_message), explorei como conceitos de "nós" e "trançados" podem ser aplicados na criação de algoritmos de criptografia. Este projeto, embora básico, é uma experiência rica para aprender mais sobre a implementação de funções criptográficas e algumas curiosidades relacionadas ao tema. ## Visão Geral do Projeto O repositório contém duas peças fundamentais: 1. [Arquivo C - `c_braided_encryption_message.c`](https://raw.githubusercontent.com/naldodj/naldodj-braided_encryption_message/refs/heads/main/src/c_braided_encryption_message.c): Implementa funções de criptografia em baixo nível, manipulando diretamente a estrutura dos dados para "...

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