Automação no TOTVS Protheus: Como usar MSExecAuto MATA120 para Criar Pedido de Compras (ADVPL)

Tempo de leitura: 6 minutos

O Poder da Automação com MSExecAuto MATA120

No universo do TOTVS Protheus, a rotina de Pedido de Compras (MATA120) é uma das mais vitais para o processo de suprimentos. Contudo, em cenários de alta integração (como sistemas de e-commerce, sistemas de planejamento de demanda ou integração com outras filiais), a entrada manual de dados se torna inviável. É aí que entra a função MSExecAuto (ou simplesmente ExecAuto).

A função MSExecAuto é uma ferramenta poderosa da linguagem ADVPL que permite a automação de rotinas padrão do Protheus. Ela simula a ação de um usuário, executando inclusões, alterações e exclusões de registros de forma programática e eficiente, sem a necessidade de interação com a interface visual.

Quando combinamos MSExecAuto com o código da rotina MATA120, estamos habilitando a criação e manipulação automática de Pedidos de Compras no sistema Protheus. Isso é fundamental para a integração Protheus e para garantir a fluidez dos processos de Backoffice.

 

Por Que Automatizar o MATA120?

  1. Integração de Sistemas: Importe pedidos de compras de sistemas externos (WMS, MRP, sistemas legados) diretamente para o Protheus.
  2. Performance: Crie múltiplos Pedidos de Compras em massa de forma muito mais rápida que a entrada manual.
  3. Padronização: Garanta que todos os Pedidos de Compras criados sigam um padrão rígido de preenchimento, minimizando erros.
  4. Processos Sem Intervenção: Permite que rotinas de Job Schedule (agendamento) ou gatilhos de banco de dados disparem a criação de documentos.

 

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


 

Receba as últimas atualizações do ProtheusAdvpl
Deixe seu melhor email
Nós respeitamos sua privacidade.

Conclusão e Próximos Passos

Dominar o MSExecAuto MATA120 é um passo crucial para qualquer desenvolvedor ADVPL que busca excelência em automação no Protheus. Essa função não apenas economiza tempo, mas também torna o seu sistema mais robusto e preparado para cenários de integração complexos. Lembre-se que o princípio aqui demonstrado pode ser aplicado a diversas outras rotinas do Protheus, como a MATA010 (Produtos) ou MATA103 (Documento de Entrada).


Link(s) de referência(s): https://tdn.totvs.com/pages/releaseview.action?pageId=877147757

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 de verdade a Programação ADVPL e os Processos do Protheus?

Não fique apenas na superfície da linguagem! O Portal ProtheusAdvpl é a plataforma completa para você se tornar um especialista. Aprenda ADVPL/TLPP e domine os processos cruciais dos módulos de Compras, Estoque e Custos, Faturamento, Financeiro, Gestão de Pessoal e muito mais, com cursos estruturados do básico ao avançado.

Clique e Comece Sua Jornada de Especialização Hoje: https://go.hotmart.com/O10336806O?dp=1

Receba as últimas atualizações do ProtheusAdvpl
Deixe seu melhor email
Nós respeitamos sua privacidade.