Pular para o conteúdo principal

ST_PARCELAMENTO - Modo de Geração do Parcelamento

Tela: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Ambos → Opção 2 (pagPARMAMETROS → pagAmbos → pagFatOp2). Rótulo no formulário: "Prazo Parcelamento [MPD002/MNF002]" (lbl69, UMFA001.dfm:3863-3876). Combo: cmbST_PARCELAMENTO (UMFA001.dfm:4450-4476). Tabela: PARMFATUR.ST_PARCELAMENTO Tipo: DOM_CHAR1 DEFAULT 'A' NOT NULL (docs/schema/tables/PARMFATUR.sql:202). Valor padrão: A (Automático). Atribuído em UdmMFA001.pas:553 dentro do AfterInsert e também pelo DEFAULT do DDL.

Historicamente controlava se a tela de parcelamento (frmParcela, unit jParcelamento.UParcela) seria aberta para o usuário ajustar manualmente as parcelas de uma Nota Fiscal a prazo (valor M = Manual) ou se o sistema deveria gerar as parcelas automaticamente a partir da condição de pagamento (valor A = Automático). No ERP V2 (64 bits) o modo Manual foi aposentado — os dois únicos pontos de código que ramificavam com base no parâmetro (MNF002 e MNF033) tiveram a verificação comentada com a observação explícita do desenvolvedor: "ERP 64bits não terá mais opção de Manual. Somente Automático.". O parâmetro permanece gravado, é carregado em vários SELECTs de PARMFATUR, mas atualmente não altera comportamento — qualquer pedido/nota a prazo segue pelo fluxo de montagem automática (MostraParcela(...)).

Atenção: não confundir com ST_PARCELAPEDIDO (que decide se a tela de parcelamento do pedido é aberta) nem com PARCELAPEDIDO.ST_PARCELAMENTO (coluna da tabela PARCELAPEDIDO, que marca se uma parcela específica foi parcelada novamente). Este parâmetro vive em PARMFATUR e refere-se ao modo de geração do parcelamento — Automático ou Manual.

Telas impactadas​

MóduloCódigoPapel
Parâmetros de FaturamentoMFA001Produtora — cadastra/edita o valor (combo cmbST_PARCELAMENTO)
NF de SaídaMNF002Consumidora histórica (agora inerte) — em UdmMNF002.pas:3139-3164 o fluxo que decidia entre parcelamento automático/manual tem a verificação if (ParmFatur.Values['ST_PARCELAMENTO'] = 'A') comentada. Sempre abre a tela automática (MostraParcela).
NF-e Consumidor (NFC-e/MDFE)MNF033Consumidora histórica (agora inerte) — em UdmMNF033.pas:1307-1343, a função gera_Parcelamento segue o mesmo padrão: verificação comentada, chamada direta a MostraParcela.
Pedido de VendaMPD002Carrega o campo no SELECT de PARMFATUR em BuscaParametros (UdmMPD002.pas:5754) mas não consome o valor no fluxo Delphi (nenhum if/case com ST_PARCELAMENTO).
NF de Compra/DevoluçãoMNF008Carrega P.ST_PARCELAMENTO no SELECT de PARMFATUR (UdmMNF008.pas:766). Sem uso no fluxo.
Conhecimento de TransporteMCO006Carrega P.ST_PARCELAMENTO no SELECT de PARMFATUR (UdmMCO006.pas:2110). Sem uso no fluxo.

Procedures impactadas​

Nenhuma. Uma busca completa em Scripts/ (stored procedures Firebird) não encontra referências a ST_PARCELAMENTO. O parâmetro é usado apenas no código Delphi e apenas em ramos hoje comentados.

Campos envolvidos​

CampoTabelaDescrição
ST_PARCELAMENTOPARMFATURFlag A/M do modo de geração de parcelamento. Atualmente inerte (ver seção "Estado atual").
NOTA.ST_CONDPAGTONOTAPré-requisito para o fluxo: parcelamento só ocorre quando = 'P' (a prazo) em MNF002/MNF033.
MOVIMENTACAO.ST_CONTAS (ou iSt_Contas)MOVIMENTACAOSegundo pré-requisito em MNF002 (UdmMNF002.pas:3142-3143): só abre o fluxo de parcelamento se a movimentação da nota gerar contas a receber/pagar (iSt_Contas = 'S').
PARCELAPARCELATabela destino das parcelas da nota fiscal, alimentada por MostraParcela (unit jParcelamento). Cada linha contém CD_EMPRESA, NR_LANCAMENTO, NR_PARCELA, DT_VENCIMENTO, VL_PARCELA, ....
PARCELAPEDIDO.ST_PARCELAMENTOPARCELAPEDIDOHomônimo, não relacionado. Coluna da tabela de parcelas de pedido que marca se a parcela foi renegociada/reparcelada. Não tem ligação com o parâmetro de PARMFATUR.

Opções disponíveis​

A - Automático (padrão e, hoje, único valor efetivo)​

O que fazDetalhe
Abre tela de parcelamento no Salvar da nota?SIM, o sistema sempre chama MostraParcela(...) com Parametros[0] = 'Parcela' para montar as parcelas a partir da condição de pagamento. Cancelar a tela dispara W-0000 'Parcelamento da Nota Cancelado!' (UdmMNF002.pas:3161) ou W-0000 'Parcelamento do Pedido Cancelado!' (UdmMNF033.pas:1334).
Gera registros em PARCELA?SIM — uma linha por parcela, com DT_VENCIMENTO e VL_PARCELA calculados pela unit jParcelamento a partir de CONDPAGTO.
Pré-condiçõesNOTA.ST_CONDPAGTO = 'P' E movimentação com CD_TIPOCONTA (ou iSt_Contas = 'S').
Equivalência com M no V2Não há diferença — o ramo if (...'M') nunca foi implementado após o comentário dos blocos if (ParmFatur.Values['ST_PARCELAMENTO'] = 'A'). Tanto A quanto M caem no mesmo código (o begin..end que ficou sem if).

Simulação passo a passo​

  1. Vá em MFA001 → Parâmetros → Ambos → Opção 2 → Prazo Parcelamento = "Automático".
  2. Salve os parâmetros (F6).
  3. Abra uma Nota Fiscal de Saída (MNF002) com condição de pagamento a prazo (ST_CONDPAGTO = 'P') e movimentação que gera contas a receber.
  4. Confirme/salve a nota.
  5. Resultado: a tela frmParcela é apresentada com as parcelas sugeridas conforme CONDPAGTO (emitindo 1ª parcela na data base, subsequentes conforme prazos). Usuário pode ajustar datas/valores antes de confirmar. O cancelamento lança W-0000 'Parcelamento da Nota Cancelado!'.

Resultado esperado: fluxo padrão de parcelamento automático, sem diferença perceptível em relação ao modo "Manual" antigo.


M - Manual (desativado no V2 — não há ramo distinto no código atual)​

O que fazDetalhe
Comportamento histórico (Delphi 7 / 32 bits)Supostamente abriria uma tela específica para digitação livre das parcelas (não automática).
Comportamento no V2 (64 bits)Idêntico ao modo A. O if (ParmFatur.Values['ST_PARCELAMENTO'] = 'A') foi comentado em UdmMNF002.pas:3147 e UdmMNF033.pas:1318 — o begin..end abaixo ficou sempre ativo. Não existe mais else para M.
Deveria escolher esta opção?Não. Como o desenvolvedor registrou na linha // ERP 64bits não terá mais opção de Manual. Somente Automático., o valor M permanece no combo por compatibilidade com bases antigas mas não tem efeito funcional.

Simulação passo a passo​

  1. MFA001 → Prazo Parcelamento = "Manual".
  2. Salve (F6).
  3. Abra uma NF de Saída (MNF002) a prazo.
  4. Confirme a nota.
  5. Resultado: o fluxo abre a mesma tela automática de parcelamento (MostraParcela) que é aberta com ST_PARCELAMENTO = 'A'. A opção "Manual" não leva a nenhuma tela ou comportamento diferente.

Resultado esperado: comportamento idêntico a "Automático" — o parâmetro não produz diferença no V2. Use apenas por rastreabilidade em bases migradas.


Estado atual do parâmetro no V2​

O parâmetro ST_PARCELAMENTO é um dos poucos em PARMFATUR cuja semântica foi neutralizada pelo próprio desenvolvedor durante a migração para 64 bits, mas o campo permanece na tabela, na UI do MFA001 e nos SELECTs consolidados de parâmetros de faturamento. Não há OnValidate no campo, nem regra que migre valores M para A automaticamente.

Pontos onde o parâmetro foi neutralizado​

ArquivoLinhasEstado
source/MNF002/UdmMNF002.pas3146-3147// ERP 64bits não terá mais opção de Manual. Somente Automático. / //if (ParmFatur.Values['ST_PARCELAMENTO'] = 'A') then (comentado)
source/MNF033/UdmMNF033.pas1317-1318// ERP 64bits não terá mais opção de Manual. Somente Automático. / //if (ParmFatur.Values['ST_PARCELAMENTO'] = 'A') then (comentado)

Pontos onde é carregado mas não consumido​

ArquivoLinhaTrecho
source/MCO006/UdmMCO006.pas2110SELECT ... P.ST_PARCELAMENTO ... FROM PARMFATUR P em Conhecimento de Transporte
source/MNF002/UdmMNF002.pas10501SELECT ... P.ST_PARCELAMENTO ... consolidado (NF-e consumidor)
source/MNF008/UdmMNF008.pas766SELECT ... P.ST_PARCELAMENTO ... em NF de Compra/Devolução
source/MPD002/UdmMPD002.pas5754SELECT ... P.ST_PARCELAMENTO ... em BuscaParametros do Pedido de Venda

Em todos esses pontos o valor é retornado no resultado do SELECT e fica disponível em ParmFatur.Values[...] / Resultado[N], mas nenhum if/case posterior testa o valor.

Por que não foi removido?​

Manter o parâmetro evita migration/ALTER TABLE em bases já instaladas e preserva a compatibilidade com SELECT P.* em PARMFATUR. O custo é que o MFA001 continua oferecendo a opção "Manual" que não faz nada — comportamento a ser revisto em futura limpeza arquitetural.


Interação com outros parâmetros​

ParâmetroEfeito combinado
ST_PARCELAPEDIDOComplementar, não derivado. ST_PARCELAPEDIDO decide se o pedido abre tela de parcelamento (frmParcelaPedido); ST_PARCELAMENTO (este) decidiria o modo de geração do parcelamento da nota fiscal. No V2, só ST_PARCELAPEDIDO tem efeito real.
VL_MINPARCELAPEDIDOIndependente. Valida piso por parcela de pedido; não participa da montagem de parcela da nota.
ST_CONDPAGTO do documento = 'P'Pré-requisito obrigatório — sem condição a prazo nunca há parcelamento, independentemente de ST_PARCELAMENTO.
CD_TIPOCONTA / ST_CONTAS da movimentaçãoSegundo pré-requisito em MNF002 (o iSt_Contas = 'S'). Se a movimentação não gera contas, o fluxo de parcelamento é pulado.

Tabela Comparativa Resumida​

OpçãoLabel no MFA001Comportamento históricoComportamento atual (V2 64 bits)Efeito real
AAutomáticoSistema gera parcelas a partir de CONDPAGTO (MostraParcela)Idêntico ao histórico — sempre abre MostraParcelaPadrão e único fluxo funcional
MManualFluxo manual (nunca efetivamente presente no V2)Idêntico a A — o ramo foi comentadoNenhum — não altera o comportamento

Referências no Código Fonte​

Tela de configuração (MFA001)​

ArquivoLinhaTrecho
source/MFA001/UMFA001.dfm3863-3876Label lbl69 "Prazo Parcelamento [MPD002/MNF002]" (Top=204)
source/MFA001/UMFA001.dfm4450-4476TwwDBComboBox cmbST_PARCELAMENTO, DataField = 'ST_PARCELAMENTO', Items Automático→A, Manual→M, dentro de pagFatOp2
source/MFA001/UMFA001.pas490Declaração cmbST_PARCELAMENTO: TwwDBComboBox;
source/MFA001/UdmMFA001.pas257Field tabPARMFATURST_PARCELAMENTO: TStringField;
source/MFA001/UdmMFA001.pas553Valor padrão := 'A' em tabPARMFATURAfterInsert
source/MFA001/UdmMFA001.dfm268, 1824-1828, 2430, 2603, 2851, 3148Field object + cláusulas SELECT/INSERT/UPDATE da tabPARMFATUR

Consumidores Delphi (todos hoje inertes)​

ArquivoLinhaTrecho
source/MNF002/UdmMNF002.pas3139-3164Fluxo de parcelamento de NF de Saída — bloco if (ParmFatur.Values['ST_PARCELAMENTO'] = 'A') then comentado (linha 3147) com observação do desenvolvedor
source/MNF002/UdmMNF002.pas10501Carregado no SELECT consolidado de PARMFATUR (não consumido depois)
source/MNF033/UdmMNF033.pas1307-1343Função gera_Parcelamento — idem MNF002, if comentado em 1318
source/MNF008/UdmMNF008.pas766Carregado no SELECT de PARMFATUR (não consumido)
source/MCO006/UdmMCO006.pas2110Carregado no SELECT de PARMFATUR (não consumido)
source/MPD002/UdmMPD002.pas5754Carregado em BuscaParametros (não consumido)

SQL (Firebird)​

ArquivoLinhaTrecho
docs/schema/tables/PARMFATUR.sql202DDL: ST_PARCELAMENTO DOM_CHAR1 DEFAULT 'A' NOT NULL
Scripts/*.sql—Nenhuma stored procedure referencia ST_PARCELAMENTO