Fórum Preciso transformar essa função local em uma função global! #579641
03/04/2017
0
a função logo abaixo é utilizada em pelo menos 18 form´s diferentes (Clientes, fornecedores, cheques, notas, etc), a ideia é torna-la uma função global.
function tFrmCadClientes.Checa_campoCNPJCPF() : boolean;
begin
inherited;
result := true;
if checa_cgccpf ( trim (DBCNPJCPF.Text) ) = false then
begin
Application.MessageBox('CNPJ/CPF Inválido !!','Erro',MB_OK + MB_ICONERROR);
DBCNPJCPF.setfocus;
result := false;
end
else
begin
if DBCNPJCPF.text <> '00000000000000' then
begin
FDPesqCNPJCPFDuplicado.active := false;
FDPesqCNPJCPFDuplicado.ParamByName('pesqcnpjcpf').AsString := FDCadPadraoCL_CNPJ_CPF.Value;
FDPesqCNPJCPFDuplicado.ParamByName('pesqnumero').value := FDCadPadraoCL_NUMERO.value;
FDPesqCNPJCPFDuplicado.Active := True;
if FDPesqCNPJCPFDuplicadoREG_ENCONTRADOS.value > 0 then
begin
if Application.MessageBox('CNPJ/CPF já cadastrado.','Aviso',MB_OK + MB_ICONINFORMATION) = idOK then
begin
DBCNPJCPF.setfocus;
result := false;
end;
end;
end;
end;
end;
Emanuel Gonçalves
Curtir tópico
+ 0Posts
03/04/2017
Cleyton Caetano
function tFrmCadClientes.Checa_campoCNPJCPF() : boolean;
begin
inherited;
result := true;
if checa_cgccpf ( trim (DBCNPJCPF.Text) ) = false then
begin
Application.MessageBox('CNPJ/CPF Inválido !!','Erro',MB_OK + MB_ICONERROR);
DBCNPJCPF.setfocus;
result := false;
end
else
begin
if DBCNPJCPF.text <> '00000000000000' then
begin
FDPesqCNPJCPFDuplicado.active := false;
FDPesqCNPJCPFDuplicado.ParamByName('pesqcnpjcpf').AsString := FDCadPadraoCL_CNPJ_CPF.Value;
FDPesqCNPJCPFDuplicado.ParamByName('pesqnumero').value := FDCadPadraoCL_NUMERO.value;
FDPesqCNPJCPFDuplicado.Active := True;
if FDPesqCNPJCPFDuplicadoREG_ENCONTRADOS.value > 0 then
begin
if Application.MessageBox('CNPJ/CPF já cadastrado.','Aviso',MB_OK + MB_ICONINFORMATION) = idOK then
begin
DBCNPJCPF.setfocus;
result := false;
end;
end;
end;
end;
end;Gostei + 0
03/04/2017
Emanuel Gonçalves
function tFrmCadClientes.Checa_campoCNPJCPF() : boolean;
begin
inherited;
result := true;
if checa_cgccpf ( trim (DBCNPJCPF.Text) ) = false then
begin
Application.MessageBox('CNPJ/CPF Inválido !!','Erro',MB_OK + MB_ICONERROR);
DBCNPJCPF.setfocus;
result := false;
end
else
begin
if DBCNPJCPF.text <> '00000000000000' then
begin
FDPesqCNPJCPFDuplicado.active := false;
FDPesqCNPJCPFDuplicado.ParamByName('pesqcnpjcpf').AsString := FDCadPadraoCL_CNPJ_CPF.Value;
FDPesqCNPJCPFDuplicado.ParamByName('pesqnumero').value := FDCadPadraoCL_NUMERO.value;
FDPesqCNPJCPFDuplicado.Active := True;
if FDPesqCNPJCPFDuplicadoREG_ENCONTRADOS.value > 0 then
begin
if Application.MessageBox('CNPJ/CPF já cadastrado.','Aviso',MB_OK + MB_ICONINFORMATION) = idOK then
begin
DBCNPJCPF.setfocus;
result := false;
end;
end;
end;
end;
end;Cleyton ??
Gostei + 0
03/04/2017
Cleyton Caetano
Gostei + 0
03/04/2017
Emanuel Gonçalves
Então, a ideia é generalizar a função, os parâmetros recebem valores de dataset´s diferentes
Gostei + 0
04/04/2017
Mateus Ribeiro
Para a função poder ser chamada, o form onde ela está precisa estar criada... por isso não aconselho você fixar ela no "frmCadCliente", e sim em um form que sempre estará aberto, no caso o seu form principal!
Gostei + 0
04/04/2017
Emanuel Gonçalves
Para a função poder ser chamada, o form onde ela está precisa estar criada... por isso não aconselho você fixar ela no "frmCadCliente", e sim em um form que sempre estará aberto, no caso o seu form principal!
Mateus eu tenho uma Unit Funções e a ideia é colocar a função Checa_CampoCNPJCPF nessa Unit, o detalhe é que os form´s que usam essa função tem um dataset cada um com uma consulta SQL respectiva, ou seja.
Para clientes:
SELECT
cast(count(*) as INTEGER)as Reg_Encontrados
FROM
CLIENTES
WHERE
CL_CNPJ_CPF = :pesqcnpjcpf
AND CL_NUMERO <> :pesqnumero
Para fornecedores:
SELECT
cast(count(*)as INTEGER) as Reg_Encontrados
FROM
FORNECEDORES
WHERE
F_CNPJCPF = :pesqcnpjcpf
AND F_NUMERO <> :pesqnumero
Isso ocorre em varios outros Form´s, é possível notar que o comando SQL é o mesmo mudando apenas as tabelas e os respectivos campos.
Desse modo eu precisaria tornar a função mais genérica
Gostei + 0
04/04/2017
Mateus Ribeiro
Contudo, notei que sua função possui esses objetos "FDPesqCNPJCPFDuplicado, FDCadPadrao" engessados. Oq são eles? terão o mesmo nome em todos os forms? Bora adaptar essa tua função aí
Gostei + 0
04/04/2017
Emanuel Gonçalves
A coisa toda funciona assim
1º eu tenho form´s Padrão chamados de FrmCadPadrao, em cada form eu tenho um dataset padrão "FDCadPadrao", assim ao criar um form de cadastro de clientes eu vou herdar os detalhes do FrmCadPadrao, um desses detalhes é o dataset FDCadPadrao e como forma de organizar eu sempre uso a tabela principal de cada form nesse Dataset FDCadPadrao, assim nesse exemplo a tabela de clientes será chamada no FDCadPadrao
Exemplo
FDCadPadrao
SELECT
*
FROM
CLIENTES
2º é comum nesses form´s de cadastro utilizar outros Dataset´s, como por exemplo para acessar a tabelas de cidades. No nosso caso em questão eu tenho um dataset de mesmo nome FDPesqCNPJCPFDuplicado com comandos SQL quase idênticos.
3º pq quase idênticos ??
no form de cadastro de clientes a condição WHERE vai comparar os parâmetros aos respecitvos campos "Fields" da tabela de clientes, isso vai acontecer dentro da função Checa_campoCNPJCPF() atraves do parâmetros "pesqcnpjcpf" e "pesqnumero " .
FDPesqCNPJCPFDuplicado:----------------------------
SELECT
cast(count(*) as INTEGER)as Reg_Encontrados
FROM
CLIENTES
WHERE
CL_CNPJ_CPF = :pesqcnpjcpf
AND CL_NUMERO <> :pesqnumero
---------------------------------------------------
4º o item 3 se repete para cada um dos form´s que utilizam a função Checa_campoCNPJCPF(), cada um desses form´s também tem um dataset FDPesqCNPJCPFDuplicado, por exemplo para fornecedores, observe que a tabela é de fornecedores e os campos são F_CNPJCPF e F_NUMERO mas mantenho os mesmos parâmetros.
Desse modo a função Checa_campoCNPJCPF() no form de fornecedores seria quase idêntica a utilizada em clientes mudando apenas os campos que alimentam os parâmetros
FDPesqCNPJCPFDuplicado:----------------------------
SELECT
cast(count(*)as INTEGER) as Reg_Encontrados
FROM
FORNECEDORES
WHERE
F_CNPJCPF = :pesqcnpjcpf
AND F_NUMERO <> :pesqnumero
---------------------------------------------------
--------------------------------------------
função Checa_campoCNPJCPF() no form clientes
----------------------------------------------
function tFrmCadClientes.Checa_campoCNPJCPF() : boolean;
begin
inherited;
result := true;
if checa_cgccpf ( trim (DBCNPJCPF.Text) ) = false then
begin
Application.MessageBox('CNPJ/CPF Inválido !!','Erro',MB_OK + MB_ICONERROR);
DBCNPJCPF.setfocus;
result := false;
end
else
begin
if DBCNPJCPF.text <> '00000000000000' then
begin
FDPesqCNPJCPFDuplicado.active := false;
FDPesqCNPJCPFDuplicado.ParamByName('pesqcnpjcpf').AsString := FDCadPadraoCL_CNPJ_CPF.Value; <<<<<<<<
FDPesqCNPJCPFDuplicado.ParamByName('pesqnumero').value := FDCadPadraoCL_NUMERO.value; <<<<<<<<
FDPesqCNPJCPFDuplicado.Active := True;
if FDPesqCNPJCPFDuplicadoREG_ENCONTRADOS.value > 0 then
begin
if Application.MessageBox('CNPJ/CPF já cadastrado.','Aviso',MB_OK + MB_ICONINFORMATION) = idOK then
begin
DBCNPJCPF.setfocus;
result := false;
end;
end;
end;
end;
end;
---------------------------------------------
-------------------------------------------------
função Checa_campoCNPJCPF() no form fornecedores
-------------------------------------------------
function TFrmCadFornecedores.Checa_campoCNPJCPF() : boolean;
begin
inherited;
result := true;
if checa_cgccpf ( trim (DBCNPJCPF.Text) ) = false then
begin
Application.MessageBox('CNPJ/CPF Inválido !!','Erro', MB_OK + MB_ICONWARNING);
DBCNPJCPF.setfocus;
result := false;
end
else
begin
if DBCNPJCPF.text <> '00000000000000' then
begin
FDPesqCNPJCPFDuplicado.active := false;
FDPesqCNPJCPFDuplicado.ParamByName('pesqcnpjcpf').value := FDCadPadraoF_CNPJCPF.Value;
FDPesqCNPJCPFDuplicado.ParamByName('pesqnumero').value := FDCadPadraoF_NUMERO.value;
FDPesqCNPJCPFDuplicado.Active := True;
if FDPesqCNPJCPFDuplicadoREG_ENCONTRADOS.value > 0 then
begin
Application.MessageBox('CNPJ/CPF já cadastrado !!','Aviso', MB_OK + MB_ICONINFORMATION);
DBCNPJCPF.setfocus;
result := false;
end;
end;
end;
end;
Gostei + 0
07/04/2017
Emanuel Gonçalves
function Checa_campoCNPJCPF(DBEdit: TDBEdit; Dataset : TFDQuery; campoCNPJCPF, campoNumero : TStringField) : boolean;
begin
inherited;
result := true;
if not checa_cgccpf (trim(DBedit.Text)) then
begin
Application.MessageBox('CNPJ/CPF Inválido !!','Erro',MB_OK + MB_ICONERROR);
DBedit.setfocus;
result := false;
end
else
begin
if DBedit.text <> '00000000000000' then
begin
Dataset.active := false;
Dataset.ParamByName('pesqcnpjcpf').AsString := campoCNPJCPF.Value;
Dataset.ParamByName('pesqnumero').value := campoNumero.value;
Dataset.Active := True;
if FDPesqCNPJCPFDuplicadoREG_ENCONTRADOS.value > 0 then <<<<<<<<<<<<<<<<<<<<<<<preciso generalizar
begin
if Application.MessageBox('CNPJ/CPF já cadastrado.','Aviso',MB_OK + MB_ICONINFORMATION) = idOK then
begin
DBedit.setfocus;
result := false;
end;
end;
end;
end;
end;
Preciso generalizar esse trecho FDPesqCNPJCPFDuplicadoREG_ENCONTRADOS na função
Gostei + 0
08/04/2017
Jose
If Not ChecaCnpjCpf(DbEdti1.Text) then
showMessage('CNPJ/CPF Inválido);
Gostei + 0
08/04/2017
Emanuel Gonçalves
// esta funçao verifica se o CNPJ ou CPF digitado já está cadastrado
function Checa_CNPJCPF_Cadastrado(DBEdit: TDBEdit; Dataset : TFDQuery; campoCNPJCPF: TStringField; campoNumero : TIntegerField): boolean;
begin
result := true;
if not checa_cgccpf (trim(DBedit.Text)) then
begin
Application.MessageBox('CNPJ/CPF Inválido !!','Erro',MB_OK + MB_ICONERROR);
DBedit.setfocus;
result := false;
end
else
begin
if DBedit.text <> '00000000000000' then
begin
Dataset.active := false;
Dataset.ParamByName('pesqcnpjcpf').AsString := campoCNPJCPF.Value;
Dataset.ParamByName('pesqnumero').value := campoNumero.value;
Dataset.Active := True;
if Dataset.RecordCount <> 0 then
begin
if Application.MessageBox('CNPJ/CPF já cadastrado.','Aviso',MB_OK + MB_ICONINFORMATION) = idOK then
begin
DBedit.setfocus;
result := false;
end;
end;
end;
end;
end;
obrigado pessoal, a função ficou assim !!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)