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ódulo | Código | Papel |
|---|
| Parâmetros de Faturamento | MFA001 | Produtora — cadastra/edita o valor (combo cmbST_PARCELAMENTO) |
| NF de Saída | MNF002 | Consumidora 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) | MNF033 | Consumidora 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 Venda | MPD002 | Carrega 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ção | MNF008 | Carrega P.ST_PARCELAMENTO no SELECT de PARMFATUR (UdmMNF008.pas:766). Sem uso no fluxo. |
| Conhecimento de Transporte | MCO006 | Carrega 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
| Campo | Tabela | Descrição |
|---|
ST_PARCELAMENTO | PARMFATUR | Flag A/M do modo de geração de parcelamento. Atualmente inerte (ver seção "Estado atual"). |
NOTA.ST_CONDPAGTO | NOTA | Pré-requisito para o fluxo: parcelamento só ocorre quando = 'P' (a prazo) em MNF002/MNF033. |
MOVIMENTACAO.ST_CONTAS (ou iSt_Contas) | MOVIMENTACAO | Segundo 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'). |
PARCELA | PARCELA | Tabela 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_PARCELAMENTO | PARCELAPEDIDO | Homô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 faz | Detalhe |
|---|
| 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ções | NOTA.ST_CONDPAGTO = 'P' E movimentação com CD_TIPOCONTA (ou iSt_Contas = 'S'). |
Equivalência com M no V2 | Nã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
- Vá em MFA001 → Parâmetros → Ambos → Opção 2 → Prazo Parcelamento = "Automático".
- Salve os parâmetros (F6).
- 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.
- Confirme/salve a nota.
- 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 faz | Detalhe |
|---|
| 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
- MFA001 → Prazo Parcelamento = "Manual".
- Salve (F6).
- Abra uma NF de Saída (MNF002) a prazo.
- Confirme a nota.
- 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
| Arquivo | Linhas | Estado |
|---|
source/MNF002/UdmMNF002.pas | 3146-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.pas | 1317-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
| Arquivo | Linha | Trecho |
|---|
source/MCO006/UdmMCO006.pas | 2110 | SELECT ... P.ST_PARCELAMENTO ... FROM PARMFATUR P em Conhecimento de Transporte |
source/MNF002/UdmMNF002.pas | 10501 | SELECT ... P.ST_PARCELAMENTO ... consolidado (NF-e consumidor) |
source/MNF008/UdmMNF008.pas | 766 | SELECT ... P.ST_PARCELAMENTO ... em NF de Compra/Devolução |
source/MPD002/UdmMPD002.pas | 5754 | SELECT ... 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.
| Parâmetro | Efeito combinado |
|---|
ST_PARCELAPEDIDO | Complementar, 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_MINPARCELAPEDIDO | Independente. 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ção | Segundo 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ção | Label no MFA001 | Comportamento histórico | Comportamento atual (V2 64 bits) | Efeito real |
|---|
| A | Automático | Sistema gera parcelas a partir de CONDPAGTO (MostraParcela) | Idêntico ao histórico — sempre abre MostraParcela | Padrão e único fluxo funcional |
| M | Manual | Fluxo manual (nunca efetivamente presente no V2) | Idêntico a A — o ramo foi comentado | Nenhum — não altera o comportamento |
Referências no Código Fonte
Tela de configuração (MFA001)
| Arquivo | Linha | Trecho |
|---|
source/MFA001/UMFA001.dfm | 3863-3876 | Label lbl69 "Prazo Parcelamento [MPD002/MNF002]" (Top=204) |
source/MFA001/UMFA001.dfm | 4450-4476 | TwwDBComboBox cmbST_PARCELAMENTO, DataField = 'ST_PARCELAMENTO', Items Automático→A, Manual→M, dentro de pagFatOp2 |
source/MFA001/UMFA001.pas | 490 | Declaração cmbST_PARCELAMENTO: TwwDBComboBox; |
source/MFA001/UdmMFA001.pas | 257 | Field tabPARMFATURST_PARCELAMENTO: TStringField; |
source/MFA001/UdmMFA001.pas | 553 | Valor padrão := 'A' em tabPARMFATURAfterInsert |
source/MFA001/UdmMFA001.dfm | 268, 1824-1828, 2430, 2603, 2851, 3148 | Field object + cláusulas SELECT/INSERT/UPDATE da tabPARMFATUR |
Consumidores Delphi (todos hoje inertes)
| Arquivo | Linha | Trecho |
|---|
source/MNF002/UdmMNF002.pas | 3139-3164 | Fluxo 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.pas | 10501 | Carregado no SELECT consolidado de PARMFATUR (não consumido depois) |
source/MNF033/UdmMNF033.pas | 1307-1343 | Função gera_Parcelamento — idem MNF002, if comentado em 1318 |
source/MNF008/UdmMNF008.pas | 766 | Carregado no SELECT de PARMFATUR (não consumido) |
source/MCO006/UdmMCO006.pas | 2110 | Carregado no SELECT de PARMFATUR (não consumido) |
source/MPD002/UdmMPD002.pas | 5754 | Carregado em BuscaParametros (não consumido) |
SQL (Firebird)
| Arquivo | Linha | Trecho |
|---|
docs/schema/tables/PARMFATUR.sql | 202 | DDL: ST_PARCELAMENTO DOM_CHAR1 DEFAULT 'A' NOT NULL |
Scripts/*.sql | — | Nenhuma stored procedure referencia ST_PARCELAMENTO |