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ódulo | Código | Descrição |
|---|
| Pedido de Compra | MPD001 | Pedido de compra (grava parcelas quando TP_PEDIDO = 'E') |
| Pedido de Venda | MPD002 | Pedido de venda — fluxo principal com cálculo de juro |
| Orçamento | MPD018 | Orçamento (usa mesma variável iST_PARCELAPEDIDO) |
| Pedido de Venda (Mobile) | MPD020 | Pedido de venda mobile |
| Pedido (Outro Tipo) | MPD024 | Pedido outro tipo (consulta direta em PARMFATUR) |
| Locação | MPD043 | Locação — gera pedido de venda e consulta parâmetro |
| Pedido | MPD046 | Consulta direta em PARMFATUR para decidir parcelamento |
| Pedido (ramo) | MPD088 | Usa parmFatur.Values['ST_PARCELAPEDIDO'] |
| Pedido de Compra (alternativo) | MPD092 | Variante de pedido de compra |
| NF Entrada | MNF001 | Vincula itens do pedido à nota (tabela PEDIDONOTA) quando 'S' |
| NF Saída | MNF002 | Emissão de nota fiscal de saída (bloco comentado por Poletinho) |
| NF de Compra/Devolução | MNF008 | Vincula itens do pedido à nota (tabela PEDIDONOTA) quando 'S' |
| Conhecimento de Transporte | MCO006 | Consulta o parâmetro junto de ST_ENTREGA |
| Configurador de Parâmetros | CPD009 | Tela auxiliar que grava ST_PARCELAPEDIDO (INSERT/UPDATE) |
| Relatório/Auxiliar | RCA006 | Consulta o parâmetro em SELECT |
Procedures impactadas
| Procedure | Arquivo | Descrição |
|---|
PROCESSA_PEDIDOSOVIS | Scripts/PROCESSA_PEDIDOSOVIS.sql | Processa 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_DESM | Scripts/PROCESSA_PEDIDOSOVIS_DESM.sql | Versã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_PARCELAPEDIDO | Scripts/RETORNA_PARCELAPEDIDO.sql | Procedure utilitária chamada pelas duas acima para gerar datas e valores das parcelas conforme a condição de pagamento. |
Campos envolvidos
| Campo | Descrição |
|---|
PARMFATUR.ST_PARCELAPEDIDO | Flag S/N que habilita o parcelamento manual do pedido |
PARMFATUR.VL_MINPARCELAPEDIDO | Valor mínimo por parcela — lido junto do parâmetro (ver UdmMPD018.pas linha 287 e UdmMPD092.pas linha 278) |
PEDIDO.ST_CONDPAGTO | Tipo da condição de pagamento. Parcelamento só dispara quando = 'P' (a Prazo) |
PEDIDO.TP_PEDIDO | Tipo do pedido (S = Saída/Venda, E = Entrada/Compra). Em MPD001 exige = 'E'; em MPD020 exige = 'S' |
PARCELAPEDIDO | Tabela destino: CD_EMPRESA, NR_PEDIDO, TP_PEDIDO, NR_PARCELA, DT_VENCIMENTO, VL_PARCELA, CD_FORMAPAGTO, VL_JUROPARCELA |
PEDIDONOTA | Tabela de vínculo pedido→nota (alimentada em MNF001/MNF008 quando 'S') |
MOVIMENTACAO.CD_TIPOCONTA | Pré-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 faz | Detalhe |
|---|
| 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 pedido | ST_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 SOVIS | Procedures PROCESSA_PEDIDOSOVIS[_DESM] geram parcelas automaticamente via RETORNA_PARCELAPEDIDO |
Simulação passo a passo
- Vá em MFA001 → Parâmetros → Ambos → Opção 1 → ST_PARCELAPEDIDO = "Sim".
- Salve os parâmetros (F6).
- Abra um Pedido de Venda (MPD002).
- Informe um cliente, uma condição de pagamento a prazo (ex.: 30/60/90) e uma forma de pagamento.
- Adicione itens cujo
CD_MOVIMENTACAO tenha CD_TIPOCONTA preenchido (movimentação que gera financeiro).
- Confirme o pedido (botão Salvar).
- Resultado: antes de confirmar a gravação, abre a tela
frmParcelaPedido com as parcelas sugeridas conforme a condição de pagamento (consultar UParcelaPedido.pas).
- 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.
- Os registros são gravados em
PARCELAPEDIDO (um por parcela).
- 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 faz | Detalhe |
|---|
| 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 SOVIS | PROCESSA_PEDIDOSOVIS[_DESM] pulam o bloco IF (V_ST_PARCELAPEDIDO = 'S') e não inserem em PARCELAPEDIDO |
Simulação passo a passo
- MFA001 → ST_PARCELAPEDIDO = "Não".
- Salve os parâmetros (F6).
- Abra um Pedido de Venda (MPD002).
- Informe cliente e condição de pagamento a prazo.
- Adicione itens normalmente.
- Confirme o pedido.
- Resultado: o pedido é salvo sem abrir a tela de parcelamento. Nenhum registro é gerado em
PARCELAPEDIDO.
- 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
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.
O fluxo varia conforme o tipo de pedido:
| Tela | Exige TP_PEDIDO | Linha 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).
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ção | Abre tela de parcelamento? | Grava PARCELAPEDIDO? | Rateia juro nos itens? | Sync PEDIDONOTA na NF? | SOVIS gera parcelas? |
|---|
| S | Sim (se ST_CONDPAGTO='P') | Sim | Sim (MPD002/MPD020) | Sim (MNF001/MNF008) | Sim |
| N | Não | Não | Não | Não | Não |
Referências no Código Fonte
Tela de configuração (MFA001)
| Arquivo | Linha | Trecho |
|---|
source/MFA001/UMFA001.dfm | 8306–8332 | Declaração do TwwDBComboBox cmbST_PARCELAPEDIDO, DataField = 'ST_PARCELAPEDIDO', itens Sim→S, Não→N |
source/MFA001/UMFA001.pas | 299 | Campo cmbST_PARCELAPEDIDO: TwwDBComboBox; |
source/MFA001/UdmMFA001.dfm | 103, 903–904, 2349, 2496, 2722, 2983 | SELECT/INSERT/UPDATE na tabela PARMFATUR e TStringField tabPARMFATURST_PARCELAPEDIDO |
source/MFA001/UdmMFA001.pas | 89 | Field tabPARMFATURST_PARCELAPEDIDO: TStringField; |
source/MFA001/UdmMFA001.pas | 454 | Valor padrão := 'N' em tabPARMFATURAfterInsert |
Leitura do parâmetro e fluxo de parcelamento
| Arquivo | Linha | Trecho |
|---|
source/MPD001/UdmMPD001.pas | 168, 252, 268 | Declara iST_PARCELAPEDIDO, SELECT em PARMFATUR, atribui Resultado[11] |
source/MPD001/UMPD001.pas | 647–648 | if ST_CONDPAGTO='P' and TP_PEDIDO='E' and iST_PARCELAPEDIDO='S' |
source/MPD001/UMPD001.pas | 655–657 | Reconfere P.ST_PARCELAPEDIDO direto em PARMFATUR |
source/MPD002/UMPD002.pas | 1266–1280 | Fluxo de parcelamento (cancelar = Parcelamento do Pedido Cancelado!) |
source/MPD002/UMPD002.pas | 3012–3030 | Segundo ponto de parcelamento (grava) |
source/MPD002/UdmMPD002.pas | 5739 | SELECT do parâmetro junto do pedido |
source/MPD018/UdmMPD018.pas | 246, 287, 303 | Declara, SELECT (junto com VL_MINPARCELAPEDIDO), atribui |
source/MPD018/UMPD018.pas | 1351 | Usa iST_PARCELAPEDIDO = 'S' na gravação |
source/MPD020/UdmMPD020.pas | 239, 320, 355 | Declara, SELECT, atribui Resultado[18] |
source/MPD020/UMPD020.pas | 827 | if TP_PEDIDO='S' and ST_CONDPAGTO='P' and iST_PARCELAPEDIDO='S' |
source/MPD024/UMPD024.pas | 535 | SELECT direto em PARMFATUR |
source/MPD043/UMPD043.pas | 2020, 4193, 4650 | Três SELECTs diretos em PARMFATUR para decidir parcelamento da locação |
source/MPD046/UMPD046.pas | 2160, 2642 | SELECT direto em PARMFATUR |
source/MPD088/UdmMPD088.pas | 1270 | parmFatur.Values['ST_PARCELAPEDIDO'] = 'S' |
source/MPD092/UdmMPD092.pas | 236, 278, 292 | Declara, SELECT, atribui |
source/MPD092/UMPD092.pas | 1164 | iST_PARCELAPEDIDO = 'S' |
| Arquivo | Linha | Trecho |
|---|
source/MNF001/UdmMNF001.pas | 1112, 1376, 1410 | Declara, SELECT, Resultado[18] |
source/MNF001/UdmMNF001.pas | 3061–3086 | if iST_PARCELAPEDIDO='S' then → DELETE + INSERT em PEDIDONOTA |
source/MNF002/UMNF002.pas | 4460 | SELECT ST_PARCELAPEDIDO por CD_EMPRFILIAL |
source/MNF002/UdmMNF002.pas | 3075–3101 | Bloco comentado ("Foi Comentado -> Poletinho") — NF de saída |
source/MNF002/UdmMNF002.pas | 10495 | SELECT consolidado do parâmetro |
source/MNF008/UdmMNF008.pas | 475, 655, 686 | Declara, SELECT, Resultado[22] |
source/MNF008/UdmMNF008.pas | 760 | SELECT adicional |
source/MNF008/UdmMNF008.pas | 1607–1627 | if iST_PARCELAPEDIDO='S' then → DELETE + INSERT em PEDIDONOTA |
source/MCO006/UdmMCO006.pas | 2104 | SELECT P.ST_PARCELAPEDIDO, P.ST_ENTREGA em conhecimento de transporte |
Telas auxiliares / relatórios
| Arquivo | Linha | Trecho |
|---|
source/CPD009/UdmCPD009.dfm | 312, 378, 468, 557 | SELECT/INSERT/UPDATE em PARMFATUR (configurador) |
source/RCA006/UdmRCA006.dfm | — | SELECT em PARMFATUR que inclui ST_PARCELAPEDIDO |
Procedures SQL (Firebird)
| Arquivo | Linha | Trecho |
|---|
Scripts/PROCESSA_PEDIDOSOVIS.sql | 82 | declare variable V_ST_PARCELAPEDIDO type of DOM_CHAR1; |
Scripts/PROCESSA_PEDIDOSOVIS.sql | 124–127 | SELECT ST_VARIOSVENDEDORES, ST_PARCELAPEDIDO ... INTO ... |
Scripts/PROCESSA_PEDIDOSOVIS.sql | 959–981 | IF (V_ST_PARCELAPEDIDO = 'S') THEN → FOR em RETORNA_PARCELAPEDIDO → INSERT INTO PARCELAPEDIDO |
Scripts/PROCESSA_PEDIDOSOVIS_DESM.sql | 80 | declare variable V_ST_PARCELAPEDIDO type of DOM_CHAR1; |
Scripts/PROCESSA_PEDIDOSOVIS_DESM.sql | 105–108 | SELECT ... INTO :V_ST_PARCELAPEDIDO |
Scripts/PROCESSA_PEDIDOSOVIS_DESM.sql | 847–869 | IF (V_ST_PARCELAPEDIDO = 'S') THEN → FOR → INSERT INTO PARCELAPEDIDO |
Unit de parcelamento (jParcelamento)
| Arquivo | Linha | Trecho |
|---|
source/jParcelamento/jParcela.pas | 51–52 | Roteia iParametros[0] = 'ParcelaPedido' para função ParcelaPedido(...) |
source/jParcelamento/UParcelaPedido.pas | 104 | sqlParcelaPedido = 'SELECT ... ' base da tela |
source/jParcelamento/UParcelaPedido.pas | 158–233 | Função ParcelaPedido(iTransaction, iParametros) — cria frmParcelaPedido, aplica vlMinParcelaPedido e abre ShowModal |