SA1 — Clientes

A tabela central de clientes do Protheus. Cadastra PF e PJ, dados de cobranca, limite de credito, endereco, contato. Chave A1_FILIAL+A1_COD+A1_LOJA.

SA1 e a tabela mais importante do lado de Vendas/Faturamento. Cada cliente PF ou PJ tem 1 ou mais registros aqui (chave A1_COD + A1_LOJA — varias "lojas" = filiais do mesmo CNPJ).

Estrutura essencial

CampoTipoDescricao
A1_FILIALCFilial (xFilial)
A1_CODCCodigo do cliente
A1_LOJACLoja (geralmente "01" pra matriz)
A1_PESSOACF = PF, J = PJ
A1_TIPOCF=Consumidor Final, R=Revendedor, S=Solidario, X=Exportacao, L=Produtor Rural
A1_NOMECNome/Razao social
A1_NREDUZCNome reduzido
A1_CGCCCNPJ/CPF (so digitos)
A1_INSCRCIE ou ISENTO
A1_ENDCEndereco
A1_BAIRROCBairro
A1_MUNCMunicipio
A1_ESTCUF
A1_CEPCCEP
A1_TELCTelefone
A1_EMAILCEmail
A1_LCNLimite de credito
A1_VENCLCDVencimento do limite
A1_MSBLQLC1=Bloqueado, 2=Ativo
A1_RISCOCA, B, C, D, E (risco credito)
A1_GRPVENCGrupo de vendas (segmentacao)

Indices padrao (SIX)

OrdemChaveUso
1A1_FILIAL+A1_COD+A1_LOJABusca padrao por codigo
2A1_FILIAL+A1_NOMEPesquisa por nome
3A1_FILIAL+A1_CGCBusca por CNPJ/CPF
5A1_FILIAL+A1_NREDUZPor nome reduzido
6A1_FILIAL+A1_PESSOA+A1_NOMEFiltro PF/PJ + nome

Modo de compartilhamento (SX2)

SA1 e tipicamente compartilhada (X2_MODO = 'C') — uma vez cadastrado, vale pra todas filiais da empresa. Mas pode ser configurado como exclusiva. Por isso SEMPRE use xFilial("SA1") em vez de hardcoded.

Como ler em codigo

// Buscar cliente por codigo
SA1->(DBSetOrder(1))
If SA1->(DBSeek(xFilial("SA1") + "000123" + "01"))
    cNome  := AllTrim(SA1->A1_NOME)
    cEmail := AllTrim(SA1->A1_EMAIL)
EndIf

// Buscar por CNPJ
SA1->(DBSetOrder(3))
If SA1->(DBSeek(xFilial("SA1") + "12345678000195"))
    cCodigo := AllTrim(SA1->A1_COD)
EndIf

// Loop por todos clientes ativos
SA1->(DBSetOrder(1))
SA1->(DBSeek(xFilial("SA1")))
While !SA1->(Eof()) .And. SA1->A1_FILIAL == xFilial("SA1")
    If SA1->A1_MSBLQL != "1"  // nao bloqueado
        // processar
    EndIf
    SA1->(DBSkip())
EndDo

Tabelas relacionadas

TabelaRelacao
SE1Titulos a receber do cliente (E1_CLIENTE+E1_LOJA)
SC5Pedidos do cliente (C5_CLIENTE+C5_LOJACLI)
SF2NFs emitidas (F2_CLIENTE+F2_LOJA)
SA3Vendedores (vinculados em A1_VEND)
SE4Condicoes de pagamento (A1_COND)
SU5Contatos do cliente

Pegadinhas

Operacoes comuns

Inclusao via ExecAuto (MATA030)

Ver tutorial: ExecAuto MATA030 — incluir cliente

Inativar cliente (em vez de excluir)

RecLock("SA1", .F.)
SA1->A1_MSBLQL := "1"
SA1->(MsUnlock())
// Inativacao logica e melhor que delete fisico

Anti-padroes

Veja também