Parâmetro de Filtro de Tipo de Pessoa (Comportamento)
Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Ambos → Opção 1 Tabela:
PARMFATUR.ST_FILTROPESSOAValor padrão:T(Mostrar Todos)
O parâmetro ST_FILTROPESSOA controla quais tipos de pessoa são aceitos / listados na pesquisa (F9) e na validação do campo CD_PESSOA de pedidos, notas e ordens. Ele atua em duas frentes:
- Pesquisa F9 (Lookup): restringe o SQL de busca (usa as views
PESSOAENDERECO_FISICAouPESSOAENDERECO), filtrando porTIPOPESSOA.TP_TIPOPESSOA. - Validação on-change: ao informar um
CD_PESSOA, validaTIPOPESSOA.TP_TIPOPESSOAda pessoa escolhida; se o tipo não está na lista permitida, lança exceção (E-0083,E-0084, ouW-0000equivalente).
Os tipos de pessoa considerados (em TIPOPESSOA.TP_TIPOPESSOA) são:
| Código | Descrição |
|---|---|
C | Cliente |
F | Fornecedor |
A | Ambos (Cliente/Fornecedor) |
V | Vendedor |
O | Comprador |
A lista permitida depende do contexto do módulo: módulos de venda/saída (pedido de venda, NF de saída) usam
C/A/V; módulos de compra/entrada (pedido de compra, NF de entrada) usamF/A/O.
Telas impactadas
| Módulo | Código | Descrição | Contexto |
|---|---|---|---|
| Pedido de Venda | MPD002 | Pedido de venda (padrão) | Venda (C/A/V) |
| Pedido de Venda (Mobile) | MPD020 | Pedido de venda mobile | Venda (C/A/V) |
| Pedido de Compra | MPD001 | Pedido de compra | Compra (F/A/O) |
| Pedido de Compra (Outro) | MPD024 | Pedido de compra outro tipo | Compra (F/A/O) |
| Nota Fiscal Entrada | MNF001 | NF de entrada | Compra (F/A/O) |
| Nota Fiscal Saída | MNF002 | NF de saída | Venda (C/A/V) |
| NF Outra / Serviço | MNF008 | NF outra / serviço | Venda (C/A/V) |
| NF CT-e | MNF013 | Conhecimento de transporte (lógica desabilitada - comentada) | - |
| NF Outra | MNF014 | NF outra | Validação genérica |
| Recap NF Ordem | MRC020 | Recap - NF por ordem | Venda (C/A/V) |
| Transportes | MTR008 | Módulo transporte | Carrega parâmetro |
| Transportes | MTR009 | Módulo transporte | Carrega parâmetro |
| Consignação | MCO006 | Consignação | Carrega parâmetro |
| Config NF Saída | CNF005 | Config de NF saída (lookup cliente) | Venda (lógica espelhada) |
| Config Pedido | CPD009 | Config de pedido | Persiste no SQL de PARMFATUR |
| Relatório RCA006 | RCA006 | Relatório auxiliar | Referência no dataset |
Procedures impactadas
Nenhuma. O parâmetro não é consumido por procedures/views SQL do diretório Scripts/ — toda a lógica está no código Delphi (Pascal) dos módulos, que faz a validação por TP_TIPOPESSOA em tempo de tela.
Campos envolvidos
| Campo | Descrição |
|---|---|
PARMFATUR.ST_FILTROPESSOA | Parâmetro em si (T / S / F). Gravado pelo MFA001. |
PESSOA.CD_TIPOPESSOA | FK para TIPOPESSOA — define o papel da pessoa. |
TIPOPESSOA.TP_TIPOPESSOA | Um char: C, F, A, V, O. Chave de comparação. |
View PESSOAENDERECO | Listagem F9 completa (qualquer tipo). |
View PESSOAENDERECO_FISICA | Listagem F9 com filtro por TP_TIPOPESSOA recebido em parâmetro. |
Opções disponíveis
T - Mostrar Todos
| O que faz | Detalhe |
|---|---|
| Pesquisa F9 (lookup de pessoa) | Usa a view PESSOAENDERECO (sem filtro de tipo). |
Validação on-change do CD_PESSOA | Não valida TP_TIPOPESSOA. Qualquer pessoa ativa é aceita. |
| Lista todos os tipos | C (Cliente), F (Fornecedor), A (Ambos), V (Vendedor), O (Comprador) — tudo aparece. |
Simulação passo a passo (ex.: pedido de venda MPD002)
- Em MFA001 → Parâmetros → Ambos → Opção 1 → ST_FILTROPESSOA = "Mostrar Todos".
- Salve (F6).
- Abra MPD002 e pressione F9 no campo
CD_PESSOA. - Resultado: a pesquisa chama a view
PESSOAENDERECOe lista todas as pessoas (clientes, fornecedores, vendedores, compradores e ambos). - Informe no pedido uma pessoa do tipo
F(Fornecedor). - Nenhuma exceção é lançada — o bloco
if (parmfatur.values['ST_FILTROPESSOA'] <> 'T')(UMPD002.pas:3738) é pulado.
Resultado esperado: qualquer pessoa cadastrada pode ser usada como cliente/fornecedor, sem amarra de tipo. Modo mais permissivo — útil em bases legadas onde a classificação de pessoas não é consistente.
Este é o valor padrão ao criar um novo registro no MFA001 (
UdmMFA001.pas:448).
S - Clientes / Fornecedores
| O que faz | Detalhe |
|---|---|
| Pesquisa F9 (lookup) | Usa a view PESSOAENDERECO_FISICA filtrando por 'A', 'C' (venda) ou 'A', 'F' (compra), conforme o módulo. |
| Validação on-change | Exige que TP_TIPOPESSOA esteja em C/A (venda) ou F/A (compra). |
| Bloqueia | Vendedores (V) e Compradores (O) ficam fora. |
Simulação passo a passo A (pedido de compra MPD001)
- Em MFA001 → ST_FILTROPESSOA = "Clientes / Fornecedores".
- Salve (F6).
- Abra MPD001 e pressione F9 no
CD_PESSOA. - Resultado:
UMPD001.pas:892entra no ramoS→ adiciona' ''A'', ''F'''como parâmetro e chamaBusca(..., 'PESSOAENDERECO_FISICA', Params). Só Fornecedores (F) e Ambos (A) aparecem. - Tente digitar manualmente o código de uma pessoa tipo
O(Comprador). - Ao sair do campo,
UdmMPD001.pas:680verificaif ((Resultado[2] <> 'F') and (Resultado[2] <> 'A'))→ lançaE-0083("O Tipo de pessoa não é válido...").
Simulação passo a passo B (pedido de venda MPD002)
- Em MFA001 → ST_FILTROPESSOA = "Clientes / Fornecedores".
- Salve (F6).
- Abra MPD002 e pressione F9 no
CD_PESSOA. UMPD002.pas:3740entra no ramoS→ usa' ''A'', ''C'''no filtro. Só Clientes (C) e Ambos (A) aparecem.- Tente usar uma pessoa tipo
V(Vendedor) → lança mensagem bloqueadora.
Resultado esperado: restringe o campo CD_PESSOA apenas ao papel "comercial principal" (cliente em módulos de venda, fornecedor em módulos de compra). Modo mais restritivo — impede usar um vendedor cadastrado como cliente do pedido, por exemplo.
F - Cliente/Fornecedor e Vendedor/Comprador
| O que faz | Detalhe |
|---|---|
| Pesquisa F9 (lookup) | Usa a view PESSOAENDERECO_FISICA filtrando por 'C', 'A', 'V' (venda) ou 'F', 'A', 'O' (compra). |
| Validação on-change | Exige que TP_TIPOPESSOA esteja em C/A/V (venda) ou F/A/O (compra). |
| Bloqueia | Apenas pessoas sem nenhum desses papéis (ex.: cliente puro em módulo de compra). |
Simulação passo a passo A (NF de entrada MNF001)
- Em MFA001 → ST_FILTROPESSOA = "Cliente/Fornecedor e Vendedor/Comprador".
- Salve (F6).
- Abra MNF001 e pressione F9 no
CD_PESSOA. UMNF001.pas:3169cai noelse(porqueiST_FILTROPESSOA <> 'S') → monta'''F'', ''A'', ''O'''e chamaPESSOAENDERECO_FISICA. Aparece Fornecedor (F), Ambos (A) e Comprador (O).- Informe uma pessoa do tipo
O(Comprador). UdmMNF001.pas:3944validaif ((Resultado[3] <> 'F') and (Resultado[3] <> 'A') and (Resultado[3] <> 'O'))→ não lança, pessoa aceita.
Simulação passo a passo B (pedido de venda MPD020)
- Em MFA001 → ST_FILTROPESSOA = "Cliente/Fornecedor e Vendedor/Comprador".
- Abra MPD020 e informe uma pessoa tipo
V(Vendedor). UdmMPD020.pas:1056valida((iST_FILTROPESSOA = 'F') and (Pos(Resultado[3], 'CAV') <= 0))→ comoVestá em "CAV", não bloqueia.- Tente informar uma pessoa tipo
O(Comprador) num pedido de venda → bloqueia (não está em "CAV").
Resultado esperado: amplia a lista do modo S incluindo o "papel secundário" típico do contexto (vendedor em vendas, comprador em compras). Útil quando a empresa usa o cadastro de pessoa como base unificada, emitindo documentos fiscais em nome de vendedores/compradores.
Regra Geral / Como cada módulo consome o parâmetro
Há dois padrões de leitura do parâmetro no código:
| Padrão | Exemplo | Como lê |
|---|---|---|
Variável de módulo iST_FILTROPESSOA | MPD001, MPD020, MPD024, MNF001, MNF008, MNF013, MNF014, MTR008, MTR009 | SELECT do PARMFATUR no load do módulo (ex.: UdmMPD001.pas:252,265) armazena em dm<MOD>.iST_FILTROPESSOA. |
Dicionário global parmfatur.values[...] | MPD002, MNF002, MRC020 | Lê direto de um TStringList de parâmetros carregado pelo jCommon. |
A lógica de decisão é idêntica nos dois padrões: três ramos <> 'T' / = 'S' / else (= 'F').
Letras permitidas por contexto (referência rápida)
| Contexto | S (Clientes/Fornec.) | F (Cli/Forn + V/O) |
|---|---|---|
| Venda (MPD002, MPD020, MNF002, MNF008, MNF014, MRC020) | C, A | C, A, V |
| Compra (MPD001, MPD024, MNF001) | F, A | F, A, O |
Módulos que apenas carregam (sem validação ativa)
| Módulo | Observação |
|---|---|
| MNF013 | Lógica de validação está comentada (UdmMNF013.pas:2175-2176, 3401-3402). O parâmetro é carregado mas não efetivamente usado. |
| MTR008, MTR009 | Selecionam ST_FILTROPESSOA no SELECT do PARMFATUR, mas não há uso explícito localizado. |
| MCO006 | Inclui o campo no SQL de leitura de parâmetros (UdmMCO006.pas:2102). |
| CPD009 | Inclui ST_FILTROPESSOA nas cláusulas INSERT/UPDATE/SELECT do PARMFATUR (configuração redundante ao MFA001). |
Tabela Comparativa Resumida
| Opção | Descrição | View F9 | Validação TP_TIPOPESSOA venda | Validação TP_TIPOPESSOA compra |
|---|---|---|---|---|
| T | Mostrar Todos | PESSOAENDERECO | Nenhuma | Nenhuma |
| S | Clientes / Fornecedores | PESSOAENDERECO_FISICA | Aceita C, A | Aceita F, A |
| F | Cli/Forn e Vend/Comprador | PESSOAENDERECO_FISICA | Aceita C, A, V | Aceita F, A, O |
Referências no Código Fonte
Tela de configuração (MFA001)
| Arquivo | Linha | Descrição |
|---|---|---|
source/MFA001/UMFA001.dfm | 2717-2744 | ComboBox cmbST_FILTROPESSOA com Items.Strings = "Mostrar Todos" (T), "Clientes / Fornecedores" (S), "Cliente/Fornecedor e Vendedor/Comprador" (F). |
source/MFA001/UdmMFA001.pas | 75 | Declaração do campo tabPARMFATURST_FILTROPESSOA: TStringField. |
source/MFA001/UdmMFA001.pas | 448 | AfterInsert define valor padrão 'T'. |
source/MFA001/UMFA001.pas | 225 | Componente cmbST_FILTROPESSOA: TwwDBComboBox. |
Módulos consumidores (lookup F9 e validação de CD_PESSOA)
| Arquivo | Linha | Papel |
|---|---|---|
source/MPD001/UdmMPD001.pas | 167, 252, 265 | Declara iST_FILTROPESSOA e lê do PARMFATUR. |
source/MPD001/UdmMPD001.pas | 676-687 | Validação em CD_PESSOA (compra: F/A, F/A/O). |
source/MPD001/UMPD001.pas | 890-900 | Lookup F9 (compra). |
source/MPD002/UMPD002.pas | 3738-3746 | Lookup F9 (venda: C/A, C/A/V). |
source/MPD002/UdmMPD002.pas | 1638-1648, 5738 | Validação e SELECT de PARMFATUR. |
source/MPD020/UdmMPD020.pas | 238, 319, 350, 1056 | Leitura do parâmetro e validação com Pos(..., 'CA') / Pos(..., 'CAV'). |
source/MPD024/UdmMPD024.pas | 161, 192, 204, 620-622 | Compra (F/A, F/A/O) com Pos(..., 'FA') / Pos(..., 'FAO'). |
source/MNF001/UMNF001.pas | 3160-3172 | Lookup F9 (compra: F/A, F/A/O). |
source/MNF001/UdmMNF001.pas | 1110, 1374, 1398, 3935-3946 | Leitura do parâmetro e validação. |
source/MNF002/UMNF002.pas | 3356-3368, 5171-5186, 8577-8590 | Lookup F9 e validação (venda: C/A, C/A/V). |
source/MNF002/UdmMNF002.pas | 4095-4103, 10493 | Validação e SELECT de PARMFATUR. |
source/MNF008/UdmMNF008.pas | 478, 653, 680, 758, 2313-2315 | Validação com Pos(..., 'CA') / Pos(..., 'CAV'). |
source/MNF008/UMNF008.pas | 1726-1738 | Lookup F9. |
source/MNF013/UdmMNF013.pas | 537, 700, 724, 2175-2176, 3401-3402 | Lê o parâmetro; validação comentada. |
source/MNF014/UdmMNF014.pas | 271, 324, 347, 748-749 | Lê parâmetro e valida com Pos(..., 'CA') / Pos(..., 'CAV'). |
source/MNF014/UMNF014.pas | 754-756 | Lookup F9. |
source/MRC020/UMRC020NFORDEM.pas | 2576-2590 | Lookup F9 (venda: A/C, C/A/V). |
source/MRC020/UdmMRC020NFORDEM.pas | 3279-3285 | Validação. |
source/MTR008/UdmMTR008.pas | 172, 226, 250 | Lê parâmetro do PARMFATUR. |
source/MTR009/UdmMTR009.pas | 138 | Inclui no SELECT do PARMFATUR. |
source/MCO006/UdmMCO006.pas | 2102 | Inclui no SELECT do PARMFATUR. |
source/CNF005/UdmCNF005.pas | 402-418 | Validação espelhada (E-0083 / E-0084). |
source/CNF005/UCNF005.pas | 2773-2792 | Lookup F9 (venda). |
source/CPD009/UdmCPD009.dfm | 306, 372, 458, 545 | SELECT/INSERT/UPDATE do PARMFATUR (replica configuração). |
source/RCA006/UdmRCA006.dfm | - | Referência ao campo em dataset. |
SQL / Scripts
Nenhuma referência no diretório Scripts/ — o parâmetro é puramente de camada de aplicação Delphi.