Fórum Preciso transformar essa função local em uma função global! #579641

03/04/2017

0

Bom dia.

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

Emanuel Gonçalves

Responder

Posts

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;
Responder

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

Gostei + 0

03/04/2017

Cleyton Caetano

Fica melhor pra ver o código assim!
Responder

Gostei + 0

03/04/2017

Emanuel Gonçalves

Legal Cleyton.

Então, a ideia é generalizar a função, os parâmetros recebem valores de dataset´s diferentes
Responder

Gostei + 0

04/04/2017

Mateus Ribeiro

Bom dia! Declara a função na sessão "PUBLIC" do seu form PRINCIPAL, e nas outras janelas você chama a função: frmPrincipal.Checa_campoCNPJCPF

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!
Responder

Gostei + 0

04/04/2017

Emanuel Gonçalves

Bom dia! Declara a função na sessão "PUBLIC" do seu form PRINCIPAL, e nas outras janelas você chama a função: frmPrincipal.Checa_campoCNPJCPF

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
Responder

Gostei + 0

04/04/2017

Mateus Ribeiro

Eu entendi, então será necessário adaptar sua função com a entrada de parâmetros!
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í
Responder

Gostei + 0

04/04/2017

Emanuel Gonçalves

Sim Mateus, esses nomes se repetem


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;
Responder

Gostei + 0

07/04/2017

Emanuel Gonçalves

Alguém pode me dar uma dica ??

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
Responder

Gostei + 0

08/04/2017

Jose

Você não precisa ter uma função em cada rotina/form chame-a genericamente, tipo:
If Not ChecaCnpjCpf(DbEdti1.Text) then
showMessage('CNPJ/CPF Inválido);
Responder

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 !!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar