PERGUNTAS E RESPOSTAS
 
Bem Vindo, Visitante  Todos os Fórums
  ADVPL
Enviar para a impressoraImprimir  Enviar e-mail para um amigoEnviar Para um Amigo
Precisa estar Logado

Subject Assunto:
MT010ALT
Versão:
12.1.27
Plataforma:
Microsoft
Complemento:
DB:
SQL Server
Complemento:
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário GU_ZAMPIER GU_ZAMPIER em 18/11/2021, 15:40 h
Local: SP  Registro: 03/09/2018  Postagens: 34
Boa tarde,

Galera alguem tem um exemplo ou o proprio PE aonde tenha um Array que armazena as informações do cliente?

Estou querendo fazer o seguinte, quando o usuario alterar o cadastro do cliente disparar um e-mail mostrando como estava o cadastro do cliente e depois mostrar oque mudou.

Se alguem tiver um exemplo ou o proprio array do pe já iria me ajudar muito.

Obrigado.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário TECLESOFT TECLESOFT em 18/11/2021, 16:07 h
Local: SP  Registro: 24/04/2012  Postagens: 215
Eu usaria um DBStruct da sua SA1 e depois rodaria no array que esse DBStruct cria da sua SA1, usando macrosubstituição para popular os campos antes de alterar os dados, e depois que você montasse o array de alteração pegaria os campos dos dois arrays e mostrava.. Agora como é que você está pretendendo mostrar o antes e depois.. SA1 tem bastante campos.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário GU_ZAMPIER GU_ZAMPIER em 18/11/2021, 16:12 h
Local: SP  Registro: 03/09/2018  Postagens: 34
Então são apenas alguns campos que o diretor aqui quer, você teria algum exemplo de como fazer isso só para eu ter a noção ?

Obrigado

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário TECLESOFT TECLESOFT em 18/11/2021, 16:46 h
Local: SP  Registro: 24/04/2012  Postagens: 215
Veja se te ajuda..
aEstrZLC := ZLC->(DbStruct())
For _cc := 1 To Len(aEstrZLC)     
     aAdd(aCposZLC,ZLC->(&(aEstrZLC[_cc,1])) )
Next
For _pp := 1 To Len(aEstrZLC)
     If aEstrZLC[_pp,1] == "ZLC_ORIGEM"
          ZLC->(&(aEstrZLC[_pp,1])) := "DESDOBRACAD"
     ElseIf aEstrZLC[_pp,1] == "ZLC_HARDLD"
          ZLC->(&(aEstrZLC[_pp,1])) := AllTrim(aCposZLC[_pp])
     ElseIf aEstrZLC[_pp,1] == "ZLC_LCORIG"
          ZLC->(&(aEstrZLC[_pp,1])) := ""
     ElseIf aEstrZLC[_pp,1] == "ZLC_IDLICE"
          ZLC->(&(aEstrZLC[_pp,1])) := ""
     ElseIf aEstrZLC[_pp,1] == "ZLC_ORDEM"
          ZLC->(&(aEstrZLC[_pp,1])) := ""                                        
     Else
          ZLC->(&(aEstrZLC[_pp,1])) := aCposZLC[_pp]
     EndIf
Next

Isso basicamente replica a estrutura de campos de uma tabela e depois popula com os dados e a outra parte do for eu deixei ai para vc ter uma idéia de como filtrar só os campos que vc quer enxergar na comparação para montar seu array final, pode até usar aDel se quiser reduzir até mesmo a matriz se achar melhor.
Enfim, eu tirei de um outro fonte aqui meu então se estiver fora de contexto releve.. mas a idéia seria essa mesmo.
Agora se foram POUCOS campos, acho que o mais simples para quem não tem muita nocão de programação seria simplesmente ir guardando o conteúdo do campo antes de começar a alteração dentro de um array ou até mesmo cada campo em uma variável separada mesmo, e depois mostrar isto em tela com Alert mesmo coisa simples...



Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário LCA.LEO LCA.LEO em 18/11/2021, 16:54 h
Local: PR  Registro: 09/01/2020  Postagens: 25
Boa tarde,

Aqui na empresa nós usamos o MA030TOK para informar a alteração do cliente, porém utilizamos apenas para o campo Bloqueado.

Local _lRet      := .T.
Local _cStOld      := AllTrim(SA1->A1_MSBLQL)
Local _cStNew      := AllTrim(M->A1_MSBLQL)
Local _cUsrAut     := SuperGetMV("MV_XMA030T",.T.,"001151","001091")
Local _cChave      := AllTrim(M->(A1_COD+A1_LOJA))
Local _cNome      := AllTrim(M->(A1_NOME))


_cStOld pega o valor do campo
_cStNew pega o valor em memória

Com essas informações montamos o HTML e enviamos por e-mail.

Lè0

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário GU_ZAMPIER GU_ZAMPIER em 19/11/2021, 11:34 h
Local: SP  Registro: 03/09/2018  Postagens: 34
Vou tentar fazer do seu jeito , são apenas 10 campos.
entre esses campos existe campos que criamos aqui na empresa, acredito que com isso que você me mandou eu consiga pegar uma base para tentar fazer, nunca usei o DBStruct ai to apanhando para ele mas vamo lá.

Obrigado pela ajuda.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário TECLESOFT TECLESOFT em 19/11/2021, 12:26 h
Local: SP  Registro: 24/04/2012  Postagens: 215
É assim mesmo.. ele é uma função poderosa aliada a macro-substituição então.. faz miséria.
Com poucas linhas você resolve problemas que outro programador faria uma infinidade de linhas com if‘s etc..
Vá sem pressa e entenda bem e verá que pode usar em muitas situações até mesmo para popular uma tabela onde qualquer um faria um reclok de linha a linha e o dbstruct te ajuda a economizar fonte.. é assim mesmo no começo já já pega a manhã e estará voando.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário GU_ZAMPIER GU_ZAMPIER em 19/11/2021, 12:48 h
Local: SP  Registro: 03/09/2018  Postagens: 34
até consegui fazer o comecinho, tenta me ajudar por favor.

Exemplo eu quero pegar o nome fantasia , como esta atualmente e depois quando o usuario mudar é facil, é só pegar da SA1 mas eu não estou entendendo oq o Struct em si traz.
Ele traz o nome do campo, tamanho, tipo, mas no caso eu queria que trouxesse o que está atualmente salvo entendeu?

Estou seguindo igual você mandou só para entender depois eu edito de outra forma
abaixo está da forma q estou fazendo, mas assim ele está trazendo o nome do campo e não o que está salvo.

Private aStru := SA1->(DbStruct())
Private aTabCli:= {}
Private nX := 0
Private nI := 0

     For nX := 1 to Len(aStru)
          aadd (aTabCli,{          SA1->(aStru[nX,1])})
          
          Next
          
     For nI := 1 to len(aStru)
      if aStru[nI,1]=="A1_NREDUZ"
      SA1->(aStru[nI,1]) := aTabCli[nI]
      EndIf
          
          Next


Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário CDTORRE CDTORRE em 19/11/2021, 13:18 h
Local: SP  Registro: 28/04/2020  Postagens: 2
Boa tarde,

O parâmetro MV_HISTTAB, que alimenta a tabela AIF, não resolve o seu problema?

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário TECLESOFT TECLESOFT em 19/11/2021, 13:30 h
Local: SP  Registro: 24/04/2012  Postagens: 215
Pois bem.. é isso mesmo.. eu não irei montar o fonte para vc, sei da sua necessidade e vontade em entregar ao pessoal da empresa, mas vc precisa quebrar a cabeça que ai NUNCA mais esquecerá.
O dbstruct é isso mesmo, ele retorna uma matriz contendo exatamente a estrutura da tabela, então agora o que você precisa fazer é:

Rodar um for na matriz retornada da dbstruct e a cada passada do FOR você grava o conteúdo da linha atual da SA1.
Desta forma você estará PEGANDO TODOS os campos da SA1 e tacando dentro do array que a dbstruct retornou... Depois só você escolher qual campo de TODOS que já estão preenchidos quer mostrar..
no primeiro exemplo que te passei tem exatamente isto que acabei de citar aqui..

1 - Rodar o dbstruct para ele retornar a matriz de estrutura da SA1
2 - Rodar um for no len(da matriz que dbstruct retornou) e a cada passada do for você alimenta uma posição (campo) desta matriz com o resultado do campo da SA1 no momento
3 - Depois usa essa matriz já populada para pegar apenas os campos que você quer.ou se quiser matar logo no passo 2 mesmo se for um dos campos que você quer mostrar você já grava em outra matiz, matriz de campos que vc quer mostrar..

Veja se consegue ai.
Seu fonte tá quase lá.. só olha lá o meu exemplo inicial e debuga esse seu ai para saber se o trecho do fonte está fazendo o que você imaginou que ele iria fazer quando escreveu o trecho.



Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário TECLESOFT TECLESOFT em 19/11/2021, 13:40 h
Local: SP  Registro: 24/04/2012  Postagens: 215
Olha ai.... o CDTORRE matou na veia.. eu mesmo não conhecia esse parametro.
MV_HISTTAB

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário GU_ZAMPIER GU_ZAMPIER em 19/11/2021, 14:25 h
Local: SP  Registro: 03/09/2018  Postagens: 34
Caraca, também não tinha conhecimento sobre esse parametro, maaas só para aprender vou fazer do seu jeito tbm para entender como é o dbstruct.
Bom Muito Obrigado,agradeço demais pela força que vocês me deram.

Para postar no Fórum você precisa efetuar o seu login ou se registrar

 Mudar para Fórum

 

 

 
 
   
Pagina Principal Shopping PROTHEUS Tire suas duvidas Vagas Microsiga em todo Brasil Aprofunde seus conhecimentos Noticias Online Fale Conosco Pagina Principal