Pular para o conteúdo principal

Parâmetro de Parcelamento do Pedido

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Pedidos / O.S. → Opção 1 (label "Parcelamento Pedido") Tabela: PARMFATUR.ST_PARCELAPEDIDO Valor padrão: N (Não)

Define se o sistema abre a tela de parcelamento (frmParcelaPedido, BPL jParcelamento) ao confirmar um pedido/nota cuja condição de pagamento seja a prazo (PEDIDO.ST_CONDPAGTO = 'P'), permitindo que o usuário ajuste datas de vencimento, valores e juros antes de gerar as parcelas em PARCELAPEDIDO.

Telas impactadas​

MóduloCódigoDescrição
Pedido de CompraMPD001Pedido de compra (grava parcelas quando TP_PEDIDO = 'E')
Pedido de VendaMPD002Pedido de venda — fluxo principal com cálculo de juro
OrçamentoMPD018Orçamento (usa mesma variável iST_PARCELAPEDIDO)
Pedido de Venda (Mobile)MPD020Pedido de venda mobile
Pedido (Outro Tipo)MPD024Pedido outro tipo (consulta direta em PARMFATUR)
LocaçãoMPD043Locação — gera pedido de venda e consulta parâmetro
PedidoMPD046Consulta direta em PARMFATUR para decidir parcelamento
Pedido (ramo)MPD088Usa parmFatur.Values['ST_PARCELAPEDIDO']
Pedido de Compra (alternativo)MPD092Variante de pedido de compra
NF EntradaMNF001Vincula itens do pedido à nota (tabela PEDIDONOTA) quando 'S'
NF SaídaMNF002Emissão de nota fiscal de saída (bloco comentado por Poletinho)
NF de Compra/DevoluçãoMNF008Vincula itens do pedido à nota (tabela PEDIDONOTA) quando 'S'
Conhecimento de TransporteMCO006Consulta o parâmetro junto de ST_ENTREGA
Configurador de ParâmetrosCPD009Tela auxiliar que grava ST_PARCELAPEDIDO (INSERT/UPDATE)
Relatório/AuxiliarRCA006Consulta o parâmetro em SELECT

Procedures impactadas​

ProcedureArquivoDescrição
PROCESSA_PEDIDOSOVISScripts/PROCESSA_PEDIDOSOVIS.sqlProcessa pedidos importados do SOVIS. Declara V_ST_PARCELAPEDIDO (linha 82), lê de PARMFATUR (linhas 124–127) e, quando = 'S' (linha 959), insere parcelas em PARCELAPEDIDO usando RETORNA_PARCELAPEDIDO.
PROCESSA_PEDIDOSOVIS_DESMScripts/PROCESSA_PEDIDOSOVIS_DESM.sqlVersão desmembrada do processamento SOVIS. Mesmo padrão: declara a variável (linha 80), lê (linhas 105–108) e gera parcelas quando = 'S' (linha 847).
RETORNA_PARCELAPEDIDOScripts/RETORNA_PARCELAPEDIDO.sqlProcedure utilitária chamada pelas duas acima para gerar datas e valores das parcelas conforme a condição de pagamento.

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_PARCELAPEDIDOFlag S/N que habilita o parcelamento manual do pedido
PARMFATUR.VL_MINPARCELAPEDIDOValor mínimo por parcela — lido junto do parâmetro (ver UdmMPD018.pas linha 287 e UdmMPD092.pas linha 278)
PEDIDO.ST_CONDPAGTOTipo da condição de pagamento. Parcelamento só dispara quando = 'P' (a Prazo)
PEDIDO.TP_PEDIDOTipo do pedido (S = Saída/Venda, E = Entrada/Compra). Em MPD001 exige = 'E'; em MPD020 exige = 'S'
PARCELAPEDIDOTabela destino: CD_EMPRESA, NR_PEDIDO, TP_PEDIDO, NR_PARCELA, DT_VENCIMENTO, VL_PARCELA, CD_FORMAPAGTO, VL_JUROPARCELA
PEDIDONOTATabela de vínculo pedido→nota (alimentada em MNF001/MNF008 quando 'S')
MOVIMENTACAO.CD_TIPOCONTAPré-requisito: só gera parcela se o item tiver movimentação com CD_TIPOCONTA IS NOT NULL (ver UMPD002.pas linhas 1248–1255)

Opções disponíveis​

S - Sim​

O que fazDetalhe
Abre tela de parcelamento ao salvar pedido?SIM, chama MostraParcela(...) passando 'ParcelaPedido' como primeiro parâmetro (unit jParcelamento.UParcelaPedido)
Gera registros em PARCELAPEDIDO?SIM — uma linha por parcela, com data de vencimento, valor e juro calculado
Pré-condições do pedidoST_CONDPAGTO = 'P' E existir item com movimentação que tenha CD_TIPOCONTA não nulo
Juro rateado nos itens?SIM (apenas MPD002/MPD020): se SUM(VL_JUROPARCELA) > 0, o juro é distribuído proporcionalmente sobre os itens do pedido
Liga com nota fiscal?SIM em MNF001/MNF008 — ao gerar a nota de entrada/devolução, apaga e reinsere PEDIDONOTA para rastrear qual parcela originou cada item
Importação SOVISProcedures PROCESSA_PEDIDOSOVIS[_DESM] geram parcelas automaticamente via RETORNA_PARCELAPEDIDO

Simulação passo a passo​

  1. Vá em MFA001 → Parâmetros → Ambos → Opção 1 → ST_PARCELAPEDIDO = "Sim".
  2. Salve os parâmetros (F6).
  3. Abra um Pedido de Venda (MPD002).
  4. Informe um cliente, uma condição de pagamento a prazo (ex.: 30/60/90) e uma forma de pagamento.
  5. Adicione itens cujo CD_MOVIMENTACAO tenha CD_TIPOCONTA preenchido (movimentação que gera financeiro).
  6. Confirme o pedido (botão Salvar).
  7. Resultado: antes de confirmar a gravação, abre a tela frmParcelaPedido com as parcelas sugeridas conforme a condição de pagamento (consultar UParcelaPedido.pas).
  8. O usuário pode ajustar datas, valores e juros. Se houver juro (SUM(VL_JUROPARCELA) > 0), o sistema rateia o juro proporcionalmente nos itens antes de persistir.
  9. Os registros são gravados em PARCELAPEDIDO (um por parcela).
  10. Clicar em Cancelar na tela de parcelamento dispara raise JException.Create('W-0000', ['Parcelamento do Pedido Cancelado!']) (ver UMPD002.pas linhas 1279–1280 e 3029–3030) — o pedido não é salvo.

Resultado esperado: a tela de parcelamento é obrigatória e o pedido só é concluído se o usuário confirmar as parcelas.


N - Não​

O que fazDetalhe
Abre tela de parcelamento ao salvar pedido?NÃO
Gera registros em PARCELAPEDIDO?NÃO (na gravação do pedido). As parcelas ficam implícitas na condição de pagamento e só são materializadas no financeiro quando a nota fiscal for emitida
Juro rateado nos itens?Não (o fluxo é ignorado)
Liga com nota fiscal?Não — o bloco de INSERT INTO PEDIDONOTA em MNF001/MNF008 (if ( iST_PARCELAPEDIDO = 'S' )) é pulado
Importação SOVISPROCESSA_PEDIDOSOVIS[_DESM] pulam o bloco IF (V_ST_PARCELAPEDIDO = 'S') e não inserem em PARCELAPEDIDO

Simulação passo a passo​

  1. MFA001 → ST_PARCELAPEDIDO = "Não".
  2. Salve os parâmetros (F6).
  3. Abra um Pedido de Venda (MPD002).
  4. Informe cliente e condição de pagamento a prazo.
  5. Adicione itens normalmente.
  6. Confirme o pedido.
  7. Resultado: o pedido é salvo sem abrir a tela de parcelamento. Nenhum registro é gerado em PARCELAPEDIDO.
  8. Ao emitir a NF ligada ao pedido em MNF002, o bloco de sincronização PEDIDONOTA ligado a este parâmetro também é ignorado (ver bloco comentado por Poletinho em UdmMNF002.pas linhas 3075–3101 e o fluxo ativo em MNF008 linha 1607).

Este é o valor padrão ao criar um novo registro no MFA001 (UdmMFA001.pas linha 454: tabPARMFATURST_PARCELAPEDIDO.AsString := 'N';).


Observações importantes​

Interação com ST_CONDPAGTO​

O parcelamento só dispara quando PEDIDO.ST_CONDPAGTO = 'P' (a prazo). Mesmo com ST_PARCELAPEDIDO = 'S', pedidos à vista (ST_CONDPAGTO = 'V') nunca abrem a tela de parcelamento.

Interação com TP_PEDIDO​

O fluxo varia conforme o tipo de pedido:

TelaExige TP_PEDIDOLinha de referência
MPD001 (Compra)= 'E'UMPD001.pas linha 647
MPD020 (Venda Mobile)= 'S'UMPD020.pas linha 827
MPD002 (Venda)qualquer (usa Nulo(...,'S'))UMPD002.pas linha 1266
MPD024= 'E'UMPD024.pas linha 529

Pré-requisito de CD_TIPOCONTA​

A maioria das telas consulta o total dos itens filtrando por MOVIMENTACAO.CD_TIPOCONTA IS NOT NULL antes de abrir a tela de parcelamento. Itens com movimentação sem tipo de conta (movimentações não financeiras) não entram no cálculo e podem impedir o parcelamento se o total resultar vazio.

Rateio de juro nos itens​

Em MPD002/MPD020, depois que o usuário confirma as parcelas, o sistema soma VL_JUROPARCELA e — se positivo — rateia proporcionalmente esse valor em ITEMPEDIDO.VL_DESPESA (ou campo equivalente), para que o total do pedido reflita o custo do financiamento (ver UMPD002.pas linhas 1282–1299).

Vínculo com PEDIDONOTA na NF​

Em MNF001 (entrada) e MNF008 (entrada/devolução), quando iST_PARCELAPEDIDO = 'S', o sistema faz DELETE + INSERT em PEDIDONOTA para rastrear qual item do pedido originou qual item da nota (UdmMNF001.pas linha 3061, UdmMNF008.pas linha 1607). Com 'N', o vínculo é estabelecido apenas pelo INSERT INTO ITEMPEDIDONOTA padrão (sem a etapa extra de PEDIDONOTA).

Bloco comentado em MNF002​

Em UdmMNF002.pas linhas 3074–3101 há um bloco equivalente comentado com observação do desenvolvedor ("Foi Comentado -> Poletinho"): o código previa apagar/reinserir PEDIDONOTA na emissão de NF de saída mas foi desativado por gerar diferenças quando se misturam pedidos com e sem parcelas. Atualmente o MNF002 não executa o passo extra de PEDIDONOTA mesmo com ST_PARCELAPEDIDO = 'S'.

Valor mínimo da parcela​

O parâmetro anda junto de VL_MINPARCELAPEDIDO (lido no mesmo SELECT em UdmMPD018.pas linha 287, UdmMPD092.pas linha 278). Esse valor é atribuído a frmParcelaPedido.vlMinParcelaPedido (ver UParcelaPedido.pas linha 233) e a validação é feita dentro da unit jParcelamento.


Tabela Comparativa Resumida​

OpçãoAbre tela de parcelamento?Grava PARCELAPEDIDO?Rateia juro nos itens?Sync PEDIDONOTA na NF?SOVIS gera parcelas?
SSim (se ST_CONDPAGTO='P')SimSim (MPD002/MPD020)Sim (MNF001/MNF008)Sim
NNãoNãoNãoNãoNão

Referências no Código Fonte​

Tela de configuração (MFA001)​

ArquivoLinhaTrecho
source/MFA001/UMFA001.dfm8306–8332Declaração do TwwDBComboBox cmbST_PARCELAPEDIDO, DataField = 'ST_PARCELAPEDIDO', itens Sim→S, Não→N
source/MFA001/UMFA001.pas299Campo cmbST_PARCELAPEDIDO: TwwDBComboBox;
source/MFA001/UdmMFA001.dfm103, 903–904, 2349, 2496, 2722, 2983SELECT/INSERT/UPDATE na tabela PARMFATUR e TStringField tabPARMFATURST_PARCELAPEDIDO
source/MFA001/UdmMFA001.pas89Field tabPARMFATURST_PARCELAPEDIDO: TStringField;
source/MFA001/UdmMFA001.pas454Valor padrão := 'N' em tabPARMFATURAfterInsert

Leitura do parâmetro e fluxo de parcelamento​

ArquivoLinhaTrecho
source/MPD001/UdmMPD001.pas168, 252, 268Declara iST_PARCELAPEDIDO, SELECT em PARMFATUR, atribui Resultado[11]
source/MPD001/UMPD001.pas647–648if ST_CONDPAGTO='P' and TP_PEDIDO='E' and iST_PARCELAPEDIDO='S'
source/MPD001/UMPD001.pas655–657Reconfere P.ST_PARCELAPEDIDO direto em PARMFATUR
source/MPD002/UMPD002.pas1266–1280Fluxo de parcelamento (cancelar = Parcelamento do Pedido Cancelado!)
source/MPD002/UMPD002.pas3012–3030Segundo ponto de parcelamento (grava)
source/MPD002/UdmMPD002.pas5739SELECT do parâmetro junto do pedido
source/MPD018/UdmMPD018.pas246, 287, 303Declara, SELECT (junto com VL_MINPARCELAPEDIDO), atribui
source/MPD018/UMPD018.pas1351Usa iST_PARCELAPEDIDO = 'S' na gravação
source/MPD020/UdmMPD020.pas239, 320, 355Declara, SELECT, atribui Resultado[18]
source/MPD020/UMPD020.pas827if TP_PEDIDO='S' and ST_CONDPAGTO='P' and iST_PARCELAPEDIDO='S'
source/MPD024/UMPD024.pas535SELECT direto em PARMFATUR
source/MPD043/UMPD043.pas2020, 4193, 4650Três SELECTs diretos em PARMFATUR para decidir parcelamento da locação
source/MPD046/UMPD046.pas2160, 2642SELECT direto em PARMFATUR
source/MPD088/UdmMPD088.pas1270parmFatur.Values['ST_PARCELAPEDIDO'] = 'S'
source/MPD092/UdmMPD092.pas236, 278, 292Declara, SELECT, atribui
source/MPD092/UMPD092.pas1164iST_PARCELAPEDIDO = 'S'

Integração com Notas Fiscais​

ArquivoLinhaTrecho
source/MNF001/UdmMNF001.pas1112, 1376, 1410Declara, SELECT, Resultado[18]
source/MNF001/UdmMNF001.pas3061–3086if iST_PARCELAPEDIDO='S' then → DELETE + INSERT em PEDIDONOTA
source/MNF002/UMNF002.pas4460SELECT ST_PARCELAPEDIDO por CD_EMPRFILIAL
source/MNF002/UdmMNF002.pas3075–3101Bloco comentado ("Foi Comentado -> Poletinho") — NF de saída
source/MNF002/UdmMNF002.pas10495SELECT consolidado do parâmetro
source/MNF008/UdmMNF008.pas475, 655, 686Declara, SELECT, Resultado[22]
source/MNF008/UdmMNF008.pas760SELECT adicional
source/MNF008/UdmMNF008.pas1607–1627if iST_PARCELAPEDIDO='S' then → DELETE + INSERT em PEDIDONOTA
source/MCO006/UdmMCO006.pas2104SELECT P.ST_PARCELAPEDIDO, P.ST_ENTREGA em conhecimento de transporte

Telas auxiliares / relatórios​

ArquivoLinhaTrecho
source/CPD009/UdmCPD009.dfm312, 378, 468, 557SELECT/INSERT/UPDATE em PARMFATUR (configurador)
source/RCA006/UdmRCA006.dfm—SELECT em PARMFATUR que inclui ST_PARCELAPEDIDO

Procedures SQL (Firebird)​

ArquivoLinhaTrecho
Scripts/PROCESSA_PEDIDOSOVIS.sql82declare variable V_ST_PARCELAPEDIDO type of DOM_CHAR1;
Scripts/PROCESSA_PEDIDOSOVIS.sql124–127SELECT ST_VARIOSVENDEDORES, ST_PARCELAPEDIDO ... INTO ...
Scripts/PROCESSA_PEDIDOSOVIS.sql959–981IF (V_ST_PARCELAPEDIDO = 'S') THEN → FOR em RETORNA_PARCELAPEDIDO → INSERT INTO PARCELAPEDIDO
Scripts/PROCESSA_PEDIDOSOVIS_DESM.sql80declare variable V_ST_PARCELAPEDIDO type of DOM_CHAR1;
Scripts/PROCESSA_PEDIDOSOVIS_DESM.sql105–108SELECT ... INTO :V_ST_PARCELAPEDIDO
Scripts/PROCESSA_PEDIDOSOVIS_DESM.sql847–869IF (V_ST_PARCELAPEDIDO = 'S') THEN → FOR → INSERT INTO PARCELAPEDIDO

Unit de parcelamento (jParcelamento)​

ArquivoLinhaTrecho
source/jParcelamento/jParcela.pas51–52Roteia iParametros[0] = 'ParcelaPedido' para função ParcelaPedido(...)
source/jParcelamento/UParcelaPedido.pas104sqlParcelaPedido = 'SELECT ... ' base da tela
source/jParcelamento/UParcelaPedido.pas158–233Função ParcelaPedido(iTransaction, iParametros) — cria frmParcelaPedido, aplica vlMinParcelaPedido e abre ShowModal