Quando falamos em customizações no Protheus usando MVC, um desafio comum é garantir que determinadas informações sejam obrigatoriamente preenchidas antes que o usuário finalize a ação. E um dos casos clássicos é: como validar se uma grid está vazia dentro de um Ponto de Entrada (PE)?
Neste artigo, vamos mostrar como resolver essa situação de forma prática, usando a função IsEmpty()
em conjunto com o ponto de entrada FORMPOS. Esse recurso é essencial para quem desenvolve em AdvPL/TLPP e precisa garantir a integridade das informações.
O problema: grids que passam em branco
Muitas vezes, o usuário esquece de preencher uma grid importante, como no exemplo do Plano de Contas Referencial (CVD) no módulo de Contabilidade (CTBA020).
Sem uma validação, o sistema permitiria que o formulário fosse salvo sem esses dados – o que pode gerar inconsistências e problemas em relatórios fiscais.
A solução: usar IsEmpty()
no Ponto de Entrada
A TOTVS disponibiliza pontos de entrada em MVC que permitem inserir regras de negócio no fluxo do formulário.
No caso do FORMPOS, ele é chamado ao final da validação do formulário, o que o torna ideal para checar se os modelos internos (grids) foram preenchidos.
O código exemplo:
//Bibliotecas
#Include "Totvs.ch"
User Function CTBA020()
Local aArea := FWGetArea()
Local aParam := PARAMIXB
Local xRet := .T.
Local oObj := Nil
Local cIdPonto := ""
Local cIdModel := ""
Local oModelCtb
Local oModelCVD
If aParam != Nil
oObj := aParam[1]
cIdPonto := aParam[2]
cIdModel := aParam[3]
If cIdPonto == "FORMPOS"
xRet := .T.
// Modelo ativo
oModelCtb := FWModelActive()
// Grid da tabela CVD
oModelCVD := oModelCtb:GetModel("CVDDETAIL")
// Se a grid estiver vazia
If oModelCVD:IsEmpty()
ExibeHelp("Help_CTBA020", ;
"É obrigatório o preenchimento do Plano de Contas Referencial (CVD)", ;
"Insira pelo menos 1 linha no Plano de Contas Referencial")
xRet := .F.
EndIf
EndIf
EndIf
FWRestArea(aArea)
Return xRet
Por que essa validação é importante?
- Evita inconsistências: impede que dados críticos fiquem em branco.
- Cumprimento de regras fiscais: no caso do CVD, o preenchimento é obrigatório.
- Melhora a usabilidade: o usuário é avisado imediatamente, sem precisar descobrir o erro só em relatórios.
- Flexibilidade: a mesma lógica pode ser adaptada para qualquer grid em qualquer módulo.
Boas práticas na implementação
- Sempre salve o PE em um arquivo separado, como
CTBA020_pe.prw
, para manter a organização. - Utilize mensagens claras para orientar o usuário sobre o que precisa ser feito.
- Teste em base de homologação antes de liberar em produção.
- Documente os PEs criados para facilitar futuras manutenções.
Conclusão
Validar se uma grid está vazia em um Ponto de Entrada MVC no Protheus é uma prática simples, mas que traz grande impacto na qualidade das informações.
Usando a função IsEmpty()
dentro do FORMPOS, você garante que dados críticos não passem despercebidos e evita retrabalho no futuro.
Na Geeker Company, trabalhamos exatamente para ajudar empresas a tirar o máximo proveito do Protheus, implementando soluções inteligentes e seguras.
Se sua empresa também precisa de apoio para estruturar customizações ou projetos no Protheus, fale com a gente e vamos juntos levar mais eficiência para seu ERP.