Pular para o conteúdo principal

Mostrar Campo Fator na Emissão de Nota Fiscal por Ordem de Carregamento

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Notas Fiscais → Parâmetros de Notas → Mostrar Fator MPD011 Label na tela: Mostrar Fator MPD011 Tabela: PARMFATUR.ST_MOSTRAFATOR Valor padrão: S (Sim - exibe o campo Fator)

Resumo​

Controla a visibilidade do campo Fator (VL_FATOR) e seu rótulo na tela de Emissão de Nota Fiscal por Ordem de Carregamento (MPD011 - form TfrmNFORDEM). Quando o parâmetro está ativo, ao abrir a janela de emissão da nota fiscal a partir da ordem de carregamento, o usuário vê o campo Fator (posicionado no cabeçalho da nota, à esquerda da data do fornecedor) e pode informar um valor divisor que será aplicado sobre o preço unitário e o desconto de todos os itens da nota gerada.

O fator funciona como um divisor absoluto: ao sair do campo (OnExit), o sistema percorre todos os itens da nota e recalcula:

  • ITEMNOTA.VL_UNITARIO = RoundTo(VL_UNITPRODUTO / VL_FATOR, -2)
  • ITEMNOTA.VL_DESCONTO = RoundTo(VL_DESCPRODUTO / VL_FATOR, -2) (ou VL_TOTAL se VL_DESCPRODUTO = VL_TOTAL)

O efetivo uso do recálculo, entretanto, só ocorre quando PARMFATUR.ST_ORDEMCARREG está configurado como F (Fracionado) ou S (Sim), pois é essa condição que dispara o edtVL_FATORExit a percorrer os itens.

Telas impactadas​

MóduloCódigoPapel
Emissão de Nota Fiscal por Ordem de CarregamentoMPD011 (form TfrmNFORDEM)Consumidora: exibe/oculta lblVL_FATOR e edtVL_FATOR conforme o valor do parâmetro
Parâmetros de FaturamentoMFA001Produtora: grava o valor em PARMFATUR.ST_MOSTRAFATOR

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_MOSTRAFATORFlag S/N que controla a visibilidade do campo Fator no MPD011
NOTA.VL_FATORValor absoluto do fator informado pelo usuário (divisor) - campo calculado via CAST(NULL AS NUMERIC(15,4)) na query principal
ITEMNOTA.VL_UNITPRODUTOValor unitário original do produto (base para o recálculo)
ITEMNOTA.VL_UNITARIOValor unitário recalculado após divisão pelo fator
ITEMNOTA.VL_DESCPRODUTODesconto original do produto (base para o recálculo)
ITEMNOTA.VL_DESCONTODesconto recalculado após divisão pelo fator
ITEMNOTA.VL_TOTALUsado como fallback para o desconto quando VL_DESCPRODUTO = VL_TOTAL
PARMFATUR.ST_ORDEMCARREGParâmetro correlato - somente quando = 'F' ou = 'S' o edtVL_FATORExit executa o recálculo dos itens

Opções disponíveis​

S - Sim​

O que fazDetalhe
Campo FatorVisível no cabeçalho do form TfrmNFORDEM do MPD011
Label lblVL_FATORVisível (Caption = 'Fator')
Edit edtVL_FATORVisível, vinculado por padrão a VL_FATOR
Comportamento no OnExitSe ST_ORDEMCARREG for F ou S e o campo foi preenchido, percorre todos os itens da nota e divide VL_UNITPRODUTO e VL_DESCPRODUTO pelo fator informado
Validação automáticaSe VL_FATOR <= 0, é forçado para 1 antes do recálculo (evita divisão por zero)

Simulação passo a passo​

  1. Em MFA001 → aba Notas Fiscais → Parâmetros de Notas → Mostrar Fator MPD011 = "Sim".
  2. Salve os parâmetros (F6).
  3. Também garanta que Ordem Carregamento (ST_ORDEMCARREG) esteja como Fracionado ou Sim para que o recálculo ocorra.
  4. Acesse MPD011 e selecione uma ordem de carregamento para gerar a nota fiscal.
  5. Na janela Emissão de Nota Fiscal - Ordem de Carregamento o campo Fator aparece visível no cabeçalho (posição Left=381, Top=145).
  6. Informe, por exemplo, VL_FATOR = 2 e pressione TAB (dispara edtVL_FATORExit).
  7. O sistema percorre cada item da nota e atualiza:
    • VL_UNITARIO = VL_UNITPRODUTO / 2 (arredondado com RoundTo(-2))
    • VL_DESCONTO = VL_DESCPRODUTO / 2 (ou igual a VL_TOTAL se desconto total)

Resultado esperado: Todos os itens da nota ficam com preço unitário e desconto divididos pelo fator informado. O foco vai para edtDT_FORNECEDOR.


N - Não​

O que fazDetalhe
Campo FatorOculto no form TfrmNFORDEM do MPD011
Label lblVL_FATORVisible = False
Edit edtVL_FATORVisible = False
Recálculo por fatorNão disponível - usuário não tem como informar o divisor durante a emissão

Simulação passo a passo​

  1. Em MFA001 → aba Notas Fiscais → Parâmetros de Notas → Mostrar Fator MPD011 = "Não".
  2. Salve os parâmetros (F6).
  3. Acesse MPD011 e gere a nota fiscal a partir da ordem de carregamento.
  4. Na janela Emissão de Nota Fiscal o campo Fator e seu rótulo não aparecem.
  5. Os itens da nota são preenchidos com os valores originais (sem aplicação de fator).

Resultado esperado: Emissão da nota fiscal sem possibilidade de aplicar fator divisor. Os valores unitários e descontos vêm diretamente da ordem de carregamento origem.


Interação com ST_SOLICITAFATOR​

Apesar dos nomes parecidos, ST_MOSTRAFATOR e ST_SOLICITAFATOR atuam em telas e cenários completamente diferentes:

AspectoST_MOSTRAFATORST_SOLICITAFATOR
Tela alvoMPD011 - Emissão de NF por Ordem de CarregamentoMPD002 (Duplicação), LPD128 e LOR044 (Impressão)
Tipo de controleVisibilidade de campo fixo no cabeçalho do formAbertura de janela modal com solicitação de valor
Tipo de fatorValor absoluto (divisor) fixoValor (V) ou Percentual (P)
ValoresS / NV / P / N
PadrãoSN
Campo alimentadoNOTA.VL_FATORPEDIDO.VL_FATOR ou PEDIDO.PC_FATOR

Os dois parâmetros são independentes e podem ser configurados em qualquer combinação. Eles compartilham apenas a semântica de "fator aplicado sobre preço/desconto", mas atingem fluxos de negócio distintos (emissão de NF a partir de carregamento versus duplicação/impressão de pedido).

Tabela Comparativa Resumida​

OpçãoLabel/Edit FatorRecálculo via edtVL_FATORExitCondição adicional
SVisívelSim (se usuário preencher)Exige ST_ORDEMCARREG IN ('F','S')
NOcultoNão ocorre (campo nem aparece)Independe de ST_ORDEMCARREG

Referências no Código Fonte​

Configuração (MFA001)​

ArquivoLinhaTrecho
source/MFA001/UMFA001.dfm6384-6398Label lblST_MOSTRAFATOR com Caption = 'Mostrar Fator MPD011'
source/MFA001/UMFA001.dfm7358-7384ComboBox cmbST_MOSTRAFATOR com Items.Strings = ('Sim'#9'S', 'Não'#9'N') e DataField = 'ST_MOSTRAFATOR'
source/MFA001/UMFA001.pas427-428Declarações lblST_MOSTRAFATOR e cmbST_MOSTRAFATOR
source/MFA001/UdmMFA001.dfm1724-1725TStringField tabPARMFATURST_MOSTRAFATOR com FieldName = 'ST_MOSTRAFATOR'
source/MFA001/UdmMFA001.dfm2420, 2593, 2834SELECT, INSERT e UPDATE da PARMFATUR incluindo a coluna ST_MOSTRAFATOR
source/MFA001/UdmMFA001.pas239Declaração do TStringField
source/MFA001/UdmMFA001.pas539Valor padrão no AfterInsert: tabPARMFATURST_MOSTRAFATOR.AsString := 'S';

Consumo no MPD011 (Emissão de NF por Ordem de Carregamento)​

ArquivoLinhaTrecho
source/MPD011/UdmMPD011.pas1582SELECT ... PF.ST_MOSTRAFATOR ... FROM PARMFATUR populando ParmFatur: TStringList
source/MPD011/UdmNFORDEM.pas568frmNFORDEM.lblVL_FATOR.Visible := (ParmFatur.Values['ST_MOSTRAFATOR'] = 'S');
source/MPD011/UdmNFORDEM.pas569frmNFORDEM.edtVL_FATOR.Visible := (ParmFatur.Values['ST_MOSTRAFATOR'] = 'S');
source/MPD011/UdmNFORDEM.pas573-586Atribuição dinâmica de edtVL_FATOR.DataField (VL_FATOR quando ST_ORDEMCARREG é F/S, senão PC_FATOR)
source/MPD011/UNFORDEM.pas1899-1925edtVL_FATORExit: percorre tabITEMNOTA recalculando VL_UNITARIO e VL_DESCONTO pela divisão com tabNOTAVL_FATOR
source/MPD011/UNFORDEM.dfm185-199Declaração do lblVL_FATOR (Caption 'Fator')
source/MPD011/UNFORDEM.dfm526-543Declaração do edtVL_FATOR (DataField = 'VL_FATOR', OnExit = edtVL_FATORExit)