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 MPD011Label na tela:Mostrar Fator MPD011Tabela:PARMFATUR.ST_MOSTRAFATORValor 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)(ouVL_TOTALseVL_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ódulo | Código | Papel |
|---|---|---|
| Emissão de Nota Fiscal por Ordem de Carregamento | MPD011 (form TfrmNFORDEM) | Consumidora: exibe/oculta lblVL_FATOR e edtVL_FATOR conforme o valor do parâmetro |
| Parâmetros de Faturamento | MFA001 | Produtora: grava o valor em PARMFATUR.ST_MOSTRAFATOR |
Campos envolvidos
| Campo | Descrição |
|---|---|
PARMFATUR.ST_MOSTRAFATOR | Flag S/N que controla a visibilidade do campo Fator no MPD011 |
NOTA.VL_FATOR | Valor absoluto do fator informado pelo usuário (divisor) - campo calculado via CAST(NULL AS NUMERIC(15,4)) na query principal |
ITEMNOTA.VL_UNITPRODUTO | Valor unitário original do produto (base para o recálculo) |
ITEMNOTA.VL_UNITARIO | Valor unitário recalculado após divisão pelo fator |
ITEMNOTA.VL_DESCPRODUTO | Desconto original do produto (base para o recálculo) |
ITEMNOTA.VL_DESCONTO | Desconto recalculado após divisão pelo fator |
ITEMNOTA.VL_TOTAL | Usado como fallback para o desconto quando VL_DESCPRODUTO = VL_TOTAL |
PARMFATUR.ST_ORDEMCARREG | Parâmetro correlato - somente quando = 'F' ou = 'S' o edtVL_FATORExit executa o recálculo dos itens |
Opções disponíveis
S - Sim
| O que faz | Detalhe |
|---|---|
Campo Fator | Visível no cabeçalho do form TfrmNFORDEM do MPD011 |
Label lblVL_FATOR | Visível (Caption = 'Fator') |
Edit edtVL_FATOR | Visível, vinculado por padrão a VL_FATOR |
Comportamento no OnExit | Se 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ática | Se VL_FATOR <= 0, é forçado para 1 antes do recálculo (evita divisão por zero) |
Simulação passo a passo
- Em MFA001 → aba Notas Fiscais → Parâmetros de Notas →
Mostrar Fator MPD011= "Sim". - Salve os parâmetros (F6).
- Também garanta que
Ordem Carregamento(ST_ORDEMCARREG) esteja comoFracionadoouSimpara que o recálculo ocorra. - Acesse MPD011 e selecione uma ordem de carregamento para gerar a nota fiscal.
- Na janela Emissão de Nota Fiscal - Ordem de Carregamento o campo
Fatoraparece visível no cabeçalho (posiçãoLeft=381, Top=145). - Informe, por exemplo,
VL_FATOR = 2e pressione TAB (disparaedtVL_FATORExit). - O sistema percorre cada item da nota e atualiza:
VL_UNITARIO = VL_UNITPRODUTO / 2(arredondado comRoundTo(-2))VL_DESCONTO = VL_DESCPRODUTO / 2(ou igual aVL_TOTALse 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 faz | Detalhe |
|---|---|
Campo Fator | Oculto no form TfrmNFORDEM do MPD011 |
Label lblVL_FATOR | Visible = False |
Edit edtVL_FATOR | Visible = False |
| Recálculo por fator | Não disponível - usuário não tem como informar o divisor durante a emissão |
Simulação passo a passo
- Em MFA001 → aba Notas Fiscais → Parâmetros de Notas →
Mostrar Fator MPD011= "Não". - Salve os parâmetros (F6).
- Acesse MPD011 e gere a nota fiscal a partir da ordem de carregamento.
- Na janela Emissão de Nota Fiscal o campo
Fatore seu rótulo não aparecem. - 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:
| Aspecto | ST_MOSTRAFATOR | ST_SOLICITAFATOR |
|---|---|---|
| Tela alvo | MPD011 - Emissão de NF por Ordem de Carregamento | MPD002 (Duplicação), LPD128 e LOR044 (Impressão) |
| Tipo de controle | Visibilidade de campo fixo no cabeçalho do form | Abertura de janela modal com solicitação de valor |
| Tipo de fator | Valor absoluto (divisor) fixo | Valor (V) ou Percentual (P) |
| Valores | S / N | V / P / N |
| Padrão | S | N |
| Campo alimentado | NOTA.VL_FATOR | PEDIDO.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ção | Label/Edit Fator | Recálculo via edtVL_FATORExit | Condição adicional |
|---|---|---|---|
| S | Visível | Sim (se usuário preencher) | Exige ST_ORDEMCARREG IN ('F','S') |
| N | Oculto | Não ocorre (campo nem aparece) | Independe de ST_ORDEMCARREG |
Referências no Código Fonte
Configuração (MFA001)
| Arquivo | Linha | Trecho |
|---|---|---|
source/MFA001/UMFA001.dfm | 6384-6398 | Label lblST_MOSTRAFATOR com Caption = 'Mostrar Fator MPD011' |
source/MFA001/UMFA001.dfm | 7358-7384 | ComboBox cmbST_MOSTRAFATOR com Items.Strings = ('Sim'#9'S', 'Não'#9'N') e DataField = 'ST_MOSTRAFATOR' |
source/MFA001/UMFA001.pas | 427-428 | Declarações lblST_MOSTRAFATOR e cmbST_MOSTRAFATOR |
source/MFA001/UdmMFA001.dfm | 1724-1725 | TStringField tabPARMFATURST_MOSTRAFATOR com FieldName = 'ST_MOSTRAFATOR' |
source/MFA001/UdmMFA001.dfm | 2420, 2593, 2834 | SELECT, INSERT e UPDATE da PARMFATUR incluindo a coluna ST_MOSTRAFATOR |
source/MFA001/UdmMFA001.pas | 239 | Declaração do TStringField |
source/MFA001/UdmMFA001.pas | 539 | Valor padrão no AfterInsert: tabPARMFATURST_MOSTRAFATOR.AsString := 'S'; |
Consumo no MPD011 (Emissão de NF por Ordem de Carregamento)
| Arquivo | Linha | Trecho |
|---|---|---|
source/MPD011/UdmMPD011.pas | 1582 | SELECT ... PF.ST_MOSTRAFATOR ... FROM PARMFATUR populando ParmFatur: TStringList |
source/MPD011/UdmNFORDEM.pas | 568 | frmNFORDEM.lblVL_FATOR.Visible := (ParmFatur.Values['ST_MOSTRAFATOR'] = 'S'); |
source/MPD011/UdmNFORDEM.pas | 569 | frmNFORDEM.edtVL_FATOR.Visible := (ParmFatur.Values['ST_MOSTRAFATOR'] = 'S'); |
source/MPD011/UdmNFORDEM.pas | 573-586 | Atribuição dinâmica de edtVL_FATOR.DataField (VL_FATOR quando ST_ORDEMCARREG é F/S, senão PC_FATOR) |
source/MPD011/UNFORDEM.pas | 1899-1925 | edtVL_FATORExit: percorre tabITEMNOTA recalculando VL_UNITARIO e VL_DESCONTO pela divisão com tabNOTAVL_FATOR |
source/MPD011/UNFORDEM.dfm | 185-199 | Declaração do lblVL_FATOR (Caption 'Fator') |
source/MPD011/UNFORDEM.dfm | 526-543 | Declaração do edtVL_FATOR (DataField = 'VL_FATOR', OnExit = edtVL_FATORExit) |