ExecAuto MATA030 — incluir cliente via API

Padrao completo de inclusao de cliente PJ na SA1 via MATA030: validacao CNPJ, captura de erro, tratamento de duplicidade.

Inclusao de cliente PJ via MATA030 — caso classico de onboarding por integracao. Mesmo padrao do MATA010 mas com campos de PF/PJ, endereco completo, classificacoes fiscais.

Codigo completo

User Function IncCli()
    Local aCab        := {}
    Local cCodCli     := "T00001"
    Local cLoja       := "01"
    Private lMsErroAuto := .F.

    // Duplicidade?
    SA1->(DBSetOrder(1))
    If SA1->(DBSeek(xFilial("SA1") + cCodCli + cLoja))
        ConOut("Cliente ja existe")
        Return
    EndIf

    aAdd(aCab, {"A1_FILIAL",  xFilial("SA1"),           NIL})
    aAdd(aCab, {"A1_COD",     cCodCli,                  NIL})
    aAdd(aCab, {"A1_LOJA",    cLoja,                    NIL})
    aAdd(aCab, {"A1_PESSOA",  "J",                      NIL})  // J=PJ, F=PF
    aAdd(aCab, {"A1_TIPO",    "F",                      NIL})  // F=Consumidor Final
    aAdd(aCab, {"A1_NOME",    "EMPRESA TESTE LTDA",     NIL})
    aAdd(aCab, {"A1_NREDUZ",  "EMP TESTE",              NIL})
    aAdd(aCab, {"A1_CGC",     "00000000000191",         NIL})
    aAdd(aCab, {"A1_INSCR",   "ISENTO",                 NIL})
    aAdd(aCab, {"A1_END",     "RUA EXEMPLO, 100",       NIL})
    aAdd(aCab, {"A1_BAIRRO",  "CENTRO",                 NIL})
    aAdd(aCab, {"A1_MUN",     "SAO PAULO",              NIL})
    aAdd(aCab, {"A1_EST",     "SP",                     NIL})
    aAdd(aCab, {"A1_CEP",     "01001000",               NIL})
    aAdd(aCab, {"A1_TEL",     "1133334444",             NIL})
    aAdd(aCab, {"A1_EMAIL",   "contato@empresa.com.br", NIL})

    MsExecAuto({|x,y| Mata030(x,y)}, aCab, 3)

    If lMsErroAuto
        ConOut("Erro: " + MostraErro())
        DisarmTransaction()
    Else
        ConOut("Cliente incluido: " + cCodCli + "/" + cLoja)
    EndIf
Return

Pegadinhas especificas de SA1

Migracao em lote

Pra importar planilha com 1000 clientes, loop sobre o array iterando linha a linha:

Begin Transaction
    For i := 1 To Len(aClientes)
        // monta aCab a partir de aClientes[i]
        MsExecAuto({|x,y| Mata030(x,y)}, aCab, 3)
        If lMsErroAuto
            DisarmTransaction()
            Exit
        EndIf
        lMsErroAuto := .F.
    Next
End Transaction

Veja também