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
- Chave composta COD+LOJA — DBSeek precisa concatenar os dois.
- A1_INSCR "ISENTO" pra PF/ISENTO; senao colocar IE valida com digito.
- A1_MUN/A1_COD_MUN — alguns clientes exigem codigo IBGE em
A1_COD_MUN. - CNPJ matriz/filial — varias unidades do mesmo cliente sao "lojas" no mesmo A1_COD.
- Suframa, ICMS-ST — em clientes ZFM tem mais campos obrigatorios. Confira pelo dicionario.
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