Pular para o conteúdo principal

Reprocessar Tabela de Preços ao Trocar Cliente (MPD002)

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros de Pedidos/ Ordem de Serviço → Opção 2 → "Reprocessar Tab. Preços cfe. [MFA006]" Tabela: PARMFATUR.ST_REPROTABPRECOMPD002 Valor padrão: N (Não)

ℹ️ Observação sobre o rótulo: O label na UI exibe [MFA006], mas o consumo efetivo do parâmetro ocorre no MPD002 (vide o sufixo MPD002 no próprio nome do campo). Nenhuma referência ao parâmetro foi localizada em MFA006 no code base atual.

Telas impactadas​

MóduloCódigoDescrição
Pedido de VendaMPD002Ao trocar o cliente (CD_PESSOA) em um pedido que já tenha itens, recalcula CD_TABPRECO de cada item via procedure RETORNA_TABPRECO e reaplica o preço (gatilho no tabPEDIDOCD_PESSOAValidate)

Única tela consumidora encontrada no grep do source/. Nenhum uso em outros módulos, nem em Scripts/ (Firebird).

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_REPROTABPRECOMPD002Flag S/N que controla se o pedido MPD002 deve reaplicar a tabela de preço a cada troca de cliente
PEDIDO.CD_PESSOACliente do pedido — sua troca é o gatilho do reprocessamento
PEDIDO.CD_CONDPAGTOCondição de pagamento — parte dos parâmetros passados a RETORNA_TABPRECO
PEDIDO.CD_VENDEDOR / PEDIDO.CD_REGIAOCOMERCIAL / PEDIDO.SG_ESTADOIntegram o cálculo da tabela via RETORNA_TABPRECO
ITEMPEDIDO.CD_TABPRECOCódigo da tabela de preço reatribuído a cada item durante o reprocessamento
ITEMPEDIDO.CD_ITEM / QT_PEDIDA / PS_PEDIDOEntradas de RETORNA_TABPRECO para escolher a tabela mais adequada por item
ITEMPEDIDO.ST_ITEMPEDIDOItens com status 'C' (cancelado) são ignorados no reprocessamento
PARMFATUR.ST_TRANSFERENCIADesabilita parte do recálculo quando o pedido é marcado como transferência (iTransf = 'S' e ST_TRANSFERENCIA <> 'N')

Opções disponíveis​

S - Sim (Reprocessa ao trocar cliente)​

O que fazDetalhe
GatilhoTroca de cliente (CD_PESSOA) no MPD002, disparado em tabPEDIDOCD_PESSOAValidate
Pré-condiçãoO pedido já deve ter ao menos um item gravado (tabITEMPEDIDOCD_ITEM.AsString <> '')
Comportamento em UISilencioso — nenhuma pergunta ao usuário
AçãoDesabilita controles/eventos, percorre tabITEMPEDIDO.First..Eof e para cada item chama a procedure RETORNA_TABPRECO(cd_empresa, cd_condpagto, cd_tipopessoa, cd_vendedor, cd_regiaocomercial, sg_estado, cd_pessoa, cd_item, qt_pedida/ps_pedido)
AtualizaçãoSe a nova tabela retornada diferir da atual, grava em tabITEMPEDIDOCD_TABPRECO.AsString. Em seguida reatribui o mesmo valor para disparar o validate que recalcula o preço unitário do item
Itens ignoradosCD_TABPRECO vazio, ST_ITEMPEDIDO = 'C' (cancelado) e casos de transferência quando iTransf = 'S' e ST_TRANSFERENCIA <> 'N'
Tratamento de erroQualquer exceção é encapsulada em JException.Create('W-0000', [e.Message]); controles reabilitados no finally

Simulação passo a passo​

  1. Vá em MFA001 → Parâmetros de Pedidos/ Ordem de Serviço → Opção 2 → "Reprocessar Tab. Preços cfe. [MFA006]" = Sim
  2. Salve os parâmetros (F6)
  3. Abra o MPD002 e crie um pedido para o Cliente A com 3 itens (cada um com CD_TABPRECO definido)
  4. Sem salvar, troque o campo Cliente para Cliente B (edit em edtCD_PESSOA)
  5. Ao sair do campo, o sistema percorre todos os itens silenciosamente, consulta RETORNA_TABPRECO com os dados do Cliente B e atualiza o CD_TABPRECO de cada item quando diferente
  6. Em seguida, o validate do CD_TABPRECO recalcula o VL_UNITARIO do item conforme a tabela adequada ao novo cliente

Resultado esperado: Os itens existentes passam a refletir a tabela de preço e os valores unitários apropriados ao novo cliente, sem intervenção do usuário.


N - Não (Não reprocessa)​

O que fazDetalhe
Gatilho—
Comportamento em UITrocar o cliente no MPD002 não altera CD_TABPRECO nem VL_UNITARIO dos itens
AçãoO bloco if ((ParmFatur.Values['ST_REPROTABPRECOMPD002'] = 'S') ...) é pulado por completo

Simulação passo a passo​

  1. Vá em MFA001 → Opção 2 → "Reprocessar Tab. Preços cfe. [MFA006]" = Não
  2. Salve os parâmetros (F6)
  3. Abra o MPD002 e crie um pedido para o Cliente A com alguns itens
  4. Troque o cliente para Cliente B
  5. Os itens permanecem com o CD_TABPRECO e o VL_UNITARIO originais do Cliente A

Resultado esperado: Nenhum recálculo automático. Cabe ao usuário decidir se quer reajustar manualmente os preços dos itens após a troca de cliente.

Este é o valor padrão ao criar um novo registro no MFA001 (definido em UdmMFA001.pas:565 dentro do AfterInsert da tabPARMFATUR).


Interação com ST_REPROCESSATABPRECO / ST_REPRMOVCLIMPD020​

Os três parâmetros compartilham a mesma filosofia de "reprocessar quando algo muda em pedido/nota", mas com gatilhos, módulos e granularidades diferentes:

ParâmetroTela consumidora principalGatilhoO que recalculaOpçõesDocumentação
ST_REPROCESSATABPRECOMPD002, MNF002, MNF008, MNF017, MPD020, MPD081, MRC001, MRC020, MRC040Troca de Condição de PagamentoTabela de preço + preço unitário dos itensS, N, AST_REPROCESSATABPRECO
ST_REPRMOVCLIMPD020MPD020, MPD002, MNF001, MNF002, MNF008, MRC020Troca de Cliente ou Condição de PagamentoMovimentação (CFOP/impostos) via buscaMovimentacaoS, N, PST_REPRMOVCLIMPD020
ST_REPROTABPRECOMPD002MPD002 apenasTroca de Cliente (CD_PESSOA)Tabela de preço + preço unitário dos itensS, N(este documento)

Diferenças em relação a ST_REPROCESSATABPRECO​

  • Escopo reduzido: atua apenas em MPD002. Os demais módulos listados em ST_REPROCESSATABPRECO não consultam ST_REPROTABPRECOMPD002.
  • Gatilho diferente: dispara na troca de cliente, não na troca de condição de pagamento. A troca de condição permanece sob o domínio de ST_REPROCESSATABPRECO.
  • Opções simplificadas: só há S e N — não existe a variação A (automático sem perguntar) nem P (perguntar), pois a própria opção S já opera silenciosamente.

Cenário combinado no MPD002​

No mesmo MPD002, um usuário pode:

  • Trocar o cliente → dispara ST_REPROTABPRECOMPD002 (tabela de preço) e também ST_REPRMOVCLIMPD020 (movimentação), pois ambos escutam o evento de troca do CD_PESSOA.
  • Trocar a condição de pagamento → dispara ST_REPROCESSATABPRECO (tabela de preço) e também ST_REPRMOVCLIMPD020 (movimentação).

Portanto, para um ambiente em que a troca de cliente deve recalcular tudo sem perguntar nada, a combinação recomendada é:

  • ST_REPROTABPRECOMPD002 = 'S'
  • ST_REPRMOVCLIMPD020 = 'S'
  • ST_REPROCESSATABPRECO = 'A' (para cobrir também a troca de condição)

Tabela Comparativa Resumida​

OpçãoDescriçãoPergunta ao trocar cliente?Reprocessa tabela + preço?Escopo
SSimNão — silenciosoSim (via RETORNA_TABPRECO)Apenas itens com CD_TABPRECO e não cancelados
NNãoNãoNunca—

Referências no Código Fonte​

Tela MFA001 (definição e persistência)​

  • source/MFA001/UMFA001.dfm:10031-10059 - ComboBox cmbST_REPROTABPRECOMPD002 (TwwDBComboBox) com DataField = 'ST_REPROTABPRECOMPD002', Items.Strings = ('Sim'#9'S', 'Não'#9'N'), Style = csDropDownList, DropDownCount = 8
  • source/MFA001/UMFA001.dfm:9352-9365 - TLabel lbl70 com Caption = 'Reprocessar Tab. Pre'#231'os cfe. [MFA006]' (rótulo visível do combo)
  • source/MFA001/UMFA001.dfm:9235, 9242 - Tab "Opção 2" / GroupBox "Parâmetros de Pedidos/ Ordem de Serviço" (contêineres pais do combo)
  • source/MFA001/UMFA001.pas:494 - declaração do componente cmbST_REPROTABPRECOMPD002: TwwDBComboBox
  • source/MFA001/UdmMFA001.pas:259 - declaração tabPARMFATURST_REPROTABPRECOMPD002: TStringField
  • source/MFA001/UdmMFA001.pas:565 - valor padrão no AfterInsert da tabPARMFATUR: tabPARMFATURST_REPROTABPRECOMPD002.AsString := 'N';
  • source/MFA001/UdmMFA001.dfm:1836-1841 - TStringField (tamanho 1, FixedChar = True, Origin = '"PARMFATUR"."ST_REPROTABPRECOMPD002"')
  • source/MFA001/UdmMFA001.dfm:2431, 2605, 2853 - coluna incluída no SELECT, INSERT e UPDATE da PARMFATUR

Módulos consumidores​

  • source/MPD002/UdmMPD002.pas:1688-1753 - bloco de reprocessamento dentro de tabPEDIDOCD_PESSOAValidate. Percorre tabITEMPEDIDO, chama RETORNA_TABPRECO para cada item elegível (com CD_TABPRECO e não cancelado) e reatribui CD_TABPRECO para disparar o validate que recalcula o preço unitário
  • source/MPD002/UdmMPD002.pas:5750 - incluído no SELECT consolidado de parâmetros (SELECT ... P.ST_REPROTABPRECOMPD002, ... FROM PARMFATUR P)

Procedures SQL (Firebird)​

  • Procedure chamada indiretamente: RETORNA_TABPRECO (em Scripts/RETORNA_TABPRECO.sql) - retorna o CD_TABPRECO adequado para a tupla (empresa, condpagto, tipopessoa, vendedor, regiao, estado, pessoa, item, peso/qtde). Acionada pelo Delphi quando ST_REPROTABPRECOMPD002 = 'S'.
  • Nenhuma referência direta ao nome ST_REPROTABPRECOMPD002 foi encontrada em Scripts/ - o parâmetro é lido exclusivamente pelo Delphi (MPD002).