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_REPROCESSATABPRECOValor 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çõesS(Sim – Pergunta),A(Sim – Automático),N(Não) e valor padrãoS. 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ódulo | Código | Descrição |
|---|---|---|
| Pedido de Venda | MPD002 | Recalcula preços ao trocar condição de pagamento (uso direto via parmfatur.values) |
| Nota Fiscal Saída | MNF002 | Recalcula preços ao trocar condição de pagamento |
| NF Entrada (Avulsa) | MNF008 | Recalcula preços ao trocar condição de pagamento |
| NF Saída (Outra) – Confirmação | MNF017 | Recalcula preços na confirmação de pedido via NF |
| Pedido de Venda (Mobile/Simples) | MPD020 | Reprocessa via variável local iST_REPROCESSATABPRECO — trata apenas opção 'S' |
| Listagem Pedido Pneus | MPD081 | Recalcula ao trocar CD_CONDPAGTO — trata S e A |
| Pedido Pneus Recap | MRC001 | Recalcula ao trocar CD_CONDPAGTO — trata S e A |
| Recap NF (por Ordem) | MRC020 | Recalcula preços ao trocar condição de pagamento |
| Pedido Pneu (MRC040) | MRC040 | Recalcula ao trocar CD_CONDPAGTO — trata S e A |
| Contas a Receber | MCO006 | Apenas carrega o campo no SELECT do PARMFATUR (sem uso efetivo encontrado) |
Telas que usam a versão PARMOFICINA (homônima, configurada em OFI001)
| Módulo | Código | Descrição |
|---|---|---|
| Ordem de Serviço | MOF001 | Recalcula preços ao trocar condição/data/entrada — lê ParmOficina.Values['ST_REPROCESSATABPRECO'] (PARMOFICINA) |
| OS/Orçamento Oficina | MOF005 | Recalcula preços ao trocar condição — lê ParmOficina.Values['ST_REPROCESSATABPRECO'] (PARMOFICINA) |
| Liberação/Consulta OS | MOF008 | Usa tabORDEMSERVICOST_REPROCESSATABPRECO vindo de PO.ST_REPROCESSATABPRECO (PARMOFICINA) |
No MOF001 existe ainda uma variável
iST_REPROCESSATABPRECOcarregada dePARMFATURem , mas ela não é referenciada em nenhum outro ponto do módulo (dead code). A decisão real de reprocessar passa sempre peloParmOficina(PARMOFICINA).
Procedures impactadas
Procedures que leem o parâmetro PARMFATUR diretamente
| Procedure | Arquivo | Descrição |
|---|---|---|
VERIFICA_BLOQUEIO | Scripts/VERIFICA_BLOQUEIO.sql | Quando 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)
| Procedure | Arquivo | Descrição |
|---|---|---|
RETORNA_TABPRECO | Scripts/RETORNA_TABPRECO.sql | Retorna 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
| Campo | Descrição |
|---|---|
PARMFATUR.ST_REPROCESSATABPRECO | Flag (S/N/A) que define se o sistema deve recalcular preços ao trocar a condição de pagamento (versão Faturamento) |
PARMFATUR.ST_REPRMOVCLIMPD020 | Campo espelho atualizado automaticamente no MFA001 com o mesmo valor (ver ) |
PARMOFICINA.ST_REPROCESSATABPRECO | Flag (S/N/A) homônima, configurada em OFI001, usada por módulos de oficina |
ITEMPEDIDO.CD_TABPRECO / ITEMNOTA.CD_TABPRECO / ORDEMSERVITEM.CD_TABPRECO | Código da tabela de preço do item — recalculado via RETORNA_TABPRECO |
VL_UNITARIO / PS_ITEMNOTA / QT_PEDIDA | Valores unitários/quantidades recalculados a partir da nova tabela de preço |
Opções disponíveis
S - Sim (Pergunta ao Usuário)
| O que faz | Detalhe |
|---|---|
| Gatilho | Troca 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 UI | Exibe 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 reprocessados | Itens com ST_ITEMPEDIDO = 'C' (cancelados) ou sem CD_TABPRECO são ignorados |
Simulação passo a passo
- Vá em MFA001 → Parâmetros → Ambos → Opção 1 → ST_REPROCESSATABPRECO = "Sim"
- Salve os parâmetros (F6)
- Abra um Pedido de Venda (MPD002)
- Adicione 3 produtos com uma condição de pagamento "À Vista" (preço vem da tabela vinculada a condições à vista)
- Altere a condição de pagamento para "30 Dias" (saia do campo com TAB ou clique)
- Sistema exibe a pergunta: "Deseja Reprocessar os Preços dos Produtos?"
- Clique em "Sim" → Sistema percorre todos os itens, chama
RETORNA_TABPRECOpara cada um e recalculaCD_TABPRECO+VL_UNITARIOconforme a nova condição - 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 faz | Detalhe |
|---|---|
| Gatilho | Mesmo da opção S (troca de CD_CONDPAGTO, etc.) |
| Comportamento em UI | Não exibe diálogo — reprocessa silenciosamente |
| Reprocessamento | Percorre 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ção | MPD020 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
- MFA001 → ST_REPROCESSATABPRECO = "Automático"
- Salve os parâmetros (F6)
- Abra um Pedido de Venda (MPD002) ou Nota Fiscal (MNF002)
- Adicione 3 produtos com uma condição de pagamento
- Altere a condição de pagamento
- Sistema não pergunta nada — recalcula automaticamente
CD_TABPRECOeVL_UNITARIOde todos os itens viaRETORNA_TABPRECO - 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_BLOQUEIOa 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 faz | Detalhe |
|---|---|
| Gatilho | — |
| Comportamento em UI | Mudança de condição de pagamento não afeta os preços dos itens |
| Reprocessamento | Nunca ocorre — o bloco de reprocessamento é pulado |
Comportamento no SQL (VERIFICA_BLOQUEIO) | Não ativa a regra de bloqueio tipo 'P' |
| Exceção MNF017 | O 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
- MFA001 → ST_REPROCESSATABPRECO = "Não"
- Salve os parâmetros (F6)
- Abra um Pedido de Venda (MPD002)
- Adicione 3 produtos com uma condição de pagamento "À Vista"
- Altere a condição de pagamento para "30 Dias"
- Sistema não pergunta nada e não reprocessa
- Os preços dos itens continuam com os valores antigos
- O bloqueio de desconto por
VERIFICA_BLOQUEIOtambé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ística | Versão Faturamento | Versão Oficina |
|---|---|---|
| Tabela | PARMFATUR | PARMOFICINA |
| Tela de configuração | MFA001 | OFI001 |
| Rótulo na UI | ComboBox cmbST_REPROCESSATABPRECO em MFA001 | ComboBox cmbST_REPROCESSATABPRECO em OFI001 |
| Valores | S (Sim), N (Não), A (Automático) | S (Sim – Pergunta), A (Sim – Automático), N (Não) |
| Valor padrão | N | S (ItemIndex = 0) |
| Módulos consumidores | MPD002, MNF002, MNF008, MNF017, MPD020, MPD081, MRC001, MRC020, MRC040 | MOF001, MOF005, MOF008 |
| Procedure impactada | VERIFICA_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_REPROCESSATABPRECOem OFI001 - — Campo
tabPARMOFICINAST_REPROCESSATABPRECO - — Valor padrão na inserção:
'N'(mas na UI oItemIndex=0aponta 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:
CD_TABPRECOdo item não é vazio (itens sem tabela de preço são ignorados).ST_ITEMPEDIDO / ST_SERVICOnão é'C'(itens cancelados não são recalculados — MPD002).- Se
ST_TRANSFERENCIA = 'N'ou o pedido não for de transferência (MPD002). - A procedure
RETORNA_TABPRECOretorna uma tabela válida para o par (empresa, condição, tipo pessoa, vendedor, região, estado, pessoa, item).
Tabela Comparativa Resumida
| Opção | Descrição | Pergunta ao trocar condição? | Reprocessa preços? | Ativa bloqueio 'P' em VERIFICA_BLOQUEIO? | Funciona no MPD020? |
|---|---|---|---|---|---|
| S | Sim | Sim (msgCodigo C-0000 / C-1679) | Se usuário confirmar | Sim | Sim |
| A | Automático | Não | Sempre (silencioso) | Não | Não (comporta-se como 'N') |
| N | Não | Não | Nunca | Não | Sim (não reprocessa) |