Ponto de Entrada M103BROW: Personalizando a Visualização do Browse

Tempo de leitura: 3 minutos

O ponto de entrada M103BROW é um recurso poderoso do ADVPL que permite customizar a visualização dos dados na tela de Browse da rotina de Documento de Entrada (MATA103). É ideal para quem precisa exibir informações adicionais ou realizar pré-validações antes que os registros sejam mostrados ao usuário.


🚀 Quer evoluir no ADVPL de verdade?

Receba conteúdos práticos, códigos prontos e dicas que você 

 não aprende na documentação oficial

✔ Funções essenciais do ADVPL
✔ Exemplos reais usados no Protheus
✔ Dicas de debug e performance

🔐 Seu email está seguro. Sem spam.

🎯 Finalidade

 

O M103BROW é executado antes da exibição dos dados na tela de Browse da rotina MATA103 (Documento de Entrada / Nota Fiscal de Entrada).

Seu principal uso é manipular o array de colunas (aCols) que será exibido, permitindo:

  • Adicionar novas colunas (campos customizados ou informações calculadas).

  • Alterar o conteúdo de colunas existentes antes da visualização.

  • Realizar pré-validações ou ajustes nos dados que serão mostrados.


 

💻 Sintaxe do Ponto de Entrada

 

O Ponto de Entrada M103BROW é uma User Function que recebe como parâmetro o array de colunas (aCols) e deve retornar esse array, modificado ou não.

Código ADVPL:

#Include 'Protheus.ch'

/*/{Protheus.doc}
User Function U_M103BROW

@description Ponto de Entrada para manipulação do aCols no Browse do MATA103 (Documento de Entrada).

@type User Function
@param aCols Array de Colunas do Browse (passado por referência).
@return aCols Array de Colunas Modificado.
/*/

User Function M103BROW()
Local aCols := ParamIxb[1] // Array de colunas que será exibido no Browse

// Variáveis locais para manipulação (opcional)
Local nI    := 0
Local cMsg  := ""

// Se aCols não for um array válido ou não tiver sido passado, retorna sem erro
If !IsArray(aCols)
    Return Nil
EndIf

// Lógica de Customização...

Return aCols // Retorna o array de colunas modificado

 

Parâmetros:

 

Retorno:

 

 

 

📝 Exemplo Prático

O exemplo abaixo mostra como adicionar uma coluna customizada (F1_XCAMPO) ao array de colunas do Browse, preenchendo-a com dados da tabela SF1 ou de uma função customizada.

#Include 'Protheus.ch'
#Include 'Topconn.ch' // Para usar funções de manipulação de alias

/*{Protheus.doc} User Function M103BROW
    Exemplo de Ponto de Entrada M103BROW para adicionar uma coluna customizada em um Browse do Protheus.
    @type  Function
    @author Adilio Costa
    @since 31/10/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!!|

*/
User Function M103BROW()
	Local aCols    := PARAMIXB[1] // Array de colunas passado pelo PE
	Local nI       := 0           // Contador
	Local cAliasF1 := GetArea()   // Salva a área atual
	Local cFilial  := FWxFilial("SF1") // Filial da tabela SF1
	Local cCampo   := "F1_XCAMPO"  // Nome do campo customizado (SX3)
	Local nPosCol  := Len(aCols) + 1 // Posição da nova coluna (última)

	If !IsArray(aCols)
		Return Nil
	EndIf

// 1. Adiciona a nova coluna ao array de colunas.
// Formato: {Campo/Conteúdo, Título, Tamanho, Tipo, Decimal, Ordem, Alinhamento, Array de Validação, Ordem SQL}
	AAdd(aCols, { cCampo , "Campo Customizado", 15, "C", 0, nPosCol, 0, Nil, 0 })

// 2. Percorre os registros no array e preenche o valor da nova coluna
	DbSelectArea("SF1")
	DbSetOrder(1) // Índice 1: Filial + Documento + Série

	For nI := 1 To Len(aCols)

		// Posiciona na SF1 para o registro atual do Browse
		If MsSeek( cFilial + aCols[nI][1] + aCols[nI][2] ) // [1] = F1_DOC, [2] = F1_SERIE

			// Posição da coluna de campo customizado (aCols[nI][nPosCol])
			aCols[nI][nPosCol] := SF1->(cCampo) // Pega o valor do campo F1_XCAMPO

		Else
			aCols[nI][nPosCol] := "" // Se não encontrar, preenche vazio
		EndIf

	Next nI

// Restaura a área de trabalho
	RestArea(cAliasF1)

Return aCols // Retorna o array modificado

🚀 Quer evoluir no ADVPL de verdade?

Receba conteúdos práticos, códigos prontos e dicas que você 

 não aprende na documentação oficial

✔ Funções essenciais do ADVPL
✔ Exemplos reais usados no Protheus
✔ Dicas de debug e performance

🔐 Seu email está seguro. Sem spam.

 


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.

🚀 Quer dominar o Protheus de verdade?
Entre para o ProtheusAdvpl e receba conteúdos exclusivos sobre desenvolvimento, infraestrutura, módulos e carreira no Protheus

✔ Conteúdos organizados por categorias (Programação, Framework, Backoffice e RH)
✔ Dicas práticas usadas no dia a dia do Protheus
✔ Acesso a materiais, post e atualizações do Blog
🔐 Seu email está seguro. Sem spam. Só conteúdo profissional.