dbedit CNPJ Ajuda por favor
Tenho um dbedit de CNPJ configurado com a mascara 00.000.000/0000-00;0;_ e uma funcao que valida o cnpj no onexit do dbedit.
O problema é que se eu mudar de campo durante a digitacao do cnpj e deixar ele incompleto aparece a seguinte mensagem:´ Invalid Input. Use escape key to abandon changes.´
Alguem pode me ajudar???
O problema é que se eu mudar de campo durante a digitacao do cnpj e deixar ele incompleto aparece a seguinte mensagem:´ Invalid Input. Use escape key to abandon changes.´
Alguem pode me ajudar???
Andresan
Curtidas 0
Respostas
Dbergkamps10
17/05/2008
Olá,
tente mudar a máscara para 00.000.000/0000-00;0;0
espero ter ajudado.
Att
Dalton
tente mudar a máscara para 00.000.000/0000-00;0;0
espero ter ajudado.
Att
Dalton
GOSTEI 0
Andresan
17/05/2008
Alterei, porém o erro persiste.
GOSTEI 0
Joaoshi
17/05/2008
Troque 00.000.000/0000-00 por 99.999.999/9999-99
GOSTEI 0
Andresan
17/05/2008
alterando conforme falado a mensagem sai, mas
ai a rotina de valodacao de cnpj no on exit nao funciona.
ai a rotina de valodacao de cnpj no on exit nao funciona.
GOSTEI 0
Dbergkamps10
17/05/2008
Olá,
Poste aqui o código da função então, talvez possamos ajudar.
Att
Dalton
Poste aqui o código da função então, talvez possamos ajudar.
Att
Dalton
GOSTEI 0
Andresan
17/05/2008
function testacnpj(xcnpj: string):boolean;
var
d1,d4,xx,ncount,fator,resto,digito1,digito2: integer;
check: string;
begin
d1 := 0;
d4 := 0;
xx := 1;
for ncount := 1 to length( xcnpj )-2 do
begin
if pos( copy( xcnpj, ncount, 1 ), ´/-.´ ) = 0 then
begin
if xx < 5 then
begin
fator := 6 - xx;
end
else
begin
fator := 14 - xx;
end;
d1 := d1 + strtoint( copy( xcnpj, ncount, 1 ) ) * fator;
if xx < 6 then
begin
fator := 7 - xx;
end
else
begin
fator := 15 - xx;
end;
d4 := d4 + strtoint( copy( xcnpj, ncount, 1 ) ) * fator;
xx := xx+1;
end;
end;
resto := (d1 mod 11);
if resto < 2 then
begin
digito1 := 0;
end
else
begin
digito1 := 11 - resto;
end;
d4 := d4 + 2 * digito1;
resto := (d4 mod 11);
if resto < 2 then
begin
digito2 := 0;
end
else
begin
digito2 := 11 - resto;
end;
check := inttostr(digito1) + inttostr(digito2);
if check <> copy(xcnpj,succ(length(xcnpj)-2),2) then
begin
result := false;
end
else
begin
result := true;
end;
end;
**************e no onexit do bdedit*****************************
procedure TfrmCadEmpresas.dbeCNPJExit(Sender: TObject);
begin
If trim(dbeCNPJ.Text)=´´ Then Exit;
if TestaCNPJ(dbeCNPJ.Text)=False then Begin
Application.MessageBox(´CNPJ Inválido!´,´Atenção´,MB_OK+MB_ICONINFORMATION);
dbeCNPJ.SetFocus;
Exit;
End;
end;
var
d1,d4,xx,ncount,fator,resto,digito1,digito2: integer;
check: string;
begin
d1 := 0;
d4 := 0;
xx := 1;
for ncount := 1 to length( xcnpj )-2 do
begin
if pos( copy( xcnpj, ncount, 1 ), ´/-.´ ) = 0 then
begin
if xx < 5 then
begin
fator := 6 - xx;
end
else
begin
fator := 14 - xx;
end;
d1 := d1 + strtoint( copy( xcnpj, ncount, 1 ) ) * fator;
if xx < 6 then
begin
fator := 7 - xx;
end
else
begin
fator := 15 - xx;
end;
d4 := d4 + strtoint( copy( xcnpj, ncount, 1 ) ) * fator;
xx := xx+1;
end;
end;
resto := (d1 mod 11);
if resto < 2 then
begin
digito1 := 0;
end
else
begin
digito1 := 11 - resto;
end;
d4 := d4 + 2 * digito1;
resto := (d4 mod 11);
if resto < 2 then
begin
digito2 := 0;
end
else
begin
digito2 := 11 - resto;
end;
check := inttostr(digito1) + inttostr(digito2);
if check <> copy(xcnpj,succ(length(xcnpj)-2),2) then
begin
result := false;
end
else
begin
result := true;
end;
end;
**************e no onexit do bdedit*****************************
procedure TfrmCadEmpresas.dbeCNPJExit(Sender: TObject);
begin
If trim(dbeCNPJ.Text)=´´ Then Exit;
if TestaCNPJ(dbeCNPJ.Text)=False then Begin
Application.MessageBox(´CNPJ Inválido!´,´Atenção´,MB_OK+MB_ICONINFORMATION);
dbeCNPJ.SetFocus;
Exit;
End;
end;
GOSTEI 0
Edilcimar
17/05/2008
Se você utilizar ZEROS na máscara, isto significa que todos os caracteres são obrigatórios, portanto vai dar erro se estiver faltando um único dígito, o que é correto, porém se utilizar NOVES aí poderá ou não preencher o campo, quer total ou parcialmente.
Se o que você deseja é obrigar a pessoa a digitar todos os números então deverá permanecer com os zeros, o que você pode fazer é no onexit do dbedit colocar a checagem dos dígitos dentro de um try...except, colocando uma mensagem no except para avisar ao digitador que estão faltando caracteres
Se o que você deseja é obrigar a pessoa a digitar todos os números então deverá permanecer com os zeros, o que você pode fazer é no onexit do dbedit colocar a checagem dos dígitos dentro de um try...except, colocando uma mensagem no except para avisar ao digitador que estão faltando caracteres
GOSTEI 0
Andresan
17/05/2008
Muito obrigado pela sua explicação Edilcimar
entendi muito bem.
entendi muito bem.
GOSTEI 0