MSExecAuto MATA120 — Como Criar Pedido de Compras via ADVPL

Tempo de leitura: 6 minutos

No ecossistema Protheus, a rotina de Pedido de Compras (MATA120) é o coração do processo de suprimentos. No entanto, em cenários de alta integração — como e-commerces, sistemas de WMS ou planejamento de demanda — a digitação manual é inviável. A função MSExecAuto em ADVPL é a solução definitiva para automatizar essa rotina, permitindo a criação de registros de forma programática e sem interface visual. Este é um conceito fundamental para quem domina Rotinas Automáticas.

 

Neste guia técnico, você aprenderá como estruturar os arrays de cabeçalho e itens para utilizar o MSExecAuto MATA120, garantindo agilidade e padronização no seu Backoffice.

 

O que é o MSExecAuto e por que automatizar o MATA120?

O MSExecAuto (ou simplesmente ExecAuto) é uma ferramenta da linguagem ADVPL que simula a ação de um usuário em uma rotina padrão. Ela executa todas as validações de negócio da rotina, garantindo a integridade dos dados na tabela SC7 (Pedidos de Compra).

 

Automatizar o MATA120 traz benefícios imediatos:

  • Integração: Importe pedidos de sistemas externos diretamente para o Protheus.
  • Performance: Processe centenas de pedidos em segundos através de Jobs agendados.
  • Conformidade: Garanta que todos os pedidos sigam as mesmas regras de preenchimento, eliminando o erro humano.
 

Detalhes Técnicos

  • Rotina Base: MATA120 (Pedido de Compras)
  • Módulo: Compras (SIGACOM)
  • Tabela Principal: SC7 (Pedidos de Compra)
  • Opção de Execução: 3 (Inclusão), 4 (Alteração), 5 (Exclusão)

 

Exemplo Prático em ADVPL: Usando MSExecAuto MATA120

Abaixo, apresentamos um fonte de exemplo em ADVPL que utiliza o MSExecAuto para incluir um novo Pedido de Compras no módulo Compras do Protheus.

 
#include "protheus.ch"
#include "parmtype.ch"

/*/{Protheus.doc
@FN fExecAPC
@DI Criar Pedido de Compras (MATA120) via MSExecAuto (ADVPL)
@AUTHOR Blog ProtheusAdvpl
@VERSION 1.00
@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!!|
@TYPE Function
@OBS O Protheus deve estar com o Ambiente de Compras configurado e com cadastros válidos.
@FOLDER AUTOMACAO_COMPRAS
*/
User Function fExecAPC()
	Local aArea := GetArea()
	Local lRet := .F.
	Local aC7Cab := {} // Array para o Cabeçalho (Tabela SC7)
	Local aC7Itens := {} // Array para os Itens (Tabela SC7)
	Local aC7Dados := {} // Array Geral para o ExecAuto

// Necessário definir a Filial correta para o ExecAuto
// Se o ExecAuto estiver sendo chamado de um ponto de entrada/gatilho, essa definição pode ser omitida.
	//MsAppEnvSet("MV_FILIAL", "D M C 01") // Ajuste "D M C 01" para sua Filial!

//---------------------------------------------------------
// 1. MONTAGEM DO ARRAY DE CABEÇALHO (Tabela SC7)
//---------------------------------------------------------
	aAdd(aC7Cab, {'C7_FILIAL', 'D M C 01', Nil}) // Filial (Ajuste conforme a linha acima)
	aAdd(aC7Cab, {'C7_FORNECE', 'FORN', Nil}) // Código do Fornecedor (Ex: "F O R N")
	aAdd(aC7Cab, {'C7_LOJA', '01', Nil}) // Loja do Fornecedor
	aAdd(aC7Cab, {'C7_EMISSAO', DToC(Date()), Nil}) // Data de Emissão (Hoje)
	aAdd(aC7Cab, {'C7_CONDPAG', '001', Nil}) // Condição de Pagamento (Ex: "0 0 1")
	aAdd(aC7Cab, {'C7_MOEDA', '01', Nil}) // Moeda (Ex: "0 1" - Real)
	aAdd(aC7Cab, {'C7_TPDESC', '1', Nil}) // Tipo de Desconto (1- Percentual / 2- Valor)
	aAdd(aC7Cab, {'C7_BLQ', '1', Nil}) // Bloqueado (1- Liberado / 2- Bloqueado)
	aAdd(aC7Cab, {'C7_DESC', 0, Nil}) // Percentual de Desconto
	aAdd(aC7Cab, {'C7_FRETE', 0, Nil}) // Valor do Frete
	aAdd(aC7Cab, {'C7_OBS', 'PEDIDO CRIADO VIA EXEC AUTO', Nil}) // Observação do Pedido

//---------------------------------------------------------
// 2. MONTAGEM DO ARRAY DE ITENS (Tabela SC7)
//---------------------------------------------------------

// --- Item 1 ---
	Local aItem1 := {}
	aAdd(aItem1, {'C7_PRODUTO', 'PRODUTO 01', Nil}) // Código do Produto (Ex: "P R O D U T O 0 1")
	aAdd(aItem1, {'C7_QUANT', 10, Nil}) // Quantidade (10)
	aAdd(aItem1, {'C7_PRECO', 5.50, Nil}) // Preço Unitário (R$ 5,50)
	aAdd(aItem1, {'C7_TOTAL', 55.00, Nil}) // Valor Total (10 * 5,50)
	aAdd(aItem1, {'C7_UM', 'UN', Nil}) // Unidade de Medida
	aAdd(aItem1, {'C7_DATPRF', DToC(Date()+15), Nil}) // Data de Previsão de Entrega (15 dias)

	aAdd(aC7Itens, aItem1) // Adiciona o Item 1 ao Array Geral de Itens

// --- Item 2 ---
	Local aItem2 := {}
	aAdd(aItem2, {'C7_PRODUTO', 'P R O D U T O 0 2', Nil}) // Código do Produto (Ex: "P R O D U T O 0 2")
	aAdd(aItem2, {'C7_QUANT', 5, Nil}) // Quantidade (5)
	aAdd(aItem2, {'C7_PRECO', 12.00, Nil}) // Preço Unitário (R$ 12,00)
	aAdd(aItem2, {'C7_TOTAL', 60.00, Nil}) // Valor Total (5 * 12,00)
	aAdd(aItem2, {'C7_UM', 'UN', Nil}) // Unidade de Medida
	aAdd(aItem2, {'C7_DATPRF', DToC(Date()+15), Nil}) // Data de Previsão de Entrega (15 dias)

	aAdd(aC7Itens, aItem2) // Adiciona o Item 2 ao Array Geral de Itens

//---------------------------------------------------------
// 3. MONTAGEM DO ARRAY FINAL DO EXEC AUTO
//---------------------------------------------------------
	aAdd(aC7Dados, aC7Cab) // Posição 1: Cabeçalho
	aAdd(aC7Dados, aC7Itens) // Posição 2: Itens

//---------------------------------------------------------
// 4. CHAMADA DO MSEXECAUTO MATA120
//---------------------------------------------------------

// Parametros:
// 1 - Rotina: MATA120 (Pedido de Compras)
// 2 - Opção: 3 (Incluir)
// 3 - Array de Dados: aC7Dados
// 4 - Array Opcional: {} (Vazio, mas pode ser usado para Rateio, etc.)
// 5 - Bloqueio de Tela: 1 (Silencioso - Não mostra interface)

	lRet := MSExecAuto("MATA120", 3, aC7Dados, {}, 1)

	If lRet
		ConOut("## Pedido de Compras Criado com Sucesso! ##")
	Else
		ConOut("## Erro na Criação do Pedido de Compras! ##")
	EndIf

	RestArea(aArea)
Return lRet

 

Nota Importante sobre ADVPL e Protheus: Garanta que os códigos de Fornecedor, Produto, Condição de Pagamento e Filial (‘FORN’, ‘PRODUTO 01’, ‘001’, ‘D M C 0 1’) utilizados no exemplo existam no seu ambiente de teste Protheus, ou a rotina falhará.


 

🚀 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.

Domine as Rotinas Automáticas e o Backoffice

Para dominar este conceito em cenários de alta complexidade, como o tratamento de erros em lote, integração via Web Services REST e customizações avançadas no SIGACOM, 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

  1. Validação de Erros: Sempre utilize a função MostraErro() ou verifique a variável global lMsErroAuto para capturar o motivo exato de uma falha na inclusão.
  2. Ambiente: Garanta que o ambiente de compras esteja devidamente aberto (RpcSetEnv) se o ExecAuto for chamado a partir de um processo externo (como um Job).
  3. Performance: Para grandes volumes, considere desabilitar temporariamente índices não essenciais ou processar em Threads separadas.
 

 

Conclusão

O MSExecAuto MATA120 é uma ferramenta indispensável para qualquer desenvolvedor que busca excelência em automação no Protheus. Ao dominar essa função, você transforma processos lentos e manuais em fluxos ágeis e seguros. Dominar ADVPL Avançado é o que separa um programador comum de um consultor de alto valor.

 

Links de referência(s):

 

 

Conteúdos relacionados

 
🚀 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.
🚀 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.