Mascara de exibição na consulta

Bom dia meus caros, o SC está cada dia mais cheio de bugs…

então venho agora reportar o bug da mascara de exibição do grid
invés de mostrar o campo formatado ele concatena o campo com
a mascara…

usei a seguinte mascara para telefone (99)9999-9999;(99)99999-9999

foi exibido o seguinte na grid 9999999999(99)9999-9999;(99)99999-9999

o mesmo aconteceu com o cpf/cnpj

Desde já obrigado.

Vieira,
As máscaras do formulário e da consulta são diferentes:
Formulários podem usar: 9, A e *
Consultas podem usar X e Z
Será que não é isto que esta dando erro?

Do manual:
"Máscara de Consulta - Define a máscara de exibição do campo. São dois os tipos de máscara descritos na tabela abaixo:

Caracter 	Descrição
X 	É substituído por quaisquer caracteres retornados pelo banco de dados. Seu preenchimento é obrigatório e quando forem retornados menos caracteres do que o tamanho da máscara, o valor será completado com zeros à esquerda.
Z 	É substituído por quaisquer caracteres retornados pelo banco de dados. Seu preenchimento é opcional e quando forem retornados menos caracteres do que o tamanho da máscara, nada será feito em relação aos caracteres que estão faltando. Além disso os zeros à esquerda serão suprimidos. Obrigatoriamente o uso deste caracter é à esquerda da máscara quando usado em conjunto com o X

Exemplos de máscaras:
Máscara 	Valor do campo 	Valor formatado
(xx) xxxx - xxxx 	1234567890 	(12) 3456 - 7890
(xx) xxxx - xxxx 	12345678 	(00) 1234 - 5678
(zz) xxxx - xxxx 	1234567890 	(12) 3456 - 7890
(zz) xxxx - xxxx 	12345678 	( ) 1234 - 5678
(zz) xxxx - xxxx 	0012345678 	( ) 1234 - 5678"
1 Curtida

Alexandre,

Estou com o seguinte problema, numa consulta com o uso do formato livre.
O campo telefone no banco de dados está vazio. é do tipo varchar(25)
Se eu usar a máscara ####-####;(##) ####-####;(##) #####-#### aparece i bsp;[/i]
Se eu usar a máscara zzzz-zzzz;(zz)zzzz-zzzz;(zz)zzzzz-zzzz aparece -;()-;()&n-bsp;

Com o valor 5499887766 no banco, aparece:
Se eu usar a máscara ####-####;(##) ####-####;(##) #####-#### aparece i9988-7766[/i] OK
Se eu usar a máscara zzzz-zzzz;(zz)zzzz-zzzz;(zz)zzzzz-zzzz aparece -;()-;(5)49988-7766

No formulário está ok com #
No grid está ok com #, desde que não seja (##) #####-#### (novo celular de sp). Aparece 1199-8854777

Em resumo, com o tal do Z não funciona.
No grid fica OK se não for telefone de SP.
No formato livre, o campo não pode ser vazio e se for de SP Aparece 1199-8854777

Alguma sugestão?

Por favor exporte e me envie a aplicação e a DML para que eu possa testar?
Isto é de meu interesse também! Quero achar onde esta o erro.
Qual SGDB você usa para esta aplicação?
Eu deixei de usar o mysql 4.0.20 no ano 2004, mas presto suporte a este SGDB. Hoje somente uso o Firebid e Postgresql.
No formato padrão do scriptcase nas grids (consulta) funciona normal “X e Z” e nos Forms vai bem o “9, A e *”.
Pode ser que este formato livre esteja colocando sujeira na hora da execução do php.
Fico no aguardo.
Envie para alexandre@simaoebuhler.com.br

Boa noite,

Reportei este problema para nossa equipe de bugs.

att,
Bernhard Bernsmann

Bernhard e jorgepopel,
Bom dia,
Vendo o manual do scriptcase 5,6 e 7 com mais atenção notei onde está a confusão.

O pessoal que vem do scriptcase 5 e anteriores contavam nos formulários com as máscaras: z e x.
À partir do scriptcase 6 e 7 as máscaras nos formulários passaram a ser: 9,A e *.

Os formulários, segundo o manual das versões 6 e 7, aceitam normalmente as máscaras: 9, A e *.
Bem como o uso de múltiplas máscaras.

Eu fiz em um formulário as seguintes máscaras:
9999-9999;(99) 9999-9999;(99) 99999-9999;
E funcionou corretamente.
Como podem ver em:
http://www.simaoebuhler.com.br/teste/forum1

Retirado do manual sobre formulários:

"Máscara de Exibição - Define a máscara de exibição do campo. Existem tres tipos de máscara que podem ser mescladas.

Caracter 	Descrição
9 	Representa um caracter numérico (0-9)
A 	

Representa um caracter alpha numérico (A-Z,a-z)
* 	Representa qualquer caracter alfa-numérico (A-Z,a-z,0-9) digitada pelo usuário.

Nota: É possivel mesclar duas ou mais máscaras simultaneamente, separadas por ponto e vírgula com a menor mascara inicializando. A substituição ocorre durante a digitação dos caracteres quando o numero de caracteres da menor máscara é excedido.

Exemplos de máscaras:
Campo 	Máscara 	Valor Digitado 	Valor Formatado
Número de Telefone 	+99 99 9999 - 9999 	123456789012 	+12 34 5678 - 9012
Software Key (Apenas Letras) 	AAAA-AAAA-AAAA-AAAA 	QWERTYUIASDFGHJK 	QWER-TYUI-ASDF-GHJK
Software Key (Letras e Números) 	****-****-****-**** 	Q1W2E3R4T5Y6U7I8 	Q1W2-E3R4-T5Y6-U7I8
Placa de Carro 	AAA - 9999 	QWE1234 	QWE - 1234
Serial do ScriptCase 	A999A999A999-**** 	D111H111G111DG2P 	D111H111G111-DG2P
Múltiplas máscaras (Telefone) 	9999-9999;(99) 9999-9999;9999 999 9999;+99 99 9999-9999"

Obs: Notem que até os exemplos acima tem múltiplas máscaras

Agora as consultas (grid) tanto nas versões 5, 6 e 7 continuraram a ter como máscaras os caracteres: z e x.
[size=12pt]Mas não suportam o uso de múltiplas máscaras[/size].

Note que o texto retirado do manual das consultas (grid) e exposto abaixo não informa o suporte a mútiplas máscaras nem mostra exemplos com múltiplas máscaras.

" Máscara de Consulta - Define a máscara de exibição do campo. São dois os tipos de máscara descritos na tabela abaixo:

Caracter 	Descrição
X 	É substituído por quaisquer caracteres retornados pelo banco de dados. Seu preenchimento é obrigatório e quando forem retornados menos caracteres do que o tamanho da máscara, o valor será completado com zeros à esquerda.
Z 	É substituído por quaisquer caracteres retornados pelo banco de dados. Seu preenchimento é opcional e quando forem retornados menos caracteres do que o tamanho da máscara, nada será feito em relação aos caracteres que estão faltando. Além disso os zeros à esquerda serão suprimidos. Obrigatoriamente o uso deste caracter é à esquerda da máscara quando usado em conjunto com o X

Exemplos de máscaras:
Máscara 	Valor do campo 	Valor formatado
(xx) xxxx - xxxx 	1234567890 	(12) 3456 - 7890
(xx) xxxx - xxxx 	12345678 	(00) 1234 - 5678
(zz) xxxx - xxxx 	1234567890 	(12) 3456 - 7890
(zz) xxxx - xxxx 	12345678 	( ) 1234 - 5678
(zz) xxxx - xxxx 	0012345678 	( ) 1234 - 5678"

Logo nas consultas (grid) devemos ter uma única máscara.
A exemplo: (zz) zxxxx-xxxx

O problema é que este tipo de máscara por ser única (não múltipla) somente irá funcionar para um tipo de ocorrência.
No caso dos telefones temos três tipos de ocorrência: 1234-1234, (41) 1234-1234, (41) 12345-1234
Logo este tipo de máscara única nunca irá funcionar corretamente.
Ela somente irá funcionar para ocorrências únicas.
Ex: R$ zzz.zzz.zzz,xx

[size=14pt]Fica então minha sugestão para que seja implementada máscaras múltiplas nas aplicações consulta (grid) e o “problema” sanado de vez.[/size]

Jorgepopel! Para contornar a situação atual retire a máscara do campo e coloque este código no evento onrecord da aplicação consulta (grid):

switch (strlen(trim("{TELEFONE}"))) {
case 8:
{TELEFONE}="() “.substr(”{TELEFONE}",0,4)."-".substr("{TELEFONE}",4,4);
break;
case 10:
{TELEFONE}="(".substr("{TELEFONE}",0,2).") “.substr(”{TELEFONE}",2,4)."-".substr("{TELEFONE}",6,4);
break;
case 11:
{TELEFONE}="(".substr("{TELEFONE}",0,2).") “.substr(”{TELEFONE}",2,5)."-".substr("{TELEFONE}",7,4);
break;
}

Obs: onde {TELEFONE}= deverá ser substituido pelo nome do seu campo com os telefones.

Funcionou para mim. Veja:
http://www.simaoebuhler.com.br/teste/forum1

1 Curtida

Fantástico Alexandre, parabéns!

Obrigadaum, Alexandre e todos os demais.

Vou usar essa sugestão e considerar o tópico como resolvido.

Para que ter essa diferença entre formulário e consulta?
Por que a NetMake não adota o mesmo padrão em todas as aplicações? E claro, adotasse o padrão do aplicativo formulário.

Alexandre,

Usei o código que vc sugeriu. No grid ficou perfeito.
Coloquei o mesmo em um “formato livre” e apresenta b Arra-y[0][/b].
E o campo tem informação. varchar(25)

Pesquise mais a variável array onde é montado o resultado.
Tenho certeza que achará o porque ocorreu isto.
Eu ensino a pescar, mas nem sempre dou o peixe.

MQEAA,

Os meus conhecimentos sobre as variáveis se esgotaram.
Comparei o campo telefone da aplicação grid, com o da aplicação “formato livre”.
Ambos são iguais:

Se deixar o campo “direto”, aparece o número normal, sem edição: 5435225037

Fiz uma pequena alteração, e o resultado final deu certo. Mas comprovou que o problema é no campo.

$_telefone = {fone_fixo};
	

switch (strlen(trim($_telefone))) {
case 8:
   {fone_fixo}="() ".substr($_telefone,0,4)."-".substr($_telefone,4,4);
     break;
case 10:
   {fone_fixo}="(".substr($_telefone,0,2).") ".substr($_telefone,2,4)."-".substr($_telefone,6,4);
     break;
case 11:
   {fone_fixo}="(".substr($_telefone,0,2).") ".substr($_telefone,2,5)."-".substr($_telefone,7,4);
     break;
}

Coloquei o pequeno código abaixo, para ver o que acontecia:
{fone_fixo} = ‘[’.{fone_fixo}.’]’;
Resultado: [5435225037]

Acho que vou ter que comprar uma lata de sardinha. hehehehe

Pessoal sei que o tópico é um pouco antigo, mas não queria abrir outro, mesmo porque o que quero postar aqui se refere ao interesse desse tópico.

Eu fiz a máscara para CNPJ/CPF para GRID. Vi que só tinha para Telefones. Sendo assim deixo minha humilde contribuição. Se tiver algum erro, favor corrigir, eu testei aqui e funcionou. Segui a lógica do código do Alexandre.

switch (strlen(trim("{CPF_CNPJ}"))) { case 11: {CPF_CNPJ}=substr("{CPF_CNPJ}",0,3).".".substr("{CPF_CNPJ}",3,3).".".substr("{CPF_CNPJ}",6,3)."-".substr("{CPF_CNPJ}",9,2); break; case 14: {CPF_CNPJ}=substr("{CPF_CNPJ}",0,2).".".substr("{CPF_CNPJ}",2,3).".".substr("{CPF_CNPJ}",5,3)."/".substr("{CPF_CNPJ}",8,4)."-".substr("{CPF_CNPJ}",0,2); break; }

Abraço a todos!

FredKeyster,
Valeu! Isto será muito útil.

Muito bom o tópico, me ajudou bastante. Só um pequeno ajuste no código de CPF/CNPJ:

switch (strlen(trim("{CPF_CNPJ}"))) {
case 11: 
   {CPF_CNPJ}=substr("{CPF_CNPJ}",0,3).".".substr("{CPF_CNPJ}",3,3).".".substr("{CPF_CNPJ}",6,3)."-".substr("{CPF_CNPJ}",9,2);
     break;
case 14:
   {CPF_CNPJ}=substr("{CPF_CNPJ}",0,2).".".substr("{CPF_CNPJ}",2,3).".".substr("{CPF_CNPJ}",5,3)."/".substr("{CPF_CNPJ}",8,4)."-".substr("{CPF_CNPJ}",12,2);
     break;
}

Vlw ^~

Bacana de ver tópicos com 5 anos de vida ainda sendo útil.

Muito bom esse tópico.
Me ajudou muito hoje.
Obrigado a todos os envolvidos.

@PedroLucas @yuri_esteves @marcia.scriptcase @HenriqueB @yuri.castro
Comemorando 9 anos da existência do bug!
Parabéns Netmake!

2 Curtidas

Prezados,

Pela documentação atual da consulta, os caracteres da mascara da consulta são diferentes do formulário. Os caracteres utilizados na consulta são “X” ou “Z”.

OBS: A opção de “Múltiplas máscaras” funciona apenas no formulário.

1 Curtida