Tempo de leitura: 5 minutos
Você solicitou um Ponto de Entrada para a rotina MATA410 (Pedido de Venda), focando na inclusão. Embora o ponto A410EXC trate da exclusão, o mais relevante para validação durante a inclusão é o MT410INC.
O MT410INC é o exit point ideal para implementar regras de negócio complexas que precisam ser verificadas antes que o Pedido de Venda seja efetivamente gravado nas tabelas SC5 e SC6.
🎯 O que é o Ponto de Entrada MT410INC?
O Ponto de Entrada MT410INC é uma validação pós-digitação de dados na rotina de Inclusão de Pedido de Venda (MATA410), no módulo SIGAFAT – Faturamento.
Ele é executado após o usuário preencher todos os campos, mas antes do registro ser gravado no banco de dados. Sua principal função é permitir que o desenvolvedor ADVPL bloqueie a gravação do pedido caso alguma regra de negócio customizada não seja atendida.
✨ Funcionalidade e Aplicações
O MT410INC deve retornar um valor lógico: .T. (Verdadeiro) para permitir a gravação do pedido, e .F. (Falso) para bloquear a inclusão.
| Aplicação Comum | Cenário de Uso |
| Bloqueio de Crédito | Verificar se o limite de crédito do cliente (SA1) será excedido pelo valor do novo pedido, independentemente da validação padrão. |
| Validação de Frete | Impedir a gravação se o tipo de frete for “CIF” e a transportadora (S4) estiver sem o campo de contato preenchido. |
| Integridade de Dados | Garantir que campos customizados (campos Z) obrigatórios nas tabelas SC5 ou SC6 estejam preenchidos corretamente. |
| Restrição de Combinações | Bloquear a inclusão de um produto (SB1) específico para uma condição de pagamento (SE4) ou cliente (SA1) específica. |
💻 Exemplo em ADVPL do Ponto de Entrada MT410INC
O Ponto de Entrada MT410INC não recebe parâmetros, mas quando é executado, o ambiente de trabalho está posicionado nas áreas temporárias das tabelas SC5 (cabeçalho) e SC6 (itens) do pedido que está sendo incluído.
Abaixo, um exemplo ADVPL que impede a inclusão do pedido se ele for superior a R$ 10.000,00 e a condição de pagamento utilizada for à vista (Exemplo: Código ‘001’).
#Include 'Protheus.ch'
/*/{Protheus.doc} MT410INC
Ponto de Entrada para validação antes da gravação do Pedido de Venda na rotina MATA410 (Inclusão).
Disparado antes da gravação física do SC5 e SC6.
@author ProtheusAdvpl
@since 03/11/2025
@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 do ProtheusAdvpl:
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!!|
@type User Function
@return logical Retorna .T. para permitir a gravação e .F. para bloquear a inclusão.
@example
If !U_MT410INC()
Return
EndIf
*/
User Function MT410INC()
Local lRet := .T. // Por padrão, permite a inclusão
Local nVlTotal := 0
Local cCondPag := ""
// A Work Area do SC5 (Cabeçalho) está disponível para leitura/validação
nVlTotal := SC5->C5_TOTAL
cCondPag := AllTrim(SC5->C5_CONDIC)
// --- Regra de Negócio: Bloquear pedidos à vista (Condição '001')
// --- com valor total superior a R$ 10.000,00.
If cCondPag == "001" .And. nVlTotal > 10000.00
lRet := .F.
// Alerta ao usuário
MsgStop("Não é permitida a inclusão de Pedidos à Vista (Cond. 001) com valor superior a R$ 10.000,00.", ;
"Validação MT410INC")
EndIf
// Você pode acessar a tabela SC6 (Itens) também, para validações linha a linha
// Exemplo:
/*
Local cAliasSC6 := GetNextAlias() // Gera um alias temporário para o SC6
(cAliasSC6)->(DbSelectArea(cAliasSC6))
(cAliasSC6)->(DbGoTop())
While (cAliasSC6)->(!Eof())
// Exemplo: Verificar a quantidade de um item específico (C6_PRODUTO)
If AllTrim((cAliasSC6)->C6_PRODUTO) == "PROD001" .And. (cAliasSC6)->C6_QTDPRC > 50
lRet := .F.
MsgStop("O item PROD001 não pode ter mais de 50 unidades neste pedido.", "Validação MT410INC")
Break
EndIf
(cAliasSC6)->(DbSkip())
Wend
(cAliasSC6)->(DbCloseArea())
*/
Return lRet // Retorna .T. para gravar, .F. para bloquear
Link(s) de referência(s):https://tdn.totvs.com/pages/releaseview.action?pageId=6784034
Bem, finalizamos mais um post aqui do Blog ProtheusAdvpl.
Se esse conteúdo lhe foi útil nos ajude compartilhando ele em suas redes sociais do TOTVS Protheus.
Grande abraço e fica com Deus.
🚀 Domine a Carreira Protheus com o Portal ProtheusAdvpl
Se o seu objetivo é se tornar um profissional TOTVS Protheus de alto nível, dominando tanto a programação ADVPL/TLPP quanto a lógica de negócios dos módulos, o Portal ProtheusAdvpl é a sua plataforma de formação completa.
Nossa grade de ensino é estruturada nas Carreiras ProtheusAdvpl (CPAs), cobrindo o conhecimento de ponta a ponta:
| Carreira | Foco Principal |
| CPA1 (Infraestrutura) | TOTVS AppServer, SmartClient HTML (WebApp/WebAgent), TOTVS DBAccess, SQL Server e License Server. |
| CPA2 (Programação) | Domínio TOTVS VSCode, ADVPL, ADVPL MVC, ADVPL Web Services e TLPP para desenvolvimento e customização. |
| CPA3 (Lógica de Negócios) | Aprofundamento nos módulos: Compras (SIGACOM), Estoque e Custos (SIGAEST), Faturamento (SIGAFAT), Financeiro (SIGAFIN), Gestão de Pessoal (SIGAGPE)/TAF/eSocial, Ponto Eletrônico (SIGAPON), Documentos Eletrônicos no Protheus (TSS, NFe, NFSe, MDFe) e mais. |
Com o Portal ProtheusAdvpl, você adquire uma visão sistêmica que é essencial para desenvolver soluções robustas e funcionais no Protheus.
🔗 Não fique para trás! Invista no seu futuro profissional: Portal ProtheusAdvpl – Cursos ADVPL e Módulos Protheus