Pular para o conteúdo principal

Parâmetro de Reprocessamento da Tabela de Preços

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Ambos → Opção 1 Tabela: PARMFATUR.ST_REPROCESSATABPRECO Valor padrão: N (Não)

⚠️ ATENÇÃO — HOMÔNIMO: Existe um parâmetro com o mesmo nome na tabela PARMOFICINA, configurado pela tela OFI001 - Parâmetros de Oficina, com opções S (Sim – Pergunta), A (Sim – Automático), N (Não) e valor padrão S. Os módulos de oficina (MOF001, MOF005, MOF008) leem a versão PARMOFICINA, não a versão PARMFATUR. Ver seção Observação Importante: Homônimo em PARMOFICINA abaixo.

Telas impactadas (PARMFATUR)​

MóduloCódigoDescrição
Pedido de VendaMPD002Recalcula preços ao trocar condição de pagamento (uso direto via parmfatur.values)
Nota Fiscal SaídaMNF002Recalcula preços ao trocar condição de pagamento
NF Entrada (Avulsa)MNF008Recalcula preços ao trocar condição de pagamento
NF Saída (Outra) – ConfirmaçãoMNF017Recalcula preços na confirmação de pedido via NF
Pedido de Venda (Mobile/Simples)MPD020Reprocessa via variável local iST_REPROCESSATABPRECO — trata apenas opção 'S'
Listagem Pedido PneusMPD081Recalcula ao trocar CD_CONDPAGTO — trata S e A
Pedido Pneus RecapMRC001Recalcula ao trocar CD_CONDPAGTO — trata S e A
Recap NF (por Ordem)MRC020Recalcula preços ao trocar condição de pagamento
Pedido Pneu (MRC040)MRC040Recalcula ao trocar CD_CONDPAGTO — trata S e A
Contas a ReceberMCO006Apenas carrega o campo no SELECT do PARMFATUR (sem uso efetivo encontrado)

Telas que usam a versão PARMOFICINA (homônima, configurada em OFI001)​

MóduloCódigoDescrição
Ordem de ServiçoMOF001Recalcula preços ao trocar condição/data/entrada — lê ParmOficina.Values['ST_REPROCESSATABPRECO'] (PARMOFICINA)
OS/Orçamento OficinaMOF005Recalcula preços ao trocar condição — lê ParmOficina.Values['ST_REPROCESSATABPRECO'] (PARMOFICINA)
Liberação/Consulta OSMOF008Usa tabORDEMSERVICOST_REPROCESSATABPRECO vindo de PO.ST_REPROCESSATABPRECO (PARMOFICINA)

No MOF001 existe ainda uma variável iST_REPROCESSATABPRECO carregada de PARMFATUR em , mas ela não é referenciada em nenhum outro ponto do módulo (dead code). A decisão real de reprocessar passa sempre pelo ParmOficina (PARMOFICINA).

Procedures impactadas​

Procedures que leem o parâmetro PARMFATUR diretamente​

ProcedureArquivoDescrição
VERIFICA_BLOQUEIOScripts/VERIFICA_BLOQUEIO.sqlQuando PARMFATUR.ST_REPROCESSATABPRECO = 'S', adiciona bloqueio tipo 'P' se o valor unitário do item estiver abaixo do preço mínimo permitido pelo desconto máximo (PC_DESCONTOMAX). Só aplica se V_ST_BLOQUEIO não for 'F' nem 'G' (ver chamado 1617)

Procedures indiretamente acionadas (pelo reprocessamento via Delphi)​

ProcedureArquivoDescrição
RETORNA_TABPRECOScripts/RETORNA_TABPRECO.sqlRetorna o código da tabela de preço mais adequada para o par (empresa, condição pagto, tipo pessoa, vendedor, região, estado, pessoa, item, peso/qtde) — chamada para re-atribuir CD_TABPRECO a cada item

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_REPROCESSATABPRECOFlag (S/N/A) que define se o sistema deve recalcular preços ao trocar a condição de pagamento (versão Faturamento)
PARMFATUR.ST_REPRMOVCLIMPD020Campo espelho atualizado automaticamente no MFA001 com o mesmo valor (ver )
PARMOFICINA.ST_REPROCESSATABPRECOFlag (S/N/A) homônima, configurada em OFI001, usada por módulos de oficina
ITEMPEDIDO.CD_TABPRECO / ITEMNOTA.CD_TABPRECO / ORDEMSERVITEM.CD_TABPRECOCódigo da tabela de preço do item — recalculado via RETORNA_TABPRECO
VL_UNITARIO / PS_ITEMNOTA / QT_PEDIDAValores unitários/quantidades recalculados a partir da nova tabela de preço

Opções disponíveis​

S - Sim (Pergunta ao Usuário)​

O que fazDetalhe
GatilhoTroca de CD_CONDPAGTO em pedido/NF (e também DT_VENCIMENTO/VL_ENTRADA nos módulos de oficina — quando se trata da versão PARMOFICINA)
Comportamento em UIExibe diálogo msgCodigo('C-0000', ['Deseja Reprocessar os Preços dos Produtos?']) (C-1679 nos módulos de oficina)
Se usuário confirma (Sim)Percorre todos os itens e chama RETORNA_TABPRECO para recalcular CD_TABPRECO e preço unitário
Se usuário cancela (Não)Mantém os preços atuais, apenas troca a condição de pagamento
Comportamento no SQL (VERIFICA_BLOQUEIO)Ativa a regra de bloqueio tipo 'P' quando valor unitário abaixo do preço mínimo (considerando PC_DESCONTOMAX)
Itens não reprocessadosItens com ST_ITEMPEDIDO = 'C' (cancelados) ou sem CD_TABPRECO são ignorados

Simulação passo a passo​

  1. Vá em MFA001 → Parâmetros → Ambos → Opção 1 → ST_REPROCESSATABPRECO = "Sim"
  2. Salve os parâmetros (F6)
  3. Abra um Pedido de Venda (MPD002)
  4. Adicione 3 produtos com uma condição de pagamento "À Vista" (preço vem da tabela vinculada a condições à vista)
  5. Altere a condição de pagamento para "30 Dias" (saia do campo com TAB ou clique)
  6. Sistema exibe a pergunta: "Deseja Reprocessar os Preços dos Produtos?"
  7. Clique em "Sim" → Sistema percorre todos os itens, chama RETORNA_TABPRECO para cada um e recalcula CD_TABPRECO + VL_UNITARIO conforme a nova condição
  8. Clique em "Não" → Condição trocada, mas preços dos itens permanecem os da tabela antiga

Resultado esperado: O usuário decide, a cada troca de condição, se quer reaplicar a tabela de preço ou preservar os valores atuais.


A - Automático (Sem Perguntar)​

O que fazDetalhe
GatilhoMesmo da opção S (troca de CD_CONDPAGTO, etc.)
Comportamento em UINão exibe diálogo — reprocessa silenciosamente
ReprocessamentoPercorre todos os itens e chama RETORNA_TABPRECO automaticamente
Comportamento no SQL (VERIFICA_BLOQUEIO)Não ativa a regra de bloqueio tipo 'P' (o código SQL checa explicitamente = 'S')
ExceçãoMPD020 não trata esta opção — no MPD020 apenas 'S' dispara reprocessamento (com prompt). Opção 'A' se comporta como 'N' neste módulo

Simulação passo a passo​

  1. MFA001 → ST_REPROCESSATABPRECO = "Automático"
  2. Salve os parâmetros (F6)
  3. Abra um Pedido de Venda (MPD002) ou Nota Fiscal (MNF002)
  4. Adicione 3 produtos com uma condição de pagamento
  5. Altere a condição de pagamento
  6. Sistema não pergunta nada — recalcula automaticamente CD_TABPRECO e VL_UNITARIO de todos os itens via RETORNA_TABPRECO
  7. Os preços são substituídos silenciosamente pelos novos valores da tabela adequada à nova condição

Resultado esperado: Ao trocar a condição de pagamento, a tabela de preço é sempre reaplicada automaticamente sem intervenção do usuário. O usuário vê os novos preços após confirmar a troca.

Atenção: No VERIFICA_BLOQUEIO a regra que bloqueia pedidos com valor abaixo do mínimo (tipo 'P') só dispara quando o parâmetro é 'S', não 'A'. Portanto, a opção automática tem comportamento de bloqueio menos restritivo do que a opção manual.


N - Não (Não Reprocessa)​

O que fazDetalhe
Gatilho—
Comportamento em UIMudança de condição de pagamento não afeta os preços dos itens
ReprocessamentoNunca ocorre — o bloco de reprocessamento é pulado
Comportamento no SQL (VERIFICA_BLOQUEIO)Não ativa a regra de bloqueio tipo 'P'
Exceção MNF017O MNF017 entra no bloco sempre que valor for diferente de 'N' (portanto nesta opção ele também pula). Lógica interna idêntica às demais telas

Simulação passo a passo​

  1. MFA001 → ST_REPROCESSATABPRECO = "Não"
  2. Salve os parâmetros (F6)
  3. Abra um Pedido de Venda (MPD002)
  4. Adicione 3 produtos com uma condição de pagamento "À Vista"
  5. Altere a condição de pagamento para "30 Dias"
  6. Sistema não pergunta nada e não reprocessa
  7. Os preços dos itens continuam com os valores antigos
  8. O bloqueio de desconto por VERIFICA_BLOQUEIO também não é aplicado neste modo

Resultado esperado: O usuário tem total controle manual. A tabela de preço original é preservada e o usuário deve ajustar manualmente caso deseje.

Este é o valor padrão ao criar um novo registro no MFA001 (na OFI001 o padrão é 'S').


Observação Importante: Homônimo em PARMOFICINA​

Existem dois parâmetros distintos com o mesmo nome ST_REPROCESSATABPRECO no JunsoftERP:

CaracterísticaVersão FaturamentoVersão Oficina
TabelaPARMFATURPARMOFICINA
Tela de configuraçãoMFA001OFI001
Rótulo na UIComboBox cmbST_REPROCESSATABPRECO em MFA001ComboBox cmbST_REPROCESSATABPRECO em OFI001
ValoresS (Sim), N (Não), A (Automático)S (Sim – Pergunta), A (Sim – Automático), N (Não)
Valor padrãoNS (ItemIndex = 0)
Módulos consumidoresMPD002, MNF002, MNF008, MNF017, MPD020, MPD081, MRC001, MRC020, MRC040MOF001, MOF005, MOF008
Procedure impactadaVERIFICA_BLOQUEIO (tipo P)—

Os dois parâmetros podem ter valores diferentes simultaneamente. Alterar um não afeta o outro. Um mesmo usuário que trabalha com Pedido (MPD002) e Ordem de Serviço (MOF001) pode ter comportamentos distintos: por exemplo, pergunta no Pedido (PARMFATUR='S') e automático na OS (PARMOFICINA='A').

Referências no código da versão PARMOFICINA:

  • — ComboBox cmbST_REPROCESSATABPRECO em OFI001
  • — Campo tabPARMOFICINAST_REPROCESSATABPRECO
  • — Valor padrão na inserção: 'N' (mas na UI o ItemIndex=0 aponta para 'S')
  • — Reprocessamento S/A em tabORDEMSERVICOCD_CONDPAGTOValidate
  • — Reprocessamento S/A
  • — Reprocessamento S/A via tabORDEMSERVICOST_REPROCESSATABPRECO

Observação Importante: Espelhamento em ST_REPRMOVCLIMPD020​

Ao salvar o MFA001, o código copia automaticamente o valor de ST_REPROCESSATABPRECO para o campo ST_REPRMOVCLIMPD020:

Este espelhamento mantém sincronizado o comportamento nos módulos que consultam ST_REPRMOVCLIMPD020 (usado internamente no SELECT de carga de parâmetros do MNF002, MNF008, MCO006). Alterar diretamente ST_REPRMOVCLIMPD020 no banco sem passar pelo MFA001 fica fora de sincronia.


Observação Importante: Comportamento Diferente no MPD020​

O módulo MPD020 (Pedido Mobile / Simplificado) trata apenas a opção 'S':

  • Opção 'S' → funciona normalmente (pergunta ao usuário).
  • Opção 'A' (Automático) → não dispara reprocessamento no MPD020, comporta-se como 'N'.
  • Opção 'N' → não reprocessa.

Nos demais módulos (MPD002, MNF002, MNF008, MPD081, MRC001, MRC020, MRC040, MNF017), as três opções são tratadas.


Observação Importante: Duplicação de Pedido (MPD002)​

Ao duplicar um pedido via btnDuplicarClick (MPD002), o código força temporariamente ST_REPROCESSATABPRECO = 'N' para evitar que o novo pedido gerado reprocesse preços, e depois restaura o valor original:

Isso garante que ao duplicar um pedido, os preços do pedido original sejam copiados fielmente, sem reprocessamento automático mesmo que o parâmetro esteja em 'S' ou 'A'.


Observação Importante: Dead Code em MOF001​

Em existe uma variável iST_REPROCESSATABPRECO que é preenchida em :735 com o valor de PARMFATUR.ST_REPROCESSATABPRECO. Porém, essa variável não é consultada em nenhum outro ponto do módulo. A lógica real de reprocessamento em MOF001 (linha 1401) consulta ParmOficina.Values['ST_REPROCESSATABPRECO'] (valor da tabela PARMOFICINA). Portanto, no MOF001 a leitura do PARMFATUR é dead code — não impacta o comportamento do módulo.


Regra Geral: Item Reprocessado​

Para um item ser reprocessado, todas as condições abaixo devem ser verdadeiras:

  1. CD_TABPRECO do item não é vazio (itens sem tabela de preço são ignorados).
  2. ST_ITEMPEDIDO / ST_SERVICO não é 'C' (itens cancelados não são recalculados — MPD002).
  3. Se ST_TRANSFERENCIA = 'N' ou o pedido não for de transferência (MPD002).
  4. A procedure RETORNA_TABPRECO retorna uma tabela válida para o par (empresa, condição, tipo pessoa, vendedor, região, estado, pessoa, item).

Tabela Comparativa Resumida​

OpçãoDescriçãoPergunta ao trocar condição?Reprocessa preços?Ativa bloqueio 'P' em VERIFICA_BLOQUEIO?Funciona no MPD020?
SSimSim (msgCodigo C-0000 / C-1679)Se usuário confirmarSimSim
AAutomáticoNãoSempre (silencioso)NãoNão (comporta-se como 'N')
NNãoNãoNuncaNãoSim (não reprocessa)