Alteração da máscara do get em foco
Moderador: Moderadores
Alteração da máscara do get em foco
Boa noite !
Meus amigos, tenho estas linhas que utilizo para saber qual máscara usar na digitação da IE durante o cadastro de clientes. Acredito que daria para otimizar isso e torná-la mais simples e prático. Porém ainda não consegui outra maneira de fazê-lo. Sugestões são muito bem vindas.
... resumindo...
Private vcli_est // Unid da Federação
vcli_mas:=" " // Referente a máscara p/ a IE
vcli_est=space(02) // UF
@ 31,58 GET vcli_est PICT "@!AA" VALID Federa(vcli_est) //verifica se existe a UF digitada
IF vcli_est="AC"
vcli_mas="@R 99.999.999/999-99"
len_ac := 13
ELSEIF vcli_est="AL"
vcli_mas="@R 999999999"
len_al := 9
Endif
... e assim por diante com todos os estados. Então imaginem o tamanho que está com todas as UF´s.
Daria para trabalhar isso e tornar um pouco menor e de maneira que eu aproveitasse nas rotinas de consulta, alteração etc...??
Saudações a todos!
[]´s
Netavin
Meus amigos, tenho estas linhas que utilizo para saber qual máscara usar na digitação da IE durante o cadastro de clientes. Acredito que daria para otimizar isso e torná-la mais simples e prático. Porém ainda não consegui outra maneira de fazê-lo. Sugestões são muito bem vindas.
... resumindo...
Private vcli_est // Unid da Federação
vcli_mas:=" " // Referente a máscara p/ a IE
vcli_est=space(02) // UF
@ 31,58 GET vcli_est PICT "@!AA" VALID Federa(vcli_est) //verifica se existe a UF digitada
IF vcli_est="AC"
vcli_mas="@R 99.999.999/999-99"
len_ac := 13
ELSEIF vcli_est="AL"
vcli_mas="@R 999999999"
len_al := 9
Endif
... e assim por diante com todos os estados. Então imaginem o tamanho que está com todas as UF´s.
Daria para trabalhar isso e tornar um pouco menor e de maneira que eu aproveitasse nas rotinas de consulta, alteração etc...??
Saudações a todos!
[]´s
Netavin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
" Sem saber que era impossível, foi lá e fez !! "
Acho que do jeito que eu faço é bem prático. Depois de entrar no GET e ter definida a UF, um VALID deste campo, após validar a sigla do Estado, já chama uma função com essa sigla, que me retorna a máscara da IE e altera a picture do campo da IE. Agora o fato de ter muitos IFs é o de menos. Há ocasiões em que isso é inevitável. Ainda assim, tenho uma matriz em que cada elemento, resumidamente, tem uma matriz com dois elementos: a UF e a máscara. Encontrando a UF sei que ela é válida. Aí já pego a máscara e a retorno para a função chamadora.
O ponto chave é botar isso numa função de biblioteca. Facilita o trabalho de compartilhamento do recurso entre as diversas partes do programa.
O ponto chave é botar isso numa função de biblioteca. Facilita o trabalho de compartilhamento do recurso entre as diversas partes do programa.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
Manuel Luis Modernel
- Usuário Nível 2

- Mensagens: 66
- Registrado em: 02 Mar 2008 20:40
- Localização: São José do Rio Preto - SP
IF ... ELSEIF muito longo...
OI Amigo NETAVIN,
Não sei se isto irá te ajudar, mais nos tempos de Clipper Summer 87 eu resolvi casos parecidos criando um banco de dados (.DBF) bem pequeno e sem alterações no tamanho nem no indice.
No teu caso dois campos, a sigla de estado e a mascara em forma de texto.
Dai por diante conforme a sigla irá te dar a Mascara da Inscrição Estadual de cada estado numa rápida pesquisa ao BD (e quem sabe alguma outra informação que vc necessitar do estado, como ser DDD, nome da capital ou até o nome completo dele.
Se servir faça-me saber e faça bom uso !!!
Não sei se isto irá te ajudar, mais nos tempos de Clipper Summer 87 eu resolvi casos parecidos criando um banco de dados (.DBF) bem pequeno e sem alterações no tamanho nem no indice.
No teu caso dois campos, a sigla de estado e a mascara em forma de texto.
Dai por diante conforme a sigla irá te dar a Mascara da Inscrição Estadual de cada estado numa rápida pesquisa ao BD (e quem sabe alguma outra informação que vc necessitar do estado, como ser DDD, nome da capital ou até o nome completo dele.
Se servir faça-me saber e faça bom uso !!!
OI Aqui é o Veio Modernel
Mas o custo de manter código para manipular um DBF que contém apenas aquilo que poderia estar contido em código, seria maior do que o custo de manter isso no próprio código. Ademais, seria mais um DBF para distribuir.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
Manuel Luis Modernel
- Usuário Nível 2

- Mensagens: 66
- Registrado em: 02 Mar 2008 20:40
- Localização: São José do Rio Preto - SP
IF ... ELSEIF muito longo...
Obrigado mestre Maligno, mais uma vez suas curtas e certeiras indicações estão corretas.
Eu usava tb outra saida em casos parecidos, lá vai ela ... era na base do
uso do "Do Case - End Case" que se mal me recordo era mais rápida do que o Else if e consumia menos memoria.
Nota: Quando VC fala em "Custo" refere-se a que ?? Grana ? Kbytes? ou outra coisa ?
Eu usava tb outra saida em casos parecidos, lá vai ela ... era na base do
uso do "Do Case - End Case" que se mal me recordo era mais rápida do que o Else if e consumia menos memoria.
Código: Selecionar todos
func meses
PUBLIC mes,mesnom
mesnom=' '
do case
case MES=1
MESNOM='JANEIRO'
case MES=2
MESNOM='FEVEREIRO'
case MES=3
MESNOM='MARÇO'
case MES=4
MESNOM='ABRIL'
case MES=5
MESNOM='MAIO'
case MES=6
MESNOM='JUNHO'
case MES=7
MESNOM='JULHO'
case MES=8
MESNOM='AGOSTO'
case MES=9
MESNOM='SETEMBRO'
case MES=10
MESNOM='OUTUBRO'
case MES=11
MESNOM='NOVEMBRO'
case MES=12
MESNOM='DEZEMBRO'
endcase
RETURN 0
OI Aqui é o Veio Modernel
Eu me referia ao custo de velocidade (arquivo é mais lento), codificação (pesquisa), etc. Mas não penso no custo em tamanho, já que atualmente memória não é problema.
Com relação ao CASE/ENDCASE, não sei se é mais rápido ou não. Só sei que, mesmo sendo mais rápido que o IF/ENDIF, na imensa maioria das vezes essa diferença não importa, já que hoje em dia as máquina são muito rápidas. Opto pelo IF/ENDIF porque estou mais habituado a essa estrutura.
Com relação ao CASE/ENDCASE, não sei se é mais rápido ou não. Só sei que, mesmo sendo mais rápido que o IF/ENDIF, na imensa maioria das vezes essa diferença não importa, já que hoje em dia as máquina são muito rápidas. Opto pelo IF/ENDIF porque estou mais habituado a essa estrutura.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Netavin, veja um exemplo:
Obs.: verifique se todas as mascaras estão corretas.
Abraços,
Código: Selecionar todos
LOCAL GetList := {}
cls
PRIV aUF:={}
AADD(aUF,{"AC","@R 99.99.9999-9"})
AADD(aUF,{"AM-GO-PB-RN","@R 99.999.999-9"})
AADD(aUF,{"AL-AP-MA-MS-PI-RO-ES","999999999"})
AADD(aUF,{"BA","@R 999999-99"})
AADD(aUF,{"CE-RR-SE","@R 99999999-9"})
AADD(aUF,{"DF","@R 999.99999.999-99"})
AADD(aUF,{"MT","@R 9999999999-9"})
AADD(aUF,{"MG","@R 999.999.999/9999"})
AADD(aUF,{"PA","@R 99-999999-9"})
AADD(aUF,{"PE","@R 99.9.999.9999999-9"})
AADD(aUF,{"PR","@R 999.99999-99"})
AADD(aUF,{"RJ","@R 99.999.99-9"})
AADD(aUF,{"RS","@R 999/999999-9"})
AADD(aUF,{"SC","@R 999.999.999"})
AADD(aUF,{"SP","@R 999.999.999.999"})
AADD(aUF,{"TO","@R 99.99.999999-9"})
cEstado:=SPAC(2)
v_pic:=cIE:=SPACE(14)
@ 10,10 SAY "Sigla do Estado..:" GET cEstado PICT "@!" VALID (ASCAN(aUF,{|e| cEstado $ e[1]})>0)
@ 12,10 SAY "Insc.Estadual....:" GET cIE PICT (v_pic) WHEN { |oGet| TROCA_PIC(oGet,cEstado) }
READ
RETU
FUNC TROCA_PIC(oGet,v_uf)
Local vOp
vOp:=ASCAN(aUF,{|e| v_uf $ e[1]})
oGet:picture :=aUF[vOp,2]
retu .T. Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Bom a todos! ...
Caro colega Toledo. É um prazer "falar" com o mestre! :{
Fiz algumas alterações em algumas máscaras, baseado na Ficha Cadastral que imprimi através do Site do SINTEGRA, no qual me embasei para fazer as máscaras que utilizo.
Funcionou quase que perfeitamente. Ou seja, em qualquer UF que utilizo, o campo do get se mostra com 14 posições. Isso pode deixar o usuário em dúvida. Ele poderá pensar que precisa preencher todo o espaço.
Na rotina que utilizo, faz-se esta verificação e mostra apenas os espaços que serão utilizados para o preenchimento.
O que poderia ser alterado para satisfazer essa condição ?
[]´s
Netavin
Caro colega Toledo. É um prazer "falar" com o mestre! :{
Fiz algumas alterações em algumas máscaras, baseado na Ficha Cadastral que imprimi através do Site do SINTEGRA, no qual me embasei para fazer as máscaras que utilizo.
Funcionou quase que perfeitamente. Ou seja, em qualquer UF que utilizo, o campo do get se mostra com 14 posições. Isso pode deixar o usuário em dúvida. Ele poderá pensar que precisa preencher todo o espaço.
Na rotina que utilizo, faz-se esta verificação e mostra apenas os espaços que serão utilizados para o preenchimento.
O que poderia ser alterado para satisfazer essa condição ?
[]´s
Netavin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
" Sem saber que era impossível, foi lá e fez !! "
A solução pra isso não é maravilhosa, mas deve resolver.
A variável cIE passa a ter o tamanho da máscara selecionada e a posição da IE é limpa com tantos espaços quanto a maior IE existente. Olhei rapidamente, mas deve ser a de Pernambuco. 
Código: Selecionar todos
function TROCA_PIC(oGet,v_uf)
local vOp
vOp := AScan(aUF,{|e|v_uf $ e[1]})
oGet:picture := aUF[vOp][2]
*
cIE := Space(Len(aUF[vOp][2])-3)
@ 12,29 say Space(18)
*
return .T.[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Netavin, verifique qual é a mascara de menor tamanho e altere o valor da linha abaixo:
O tamanho das variáveis acima antes era 14, mudei para 9, pois acho que será o menor.
Abraços,
Código: Selecionar todos
v_pic:=cIE:=SPACE(9)Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Olá malígno!
Aproveito para mostrar as máscaras corretas, de acordo com os cadastros do Sintegra.
Vou testar o que vc passou.
[]´s
Netavin
Aproveito para mostrar as máscaras corretas, de acordo com os cadastros do Sintegra.
Código: Selecionar todos
AADD(aUF,{"AC","@R 99.999.999/999-99"})
AADD(aUF,{"AL-AP-MA-PI","999999999"})
AADD(aUF,{"AM-GO-MT","@R 99.999.999-9"})
AADD(aUF,{"BA","@R 999999-99"})
AADD(aUF,{"CE-PB-SE","@R 99999999-9"})
AADD(aUF,{"DF","@R 99.999999.999-99"})
AADD(aUF,{"ES","@R 999.999.99-9"})
AADD(aUF,{"MG","@R 999.999.999/9999"})
AADD(aUF,{"MS","@R 9999999999-9"})
AADD(aUF,{"PA","@R 99.999999-9"})
AADD(aUF,{"PE","@R 99.9.999.9999999-9"})
AADD(aUF,{"PR","@R 99999999-99"})
AADD(aUF,{"RJ","@R 99.999.99-9"})
AADD(aUF,{"RN","@R 99.999.999-9"})
AADD(aUF,{"RO","@R 9999999999999-9"})
AADD(aUF,{"RR","@R 99.999.999-9"})
AADD(aUF,{"RS","@R 999/9999999"})
AADD(aUF,{"SC","@R 999.999.999"})
AADD(aUF,{"SP","@R 999.999.999.999"})
AADD(aUF,{"TO","@R 99.99.999999-9"})
[]´s
Netavin
TK90 / TK95 / APPLE IIe / 286 / 386 / 486 / 586 / AMD Atlhon
" Sem saber que era impossível, foi lá e fez !! "
" Sem saber que era impossível, foi lá e fez !! "
Mudar para o menor tamanho resolve até metade do caminho, Toledo. O problema é que se ele for pra PE, a largura muda pra 18. Se em seguida for pra AL, muda pra 9. Mas fica o "lixo" no fim do campo. Por isso precisa ser alterado o tamanho da variável na função que obtém a máscara. E precisa também limpar esse "lixo". Por isso que eu comentei que não é uma solução maravilhosa, pois o GETSYS não tem limpeza parcial de campo. Isso deve ser feito manualmente, o que "trava" a coisa pra ser reaproveitada em outros pontos do programa. Vai ter de fazer uma "gambiarra" pra ajustar isso.Toledo escreveu:O tamanho das variáveis acima antes era 14, mudei para 9, pois acho que será o menor.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Re: IF ... ELSEIF muito longo...
Na minha opnião, acho que guardar em DBF seria menos trabalhoso e mais facil de alterar, caso precise. Evita compilar e tals.Manuel Luis Modernel escreveu:OI Amigo NETAVIN,
Não sei se isto irá te ajudar, mais nos tempos de Clipper Summer 87 eu resolvi casos parecidos criando um banco de dados (.DBF) bem pequeno e sem alterações no tamanho nem no indice.
No teu caso dois campos, a sigla de estado e a mascara em forma de texto.
Dai por diante conforme a sigla irá te dar a Mascara da Inscrição Estadual de cada estado numa rápida pesquisa ao BD (e quem sabe alguma outra informação que vc necessitar do estado, como ser DDD, nome da capital ou até o nome completo dele.
Se servir faça-me saber e faça bom uso !!!
Mas, foi uma aula do Toledo e demais, Abraços


