Clipper On Line • Ver Tópico - Opção pra trocar vários campos

Opção pra trocar vários campos

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Opção pra trocar vários campos

Mensagempor JoséQuintas » 12 Ago 2020 18:45

Acabo de usar aqui, e achei interessante:
Quando é troca direta, mais fácil.

   DO WHILE ! Eof()
      RecLock()
      FOR EACH aCampo IN { ;
            { "CPCODIGO", "A_CODIGO" }, ;
            { "CPNOME",   "A_NOME" }, ;
            { "CPGRUPO",  "A_GRUPO" }, ;
            { "CPTIPO",   "A_TIPO" }, ;
            { "CPGRAU",   "A_GRAU" }, ;
            { "CPSDANT",  "A_SDANT" }, ;
            { "CPUPDATE", "ALTERADA" }, ;
            { "CPCTAREF", "PLCTASRF" }, ;
            { "CPINFINC", "A_INFINC" }, ;
            { "CPINFALT", "A_INFALT" } }
         IF Empty( &( "jpctplano->" + aCampo[ 1 ] ) )
            REPLACE &( "jpctplano->" + aCampo[ 1 ] ) WITH &( "jpctplano->" + aCampo[ 2 ] )
         ENDIF
      NEXT
      FOR EACH aCampo IN { ;
            { "CPREDUZ",  "A_REDUZ" }, ;
            { "CPCCUSTO", "A_CCUSTO" }, ;
            { "CPCTAADM", "A_CTAADM" } }
         IF Empty( &( "jpctplano->" + aCampo[ 1 ] ) )
            REPLACE &( "jpctplano->" + aCampo[ 1 ] ) WITH Val( &( "jpctplano->" + aCampo[ 2 ] ) )
         ENDIF
      NEXT
      SKIP
   ENDDO
   CLOSE DATABASES


Só fiquei na dúvida sobre a macro.
Poderia ter usado FieldPut( FieldNum( aCampo[ 1 ] ), FieldGet( FieldNum( aCampo[ 2 ] ) ) ).

Acho que é conhecido de todos.
FieldPut() é pra gravar, precisa do número do campo
FieldGet() é pra ler, precisa do número do campo
FieldNum() é o número do campo, para a string fornecida.

Neste caso, alguns campos continuam do mesmo tipo, mas outros mudaram de caractere para numérico.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14712
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 869 vezes

Opção pra trocar vários campos

Mensagempor JoséQuintas » 12 Ago 2020 18:56

Tinha esquecido, tem mais 192 campos:

Aqui fica mais visível a macro encima de um resultado de expressão.
Sendo encima do resultado, a variável não precisa ser PRIVATE ou PUBLIC.

      FOR nCont = 1 TO CONTABIL_MESMAX
         IF Empty( &( "jpctplano->clDeb" + StrZero( nCont, 2 ) ) )
            REPLACE &( "jpctplano->clDeb" + StrZero( nCont, 2 ) ) WITH ;
               &( "jpctplano->a_deb" + StrZero( nCont, 2 ) )
         ENDIF
         IF Empty( &( "jpctplano->clCre" + StrZero( nCont, 2 ) ) )
            REPLACE &( "jpctplano->clCre" + StrZero( nCont, 2 ) ) WITH ;
               &( "jpctplano->a_Cre" + StrZero( nCont, 2 ) )
         ENDIF
      NEXT
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14712
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 869 vezes

Opção pra trocar vários campos

Mensagempor JoséQuintas » 12 Ago 2020 19:00

Mesmo assim, vai do gosto pessoal:

      FOR nCont = 1 TO CONTABIL_MESMAX
         xValue := StrZero( nCont, 2 )
         IF Empty( &( "jpctplano->clDeb" + xValue ) )
            REPLACE &( "jpctplano->clDeb" + xValue ) WITH &( "jpctplano->a_deb" + xValue )
         ENDIF
         IF Empty( &( "jpctplano->clCre" + xValue ) )
            REPLACE &( "jpctplano->clCre" + xValue ) WITH &( "jpctplano->a_Cre" + xValue )
         ENDIF
      NEXT


Mais fácil olhar o fonte, entender, e fazer manutenção depois.
Só comparar os dois fontes que fica visível como o segundo está mais "claro" para o programador.

Nota:
Ao invés de fazer 6 contas fez só uma, pra obter StrZero( nCont, 2 )
Nem sei se isso faz diferença, apenas considerei o fonte ficar mais claro.
E de quebra evita erros....
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14712
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 869 vezes

Opção pra trocar vários campos

Mensagempor JoséQuintas » 12 Ago 2020 19:22

Vixe, já deu pra perceber aí, que devido as mudanças, tô fazendo uma confusão geral.
Nessa rotina adicional, coloquei CLxxx, mas é CPxxx

Também dá pra perceber a padronização.
Antes era A_xxx, numa época pensei em chamar PLxxx, e agora vai ser CPxxx

PL seria a inicial de plano de contas, agora decidi tudo de contabilidade começando com C.
CH - históricos padrão
CL - lotes
CL - lançamentos padrão
CP - plano de contas

Ainda falta alterar o contábil, de DIxxx pra CTxxx, DI era de livro diário....

E só agora percebi que repeti o CL kkkkk
Lá vou eu alterar tudo de novo...
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14712
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 869 vezes




Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro