Data de publicação: 26/03/2026
🎯 Objetivo
Demonstrar como criar um filtro no ponto de entrada M410FSQL da rotina Pedidos de Venda (MATA410) no Protheus, destacando o comportamento do ponto de entrada nas versões P11 e P12 e apresentando um exemplo prático de implementação em ADVPL.
📘 Visão Geral
O ponto de entrada M410FSQL é utilizado para filtrar os pedidos de venda exibidos na rotina MATA410.
Esse recurso é bastante útil quando existe a necessidade de restringir a visualização dos pedidos no browse conforme critérios específicos do negócio, como:
cliente;
número do pedido;
tipo do pedido;
filial;
condições específicas de operação.
A principal atenção nesse ponto de entrada está no fato de que seu comportamento muda conforme a versão do Protheus utilizada.
⚙️ Comportamento do M410FSQL por versão
🔹 Protheus P11
Na versão P11, o ponto de entrada M410FSQL deve retornar uma expressão SQL.
Nesse cenário, o filtro informado será utilizado para limitar os pedidos de venda exibidos na mBrowse da rotina.
🔹 Protheus P12
Na versão P12, o ponto de entrada M410FSQL deve retornar uma expressão ADVPL.
Nesse caso, o filtro passa a ser aplicado sobre a FWMBrowse, que utiliza uma classe diferente da versão anterior.
🧠 Retorno esperado
O ponto de entrada deve retornar:
cFilSQL do tipo caractere
contendo a expressão de filtro que será aplicada na listagem dos pedidos
Embora o nome da variável normalmente continue sendo cFilSQL, na prática o conteúdo retornado dependerá da versão do sistema:
P11: expressão em SQL
P12: expressão em ADVPL
💻 Exemplo prático
#Include "PROTHEUS.CH"
#Include "rwmake.ch"
User Function M410FSQL()
Local _vpFiltro := ""
Alert("M410FSQL")
//_vpFiltro := "C5_CLIENTE = 'CL0003'"
//_vpFiltro := "C5_NUM > '000015' .and. C5_TIPO == 'N'"
_vpFiltro := "C5_CLIENT $ 'CL0007|CL0003|'"
Return(_vpFiltro)
🔍 Entendendo o exemplo
No exemplo apresentado, o ponto de entrada retorna um filtro que restringe a visualização dos pedidos para clientes específicos.
Interpretação das linhas comentadas
Exemplo 1
_vpFiltro := "C5_CLIENTE = 'CL0003'"
Esse filtro limita a exibição somente aos pedidos do cliente CL0003.
Exemplo 2
_vpFiltro := "C5_NUM > '000015' .and. C5_TIPO == 'N'"
Esse filtro exibe apenas pedidos com número maior que 000015 e cujo tipo seja N.
Exemplo 3
_vpFiltro := "C5_CLIENT $ 'CL0007|CL0003|'"
Esse filtro permite exibir pedidos dos clientes CL0007 e CL0003.
🛠️ Boas práticas de uso
Ao implementar o M410FSQL, é recomendável observar os seguintes pontos:
validar se a expressão retornada está compatível com a versão do Protheus em uso;
evitar filtros excessivamente complexos que possam impactar a navegação no browse;
garantir que os campos utilizados no filtro existam no contexto da rotina;
testar o comportamento do filtro em inclusão, alteração, consulta e navegação;
documentar claramente a finalidade da regra implementada.
⚠️ Atenções importantes
Diferença entre P11 e P12
Esse é o ponto mais importante da implementação.
Se o ambiente estiver em P11, o retorno precisa seguir a lógica de SQL.
Se o ambiente estiver em P12, o retorno deve seguir a sintaxe de ADVPL.
Nome do ponto de entrada
Mesmo com a mudança do comportamento interno entre versões, o ponto de entrada continua sendo o M410FSQL.
Impacto funcional
Um filtro mal construído pode esconder registros que deveriam estar disponíveis ao usuário, causando falhas operacionais ou interpretações incorretas da carteira de pedidos.
✅ Conclusão
O ponto de entrada M410FSQL é uma alternativa prática e eficiente para restringir a visualização dos pedidos de venda na rotina MATA410, permitindo adaptar a navegação do usuário às regras de negócio da empresa.
Entretanto, para uma implementação correta, é fundamental respeitar a diferença entre as versões do Protheus:
na P11, o retorno deve ser em SQL;
na P12, o retorno deve ser em ADVPL.
Essa atenção evita inconsistências e garante que o filtro funcione corretamente no browse da rotina.
❓ FAQ
1. Para que serve o ponto de entrada M410FSQL?
Ele serve para aplicar um filtro na listagem de pedidos de venda exibida na rotina MATA410.
2. O M410FSQL é igual em todas as versões do Protheus?
Não. O comportamento muda entre P11 e P12.
3. Qual a diferença entre P11 e P12 no M410FSQL?
Na P11, o retorno deve ser uma expressão SQL.
Na P12, o retorno deve ser uma expressão ADVPL.
4. O que o ponto de entrada precisa retornar?
Uma variável caractere contendo a expressão de filtro que será usada na listagem dos pedidos.
5. Posso filtrar pedidos por cliente?
Sim. Esse é um dos usos mais comuns do M410FSQL.
6. Posso usar mais de uma condição no filtro?
Sim. É possível combinar condições, desde que a expressão esteja correta para a versão utilizada.
7. Qual o principal cuidado ao implementar esse ponto?
Garantir que a sintaxe do filtro esteja adequada à versão do ambiente e que a regra não oculte registros importantes indevidamente.
👤 Autor
Fabrizio Augusto Ventavolo
Consultor Especialista TOTVS — Mastersiga Consultoria