Parâmetro de Integração Pedido de Venda x Nota Fiscal
Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Pedidos / O.S. → Opção 1 (label "Pedido de Venda") Tabela:
PARMFATUR.ST_PEDVENDAValor padrão:N(Não Integrado)
Controla como o Pedido de Venda é integrado à Nota Fiscal de Saída no momento do faturamento. Define qual base de cálculo é transportada do pedido para a nota (bruto, líquido por imposto, líquido por valor, líquido por desconto, líquido por IPI, etc.) e se o campo "Nr. Pedido" fica visível na tela da nota fiscal. O valor escolhido também é gravado em NOTA.ST_INTEGRADO pela procedure GERA_NOTAFISCAL, identificando historicamente como cada nota foi gerada.
Telas impactadas
| Módulo | Código | Descrição |
|---|---|---|
| Nota Fiscal Saída | MNF002 | Faturamento de NF de saída a partir de pedidos (principal consumidora) |
| Conhecimento de Transporte (CT-e) | MNF008 | Emissão de CT-e com integração de pedido |
| Nota de Serviço / NFS-e | MNF013 | Emissão de nota fiscal de serviço com integração de pedido |
| Nota Fiscal Consumidor | MNF014 | NF ao consumidor integrada com pedido |
| Nota de Troca | MNF026 | Nota fiscal de troca com integração de pedido |
| NF Ordem (Pedidos) | MPD011 | Geração de NF a partir de ordem de carregamento / pedidos consolidados |
| NF Ordem (Recapadora) | MRC020 | Geração de NF de serviço recapadora a partir de ordem |
| NF Pré-Emitida | MCO006 | Emissão de nota fiscal com mesmo conjunto de parâmetros |
| NF Entrada com Pedido | MTR008 | Emissão de nota de entrada integrada a pedido |
| NF Entrada com Pedido | MTR009 | Emissão de nota de entrada integrada a pedido |
| Bloqueio de Seriais | MNF002 (USERIAL2) | Esconde o botão "Marcar" de série quando o pedido está integrado |
| Listagem NF Recap | LNF168 | Relatório usa NOTA.ST_INTEGRADO / PARMFATUR.ST_PEDVENDA para recalcular descontos históricos |
Procedures impactadas
Geração / Gravação de Nota Fiscal
| Procedure | Arquivo | Descrição |
|---|---|---|
GERA_NOTAFISCAL | Scripts/GERA_NOTAFISCAL.sql | Lê PARMFATUR.ST_PEDVENDA em :V_ST_PEDVENDA (linha 268) e grava o valor em NOTA.ST_INTEGRADO (linha 1366), registrando historicamente o método usado para gerar cada nota fiscal. |
Campos envolvidos
| Campo | Descrição |
|---|---|
PARMFATUR.ST_PEDVENDA | Define o modo de integração pedido → nota (A, S, L, V, D, P, I, N) |
NOTA.ST_INTEGRADO | Flag gravado pela GERA_NOTAFISCAL com o valor vigente de ST_PEDVENDA no momento do faturamento |
NOTA.NR_PEDIDO / ITEMNOTA.NR_PEDIDO | Número do pedido de origem (visível/obrigatório apenas quando ST_PEDVENDA <> 'N') |
PEDIDO.VL_TOTAL, PEDIDO.VL_DESCONTO, PEDIDO.VL_IPI | Valores do pedido que alimentam ITEMNOTA.VL_TOTAL / VL_DESCONTO conforme a opção |
ITEMNOTA.VL_TOTAL | Valor total do item na nota, calculado conforme a opção escolhida |
ITEMNOTA.VL_DESCONTO | Valor de desconto; opções L/V/P/I/D zeram esse campo após embutir o desconto no total |
IMPOSTONOTA.VL_SUBSTRIB / VL_IMPOSTO | Valores de ST e imposto reprocessados quando o parâmetro exige recalcular |
Opções disponíveis
S - Integrado (Bruto)
| O que faz | Detalhe |
|---|---|
| Campo "Nº Pedido" na NF | Visível |
| Valor total do item | Copiado do pedido sem embutir desconto nem imposto |
| Valor de desconto | Mantém VL_DESCONTO do pedido como desconto |
| Imposto/ICMS-ST | Não há reprocessamento adicional de imposto |
| Botão "Marcar" de serial | Oculto quando ST_BLOQUEIASERIAL='S' |
Simulação passo a passo
- MFA001 → ST_PEDVENDA = "Integrado"
- Salve os parâmetros (F6)
- Abra um Pedido de Venda em MPD002 com um item de R$ 100,00 e desconto de R$ 10,00 (total líquido R$ 90,00, IPI R$ 5,00)
- Vá em MNF002 e gere a NF a partir do pedido
- Observe o item na NF
Resultado esperado: O campo "Nº Pedido" aparece na NF. ITEMNOTA.VL_TOTAL = 100,00 e ITEMNOTA.VL_DESCONTO = 10,00 (mantidos como no pedido, sem reprocessamento).
L - Integrado Líquido (% Imposto)
| O que faz | Detalhe |
|---|---|
| Campo "Nº Pedido" na NF | Visível |
| Valor total do item | Recalculado como (VL_TOTAL - VL_DESCONTO) / (1 + PC_IPI/100) → desconto e IPI embutidos no valor unitário |
| Valor de desconto | Zerado (VL_DESCONTO = NULL) |
| Base de imposto | Consulta CALCULA_IMPOSTOPEDIDO para recalcular V_PC_IMPOSTO e V_VL_SUBSTITUICAO |
| Validação pós-item | Compara soma VL_TOTAL - VL_DESCONTO + VL_FRETE + VL_DESPESA + IMPOSTO do item ao valor líquido do pedido; se houver diferença, ajusta IMPOSTONOTA.VL_SUBSTRIB |
| Botão "Marcar" serial | Oculto quando ST_BLOQUEIASERIAL='S' |
Simulação passo a passo
- MFA001 → ST_PEDVENDA = "Integrado Líquido (% Imposto)"
- Salve os parâmetros (F6)
- Abra um pedido com item de R$ 100,00, desconto R$ 10,00, IPI 10%
- Gere a NF em MNF002
- Confira o item na NF
Resultado esperado: ITEMNOTA.VL_TOTAL = (100 - 10) / 1,10 = 81,82, ITEMNOTA.VL_DESCONTO fica em branco. O sistema chama CALCULA_IMPOSTOPEDIDO e, se o líquido da NF não bater com o do pedido, ajusta IMPOSTONOTA.VL_SUBSTRIB com ST_MANUAL='S'.
V - Integrado Líquido (Valor)
| O que faz | Detalhe |
|---|---|
| Campo "Nº Pedido" na NF | Visível |
| Valor total do item | Recalculado como VL_TOTAL - VL_DESCONTO - VL_IPI → desconto e IPI embutidos em valor (não em percentual) |
| Valor de desconto | Zerado |
| Base de imposto | Chama CALCULA_IMPOSTOPEDIDO e reprocessa impostos (reprocessaImposto) |
| Botão "Marcar" serial | Oculto quando ST_BLOQUEIASERIAL='S' |
Simulação passo a passo
- MFA001 → ST_PEDVENDA = "Integrado Líquido (Valor)"
- Salve os parâmetros (F6)
- Abra um pedido com item R$ 100,00, desconto R$ 10,00, VL_IPI R$ 5,00
- Gere a NF em MNF002
- Confira o item
Resultado esperado: ITEMNOTA.VL_TOTAL = 100 - 10 - 5 = 85,00, ITEMNOTA.VL_DESCONTO em branco. reprocessaImposto é executado para recalcular a base fiscal.
D - Integrado Líquido (Desconto)
| O que faz | Detalhe |
|---|---|
| Campo "Nº Pedido" na NF | Visível |
| Valor total do item | VL_TOTAL - VL_DESCONTO → desconto embutido no valor, mas IPI permanece separado |
| Valor de desconto | Zerado (VL_DESCONTO = NULL, PC_DESCONTO = NULL) |
| Validação adicional | Em MNF002 (linha 7848): se o desconto do item for ≥ 100% do total OU maior que o valor total, bloqueia com mensagem "O Valor de Desconto deve ser Menor que o Valor Total do Item!" |
| Botão "Marcar" serial | Oculto quando ST_BLOQUEIASERIAL='S' |
Simulação passo a passo
- MFA001 → ST_PEDVENDA = "Integrado Líquido (Desconto)"
- Salve os parâmetros (F6)
- Abra um pedido com item R$ 100,00, desconto R$ 10,00, IPI R$ 5,00
- Gere a NF em MNF002
Resultado esperado: ITEMNOTA.VL_TOTAL = 100 - 10 = 90,00, ITEMNOTA.VL_DESCONTO e PC_DESCONTO em branco. Diferente da opção L/V, o valor do IPI não é descontado do total.
P - Integrado Líquido (IPI)
| O que faz | Detalhe |
|---|---|
| Campo "Nº Pedido" na NF | Visível |
| Valor total do item | Calculado com divisão por IPI (similar ao L), mas com tratamento específico para IPI: Resultado[1] := VL_IPI, PC_IPI := VL_IPI * 100 / VL_TOTAL |
| Valor de desconto | Zerado |
| Diferença para L | No reprocessamento, não soma VL_SUBSTRIB ao imposto (ST_PEDVENDA <> 'P' é condição para somar ST) e usa VL_IPI diretamente em vez de percentual |
Simulação passo a passo
- MFA001 → ST_PEDVENDA = "Integrado Líquido (IPI)"
- Salve os parâmetros (F6)
- Abra um pedido com item R$ 100,00 e IPI R$ 5,00
- Gere a NF em MNF002
Resultado esperado: Item gravado com o valor líquido do IPI embutido via valor absoluto (não percentual), e a VL_SUBSTRIB não é incluída no cálculo de imposto do item (tratamento específico do IPI).
I - Integrado Líq. c/ Desc. (% Imp.)
| O que faz | Detalhe |
|---|---|
| Campo "Nº Pedido" na NF | Visível |
| Valor total do item | Recalculado como em L mas a base do % Imposto é VL_TOTAL - VL_DESCONTO (em vez de VL_TOTAL), o que produz alíquota de ST proporcionalmente maior sobre o líquido |
| Valor de desconto | Mantido em ITEMNOTA.VL_DESCONTO |
| Validação pós-item | Sempre ajusta IMPOSTONOTA.VL_SUBSTRIB (condição or parmfatur.values['ST_PEDVENDA'] = 'I' na linha 2390) |
Simulação passo a passo
- MFA001 → ST_PEDVENDA = "Integrado Líq. c/Desc. (% Imp.)"
- Salve os parâmetros (F6)
- Abra um pedido com item R$ 100,00, desconto R$ 10,00
- Gere a NF em MNF002
Resultado esperado: A base do imposto é R$ 90,00 (líquido, VL_TOTAL - VL_DESCONTO) e não R$ 100,00 (bruto). O ajuste de IMPOSTONOTA.VL_SUBSTRIB é feito em toda integração, mesmo que a diferença seja zero.
N - Não Integrado
| O que faz | Detalhe |
|---|---|
| Campo "Nº Pedido" na NF | Oculto (lblNR_PEDIDO.Visible := False, edtNR_PEDIDO.Visible := False) |
| Integração de pedido | Desativada – não há botão / fluxo de importar pedido |
| Bloqueio específico | Em MNF002 (linha 708): se a tela for aberta com TP_DOCTO='P' (faturar pedido) e ST_PEDVENDA='N', dispara erro "O Pedido de Venda Não Está Integrado. Verifique! [MFA001]" |
| MNF008 (CT-e) | Esconde lblNR_PEDIDO e edtNR_PEDIDO quando iST_PEDVENDA = 'N' |
Simulação passo a passo
- MFA001 → ST_PEDVENDA = "Não Integrado"
- Salve os parâmetros (F6)
- Abra MNF002 em modo emissão manual → não há campo "Nº Pedido"
- Tente chamar a tela passando
TP_DOCTO='P'(via botão de faturar pedido) → ERRO: "O Pedido de Venda Não Está Integrado. Verifique! [MFA001]"
Resultado esperado: Emissão apenas manual. Qualquer rotina que tente importar pedido é bloqueada, sinalizando ao usuário para revisar o parâmetro em MFA001.
Este é o valor padrão ao criar um novo registro em MFA001 (
tabPARMFATURST_PEDVENDA.AsString := 'N',UdmMFA001.pas:441).
Observação Importante
Embora o ComboBox do MFA001 apresente 7 opções (S, L, V, D, P, I, N), o código verifica adicionalmente a letra A em alguns pontos (ex.: if (Resultado[8] = 'S') or (Resultado[8] = 'A') em MNF008/MNF013/MNF014/MTR008 – esses testes, porém, são sobre ST_CODIGOBARRA, não sobre ST_PEDVENDA; confira o contexto antes de assumir que A é um valor válido para este parâmetro).
O valor de ST_PEDVENDA é gravado em NOTA.ST_INTEGRADO pela procedure GERA_NOTAFISCAL (linha 1366 do Scripts/GERA_NOTAFISCAL.sql), permitindo rastrear historicamente como cada nota foi faturada mesmo que o parâmetro mude depois. O relatório LNF168 usa COALESCE(NOTA.ST_INTEGRADO, PARMFATUR.ST_PEDVENDA) para reconstruir cálculos de desconto em ordens de produção recap.
Interação com outros parâmetros
ST_BLOQUEIASERIAL: quando='S'eST_PEDVENDAestiver em{S, L, D, V}, o botão "Marcar" de seriais (USERIAL2.pas linha 252) é escondido para evitar alteração manual do serial após integração do pedido.ST_BLOQNOTAPEDJABLOQ: controla se a NF herda o bloqueio do pedido quando integrada (complementar aST_PEDVENDA).ST_TABPRECO: a combinação deST_PEDVENDAcom ST_TABPRECO bloqueada (B,V,L) define se é possível editar tabela/preço mesmo em nota integrada.
Tabela Comparativa Resumida
| Opção | Descrição | Nº Pedido visível? | Embute desconto no total? | Embute IPI no total? | Zera VL_DESCONTO? | Base de ST |
|---|---|---|---|---|---|---|
| S | Integrado (Bruto) | Sim | Não | Não | Não | Valor bruto |
| L | Integrado Líquido (% Imp.) | Sim | Sim | Sim (÷(1+%IPI)) | Sim | VL_TOTAL |
| V | Integrado Líquido (Valor) | Sim | Sim | Sim (−VL_IPI) | Sim | VL_TOTAL |
| D | Integrado Líquido (Desconto) | Sim | Sim | Não | Sim | Valor bruto |
| P | Integrado Líquido (IPI) | Sim | Sim | Sim (via VL_IPI) | Sim | Sem VL_SUBSTRIB somado |
| I | Integrado Líq. c/ Desc. (% Imp.) | Sim | Sim (reduz base) | Sim | Não | VL_TOTAL − VL_DESCONTO |
| N | Não Integrado | Não | N/A | N/A | N/A | N/A |
Referências no Código Fonte
| Arquivo | Linhas | Função |
|---|---|---|
source/MFA001/UMFA001.dfm | 9146-9177 | Definição do TwwDBComboBox cmbST_PEDVENDA com 7 Items.Strings |
source/MFA001/UdmMFA001.dfm | 682-687 | Campo persistente tabPARMFATURST_PEDVENDA (DisplayLabel "Pedido de Venda Integrado") |
source/MFA001/UdmMFA001.pas | 39, 441 | Declaração do campo e default 'N' em AfterInsert |
source/MFA001/UdmMFA001.dfm | 78, 2340, 2484, 2724, 2958 | SELECT, INSERT e UPDATE de PARMFATUR.ST_PEDVENDA |
source/MNF002/UdmMNF002.pas | 7848-7854, 10491 | Validação de desconto (ST_PEDVENDA='D') e leitura em parmfatur |
source/MNF002/UMNF002.pas | 627-631 | Esconde campo NR_PEDIDO quando ST_PEDVENDA='N' |
source/MNF002/UMNF002.pas | 708-709 | Bloqueio "Pedido não integrado" ao tentar faturar pedido com ST_PEDVENDA='N' |
source/MNF002/UMNF002.pas | 1144, 1166, 1177 | Cálculo de PC_SUBST com bases diferentes conforme L/V/P/I |
source/MNF002/UMNF002.pas | 1568 | Chamada de CALCULA_IMPOSTOPEDIDO para L/V |
source/MNF002/UMNF002.pas | 2269, 2287, 2305, 2315 | Transformações de VL_TOTAL / VL_DESCONTO por opção (L/P, V, D, I) |
source/MNF002/UMNF002.pas | 2370-2396 | Ajuste de IMPOSTONOTA.VL_SUBSTRIB para L/I |
source/MNF002/UMNF002.pas | 2492, 2739, 2761, 2778 | Seleção de cálculo no loop CarregaPedido por opção |
source/MNF002/USERIAL2.pas | 252-254 | Esconde botão "Marcar" serial para S/L/D/V |
source/MNF008/UdmMNF008.pas | 474, 651, 666, 756 | Declaração e SELECT iST_PEDVENDA em CT-e |
source/MNF008/UdmMNF008.pas | 700-703 | Oculta labels NR_PEDIDO quando iST_PEDVENDA='N' |
source/MNF008/UMNF008.pas | 641-642, 795-797, 928, 937 | Cálculo de impostos L/V/S e aplicação de desconto/IPI (L/V) |
source/MNF008/UMNF008.pas | 2315 | reprocessaImposto quando ST_PEDVENDA='V' |
source/MNF008/UMNF008PEDIDO.pas | 367, 379 | Aplicação de fórmula L e V ao importar itens do pedido |
source/MNF013/UdmMNF013.pas | 532, 698, 711 | Declaração e SELECT iST_PEDVENDA em nota de serviço |
source/MNF014/UdmMNF014.pas | 267, 322, 334 | Declaração e SELECT iST_PEDVENDA em NF consumidor |
source/MNF026/UMNF026.pas | 3072, 3087, 3101, 3139, 3247, 3275 | Fórmulas L/P, V, D e reprocessa imposto em nota de troca |
source/MPD011/UdmMPD011.pas | 1582 | SELECT ST_PEDVENDA da PARMFATUR em ordem de carregamento |
source/MPD011/UdmNFORDEM.pas | 511, 812, 831, 834, 850, 865, 873, 882, 892, 898, 950 | Cálculo completo de impostos e fórmulas L/V/P/I/D ao gerar NF de ordem |
source/MRC020/UdmMRC020NFORDEM.pas | 430, 564, 582, 1255, 1293, 1304, 1313, 1351 | Declaração, SELECT e aplicação das opções L/V/D no fluxo Recapadora |
source/MCO006/UdmMCO006.pas | 2100 | SELECT ST_PEDVENDA em pré-emissão de NF |
source/MTR008/UdmMTR008.pas | 168, 224, 237 | Declaração e SELECT iST_PEDVENDA em NF entrada de transporte |
source/MTR009/UdmMTR009.pas | 136 | SELECT ST_PEDVENDA em NF entrada de transporte (variante) |
source/LNF168/ULNF168.pas | 151, 160, 167 | COALESCE(NOTA.ST_INTEGRADO, PARMFATUR.ST_PEDVENDA) = 'S' para recalcular descontos históricos |
source/CPD009/UdmCPD009.dfm | 313, 470, 532 | CRUD de PARMFATUR (cópia entre empresas) |
source/RCA006/UdmRCA006.dfm | 3062, 3219, 3281 | CRUD de PARMFATUR (restauração de cadastros) |
Scripts/GERA_NOTAFISCAL.sql | 185, 261, 268, 1366 | Lê ST_PEDVENDA em V_ST_PEDVENDA e grava em NOTA.ST_INTEGRADO ao faturar |