Páginas filhas
  • SX9 - Relacionamento com chave forte

No Protheus o relacionamentos entre tabelas é semelhante ao que encontramos em bancos de dados relacionais com chaves primárias e estrangeiras.
A opção chave forte nos relacionamentos de uma tabela é usada para indicar se há um vínculo forte entre as tabelas em termos do modo como os dados são compartilhados entre as filiais. Esse vínculo, quando ativado, obriga a tabela de contra domínio a seguir as regras estabelecidas pela tabela de Domínio.
A implicação desta regra é que a consistência do modo de compartilhamento de dados é assegurada entre as tabelas Domínio e Contra-Domínio, reforçando a integridade dos dados e minimizando a probabilidade de erros de manipulação de dados.
A chave forte é definida por dois campos na tabela SX9 - Relacionamento entre tabelas, são o campo X9_VINFIL e X9_CHVFOR.

O campo X9_VINFIL indica se existe vínculo do modo de compartilhamento de filiais entre as tabelas (Domínio e Contra-Domínio).
Há dois valores permitidos, "1 - Ativado" e "2 - Desativado".

Caso o campo X9_VINFIL esteja como "1 - Ativado":
Se a tabela de Domínio for configurada como Compartilhada, isso permite que a tabela de Contra-domínio seja configurada como Exclusiva ou Compartilhada
Se a tabela de Domínio for configurada como Exclusiva, a tabela de Contra-domínio deverá também ser configurada como Exclusiva.  

O campo X9_CHVFOR significa que o modo de compartilhamento de dados entre filiais das tabelas (Domínio e Contra-Domínio) deve ser exatamente iguais. Para ativa-lo é necessário que o campo X9_VINFIL esteja como "1 - Ativado".
Se, por exemplo, a tabela Domínio estiver configurada para compartilhamento de dados entre filiais, então a tabela Contra-Domínio deve seguir a mesma configuração. De maneira semelhante, se a tabela Domínio estiver configurada como exclusiva, então a tabela Contra-Domínio também deve ser configurada dessa forma.
Há dois valores permitidos, "1 - Ativado" e "2 - Desativado".

Caso o campo X9_CHVFOR esteja como "1 - Ativado":
Se a tabela de Domínio for configurada como Compartilhada, a tabela de Contra-domínio deve ser configurada como Compartilhada
Se a tabela de Domínio for configurada como Exclusiva, a tabela de Contra-domínio deverá também ser configurada como Exclusiva.    


Vale ressaltar que a ativação desta opção desencadeia uma verificação completa de toda a estrutura de domínios e contra-domínios para garantir a conformidade com as regras estabelecidas.
Isso pode ter impacto no desempenho do sistema, dependendo do tamanho e complexidade da estrutura de dados, e deve ser considerado ao decidir se a ativação desta opção é apropriada em seu caso.


Como exemplo, imagine que exista um relacionamento entre o campo C5_CODCLI da tabela de Pedido de Vendas (SC5) e o campo A1_COD do Cadastro de Clientes (SA1), para esse relacionamento o campo X9_VINFIL está como "1 - Ativado" e o X9_CHVFOR está como "2 - Desativado"  e a tabela tabela de Pedido de Vendas (SC5) seja o Domínio.
Caso a tabela de Pedido de Vendas (SC5) esteja exclusiva por Filial, a tabela de Cadastro de Clientes (SA1) também deve estar exclusiva, pois o campo filial será considerado um campo pertencente ao relacionamento. Ou seja, caso eu esteja inserindo um pedido de vendas para a filial 01, só poderá vincular a um cadastro de cliente da mesma filial. 
Caso a tabela de Pedido de Vendas (SC5) esteja compartilhada por Filial, a tabela de Cadastro de Clientes (SA1) pode estar tanto compartilhada quanto exclusiva, pois o campo filial não será considerado um campo pertencente ao relacionamento. Ou seja, caso eu esteja inserindo um pedido de vendas, poderei vincular a qualquer cadastro de cliente independente da filial qual o mesmo foi cadastrado. 

Seguindo o exemplo acima caso altere o campo X9_CHVFOR para "1 - Ativado" ambas as tabelas devem ter o mesmo compartilhamento para podermos realizar o vinculo entre Pedido de Vendas (SC5) e o de Cadastro de Clientes (SA1) pois o campo filial será considerado um campo pertencente ao relacionamento.