Resposta rápida
- Onde fica
- Configurador, Tabelas Genéricas — gravado na
SX5. - Serve para
- lista fixa de código e descrição, usada em mais de um lugar.
- Como um campo usa
X3_F3com o código da tabela eExistCpo("SX5", "<tabela>" + M->campo)na validação — é assim no estado do cliente.- Armadilha
- a tabela 01 não é lista, é a numeração das notas fiscais.
- Código livre
- confira na tabela 00; o padrão também usa códigos com
XeZ.
Consulta rápida5 seções
Estados do Brasil, tipos de produto, séries de nota fiscal: listas curtas,
que quase não mudam e cabem em “código e descrição”. Para isso o Protheus não
cria uma tabela por lista. Ele tem uma tabela de listas, a SX5, e cada lista
é identificada por um código de duas posições. A documentação da TOTVS
resume o ganho: poupa criar tabela e consulta padrão adicionais só para
guardar um domínio simples.
Como a SX5 guarda uma lista
| Coluna | O que guarda |
|---|---|
X5_FILIAL | Filial — em branco quando a SX5 é compartilhada |
X5_TABELA | O código da tabela genérica: 12, 01, 02… |
X5_CHAVE | O código do item dentro da tabela |
X5_DESCRI | A descrição em português |
X5_DESCSPA, X5_DESCENG | A descrição em espanhol e em inglês |
O índice é X5_FILIAL+X5_TABELA+X5_CHAVE. Buscar um item é sempre filial +
tabela + chave.
A tabela 12, por exemplo, são as unidades federativas: AC, AL, AM…
até TO, mais EX, com a descrição ESTRANGEIRO — 28 itens, a descrição
com o nome do estado em maiúsculas. Na base que conferimos, a chave tem 6
posições e a descrição 55; confira no seu ambiente antes de planejar uma
lista.
E existe uma tabela das tabelas: a 00. Cada chave dela é o código de uma
tabela genérica, com o nome na descrição — 01 Séries de N. Fiscais, 02
Tipos de Materiais, 12 Unidade Federativa. É o índice que diz o que cada
código significa.
Como um campo usa uma tabela genérica
O exemplo está no cadastro de clientes. O estado do cliente, A1_EST:
| Propriedade | Valor | O que faz |
|---|---|---|
X3_F3 | 12 | A consulta do campo aponta a tabela genérica 12 |
X3_VALID | ExistCpo("SX5","12"+M->A1_EST) .AND. IE(M->A1_INSCR,M->A1_EST) | Recusa sigla que não esteja na tabela 12 |
O ExistCpo recebe a tabela ("SX5") e a chave de busca — o código da
tabela genérica concatenado com o que o usuário digitou. Sem o "12" na
frente, a busca procuraria a sigla como se fosse um código de tabela. O
comportamento de ExistCpo e das outras funções de validação está em
Validação de campo.
O mesmo desenho aparece em todo o dicionário padrão: o tipo do produto
(B1_TIPO) tem X3_F3 = 02, a tabela de tipos de materiais; campos de série
de nota apontam 01; outros validam com ExistCpo("SX5","A2"+...),
ExistCpo("SX5","A4"+...). Consulta de duas posições apontando código de
tabela genérica é padrão, não exceção.
A TOTVS documenta ainda um segundo caminho: criar uma consulta padrão sobre a
SX5, com filtro na tabela desejada, e usá-la no campo. Serve quando você
quer controlar as colunas mostradas ou o filtro — as consultas padrão têm
artigo próprio.
Para mostrar a descrição em código ou num campo virtual, o padrão usa
Posicione() na SX5 — há campo do cadastro de produtos buscando a
descrição com POSICIONE("SX5",1,XFILIAL("SX5")+"XJ"+SB1->B1_GRPTI,"X5_DESCRI").
Para o estado:
cNomeUF := Posicione("SX5", 1, xFilial("SX5") + "12" + SA1->A1_EST, "X5_DESCRI")A tabela 01 não é uma lista qualquer
A tabela 01 tem as séries de nota fiscal: 1, A, B, UNI… Só que
ali o X5_DESCRI não guarda um nome — guarda um número, como 000059.
Segundo a Central de Atendimento TOTVS, quando a numeração da nota de saída é
controlada pela SX5, é o número desse campo que define de onde a série
segue: gravar 000010 faz a numeração recomeçar de 000010.
Quem decide se a numeração é controlada ali é o parâmetro MV_TPNRNFS. A
própria descrição dele no dicionário padrão lista as opções:
1-SX5 | 2-SXE/SXF | 3-SD9.
SELECT X6_FIL, X6_VAR, X6_TIPO, X6_DESCRIC, X6_DESC1, X6_CONTEUD
FROM SX6010
WHERE X6_VAR IN ('MV_TPNRNFS', 'MV_NUMITEN')
AND D_E_L_E_T_ = ' '
ORDER BY X6_VAR, X6_FILO sufixo 010 é o da empresa; troque pelo do seu ambiente.
O documento FAT0049 do TDN, sobre o controle de numeração da nota de saída,
trata do compartilhamento: com a SX5 compartilhada, o ponto de entrada
CHGX5FIL passa o código da filial logada para a SX5, e a tabela 01 passa a
ser tratada como exclusiva. O que ele devolve é esse código de filial: o
padrão faz cFilSX5 := ExecBlock("CHGX5FIL",.F.,.F.) e usa o resultado no
lugar do xFilial("SX5") ao procurar a série na tabela 01. O mesmo documento
avisa que o controle pela SX5 trava a tabela de séries e o parâmetro
MV_NUMITEN para reservar a numeração, e que cada filial deve ter um
MV_NUMITEN exclusivo — por isso a consulta acima já traz os dois
parâmetros, com a filial de cada linha.
Criar uma tabela genérica sua
A manutenção fica no Configurador, na opção de Tabelas Genéricas, e a documentação da TOTVS registra que só o grupo de administradores tem acesso a ela. O que exige cuidado é o código.
Não há faixa de código reservada para o cliente que dê para afirmar. E a
suposição óbvia — “o padrão não usa X nem Z” — está errada: a tabela 00
de uma base padrão tem XJ (Grupo — TES Inteligente, a mesma do Posicione
acima), XN, ZR, ZS, ZT, entre outras. Código com Z na frente não
protege nada aqui.
Então a regra prática é: escolha o código depois de listar os que já existem.
SELECT X5_CHAVE, X5_DESCRI
FROM SX5010
WHERE X5_TABELA = '00'
AND D_E_L_E_T_ = ' '
ORDER BY X5_CHAVEE confirme que o código escolhido não tem itens soltos, cadastrados sem
entrada na 00:
SELECT DISTINCT X5_TABELA
FROM SX5010
WHERE D_E_L_E_T_ = ' '
ORDER BY X5_TABELACom o código escolhido, o campo que usa a lista segue o desenho do A1_EST:
X3_F3 com o código e ExistCpo("SX5", "<código>" + M->campo) na validação.
Por exemplo, se o cadastro de motoristas da série ganhasse a categoria da
CNH, as categorias caberiam numa tabela genérica, com o campo apontando para
ela.
Tabela genérica ou tabela própria
| Tabela genérica (SX5) | Tabela própria | |
|---|---|---|
| Estrutura | Código e descrição (nos três idiomas) | Quantos campos precisar |
| Criação | Um código novo e os itens | Tabela, campos, índices no dicionário |
| Consulta no campo | X3_F3 com o código da tabela | Consulta padrão própria |
| Cadastro dos itens | Configurador | Rotina de cadastro, com o acesso que você definir |
| Bom para | Lista curta, estável, que só precisa de nome | Cadastro que cresce, tem atributos ou é mantido pelo usuário |
O limite aparece quando a lista começa a pedir um segundo atributo — a
categoria da CNH que precisa de “exige curso”, ou o motorista que precisa de
data de nascimento. Aí a SX5 não tem onde guardar, e o caminho é uma tabela
como a ZA1
(Tabela customizada no Protheus).
E se o usuário do negócio precisa manter a lista sem depender do
administrador, também.
A página da SX5 no catálogo mostra a estrutura no dicionário;
a do cadastro de clientes mostra o A1_EST e os outros
campos que consultam tabelas genéricas.
Se a numeração de nota da sua empresa depende da tabela 01 e ninguém sabe dizer quem mexeu nela, fale com a gente.
Referências
TDNtdn.totvs.com
TDN — SX5, Tabelas GenéricasEstrutura de código e valor que evita criar tabela e consulta padrão adicionais; manutenção pelo Configurador.TDNtdn.totvs.com
TDN — Tabelas Genéricas (CFGX031 - SIGACFG)Onde a manutenção fica no Configurador.Central de Atendimentocentraldeatendimento.totvs.com
Central de Atendimento TOTVS — Consulta padrão x Tabelas genéricasConsulta padrão sobre a SX5 com filtro na tabela desejada.Central de Atendimentocentraldeatendimento.totvs.com
Central de Atendimento TOTVS — Controle de numeração via Tabela Genérica SX5Na tabela 01, X5_DESCRI guarda o número a partir do qual a série segue.TDNtdn.totvs.com
TDN — FAT0049 Controle de Numeração do Documento de SaídaTabela 01 exclusiva com SX5 compartilhada pelo ponto de entrada CHGX5FIL; MV_NUMITEN exclusivo por filial.TDNtdn.totvs.com
TDN — Parâmetro MV_TPNRNFSTipo de controle da numeração dos documentos de saída.
Continue por aqui
- Vídeo
ProtheusReferência técnica
Gatilhos no Protheus: como um campo preenche outro
Gatilhos no Protheus: o que cada coluna da SX7 decide, os três tipos de gatilho, como posicionar em outra tabela e o truque do .F. para diagnóstico.