Quando usar o ExistCPO e o ExistChav

No artigo de hoje, vou falar um pouco sobre as funções ExistCPO e ExistChav, qual a diferença das duas e como usar nas customizações.

Ambas as funções citadas, servem para validar se um registro existe na base de dados. A diferença é que a ExistCPO valida se a informação existe em algum alias informado. Já a ExistChav, valida se a informação existe na mesma tabela posicionada.

Trazendo para um exemplo mais simples, vamos imaginar o cadastro de clientes, se você quisesse validar se o código e loja do cliente existem, enquanto o usuário está digitando, você deve usar a ExistChav, com o alias SA1 e os campos A1_COD + A1_LOJA (índice 1 padrão).

Agora, se você tiver em um pedido de venda, e quer validar se o cliente digitado existe, ai você deve utilizar a função ExistCPO, passando o alias SA1 e os campos C5_CLIENTE e C5_LOJACLI.

Resumindo então, ExistChav valida se a informação existe na mesma tabela posicionada no momento do cadastro e ExistCPO valida se a informação existe em alguma tabela buscada que não está sendo manipulada no momento.

Abaixo irei demonstrar alguns exemplos de ambas as funções.

ExistCPO

Documentação: https://tdn.totvs.com/pages/viewpage.action?pageId=24346640

//Exemplo colocando na validação do campo:
ExistCPO( "SA1", &(ReadVar()) )
 
//Exemplo colocando na validação de uma tela em MVC (campo não está posicionado):
ExistCPO( "SA1", FWFldGet("CAMPO_CLI") + FWFldGet("CAMPO_LOJ") )
 
//Exemplo, usando o índice 3 (CNPJ / CPF)
ExistCPO( "SA1", cCampoCNPJ, 3 )
 
//Exemplo usando dentro de um programa em AdvPL
cCodigo := "000001"
cLoja := "01"
 
If ExistCPO("SA1", cCodigo + cLoja)
    MsgInfo("Cliente existe!", "Atenção")
Else
    MsgStop("Cliente não existe!", "Atenção")
EndIf

ExistChav

Documentação: https://tdn.engpro.totvs.com.br/pages/viewpage.action?pageId=24346638

//Exemplo colocando na validação do campo:
ExistChav( "SA1", &(ReadVar()) )
 
//Exemplo colocando na validação de uma tela em MVC (campo não está posicionado):
ExistChav( "SA1", FWFldGet("CAMPO_CLI") + FWFldGet("CAMPO_LOJ") )
 
//Exemplo, usando o índice 3 (CNPJ / CPF)
ExistChav( "SA1", cCampoCNPJ, 3 )
 
//Exemplo usando dentro de um programa em AdvPL
cCodigo := "000001"
cLoja := "01"
 
If ExistChav("SA1", cCodigo + cLoja)
    MsgStop("Cliente não existe!", "Atenção")
Else
    MsgInfo("Cliente já existe!", "Atenção")
EndIf

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

2 Responses

  1. Wanderson Fernandes de Souza disse:

    Boa Tarde Daniel,

    Este 2 comandos substituem a utilização do dbseek?

Deixe uma resposta

Terminal de Informação