Pular para o conteúdo principal

Parâmetro de Bloqueio de Pedido/OS por Prazo Médio do Cliente

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Pedidos / O.S. → Opção 1 (combo cmbST_BLOQUEIAPRAZOMEDIO - UMFA001.dfm linhas 8901-8927, label "Bloqueio pelo Prazo Médio" em lbl57 linhas 8109-8122) Tabela: PARMFATUR.ST_BLOQUEIAPRAZOMEDIO Valor padrão: N (Não) - definido em UdmMFA001.pas linha 523 (AfterInsert)

Restringe o conjunto de condições de pagamento disponíveis para um cliente em pedidos de venda e ordens de serviço com base no limite de prazo médio cadastrado no crédito do cliente (TFA002). Quando ativo, o ERP passa a considerar apenas as condpagtos vinculadas à tabela PESSOACONDPAGTO (já filtradas por TFA002 conforme NR_DIASMEDIA), em vez de permitir qualquer condpagto ativa. Também altera o comportamento do TFA002 para regravar automaticamente as condições liberadas quando o prazo médio do cliente muda.

Telas impactadas​

MóduloCódigoDescrição
Parâmetros FaturamentoMFA001Tela de configuração (combo principal em UMFA001.dfm linha 8901; campo persistente UdmMFA001.pas linha 207; default 'N' em linha 523)
Crédito do ClienteTFA002Ao alterar NR_DIASMEDIA (individual ou de grupo), se o parâmetro = 'S' recadastra automaticamente as condições a prazo liberadas em PESSOACONDPAGTO (UdmTFA002.pas linhas 731, 1267; mensagem C-0736)
Pedido de VendaMPD002Chama validaPrazoMedio após validar pessoa e condpagto (UdmMPD002.pas linhas 1755, 2090); altera listagem F9 de condpagto para usar a busca CONDPAGTOPESSOA (UMPD002.pas linhas 3818, 3829); campo persistente no DM (linha 5750); comentário arquitetural em UdmMPD002.pas linha 445
Painel/Roteirização PedidosMPD081Coluna PF.ST_BLOQUEIAPRAZOMEDIO nos SQL principais (UdmMPD081.pas linha 89; UMPD081.pas linhas 552, 592, 618, 655); altera listagem F9 de condpagto (UMPD081.pas linhas 877, 889)
Ordem de ServiçoMOF001Altera listagem F9 de condpagto para usar CONDPAGTOPESSOA e exigir cliente informado (UMOF001.pas linhas 3032, 3043)
OS com PagamentoMOF008Mesma lógica da MOF001, usando dmMOF008.ParmFatur (UMOF008.pas linhas 804, 815)
App Mobile - Checkout PedidoMobile/WebAPPReferência comentada em checkout.component.ts linha 192 (não implementado no mobile)
App Mobile - Fechamento O.S.Mobile/WebAPPReferência comentada em fechamento-ordem.component.ts linha 198 (não implementado no mobile)

Campos envolvidos​

CampoTabelaDescrição
ST_BLOQUEIAPRAZOMEDIOPARMFATURO próprio parâmetro (char 1): S/N
NR_DIASMEDIACREDITOLimite de prazo médio em dias (individual do cliente - TFA002 aba "Crédito")
NR_DIASMEDIACREDITOGRUPOLimite de prazo médio em dias (para grupo de crédito - TFA002 aba "Grupo")
PESSOACONDPAGTO-Vínculo CD_PESSOA × CD_CONDPAGTO. Quando o parâmetro = 'S', é repopulada automaticamente pelo TFA002 com as condpagtos a prazo (ST_CONDPAGTO='P', ST_ATIVO='S') cuja média de CONDPARCELA.NR_DIAS seja ≤ NR_DIASMEDIA
ST_CONDPAGTOCONDPAGTOSituação da condpagto (P = a Prazo - é a única filtrada pelo TFA002)
CD_CONDPAGTOPEDIDO / ORDEMSERVICOCondição de pagamento do documento, validada em validaPrazoMedio
flagValidade(variável de TdmMPD002)Flag interna que só é acionada quando ST_BLOQUEIAPRAZOMEDIO='S' está ativo — evita validar condpagto ao abrir um pedido gravado (ver comentário em UdmMPD002.pas linhas 443-445)

Busca auxiliar usada​

Quando o parâmetro está ativo, telas de pedido/OS trocam a busca padrão (Busca('CONDPAGTO') — lista todas as condpagtos ativas) pela busca Busca('CONDPAGTOPESSOA'), que filtra apenas as condpagtos liberadas para o cliente em PESSOACONDPAGTO. Pré-requisito: cliente obrigatoriamente informado antes de abrir o F9, senão é lançado W-0000: Para listar a condição de pagamento, informe a pessoa para validar as cond. de pagto. liberadas(TFA001)!.


Opções disponíveis​

N - Não (padrão)​

O que fazDetalhe
F9 de condição de pagamento no Pedido/OSAbre a busca padrão CONDPAGTO (todas as condpagtos ativas do sistema)
Obriga informar cliente antes de listar condpagto?Não
Valida se a condpagto escolhida está liberada para o cliente?Não (a menos que ST_BLOQUEIOPED='I' esteja ligado — outra lógica independente, ver UdmMPD002.pas linhas 2073-2088)
Cadastro em TFA002Alterar NR_DIASMEDIA não toca em PESSOACONDPAGTO. O usuário gerencia manualmente as condpagtos do cliente na aba "Condições de Pagamento" da TFA001
validaPrazoMedio em MPD002Nunca é chamada (o if (ParmFatur.Values['ST_BLOQUEIAPRAZOMEDIO'] = 'S') cai fora)
flagValidadeTambém permanece desligada ao abrir pedidos gravados (comentário UdmMPD002.pas linhas 443-445)

Simulação passo a passo​

  1. MFA001 → aba Pedidos / O.S. → Opção 1 → Bloqueio pelo Prazo Médio = "Não"
  2. Salve (F6)
  3. Abra o Pedido de Venda (MPD002)
  4. Sem informar o cliente ainda, pressione F9 no campo "Condição de Pagamento"
  5. O sistema abre a busca normalmente e lista todas as condpagtos ativas (Busca('CONDPAGTO'))
  6. Selecione uma condpagto qualquer — não há validação contra o prazo médio do cliente

Resultado esperado: Pedido aceita qualquer condpagto ativa. O prazo médio cadastrado em TFA002 é apenas informativo, não restringe a venda.


S - Sim​

O que fazDetalhe
F9 de condição de pagamento no Pedido/OSAbre a busca CONDPAGTOPESSOA — apenas condpagtos vinculadas ao cliente em PESSOACONDPAGTO
Obriga informar cliente antes de listar condpagto?Sim — lança W-0000: Para listar a condição de pagamento, informe a pessoa para validar as cond. de pagto. liberadas(TFA001)!
Valida condpagto escolhida (typed sem F9)?Sim — validaPrazoMedio é disparado após o validate do cliente e do CD_CONDPAGTO em MPD002
Comportamento no TFA002Ao alterar NR_DIASMEDIA (CREDITO ou CREDITOGRUPO), exibe a mensagem C-0736 ("ATENÇÃO! Serão excluídas todas as condições de pagamento A Prazo (com parcelas) liberadas para o cliente (TFA001). Para serem adicionadas novamente de acordo com o número de dias informados!"). Confirmando, o sistema: (1) faz DELETE FROM PESSOACONDPAGTO WHERE CD_PESSOA=... AND CD_CONDPAGTO IN (SELECT CD_CONDPAGTO FROM CONDPAGTO WHERE ST_CONDPAGTO='P'); (2) varre CONDPAGTO com ST_CONDPAGTO='P', ST_ATIVO='S' e AVG(CONDPARCELA.NR_DIAS) ≤ NR_DIASMEDIA; (3) faz INSERT INTO PESSOACONDPAGTO para cada uma das condpagtos encontradas (UdmTFA002.pas linhas 735-789 e 1271-1327)
validaPrazoMedio em MPD002Chamada em dois pontos: após validate da pessoa (linha 1755) e após validate da condpagto (linha 2090). Executa um SELECT que exige existir linha em PESSOACONDPAGTO para o par (CD_PESSOA, CD_CONDPAGTO); se não existir lança W-0000 com mensagem detalhada listando 4 possíveis causas (TFA001, MFA001, endereço, TFA002) — ver UdmMPD002.pas linhas 4579-4607
flagValidadePassa a ser relevante — ativada apenas depois que o usuário valida manualmente pessoa/condpagto, evitando disparar validaPrazoMedio ao simplesmente abrir um pedido gravado
Listagem MPD081As colunas PF.ST_BLOQUEIAPRAZOMEDIO + PF.ST_BLOQUEIOPED ficam disponíveis no dataset do painel de bloqueios (UMPD081.pas linhas 552, 592, 618, 655), permitindo comportamento similar ao MPD002 ao selecionar F9 de condpagto (linhas 877-889)

Simulação passo a passo​

  1. MFA001 → aba Pedidos / O.S. → Opção 1 → Bloqueio pelo Prazo Médio = "Sim"
  2. Salve (F6)
  3. Vá em TFA002 para um cliente com crédito já cadastrado. Altere o campo "Nr. Dias Média" (ex: de 0 para 30)
  4. Sistema exibe C-0736. Confirme com Sim
  5. Sistema apaga todas as condpagtos a prazo liberadas para o cliente e reinsere apenas as que têm média de parcelas ≤ 30 dias
  6. Abra um Pedido de Venda (MPD002)
  7. Sem informar o cliente ainda, pressione F9 em "Condição de Pagamento" → W-0000 "Para listar a condição de pagamento, informe a pessoa…"
  8. Informe o cliente, F9 em condpagto → lista somente as condpagtos em PESSOACONDPAGTO do cliente (que foram filtradas pelo prazo médio)
  9. Tente informar manualmente (sem F9) uma condpagto a prazo que não está em PESSOACONDPAGTO para esse cliente
  10. Ao sair do campo, validaPrazoMedio dispara → W-0000: A condição de pagamento(X) não está liberada para o Cliente informado (Y)! Possíveis problemas: Verifique as condições de pagamento liberadas[TFA001]; Verifique se a condição de pagamento padrão[MFA001] está liberada para o cliente; Verifique se a condição de pagamento padrão do endereço do cliente está liberada[TFA001]; Verifique o limite de prazo médio do cliente[TFA002]!

Resultado esperado: Vendas só podem usar condpagtos cuja média de prazo (AVG(CONDPARCELA.NR_DIAS)) é compatível com o limite configurado em TFA002 para aquele cliente. Clientes novos ou sem NR_DIASMEDIA cadastrado não conseguem usar nenhuma condpagto a prazo até serem cadastrados em TFA002.


Interação com outros parâmetros​

Com ST_BLOQUEIOPED​

Os dois parâmetros compartilham o mesmo bloco de código no F9 de condpagto em MPD002, MPD081, MOF001 e MOF008 — mas representam regras distintas:

  • ST_BLOQUEIAPRAZOMEDIO = 'S' → restringe quais condpagtos são listadas/aceitas (filtra por prazo médio).
  • ST_BLOQUEIOPED = 'I' (Verifica Inadimplência) → também força o uso da busca CONDPAGTOPESSOA e valida liberação do cliente, mas a motivação é inadimplência/crédito, não prazo médio.

Quando qualquer um dos dois estiver ativo, a UI passa a exigir cliente informado antes do F9 de condpagto e usa Busca('CONDPAGTOPESSOA'). Exemplo em UMPD002.pas:

if (ParmFatur.Values['ST_BLOQUEIAPRAZOMEDIO'] = 'S') or (ParmFatur.Values['ST_BLOQUEIOPED'] = 'I') then
Resultado := Busca(dmMPD002.transaction, 'CONDPAGTOPESSOA', Parametros)
else
begin
Parametros.addParam(0);
Parametros.addParam(Nulo(dmMPD002.tabPEDIDOCD_PESSOA.AsString, 'I'));
Resultado := Busca(dmMPD002.transaction, 'CONDPAGTO', Parametros);
end;

No entanto, apenas ST_BLOQUEIAPRAZOMEDIO='S' dispara validaPrazoMedio e o recadastro automático em PESSOACONDPAGTO pelo TFA002 (ST_BLOQUEIOPED='I' faz outra validação — ver UdmMPD002.pas linhas 2073-2088).

Com ST_JUROVENDA​

ST_JUROVENDA = 'M' (Prazo Médio - juro composto por subgrupo) usa o mesmo conceito de "prazo médio" para cálculo de juro na venda, mas é aplicação independente: enquanto ST_BLOQUEIAPRAZOMEDIO restringe quais condpagtos o cliente pode usar, ST_JUROVENDA='M' altera o preço do item aplicando juro composto por dias/30. Os dois podem estar ativos simultaneamente sem conflito — a validação de liberação ocorre antes, o cálculo de juro depois. Ver ST_JUROVENDA.


Tabela Comparativa Resumida​

AspectoN (Não)S (Sim)
F9 condpagto em MPD002/MPD081/MOF001/MOF008Busca('CONDPAGTO') — todas ativasBusca('CONDPAGTOPESSOA') — filtradas pelo cliente
Exige cliente informado antes do F9NãoSim (W-0000)
validaPrazoMedio em MPD002Nunca disparaDispara após validate de pessoa e de condpagto
TFA002 ao alterar NR_DIASMEDIANenhum efeito colateralExibe C-0736 e recadastra PESSOACONDPAGTO automaticamente
Condpagtos aceitas no pedidoQualquer uma ativaApenas as presentes em PESSOACONDPAGTO (já filtradas por prazo médio)
Compatível com ST_BLOQUEIOPED='I'Sim (BLOQUEIOPED funciona sozinho)Sim (reforçam-se mutuamente no F9)

Referências no Código Fonte​

Delphi — Definição e default​

  • source/MFA001/UMFA001.dfm linhas 8901-8927 — combo cmbST_BLOQUEIAPRAZOMEDIO (Items: 'Sim'#9'S' / 'Não'#9'N', Style = csDropDownList)
  • source/MFA001/UMFA001.dfm linhas 8109-8122 — label lbl57 "Bloqueio pelo Prazo Médio"
  • source/MFA001/UdmMFA001.pas linha 207 — campo persistente tabPARMFATURST_BLOQUEIAPRAZOMEDIO: TStringField
  • source/MFA001/UdmMFA001.pas linha 523 — valor default 'N' em AfterInsert

Delphi — Consumidores​

  • source/MPD002/UdmMPD002.pas linhas 443-445 — comentário explicando flagValidade e o parâmetro
  • source/MPD002/UdmMPD002.pas linhas 1755-1756 — dispara validaPrazoMedio após validate da pessoa
  • source/MPD002/UdmMPD002.pas linhas 2090-2091 — dispara validaPrazoMedio após validate da condpagto
  • source/MPD002/UdmMPD002.pas linha 5750 — inclui P.ST_BLOQUEIAPRAZOMEDIO no SELECT de BuscaParametros_MPD002
  • source/MPD002/UdmMPD002.pas linhas 4579-4607 — corpo de validaPrazoMedio (SELECT sobre CONDPAGTO + PESSOACONDPAGTO + raise W-0000)
  • source/MPD002/UMPD002.pas linhas 3818, 3829 — troca Busca('CONDPAGTO') por Busca('CONDPAGTOPESSOA') no F9
  • source/MPD081/UdmMPD081.pas linha 89 — campo persistente tabPEDIDOST_BLOQUEIAPRAZOMEDIO
  • source/MPD081/UMPD081.pas linhas 552, 592, 618, 655 — colunas PF.ST_BLOQUEIAPRAZOMEDIO nos 2 SELECTs e GROUP BYs do painel
  • source/MPD081/UMPD081.pas linhas 877, 889 — lógica de F9 de condpagto no painel de bloqueios
  • source/MOF001/UMOF001.pas linhas 3032, 3043 — F9 de condpagto em Ordem de Serviço
  • source/MOF008/UMOF008.pas linhas 804, 815 — F9 de condpagto em OS com pagamento
  • source/TFA002/UdmTFA002.pas linha 731 — tabCREDITONR_DIASMEDIAValidate (recadastro de PESSOACONDPAGTO para cliente individual)
  • source/TFA002/UdmTFA002.pas linha 1267 — tabCREDITOGRUPONR_DIASMEDIAValidate (recadastro para grupo)

Mobile (não implementado)​

  • source/Mobile/WebAPP/src/app/main/vendas/pedido/checkout/checkout.component.ts linha 192 — comentário //if (this.appConfig.parmFatur.ST_BLOQUEIAPRAZOMEDIO)
  • source/Mobile/WebAPP/src/app/main/oficina/ordem/fechamento-ordem/fechamento-ordem.component.ts linha 198 — comentário análogo

SQL / Procedures​

Nenhuma referência encontrada em Scripts/ — o parâmetro é puramente de UI/validação client-side Delphi (todas as decisões são feitas no código Delphi; as procedures PARCELA_FINANCIAMENTO e CONDPAGTOPESSOA consumidas são agnósticas ao parâmetro).

Mensagens associadas​

  • C-0736 (dist/mensagens.pt-BR linha 736) — confirmação do recadastro em TFA002: "ATENÇÃO! Serão excluídas todas as condições de pagamento A Prazo (com parcelas) liberadas para o cliente (TFA001). Para serem adicionadas novamente de acordo com o número de dias informados! Deseja Realmente continuar?"
  • W-0000 (livre) usada para "Para listar a condição de pagamento, informe a pessoa para validar as cond. de pagto. liberadas(TFA001)!" (MPD002, MPD081, MOF001, MOF008)
  • W-0000 (livre) usada em validaPrazoMedio para "A condição de pagamento(X) não está liberada para o Cliente informado (Y)!..."