CD_PESSOA — Pessoa Específica (Parâmetro de Tabela de Preço)
Tela de configuração: MFA006 — Parâmetros de Tabela de Preço
Componente:edtCD_PESSOA
Tabela/Coluna:PARMTABPRECO.CD_PESSOA(DOM_INTEGER)
Valor padrão: vazio (nenhuma pessoa selecionada)
Chave estrangeira:RPARMTABPRECO_PESSOA→PESSOA (CD_PESSOA)
Visão Geral
O parâmetro CD_PESSOA permite vincular uma regra de tabela de preço a uma pessoa específica (cliente, fornecedor etc.). Quando preenchido, a regra só se aplica àquela pessoa. Quando vazio, a regra se aplica a qualquer pessoa (desde que os demais critérios da linha — tipo de pessoa, condição de pagamento, estado, item, etc. — também coincidam).
Este campo é um dos vários filtros de granularidade da tabela PARMTABPRECO, que define quais tabelas de preço (TABPRECO) devem ser aplicadas em cada cenário de venda.
Telas Impactadas
| Tela | Efeito |
|---|---|
| MFA006 | Cadastro/manutenção do parâmetro. Campo editável na grade. |
| TFA006 | Consulta de tabelas de preço — usa RETORNA_TABPRECO que filtra por CD_PESSOA. |
| Telas de venda (orçamento, pedido, nota) | Na busca de preço, RETORNA_TABPRECO e RETORNA_PRECOITEM consideram CD_PESSOA como critério de casamento. |
| Telas de Recap (MRC018, MRC020) | RETORNA_TABPRECO recebe I_ST_OBRIGAPESSOA = 'S' para forçar casamento por pessoa. |
Campos Relacionados na Tabela PARMTABPRECO
| Campo | Tipo | Descrição |
|---|---|---|
NR_SEQUENCIA | INTEGER (PK) | Identificador único da linha de parâmetro |
CD_EMPRESA | INTEGER | Empresa à qual a regra se aplica |
CD_TABPRECO | INTEGER | Tabela de preço que será aplicada quando a regra casar |
CD_PESSOA | INTEGER | Este parâmetro — pessoa específica |
CD_TIPOPESSOA | INTEGER | Tipo de pessoa (Física/Jurídica) |
CD_CONDPAGTO | INTEGER | Condição de pagamento |
CD_VENDEDOR | INTEGER | Vendedor |
CD_REGIAOCOMERCIAL | INTEGER | Região comercial |
CD_CONDFISCAL | INTEGER | Condição fiscal do produto |
CD_ITEM | INTEGER | Produto específico |
CD_GRUPO / CD_SUBGRUPO / CD_SECAO | INTEGER | Grupo, subgrupo e seção do produto |
SG_ESTADO | VARCHAR(2) | Estado (UF) |
CD_TELA | VARCHAR(6) | Tela/módulo de origem |
CD_PERFIL | INTEGER | Perfil do item |
QT_MINIMA / QT_MAXIMA | NUMERIC(15,2) | Faixa de quantidade |
Opções Disponíveis
O campo CD_PESSOA aceita dois estados: vazio (sem restrição por pessoa) ou preenchido com um código válido de pessoa. Não se trata de um combo com opções fixas, mas de um campo de pesquisa.
Vazio — Regra Aplica-se a Qualquer Pessoa
| O que faz | Detalhe |
|---|---|
| Comportamento | A linha de parâmetro ignora o filtro por pessoa. A regra casará para qualquer pessoa, desde que os demais critérios (empresa, tipo de pessoa, condição de pagamento, estado, item, etc.) sejam atendidos. |
| Editável | Sim |
| Exige | Nenhum campo obrigatório adicional |
Simulação passo a passo
- Acesse a tela MFA006 (Parâmetros de Tabela de Preço).
- Cadastre ou edite uma linha de parâmetro.
- Deixe o campo Pessoa (
edtCD_PESSOA) em branco. - Preencha os demais campos desejados (empresa, tabela de preço, tipo de pessoa, etc.).
- Salve o registro.
- Em uma tela de venda (orçamento/pedido), informe um produto e um cliente qualquer.
- O sistema chamará
RETORNA_TABPRECOe, comoCD_PESSOAestá vazio naquela linha, ela será considerada na busca.
Resultado esperado: A tabela de preço configurada na linha será aplicada a qualquer pessoa que atenda aos demais critérios do parâmetro.
Preenchido — Regra Válida Apenas para Pessoa Específica
| O que faz | Detalhe |
|---|---|
| Comportamento | A linha de parâmetro só será considerada quando a pessoa da venda (orçamento, pedido, nota) coincidir com o CD_PESSOA informado. |
| Editável | Sim |
| Exige | Código válido de pessoa cadastrada na tabela PESSOA (status ativo) |
| Restrição | FK RPARMTABPRECO_PESSOA garante integridade referencial |
Simulação passo a passo
- Acesse a tela MFA006 (Parâmetros de Tabela de Preço).
- Cadastre ou edite uma linha de parâmetro.
- No campo Pessoa (
edtCD_PESSOA), pressione<F9>para abrir a pesquisa de pessoas. - Selecione a pessoa desejada (ex: "Empresa ABC Ltda — código 1234").
- Configure a Tabela de Preço desejada (ex: tabela "TABELA VIP" — código 5).
- Preencha os demais filtros se necessário (empresa, condição de pagamento, etc.).
- Salve o registro.
- Em uma tela de venda, crie um orçamento para a pessoa 1234.
- Informe um produto que esteja na tabela de preço vinculada.
- O sistema chamará
RETORNA_TABPRECOcomI_CD_PESSOA = 1234.
Resultado esperado: A tabela de preço "TABELA VIP" será aplicada somente para a pessoa 1234. Para outras pessoas, o sistema buscará outra regra de parâmetro ou usará a tabela de preço padrão informada na venda.
Exceção / Importante:
Na procedureRETORNA_TABPRECO, o campoCD_PESSOAtem peso 10 na ordenação de prioridade (segundo apenas aCD_ITEMcom peso 20). Isso significa que, quando existem múltiplas linhas de parâmetro candidatas, uma linha com pessoa específica será priorizada sobre linhas genéricas (sem pessoa) — desde que o casamento seja confirmado.Além disso, o parâmetro
I_ST_OBRIGAPESSOA(utilizado pelo processo de Recap — telas MRC018/MRC020) força o casamento por pessoa. Quando'S', somente linhas comCD_PESSOApreenchido e coincidente são consideradas.
Regra de Prioridade no RETORNA_TABPRECO
A procedure RETORNA_TABPRECO monta uma consulta dinâmica que ordena as linhas candidatas por especificidade. O critério de ordenação (pesos):
| Campo | Peso | Significado |
|---|---|---|
CD_ITEM | 20 | Produto específico |
CD_PESSOA | 10 | Pessoa específica |
CD_CONDPAGTO | 1 | Condição de pagamento |
CD_TIPOPESSOA | 1 | Tipo de pessoa |
CD_CONDFISCAL | 1 | Condição fiscal |
CD_VENDEDOR | 1 | Vendedor |
CD_GRUPO | 1 | Grupo do produto |
CD_SUBGRUPO | 1 | Subgrupo |
CD_SECAO | 1 | Seção |
CD_TELA | 1 | Tela/módulo |
CD_REGIAOCOMERCIAL | 1 | Região comercial |
QT_MINIMA/QT_MAXIMA | 1+1 | Faixa de quantidade |
SG_ESTADO | 1 | Estado |
CD_PERFIL | 1 | Perfil do item |
O sistema seleciona a primeira linha (maior peso total) que casar com os dados da venda. Linhas com CD_PESSOA preenchido são priorizadas sobre linhas sem pessoa.
Impacto em RETORNA_PRECOITEM
Na procedure RETORNA_PRECOITEM, o campo CD_PESSOA é usado para verificar se existe uma regra específica que combina pessoa + condição de pagamento. Quando encontrada, essa regra indica que o cálculo de juro deve ser desabilitado para aquela venda (controle de juros por pessoa).
Procedures Impactadas
Rotinas Delphi com referência direta ao campo
| Rotina | Arquivo | Linha | Evidência |
|---|---|---|---|
TfrmMFA006.edtCD_PESSOAKeyDown (pesquisa F9) | source/MFA006/UMFA006.pas | ~540–568 | Pesquisa de pessoas ativas ao pressionar <F9>, preenchendo tabPARMTABPRECOCD_PESSOA |
Scripts SQL com referência direta ao campo PARMTABPRECO.CD_PESSOA
| Procedure/View | Arquivo | Evidência |
|---|---|---|
RETORNA_TABPRECO | Scripts/RETORNA_TABPRECO.sql | Filtra por P.CD_PESSOA na consulta dinâmica (linhas 53, 95, 107, 109, 149, 160). Peso 10 na ordenação de prioridade. |
RETORNA_PRECOITEM | Scripts/RETORNA_PRECOITEM.sql | Verifica existência de parâmetro com P.CD_PESSOA = :I_CD_PESSOA e P.CD_CONDPAGTO para controle de juros (linha 106). |
Candidatas por uso da tabela PARMTABPRECO (sem referência direta ao campo CD_PESSOA)
| Procedure/View | Arquivo | Observação |
|---|---|---|
ATUALIZA_PRECOVENDA | Scripts/ATUALIZA_PRECOVENDA.sql | Usa PARMTABPRECO mas não filtra por CD_PESSOA diretamente |
GERA_COMISSAOTABPRECO | Scripts/GERA_COMISSAOTABPRECO.sql | Lê PARMTABPRECO sem filtro por CD_PESSOA |
INSERE_ITEMPEDIDO_SERVCANALETA | Scripts/INSERE_ITEMPEDIDO_SERVCANALETA.sql | Usa PARMTABPRECO sem filtro direto por CD_PESSOA |
VERIFICA_BLOQUEIO | Scripts/VERIFICA_BLOQUEIO.sql | Usa PARMTABPRECO sem filtro direto por CD_PESSOA |
VIEW_TFA006 | Scripts/VIEW_TFA006.sql | JOIN com PARMTABPRECO sem filtro direto por CD_PESSOA |
TRGAD_PARMTABPRECO | Scripts/TRGAD_PARMTABPRECO.sql | Trigger de auditoria da tabela |
Tabela Comparativa Resumida
| Aspecto | Vazio | Preenchido |
|---|---|---|
| Escopo da regra | Qualquer pessoa | Pessoa específica |
| Prioridade no RETORNA_TABPRECO | Peso 0 | Peso 10 |
| Obrigatoriedade | Não obrigatório | Obrigatório se I_ST_OBRIGAPESSOA = 'S' |
| Exemplo de uso | Tabela geral por tipo de pessoa | Tabela VIP para cliente específico |
| FK | N/A | RPARMTABPRECO_PESSOA → PESSOA |