Tempo de leitura: 5 minutos
No desenvolvimento de rotinas no ERP Protheus, saber a volumetria de dados processados é essencial para o controle de loops, geração de logs e validação de regras de negócio. Muitas vezes, precisamos saber quantos registros uma consulta retornou antes de iniciar um processamento pesado. O comando Count To em ADVPL é a ferramenta nativa projetada para contabilizar registros de uma tabela ativa ou de uma consulta SQL, sendo um conceito vital dentro de ADVPL no Protheus: Dados e Estrutura.
Neste guia completo, vamos explorar o funcionamento do Count To, entender como ele interage com o SQL e Banco de Dados e aplicar exemplos práticos para otimizar suas rotinas customizadas.
O que é o comando Count To e para que serve?
O comando Count To em ADVPL tem como objetivo contar o número de registros que atendem ao filtro atual da área de trabalho selecionada. Ele percorre o Alias ativo e armazena o total em uma variável numérica. É amplamente utilizado após a execução de uma query para verificar se houve retorno de dados ou em tabelas posicionadas via DBSelectArea.
Sintaxe e Funcionamento
A sintaxe é extremamente simples:
Count To [nVariavel]
- nVariavel: Variável numérica que receberá o total de registros contados.
Uma observação importante é que o comando Count To respeita o filtro (IndRegua ou SetFilter) e o escopo da tabela. Além disso, após a execução, o ponteiro da tabela é movido para o final (EOF), sendo necessário usar o DBGoTop() caso precise ler os registros em seguida.
Sintaxe:
Count To [nReg]
Parâmetro(s):
1 – Utilizando o comando Count To Para Contar Registros de uma Tabela(Área) Selecionada:
//Bibliotecas
#Include "Protheus.ch"
#INCLUDE "TBICONN.CH"
#INCLUDE "topconn.ch"
#include "TOTVS.CH"
/*/{Protheus.doc} fCounTo
Exemplo da função Count To em ADVPL
@type function
@author Adilio Costa
@since 27/08/2024
@version 1.0
@?Inscreva-se no Blog ProtheusAdvpl:
https://www.protheusadvpl.com.br
@?Inscreva-se no Canal ProtheusAdvpl:
https://www.youtube.com/protheusadvpl
@?Siga-nos no Instagram:
https://www.instagram.com/protheusadvpl
@?Conheça os Cursos e Formações do Protheus:
https://cursos-e-formacoes-protheusadvpl.gr-site.com/
@Participe de nossas comunidades no WhatsApp:
-Comunidade Protheus Backoffice:https://chat.whatsapp.com/KMUIAjwZ6EZ6eAHsLkPTyb
-Comunidade Protheus-RH:https://chat.whatsapp.com/L5dUyAna6xU4ylG5DUgfOW
-Comunidade Protheus-Programação:https://chat.whatsapp.com/LsD6z0apdqKHlOz67bcaEn
-Comunidade Protheus-Framework:https://chat.whatsapp.com/BzUFpjaSnTC3vtsfa77jmG
|Se esse conteúdo foi útil pra você nos ajude divulgando
ele e nossas redes sociais!!|
/*/
User Function fCounTo()
Local aArea := GetArea()
Local nReg := 0
//Seleciona a tabela de clientes SA1
DBSelectArea('SA1')
//Contando os registros e atribuindo o valor a nReg
Count To nReg
//Voltando ao topo da tabela
SA1->(DBGoTop())
MsgInfo("Total de Registros é: "+cValToChar(nReg), "Count To")
//Restaura a área
RestArea(aArea)
Return
2 – Utilizando o comando Count To Para Contar Registros de uma Consulta SQL(Query):
//Bibliotecas
#Include "Protheus.ch"
#INCLUDE "TBICONN.CH"
#INCLUDE "topconn.ch"
#include "TOTVS.CH"
/*/{Protheus.doc} fCounTo2
Exemplo da função Count To em ADVPL
@type function
@author Adilio Costa
@since 27/08/2024
@version 1.0
@?Inscreva-se no Blog ProtheusAdvpl:
https://www.protheusadvpl.com.br
@?Inscreva-se no Canal ProtheusAdvpl:
https://www.youtube.com/protheusadvpl
@?Siga-nos no Instagram:
https://www.instagram.com/protheusadvpl
@?Conheça os Cursos e Formações do Protheus:
https://cursos-e-formacoes-protheusadvpl.gr-site.com/
@Participe de nossas comunidades no WhatsApp:
-Comunidade Protheus Backoffice:https://chat.whatsapp.com/KMUIAjwZ6EZ6eAHsLkPTyb
-Comunidade Protheus-RH:https://chat.whatsapp.com/L5dUyAna6xU4ylG5DUgfOW
-Comunidade Protheus-Programação:https://chat.whatsapp.com/LsD6z0apdqKHlOz67bcaEn
-Comunidade Protheus-Framework:https://chat.whatsapp.com/BzUFpjaSnTC3vtsfa77jmG
|Se esse conteúdo foi útil pra você nos ajude divulgando
ele e nossas redes sociais!!|
/*/
User Function fCounTo2()
Local aArea := GetArea()
Local nReg := 0
//Monta e executa a consulta sql
cQuery := " SELECT * FROM "+RetSQLName('SA2')+" SA2 WHERE SA2.D_E_L_E_T_ = ' ' "
TCQuery cQuery New Alias "QrySA2"
//Contando os registros e voltando ao topo da query
Count To nReg
QrySA2->(DBGoTop())
MsgInfo("Total de Registros Retornados pela Query: "+cValToChar(nReg ), "Count To")
QrySA2->(DBCloseArea())
RestArea(aArea)
Return
Boas Práticas e Performance
Embora o Count To em ADVPL seja muito prático, em tabelas com milhões de registros ele pode causar lentidão, pois o comando percorre os registros para contar. Para alta performance em SQL e Banco de Dados, considere:
- COUNT(*) no SQL: Se você só precisa do número e não vai processar os dados, prefira fazer um SELECT COUNT(*) FROM … direto na query. É muito mais rápido, pois o banco de dados resolve a contagem.
- Verificação de Alias: Antes de usar o comando, certifique-se de que a área está aberta usando a função Select.
- Dicionário de Dados: Valide sempre se os campos usados no filtro da query estão corretamente configurados no SIGACFG.
Conclusão
O comando Count To em ADVPL é uma ferramenta essencial para o controle de fluxo em suas customizações. Ele permite que o desenvolvedor tome decisões baseadas na quantidade de dados, melhorando a experiência do usuário e a robustez do sistema. Ao entender como utilizá-lo corretamente em tabelas e queries, você eleva o nível técnico das suas entregas no Protheus.
Links de referência(s):
Conteúdos relacionados
Bem, finalizamos mais um post aqui no blog ProtheusAdvpl, espero que você tenha entendido, qualquer dúvida deixa seu comentário ou dê sugestões de conteúdo ou sugestões de melhoria aqui no blog. Grande abraço e fica com Deus.