Em determinados processos precisamos que o sistema informe o usuário de inclusão e/ou usuário de alteração do registro. Este será o tema abordado neste artigo.
Iremos incluir campos reservados do sistema para gravação e campos virtuais para exibição do nome do usuário, pois a informação armazenada pelo sistema está “criptografada”.
Em nosso exemplo, iremos incluir os campos log de inclusão e log de alteração no contas a pagar. Desta forma todos os títulos que forem inclusos ficarão com o nome de quem fez a inclusão e/ou alteração, mesmo que este título tenha sido gerado por outra rotina, como Documento de Entrada ou Comissão de Vendas por exemplo.
Para efetuarmos tal ação, vá a Base de Dados no Configurador, e edite a tabela que quer incluir este campo. Em nosso exemplo, efetuaremos esta tarefa na tabela SE2 (Contas a Pagar).
Agora, clique em Campos, e clique no ultimo botão da direita com nome de Campos Reservados.
Marque o campo Log de Inclusão e clique em Finalizar.
Repita o processo e inclua o campo Log de Alteração.
Como podemos ver abaixo os campos E2_USERLGI(Log de Inclusão) e E2_USERLGA(Log de Alteração) estão sendo exibidos no dicionário de dados.
Estes campos armazenarão o log dos usuários, porém, eles ficam com a informação criptografada, então teremos que incluir novos campos virtuais com uma função para visualizarmos os nomes dos usuários.
Portanto inclua dois campos virtuais para exibição do nome dos usuários.
Na aba opções, inclua nos campos “Inic. Padrão” e “Inic. Browse“ a função USRFULLNAME(SUBSTR(EMBARALHA(SE2->E2_USERLGI,1),3,6))
Agora crie também outro campo para exibirmos o log de alteração.
Alterando apenas o campo de referência da função USRFULLNAME(SUBSTR(EMBARALHA(SE2->E2_USERLGA,1),3,6))
Pronto, feito tudo isso é só clicar no botão Atualizar do Configurador.
Obs: Esta função serve para qualquer tabela, a única coisa que deverá alterar é o campo de referência.
Exempo: Se for efetuar esta tarefa no pedido de vendas a função ficaria da seguinte forma:
Inclusão:
USRFULLNAME(SUBSTR(EMBARALHA(SC5->C5_USERLGI,1),3,6))
Alteração:
USRFULLNAME(SUBSTR(EMBARALHA(SC5->C5_USERLGA,1),3,6))
Obrigado pessoal, até breve.
Bom dia..
Muito bom mesmo !! Parabéns.
Me tire uma duvida, tem como acrescentar a data da alteração ?
Obrigado.
Att.
Entendi Eriberto.
O problema dessa abordagem é que esses campos reservados são gravados automaticamente (no caso do USERLGI E USERLGA) no término das funções de gravação de cada rotina. Logo, não existe uma forma de gatilhar facilmente esse valor com o EMBARALHA para outro campo 🙁
Uma forma de resolver esse problema é criar um ponto de entrada que grave o seu campo real após o término da gravação do registro principal.
Se a rotina de manutenção já for customizada, isso não deve ser problema algum. Se for uma rotina do padrão, você pode procurar por pontos de entrada após a gravação e utilizar essa abordagem para gravar os seus campos customizados.
Espero ter ajudado!
A minha única dúvida é, preciso que ele seja um campo real e que GRAVE na tabela, pois preciso deles para um filtro de relatorio
Boa tarde Flávio e Eriberto,
Refiz o processo que o colega Eduardo descreveu e funciona perfeitamente. Segue revisão dos passos seguidos:
1- Adição dos campos reservados;
2- Criação dos campos virtuais como: C (20), preenchimento dos campos de inicializador padrão e inicializador de browse utilizando a função EMBARALHA (final do artigo), marcação dos campos para exibição em Browse;
3- Cadastramento de um novo registro;
Pronto, as informações de quem cadastro e/ou alterou esse registro estão disponíveis no Browse e na manutenção do registro.
Lembrando que essa solução só funciona para registros novos! Como os campos reservados não existiam anteriormente, não existe uma forma de que o sistema recupere as informações de quem realizou esses cadastros.
Se ainda estiverem com problemas, por favor, envie e-mail com o dicionário desses campos para contato at academiaerp.com.br
Qualquer dúvida, estamos à disposição
No meu caso já criei o campo como real, poi precisava dele para fazer um filtro, então precisaria que criasse na tabela. E mesmo assim fica em branco quando crio o campo.
Boa tarde,
Fiz o procedimento, porem para min quando vou no contas a pagar e mando visualizar um titulo os campos criados ficam em branco, sabe o que pode estar acontecendo?
Obrigado.
Cara queria realizar uma proeza fazem 2 dias e não estou conseguindo. Queria filtrar esse campo mais colo ele é virtual não rola então como jogar esses dados em um campo real ? eu mudo a opção para real e não aparece nada.
Abç
Olá Manoel,
Então, não tem muito segredo mesmo nesse tipo de operação. Como o campo era virtual, quando vc altera ele pra Real, o Configurador apenas dá um ALTER TABLE na tabela e coloca uma coluna a mais, com o seu valor inicial (da base de dados) em branco.
Se você precisa que os valores que eram preenchidos como virtuais apareçam, vc tem duas opções: criar um .PRW para executar o RecLock .F. na tabela de cabo à rabo (Do While !EOF() ) ou usar o Replace do APSDU.
Imaginando que a lógica para preencher o campo seja simples, utilize a função Replace do APSDU selecionando esse campo e, no campo de condição ou regra, utilize a lógica que vc estava utilizando para preencher o campo quando ele era virtual. O APSDU utilizará macroexecução nesse comando e irá preencher a coluna corretamente 😉
Me avise do resultado.
Abraços