Manipulando filtros em um alias com DbClearFilter e DbSetFilter – Maratona AdvPL e TL++ 118

Nesse vídeo demonstraremos a utilização das funções DbClearFilter e DbSetFilter, sendo que ambas servem para manipular filtros em um alias (uma limpa o filtro e a outra define o filtro).

Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zExe118
Realiza (ou limpa) o filtro em um alias
@type Function
@author Atilio
@since 13/12/2022
@see https://tdn.totvs.com/display/tec/DBClearFilter e https://tdn.totvs.com/display/tec/DBSetFilter
@obs 
    Função DBClearFilter
    Não possui parâmetros nem retorno

    Função DBSetFilter
    Parâmetros
        + bCond       , Bloco de Código  , Bloco de código a ser executado em AdvPL
        + cCond       , Caractere        , Condição a ser avaliada em AdvPL
    Retorno
        + Não possui retorno

    **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/

User Function zExe118()
    Local aArea      := FWGetArea()
    Local nAntes     := 0
    Local nComFiltro := 0
    Local nDepois    := 0
    Local cFiltro    := ""
    Local cMensagem  := ""

    DbSelectArea("SBM")
    SBM->(DbSetOrder(1)) // Filial + Código do Grupo

    //Conta quantos registros tem antes do filtro
    Count To nAntes
    SBM->(DbGoTop())

    //Monta o filtro que será usado, aplica e conta quantos registros ficaram
    cFiltro := "! Empty(SBM->BM_GRUPO) .And. ! Empty(SBM->BM_PROORI)"
    SBM->(DbSetFilter({|| &(cFiltro)}, cFiltro))
    Count To nComFiltro
    SBM->(DbGoTop())

    //Agora limpa o filtro e conta quantos registros ficaram
    SBM->(DbClearFilter())
    Count To nDepois
    SBM->(DbGoTop())

    //Monta a mensagem e exibe
    cMensagem := "Antes (ao abrir a tabela): " + cValToChar(nAntes) + CRLF
    cMensagem += "Com o Filtro: " + cValToChar(nComFiltro) + CRLF
    cMensagem += "Após a Limpeza do Filtro: " + cValToChar(nDepois)
    FWAlertInfo(cMensagem, "Teste DbSetFilter e DbClearFilter")

    FWRestArea(aArea)
Return

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.

Deixe uma resposta

Terminal de Informação