Pular para o conteúdo principal

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_FILTROPESSOA Valor 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:

  1. Pesquisa F9 (Lookup): restringe o SQL de busca (usa as views PESSOAENDERECO_FISICA ou PESSOAENDERECO), filtrando por TIPOPESSOA.TP_TIPOPESSOA.
  2. Validação on-change: ao informar um CD_PESSOA, valida TIPOPESSOA.TP_TIPOPESSOA da pessoa escolhida; se o tipo não está na lista permitida, lança exceção (E-0083, E-0084, ou W-0000 equivalente).

Os tipos de pessoa considerados (em TIPOPESSOA.TP_TIPOPESSOA) são:

CódigoDescrição
CCliente
FFornecedor
AAmbos (Cliente/Fornecedor)
VVendedor
OComprador

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) usam F/A/O.

Telas impactadas​

MóduloCódigoDescriçãoContexto
Pedido de VendaMPD002Pedido de venda (padrão)Venda (C/A/V)
Pedido de Venda (Mobile)MPD020Pedido de venda mobileVenda (C/A/V)
Pedido de CompraMPD001Pedido de compraCompra (F/A/O)
Pedido de Compra (Outro)MPD024Pedido de compra outro tipoCompra (F/A/O)
Nota Fiscal EntradaMNF001NF de entradaCompra (F/A/O)
Nota Fiscal SaídaMNF002NF de saídaVenda (C/A/V)
NF Outra / ServiçoMNF008NF outra / serviçoVenda (C/A/V)
NF CT-eMNF013Conhecimento de transporte (lógica desabilitada - comentada)-
NF OutraMNF014NF outraValidação genérica
Recap NF OrdemMRC020Recap - NF por ordemVenda (C/A/V)
TransportesMTR008Módulo transporteCarrega parâmetro
TransportesMTR009Módulo transporteCarrega parâmetro
ConsignaçãoMCO006ConsignaçãoCarrega parâmetro
Config NF SaídaCNF005Config de NF saída (lookup cliente)Venda (lógica espelhada)
Config PedidoCPD009Config de pedidoPersiste no SQL de PARMFATUR
Relatório RCA006RCA006Relatório auxiliarReferê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​

CampoDescrição
PARMFATUR.ST_FILTROPESSOAParâmetro em si (T / S / F). Gravado pelo MFA001.
PESSOA.CD_TIPOPESSOAFK para TIPOPESSOA — define o papel da pessoa.
TIPOPESSOA.TP_TIPOPESSOAUm char: C, F, A, V, O. Chave de comparação.
View PESSOAENDERECOListagem F9 completa (qualquer tipo).
View PESSOAENDERECO_FISICAListagem F9 com filtro por TP_TIPOPESSOA recebido em parâmetro.

Opções disponíveis​

T - Mostrar Todos​

O que fazDetalhe
Pesquisa F9 (lookup de pessoa)Usa a view PESSOAENDERECO (sem filtro de tipo).
Validação on-change do CD_PESSOANão valida TP_TIPOPESSOA. Qualquer pessoa ativa é aceita.
Lista todos os tiposC (Cliente), F (Fornecedor), A (Ambos), V (Vendedor), O (Comprador) — tudo aparece.

Simulação passo a passo (ex.: pedido de venda MPD002)​

  1. Em MFA001 → Parâmetros → Ambos → Opção 1 → ST_FILTROPESSOA = "Mostrar Todos".
  2. Salve (F6).
  3. Abra MPD002 e pressione F9 no campo CD_PESSOA.
  4. Resultado: a pesquisa chama a view PESSOAENDERECO e lista todas as pessoas (clientes, fornecedores, vendedores, compradores e ambos).
  5. Informe no pedido uma pessoa do tipo F (Fornecedor).
  6. 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 fazDetalhe
Pesquisa F9 (lookup)Usa a view PESSOAENDERECO_FISICA filtrando por 'A', 'C' (venda) ou 'A', 'F' (compra), conforme o módulo.
Validação on-changeExige que TP_TIPOPESSOA esteja em C/A (venda) ou F/A (compra).
BloqueiaVendedores (V) e Compradores (O) ficam fora.

Simulação passo a passo A (pedido de compra MPD001)​

  1. Em MFA001 → ST_FILTROPESSOA = "Clientes / Fornecedores".
  2. Salve (F6).
  3. Abra MPD001 e pressione F9 no CD_PESSOA.
  4. Resultado: UMPD001.pas:892 entra no ramo S → adiciona ' ''A'', ''F''' como parâmetro e chama Busca(..., 'PESSOAENDERECO_FISICA', Params). Só Fornecedores (F) e Ambos (A) aparecem.
  5. Tente digitar manualmente o código de uma pessoa tipo O (Comprador).
  6. Ao sair do campo, UdmMPD001.pas:680 verifica if ((Resultado[2] <> 'F') and (Resultado[2] <> 'A')) → lança E-0083 ("O Tipo de pessoa não é válido...").

Simulação passo a passo B (pedido de venda MPD002)​

  1. Em MFA001 → ST_FILTROPESSOA = "Clientes / Fornecedores".
  2. Salve (F6).
  3. Abra MPD002 e pressione F9 no CD_PESSOA.
  4. UMPD002.pas:3740 entra no ramo S → usa ' ''A'', ''C''' no filtro. Só Clientes (C) e Ambos (A) aparecem.
  5. 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 fazDetalhe
Pesquisa F9 (lookup)Usa a view PESSOAENDERECO_FISICA filtrando por 'C', 'A', 'V' (venda) ou 'F', 'A', 'O' (compra).
Validação on-changeExige que TP_TIPOPESSOA esteja em C/A/V (venda) ou F/A/O (compra).
BloqueiaApenas pessoas sem nenhum desses papéis (ex.: cliente puro em módulo de compra).

Simulação passo a passo A (NF de entrada MNF001)​

  1. Em MFA001 → ST_FILTROPESSOA = "Cliente/Fornecedor e Vendedor/Comprador".
  2. Salve (F6).
  3. Abra MNF001 e pressione F9 no CD_PESSOA.
  4. UMNF001.pas:3169 cai no else (porque iST_FILTROPESSOA <> 'S') → monta '''F'', ''A'', ''O''' e chama PESSOAENDERECO_FISICA. Aparece Fornecedor (F), Ambos (A) e Comprador (O).
  5. Informe uma pessoa do tipo O (Comprador).
  6. UdmMNF001.pas:3944 valida if ((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)​

  1. Em MFA001 → ST_FILTROPESSOA = "Cliente/Fornecedor e Vendedor/Comprador".
  2. Abra MPD020 e informe uma pessoa tipo V (Vendedor).
  3. UdmMPD020.pas:1056 valida ((iST_FILTROPESSOA = 'F') and (Pos(Resultado[3], 'CAV') <= 0)) → como V está em "CAV", não bloqueia.
  4. 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ãoExemploComo lê
Variável de módulo iST_FILTROPESSOAMPD001, MPD020, MPD024, MNF001, MNF008, MNF013, MNF014, MTR008, MTR009SELECT 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, MRC020Lê 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)​

ContextoS (Clientes/Fornec.)F (Cli/Forn + V/O)
Venda (MPD002, MPD020, MNF002, MNF008, MNF014, MRC020)C, AC, A, V
Compra (MPD001, MPD024, MNF001)F, AF, A, O

Módulos que apenas carregam (sem validação ativa)​

MóduloObservação
MNF013Lógica de validação está comentada (UdmMNF013.pas:2175-2176, 3401-3402). O parâmetro é carregado mas não efetivamente usado.
MTR008, MTR009Selecionam ST_FILTROPESSOA no SELECT do PARMFATUR, mas não há uso explícito localizado.
MCO006Inclui o campo no SQL de leitura de parâmetros (UdmMCO006.pas:2102).
CPD009Inclui ST_FILTROPESSOA nas cláusulas INSERT/UPDATE/SELECT do PARMFATUR (configuração redundante ao MFA001).

Tabela Comparativa Resumida​

OpçãoDescriçãoView F9Validação TP_TIPOPESSOA vendaValidação TP_TIPOPESSOA compra
TMostrar TodosPESSOAENDERECONenhumaNenhuma
SClientes / FornecedoresPESSOAENDERECO_FISICAAceita C, AAceita F, A
FCli/Forn e Vend/CompradorPESSOAENDERECO_FISICAAceita C, A, VAceita F, A, O

Referências no Código Fonte​

Tela de configuração (MFA001)​

ArquivoLinhaDescrição
source/MFA001/UMFA001.dfm2717-2744ComboBox cmbST_FILTROPESSOA com Items.Strings = "Mostrar Todos" (T), "Clientes / Fornecedores" (S), "Cliente/Fornecedor e Vendedor/Comprador" (F).
source/MFA001/UdmMFA001.pas75Declaração do campo tabPARMFATURST_FILTROPESSOA: TStringField.
source/MFA001/UdmMFA001.pas448AfterInsert define valor padrão 'T'.
source/MFA001/UMFA001.pas225Componente cmbST_FILTROPESSOA: TwwDBComboBox.

Módulos consumidores (lookup F9 e validação de CD_PESSOA)​

ArquivoLinhaPapel
source/MPD001/UdmMPD001.pas167, 252, 265Declara iST_FILTROPESSOA e lê do PARMFATUR.
source/MPD001/UdmMPD001.pas676-687Validação em CD_PESSOA (compra: F/A, F/A/O).
source/MPD001/UMPD001.pas890-900Lookup F9 (compra).
source/MPD002/UMPD002.pas3738-3746Lookup F9 (venda: C/A, C/A/V).
source/MPD002/UdmMPD002.pas1638-1648, 5738Validação e SELECT de PARMFATUR.
source/MPD020/UdmMPD020.pas238, 319, 350, 1056Leitura do parâmetro e validação com Pos(..., 'CA') / Pos(..., 'CAV').
source/MPD024/UdmMPD024.pas161, 192, 204, 620-622Compra (F/A, F/A/O) com Pos(..., 'FA') / Pos(..., 'FAO').
source/MNF001/UMNF001.pas3160-3172Lookup F9 (compra: F/A, F/A/O).
source/MNF001/UdmMNF001.pas1110, 1374, 1398, 3935-3946Leitura do parâmetro e validação.
source/MNF002/UMNF002.pas3356-3368, 5171-5186, 8577-8590Lookup F9 e validação (venda: C/A, C/A/V).
source/MNF002/UdmMNF002.pas4095-4103, 10493Validação e SELECT de PARMFATUR.
source/MNF008/UdmMNF008.pas478, 653, 680, 758, 2313-2315Validação com Pos(..., 'CA') / Pos(..., 'CAV').
source/MNF008/UMNF008.pas1726-1738Lookup F9.
source/MNF013/UdmMNF013.pas537, 700, 724, 2175-2176, 3401-3402Lê o parâmetro; validação comentada.
source/MNF014/UdmMNF014.pas271, 324, 347, 748-749Lê parâmetro e valida com Pos(..., 'CA') / Pos(..., 'CAV').
source/MNF014/UMNF014.pas754-756Lookup F9.
source/MRC020/UMRC020NFORDEM.pas2576-2590Lookup F9 (venda: A/C, C/A/V).
source/MRC020/UdmMRC020NFORDEM.pas3279-3285Validação.
source/MTR008/UdmMTR008.pas172, 226, 250Lê parâmetro do PARMFATUR.
source/MTR009/UdmMTR009.pas138Inclui no SELECT do PARMFATUR.
source/MCO006/UdmMCO006.pas2102Inclui no SELECT do PARMFATUR.
source/CNF005/UdmCNF005.pas402-418Validação espelhada (E-0083 / E-0084).
source/CNF005/UCNF005.pas2773-2792Lookup F9 (venda).
source/CPD009/UdmCPD009.dfm306, 372, 458, 545SELECT/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.