ExecAuto MATA010 — incluir produto via API
Como criar User Function que inclui produto na SB1 via MsExecAuto MATA010. Inclui validacao, captura de erro e tratamento de duplicidade.
Inclusao de produto via API e um dos casos de uso mais comuns em integracao. Marketplace, ERP externo, planilha de cadastro — todos chamam o mesmo padrao: MsExecAuto({|x,y| Mata010(x,y)}, aCab, 3).
Codigo completo
#include "totvs.ch"
#include "protheus.ch"
User Function IncProd()
Local aCab := {}
Local cCodigo := "P000001"
Private lMsErroAuto := .F.
// Verifica duplicidade
SB1->(DBSetOrder(1))
If SB1->(DBSeek(xFilial("SB1") + cCodigo))
ConOut("Produto ja existe: " + cCodigo)
Return
EndIf
// Monta cabecalho
aAdd(aCab, {"B1_FILIAL", xFilial("SB1"), NIL})
aAdd(aCab, {"B1_COD", cCodigo, NIL})
aAdd(aCab, {"B1_DESC", "PRODUTO TESTE", NIL})
aAdd(aCab, {"B1_TIPO", "PA", NIL})
aAdd(aCab, {"B1_UM", "UN", NIL})
aAdd(aCab, {"B1_LOCPAD", "01", NIL})
aAdd(aCab, {"B1_GRUPO", "0001", NIL})
aAdd(aCab, {"B1_PICM", 18, NIL})
aAdd(aCab, {"B1_POSIPI", "00000000", NIL})
aAdd(aCab, {"B1_ORIGEM", "0", NIL})
// Chama Mata010 em modo automatico (3 = incluir)
MsExecAuto({|x,y| Mata010(x,y)}, aCab, 3)
If lMsErroAuto
ConOut("Erro: " + MostraErro())
DisarmTransaction()
Else
ConOut("OK - Produto " + cCodigo + " incluido")
EndIf
Return
Pegadinhas comuns nesse fluxo
- lMsErroAuto deve ser Private — Local nao captura, Public e gambiarra.
- Triplas {campo, valor, NIL} — o NIL no fim e obrigatorio mesmo nao usando.
- B1_LOCPAD = "01" — armazem padrao. Sem ele, MATA010 reclama.
- B1_GRUPO tem que existir na SBM. Senao quebra silenciosamente.
- Em batch noturno use
RpcSetType(3)+RpcSetEnv()antes (ver doc RpcSetType).
Variacoes
- Alterar produto: trocar 3 (incluir) por 4 (alterar). Precisa
DBSeekantes pra posicionar. - Excluir: opcao 5 (cuidado — geralmente fluxo de inativacao via B1_MSBLQL = "1" e melhor).
- Em massa: loop sobre arquivo CSV, controlando transacao com
Begin Transaction/End Transaction.
Boilerplate pronto
A skill claude-advpl-skill gera esse template com /advpl-boilerplate execauto-mata010 IncProd — User Function completa com validacao, captura de erro, .errlog, em pt-BR.