🧾 Como criar um filtro no ponto de entrada M410FSQL


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


Atualizado em 26/03/2026
Este artigo foi útil?  
Agradecemos sua avaliação.