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?
- Integração de Sistemas: Importe pedidos de compras de sistemas externos (WMS, MRP, sistemas legados) diretamente para o Protheus.
- Performance: Crie múltiplos Pedidos de Compras em massa de forma muito mais rápida que a entrada manual.
- Padronização: Garanta que todos os Pedidos de Compras criados sigam um padrão rígido de preenchimento, minimizando erros.
- 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á.
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