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

Variacoes

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.

Veja também