dbedit CNPJ Ajuda por favor

17/05/2008

1

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???


Responder

Posts

18/05/2008

Dbergkamps10

Olá,
tente mudar a máscara para 00.000.000/0000-00;0;0

espero ter ajudado.

Att
Dalton


Responder

18/05/2008

Andresan

Alterei, porém o erro persiste.


Responder

19/05/2008

Joaoshi

Troque 00.000.000/0000-00 por 99.999.999/9999-99


Responder

21/05/2008

Andresan

alterando conforme falado a mensagem sai, mas
ai a rotina de valodacao de cnpj no on exit nao funciona.


Responder

24/05/2008

Dbergkamps10

Olá,
Poste aqui o código da função então, talvez possamos ajudar.

Att
Dalton


Responder

25/05/2008

Andresan

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;


Responder

25/05/2008

Edilcimar

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


Responder

29/05/2008

Andresan

Muito obrigado pela sua explicação Edilcimar
entendi muito bem.


Responder