Como criar um Ponto de Entrada
Tutorial passo-a-passo: como criar um Ponto de Entrada Protheus, registrar no RPO e validar que esta sendo disparado.
Ponto de Entrada (PE) e o jeito oficial de customizar comportamento de uma rotina padrao TOTVS sem alterar o fonte original. O sistema chama o PE em momentos pre-definidos (antes de gravar, validar, etc.).
1. Descobrir qual PE usar
Cada rotina tem PEs documentados no TDN. Exemplos comuns:
MA030VLD— validacao no cadastro de cliente (SA1)MT100GRV— apos gravar NF de entrada (MATA103)M410STTS— antes da gravacao do pedido de vendaFA040VLD— validacao em titulo a receber (FINA040)
Procure no TDN: "<nome-rotina> pontos de entrada".
2. Escrever o fonte
#INCLUDE "PROTHEUS.CH"
/*/{Protheus.doc} MA030VLD
Bloqueia inclusao se CNPJ ja existir em outra filial.
/*/
User Function MA030VLD()
Local lOk := .T.
Local cCgc := M->A1_CGC
Local cQuery := ""
cQuery := "SELECT COUNT(*) AS N "
cQuery += " FROM " + RetSqlName("SA1") + " SA1 "
cQuery += " WHERE A1_CGC = '" + cCgc + "' "
cQuery += " AND A1_FILIAL <> '" + xFilial("SA1") + "' "
cQuery += " AND D_E_L_E_T_ = ' ' "
If TCSqlExec(cQuery) // simplificado
// tem em outra filial
Help(,,"HELP",,"CNPJ ja cadastrado em outra filial", 1, 0)
lOk := .F.
EndIf
Return lOk3. Compilar e validar
- Salve como
MA030VLD.prw - Compile:
Ctrl+F9no TDS-VSCode ou/advpl-compileno Claude Code - O fonte vai pro RPO — automaticamente o sistema vai chamar quando a rotina alvo executar
- Teste: abra MATA030, tente cadastrar cliente com CNPJ duplicado em outra filial — deve bloquear
4. Verificar se esta sendo disparado
Se nao funcionar, adicione log no inicio do PE:
User Function MA030VLD()
ConOut("MA030VLD disparado em " + Time() + " - user: " + cUserName)
// ... resto ...
Return lOkOlhe no console do AppServer (ou console.log em logs/). Se nao aparecer, possiveis causas:
- Nome do PE escrito errado (case-sensitive em alguns servers)
- Esqueceu de compilar no environment correto
- RPO Token nao permite (raro)
- Esse PE especifico nao existe nessa versao (verifique TDN)
5. Boas praticas
- Header Protheus.doc obrigatorio explicando o que o PE faz e por que existe
- Codigo defensivo: trate caso de PE chamado em contexto inesperado
- Performance: PEs sao chamados em loops de tela e batch — evite SQL pesado
- Versionamento: PE customizado deve estar em pasta separada do padrao TOTVS