Tempo de leitura: 4 minutos
Se você trabalha com customização Protheus e precisa manipular a forma como os pedidos de compra são exibidos na rotina de Documento de Entrada (MATA103), o Ponto de Entrada MA103F4H é a ferramenta ideal em ADVPL!
Este post detalha a funcionalidade e apresenta um exemplo ADVPL prático para você aplicar em seu ambiente TOTVS Protheus.
🎯 O que é o Ponto de Entrada MA103F4H?
O Ponto de Entrada MA103F4H é um exit point essencial no módulo SIGACOM – Compras do Protheus. Ele é disparado na rotina Documento de Entrada (MATA103), especificamente no momento da seleção e exibição dos pedidos de compra vinculados ao fornecedor, antes que a tela de itens dos pedidos seja apresentada.
✨ Funcionalidade e Aplicações
O MA103F4H permite que o desenvolvedor ADVPL filtre, altere ou manipule o array de pedidos de compra que será mostrado ao usuário.
💻 Exemplo em ADVPL do Ponto de Entrada MA103F4H
Abaixo, apresentamos um exemplo de Ponto de Entrada MA103F4H que demonstra como filtrar os pedidos de compra com base em uma condição específica antes de serem exibidos ao usuário na MATA103.
Este Ponto de Entrada recebe um array, por referência, contendo os pedidos de compra (SC7). A alteração desse array refletirá na tela de seleção.
#Include 'Protheus.ch'
#Include 'TopConn.ch'
/*/{Protheus.doc} MA103F4H
Ponto de Entrada para manipulação do array de Pedidos de Compra
na rotina Documento de Entrada (MATA103).
@author ProtheusAdvpl
@since 03/11/2025
@version 1
@type User Function
@example
U_MA103F4H()
*/
User Function MA103F4H()
Local aPedCom := ParamIXB[1] // Array de Pedidos de Compra (SC7) - Recebido por referência
Local aNewPed := {} // Novo array para armazenar os pedidos filtrados
Local aLinha := {} // Linha atual do array aPedCom
Local cStatus := "" // Status do Pedido (SC7->C7_ESTADO)
Local cNumPed := "" // Número do Pedido (SC7->C7_NUM)
// Verifica se o array foi recebido e se contém informações
If ValType(aPedCom) == 'A' .And. Len(aPedCom) > 0
// Itera sobre o array de pedidos de compra
For nI := 1 To Len(aPedCom)
aLinha := aPedCom[nI]
cNumPed := aLinha[1] // Supondo que o primeiro elemento seja o C7_NUM
// Exemplo de como obter um campo do SC7:
// CUIDADO: O array aPedCom não é um array de registros, é um array de arrays
// com informações específicas. O mais seguro é buscar o registro.
// Exemplo: Buscar o Status do Pedido de Compra (C7_ESTADO) no SC7
DbSelectArea("SC7")
DbSetOrder(1) // C7_NUM + C7_ITEM
If DbSeek(xFilial("SC7") + cNumPed)
// Lê o status (Exemplo: "L" para Liberado)
cStatus := SC7->C7_ESTADO
Else
cStatus := ""
EndIf
// --- Regra de Negócio: Filtra apenas Pedidos com Status 'L' (Liberado) ---
// Você pode implementar qualquer regra de negócio aqui (Ex: C7_USER = "UsuarioX", C7_MOEDA = "1", etc.)
If AllTrim(cStatus) == "L"
AAdd(aNewPed, aLinha)
EndIf
// --------------------------------------------------------------------------
Next nI
// Zera o array original e o popula com os pedidos filtrados
ASize(aPedCom, 0)
AAdd(aPedCom, AClone(aNewPed))
// Limpa a memória
aNewPed := Nil
EndIf
Return(Nil)
Domine os Pontos de Entrada e o Backoffice
Para dominar este conceito em cenários complexos, como a amarração de pedidos por contratos de parceria ou validações fiscais avançadas na MATA103, conheça o Portal ProtheusAdvpl. Lá, exploramos a fundo a arquitetura do Protheus e as melhores práticas para desenvolvedores seniores.
Cursos Recomendados para Programação e Backoffice:
Dicas de Especialista
- Performance: Como este PE itera sobre uma lista de pedidos, evite realizar queries complexas dentro do
. Utilize índices e1For/Nextpara manter a agilidade da tela.1DbSeek
- Referência: Lembre-se que o array é passado por referência. Qualquer alteração estrutural nele impactará diretamente a rotina padrão.
- Complementaridade: Utilize o MA103F4H em conjunto com o MT103PN para garantir que, além de filtrar a exibição, a gravação final também respeite suas regras de negócio.
Conclusão
O Ponto de Entrada MA103F4H é uma ferramenta poderosa para elevar o nível de controle no módulo de Compras (SIGACOM). Ao personalizar a exibição de pedidos, você reduz o tempo de lançamento e minimiza erros operacionais no Backoffice. Dominar ADVPL Avançado é o diferencial que transforma um programador em um consultor estratégico.
Links de referência(s):