Como desativar a edição de campos na Solicitação de Compras (MATA110) via ponto de entrada

Em muitos projetos com o Protheus, surge a necessidade de controlar quem pode alterar certos campos em uma tela — principalmente em rotinas sensíveis como a Solicitação de Compras (MATA110).

No artigo de hoje, vamos mostrar como desativar a alteração de campos da grid da Solicitação de Compras utilizando ponto de entrada, sem precisar mexer no Modo de Edição via Configurador e aplicando a regra apenas para usuários específicos.

O desafio

Um dos nossos alunos perguntou recentemente se seria possível bloquear determinados campos da grid de Solicitação de Compras (MATA110) apenas para alguns usuários, sem alterar o comportamento padrão do configurador.

Essa dúvida é bastante comum — principalmente quando há diferentes níveis de acesso dentro do mesmo processo de compras.

A lógica utilizada

Para resolver o problema, aplicamos a seguinte lógica dentro do ponto de entrada MA110TEL:

  1. Validamos, via ParamIxb, se o evento atual é uma alteração;
  2. Conferimos se o usuário logado está dentro de um parâmetro que lista quem pode editar;
  3. Percorremos a variável aHeader, que contém as definições das colunas da grid;
  4. Quando encontramos um dos campos que queremos bloquear, forçamos a posição do array que controla a validação do campo para .F., impedindo a edição.

Assim, os campos ficam visíveis para todos, mas apenas alguns usuários poderão realmente alterá-los.

Código-fonte completo

Abaixo está o código utilizado para implementar essa lógica:

//Bibliotecas
#Include "TOTVS.ch"
 
/*/{Protheus.doc} MT110TEL
Ponto de entrada que manipula a tela de solicitação de compras
@type user function
@author Atilio
@since 17/06/2025
@see https://tdn.totvs.com/pages/releaseview.action?pageId=6085447
/*/
 
User Function MT110TEL()
    Local aArea     := FWGetArea()
    Local nOpc      := PARAMIXB[3]
    Local cUsrLogad := RetCodUsr()
    Local cUsrPodem := SuperGetMV("MV_X_USALT", .F., "000005;000006;000011;")
    Local nAtual    := 0
    Local cCampo    := ""
 
    //Se for alteração
    If nOpc == 4
         
        //Se o usuário logado NÃO estiver na lista dos que podem alterar
        If ! cUsrLogad $ cUsrPodem
 
            //Percorre todos os campos da grid
            For nAtual := 1 To Len(aHeader)
                cCampo := Alltrim(aHeader[nAtual][02])
 
                //Se for o campo de Quantidade, Preço ou Observação
                If cCampo + ";" $ "C1_QUANT;C1_PRECO;C1_OBS;"
 
                    //Altera a posição para ".F." para que force a validação para não permitir digitação
                    aHeader[nAtual][06] := ".F."
                EndIf
            Next
        EndIf
 
    EndIf
 
    FWRestArea(aArea)
Return

Resultado prático

Com essa implementação, usuários não autorizados ficam impossibilitados de alterar campos sensíveis como Quantidade, Preço e Observação — enquanto os demais seguem com acesso normal.

Essa abordagem é simples, segura e reversível, ideal para empresas que precisam reforçar o controle de edição em telas específicas sem alterar o padrão do sistema.

Conclusão

Esse tipo de solução é um ótimo exemplo de como o Protheus permite flexibilidade através de pontos de entrada, sem precisar mexer em estruturas complexas.

Com poucos comandos, você consegue criar regras de negócio personalizadas e deixar o sistema mais alinhado às políticas internas da sua empresa.

Quer aprender mais sobre customizações no Protheus?

Acompanhe o blog da Geeker Company para mais artigos práticos como este — com exemplos reais, explicações passo a passo e códigos prontos para aplicar no seu ambiente.

Index

Categorias

Sobre o Autor

Foto do Autor
Fábio Hayama

Apaixonado por gestão, tecnologia e inovação, Fábio Hayama possui mais de 15 anos de experiência no universo do ERP Protheus, estratégia empresarial e automação de processos.

Leia mais sobre o Fábio

Entre em contato conosco

Veja mais artigos relacionados

{{brizy_dc_image_alt entityId=
Adicionar validação na exclusão do documento de saída no Protheus
Se tem uma coisa que pode virar dor de cabeça rápida dentro do Protheus, é exclusão indevida de documento de saída. E não estamos falando só de erro operacional… estamos falando de impacto fiscal, retrabalho e, em alguns casos, até problema com auditoria. Recentemente, em um cliente, surgiu exatamente esse cenário:como impedir que qualquer usuário […]
{{brizy_dc_image_alt entityId=
Big Techs em Guerra: como Apple, Google, TOTVS, Amazon e Microsoft estão redesenhando o mercado de tecnologia
Se você olhar as principais movimentações recentes do mercado de tecnologia, pode até parecer que são notícias isoladas. Uma empresa mudando produção, outra lançando estratégia de produto, outra investindo em logística. Mas quando você conecta os pontos, fica muito claro que existe um padrão por trás disso tudo. Gigantes como Apple, Google, Amazon, Microsoft e […]
{{brizy_dc_image_alt entityId=
Atualizar automaticamente datas na NFe SEFAZ no Protheus (sem retrabalho)
Se você usa o Protheus no dia a dia, já sabe como funciona. Você abre a tela da NFe SEFAZ…E lá vai você ajustar data manualmente de novo. Pode parecer detalhe, mas isso acontece todos os dias.E quando soma no tempo da operação, vira retrabalho puro. Foi exatamente esse cenário que vimos em um cliente. […]
{{brizy_dc_image_alt entityId=
Protheus lento? Os erros de infraestrutura e banco que ninguém te conta
Seu Protheus está lento… mas talvez o problema não seja o sistema Se você usa Protheus no dia a dia, provavelmente já passou por isso: a tela demora para carregar, um simples faturamento vira um teste de paciência, relatórios levam minutos (ou mais) para sair… e no final, a conclusão mais comum é sempre a […]