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.dfmlinhas 8901-8927, label "Bloqueio pelo Prazo Médio" emlbl57linhas 8109-8122) Tabela:PARMFATUR.ST_BLOQUEIAPRAZOMEDIOValor padrão:N(Não) - definido emUdmMFA001.paslinha 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ódulo | Código | Descrição |
|---|---|---|
| Parâmetros Faturamento | MFA001 | Tela de configuração (combo principal em UMFA001.dfm linha 8901; campo persistente UdmMFA001.pas linha 207; default 'N' em linha 523) |
| Crédito do Cliente | TFA002 | Ao 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 Venda | MPD002 | Chama 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 Pedidos | MPD081 | Coluna 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ço | MOF001 | Altera listagem F9 de condpagto para usar CONDPAGTOPESSOA e exigir cliente informado (UMOF001.pas linhas 3032, 3043) |
| OS com Pagamento | MOF008 | Mesma lógica da MOF001, usando dmMOF008.ParmFatur (UMOF008.pas linhas 804, 815) |
| App Mobile - Checkout Pedido | Mobile/WebAPP | Referência comentada em checkout.component.ts linha 192 (não implementado no mobile) |
| App Mobile - Fechamento O.S. | Mobile/WebAPP | Referência comentada em fechamento-ordem.component.ts linha 198 (não implementado no mobile) |
Campos envolvidos
| Campo | Tabela | Descrição |
|---|---|---|
ST_BLOQUEIAPRAZOMEDIO | PARMFATUR | O próprio parâmetro (char 1): S/N |
NR_DIASMEDIA | CREDITO | Limite de prazo médio em dias (individual do cliente - TFA002 aba "Crédito") |
NR_DIASMEDIA | CREDITOGRUPO | Limite 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_CONDPAGTO | CONDPAGTO | Situação da condpagto (P = a Prazo - é a única filtrada pelo TFA002) |
CD_CONDPAGTO | PEDIDO / ORDEMSERVICO | Condiçã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 faz | Detalhe |
|---|---|
| F9 de condição de pagamento no Pedido/OS | Abre 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 TFA002 | Alterar 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 MPD002 | Nunca é chamada (o if (ParmFatur.Values['ST_BLOQUEIAPRAZOMEDIO'] = 'S') cai fora) |
flagValidade | Também permanece desligada ao abrir pedidos gravados (comentário UdmMPD002.pas linhas 443-445) |
Simulação passo a passo
- MFA001 → aba Pedidos / O.S. → Opção 1 → Bloqueio pelo Prazo Médio = "Não"
- Salve (F6)
- Abra o Pedido de Venda (MPD002)
- Sem informar o cliente ainda, pressione F9 no campo "Condição de Pagamento"
- O sistema abre a busca normalmente e lista todas as condpagtos ativas (
Busca('CONDPAGTO')) - 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 faz | Detalhe |
|---|---|
| F9 de condição de pagamento no Pedido/OS | Abre 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 TFA002 | Ao 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 MPD002 | Chamada 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 |
flagValidade | Passa a ser relevante — ativada apenas depois que o usuário valida manualmente pessoa/condpagto, evitando disparar validaPrazoMedio ao simplesmente abrir um pedido gravado |
| Listagem MPD081 | As 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
- MFA001 → aba Pedidos / O.S. → Opção 1 → Bloqueio pelo Prazo Médio = "Sim"
- Salve (F6)
- Vá em TFA002 para um cliente com crédito já cadastrado. Altere o campo "Nr. Dias Média" (ex: de 0 para 30)
- Sistema exibe
C-0736. Confirme com Sim - Sistema apaga todas as condpagtos a prazo liberadas para o cliente e reinsere apenas as que têm média de parcelas ≤ 30 dias
- Abra um Pedido de Venda (MPD002)
- Sem informar o cliente ainda, pressione F9 em "Condição de Pagamento" → W-0000 "Para listar a condição de pagamento, informe a pessoa…"
- Informe o cliente, F9 em condpagto → lista somente as condpagtos em
PESSOACONDPAGTOdo cliente (que foram filtradas pelo prazo médio) - Tente informar manualmente (sem F9) uma condpagto a prazo que não está em
PESSOACONDPAGTOpara esse cliente - Ao sair do campo,
validaPrazoMediodispara →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 buscaCONDPAGTOPESSOAe 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
| Aspecto | N (Não) | S (Sim) |
|---|---|---|
| F9 condpagto em MPD002/MPD081/MOF001/MOF008 | Busca('CONDPAGTO') — todas ativas | Busca('CONDPAGTOPESSOA') — filtradas pelo cliente |
| Exige cliente informado antes do F9 | Não | Sim (W-0000) |
validaPrazoMedio em MPD002 | Nunca dispara | Dispara após validate de pessoa e de condpagto |
TFA002 ao alterar NR_DIASMEDIA | Nenhum efeito colateral | Exibe C-0736 e recadastra PESSOACONDPAGTO automaticamente |
| Condpagtos aceitas no pedido | Qualquer uma ativa | Apenas 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.dfmlinhas 8901-8927 — combocmbST_BLOQUEIAPRAZOMEDIO(Items:'Sim'#9'S'/'Não'#9'N',Style = csDropDownList)source/MFA001/UMFA001.dfmlinhas 8109-8122 — labellbl57"Bloqueio pelo Prazo Médio"source/MFA001/UdmMFA001.paslinha 207 — campo persistentetabPARMFATURST_BLOQUEIAPRAZOMEDIO: TStringFieldsource/MFA001/UdmMFA001.paslinha 523 — valor default'N'emAfterInsert
Delphi — Consumidores
source/MPD002/UdmMPD002.paslinhas 443-445 — comentário explicandoflagValidadee o parâmetrosource/MPD002/UdmMPD002.paslinhas 1755-1756 — disparavalidaPrazoMedioapós validate da pessoasource/MPD002/UdmMPD002.paslinhas 2090-2091 — disparavalidaPrazoMedioapós validate da condpagtosource/MPD002/UdmMPD002.paslinha 5750 — incluiP.ST_BLOQUEIAPRAZOMEDIOno SELECT deBuscaParametros_MPD002source/MPD002/UdmMPD002.paslinhas 4579-4607 — corpo devalidaPrazoMedio(SELECT sobreCONDPAGTO + PESSOACONDPAGTO+ raise W-0000)source/MPD002/UMPD002.paslinhas 3818, 3829 — trocaBusca('CONDPAGTO')porBusca('CONDPAGTOPESSOA')no F9source/MPD081/UdmMPD081.paslinha 89 — campo persistentetabPEDIDOST_BLOQUEIAPRAZOMEDIOsource/MPD081/UMPD081.paslinhas 552, 592, 618, 655 — colunasPF.ST_BLOQUEIAPRAZOMEDIOnos 2 SELECTs e GROUP BYs do painelsource/MPD081/UMPD081.paslinhas 877, 889 — lógica de F9 de condpagto no painel de bloqueiossource/MOF001/UMOF001.paslinhas 3032, 3043 — F9 de condpagto em Ordem de Serviçosource/MOF008/UMOF008.paslinhas 804, 815 — F9 de condpagto em OS com pagamentosource/TFA002/UdmTFA002.paslinha 731 —tabCREDITONR_DIASMEDIAValidate(recadastro dePESSOACONDPAGTOpara cliente individual)source/TFA002/UdmTFA002.paslinha 1267 —tabCREDITOGRUPONR_DIASMEDIAValidate(recadastro para grupo)
Mobile (não implementado)
source/Mobile/WebAPP/src/app/main/vendas/pedido/checkout/checkout.component.tslinha 192 — comentário//if (this.appConfig.parmFatur.ST_BLOQUEIAPRAZOMEDIO)source/Mobile/WebAPP/src/app/main/oficina/ordem/fechamento-ordem/fechamento-ordem.component.tslinha 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 emvalidaPrazoMediopara "A condição de pagamento(X) não está liberada para o Cliente informado (Y)!..."