Pular para o conteúdo principal

Reprocessa Movimentação ao Trocar Cliente / Condição de Pagamento

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Ambos → Opção 1 Tabela: PARMFATUR.ST_REPRMOVCLIMPD020 Valor padrão: herda o valor atual de ST_REPROCESSATABPRECO no AfterInsert (normalmente N)

Telas impactadas​

MóduloCódigoDescrição
Pedido de Venda (MPD020)MPD020Reprocessa ao trocar a pessoa (cliente) ou a condição de pagamento do pedido
Pedido de Venda (MPD002)MPD002Reprocessa ao trocar a pessoa/condição em grupos de movimentação de saída
NF de Saída (MNF002)MNF002Reprocessa movimentação dos itens ao trocar pessoa/condição em NF de saída
NF de Entrada (MNF001)MNF001Reprocessa movimentação dos itens ao trocar pessoa/condição em NF de entrada
NF Cupom/PDV (MNF008)MNF008Reprocessa movimentação dos itens em NF de saída (cupom/PDV)
Recap - NF Ordem (MRC020)MRC020Reprocessa movimentação e recalcula impostos ao trocar operação/pessoa
Configuração de Movimentação (MCO006)MCO006Campo lido no painel de configurações para uso por outros módulos

Campos envolvidos​

CampoDescrição
CD_PESSOA (PEDIDO/NOTA)Código do cliente/fornecedor. Sua troca é o gatilho principal do reprocessamento
CD_CONDPAGTO (PEDIDO/NOTA)Condição de pagamento. A troca também dispara o reprocessamento (ex.: edtCD_CONDPAGTOExit em MPD020)
CD_MOVIMENTACAO (ITEMPEDIDO/ITEMNOTA)Código da movimentação recalculado via buscaMovimentacao durante o reprocessamento

Opções disponíveis​

S - Sim (reprocessa automaticamente)​

O que fazDetalhe
Reprocessa movimentação?Sim, sem perguntar
Quando disparaAo trocar CD_PESSOA ou CD_CONDPAGTO em pedido/nota já com itens
Ação realizadaPara cada item, executa buscaMovimentacao (atualiza CD_MOVIMENTACAO e demais campos derivados)
Interação do usuárioNenhuma - execução silenciosa

Simulação passo a passo​

  1. MFA001 → Parâmetros → Ambos → Opção 1 → ST_REPRMOVCLIMPD020 = "Sim"
  2. Salve os parâmetros (F6)
  3. Abra um Pedido de Venda em MPD020
  4. Informe um cliente A, adicione alguns itens (todos com sua movimentação buscada para o cliente A)
  5. Troque o cliente para B (altera CD_PESSOA)
  6. Ao confirmar a troca, o sistema percorre todos os itens e chama buscaMovimentacao em cada um, automaticamente
  7. Repita o teste trocando a Condição de Pagamento - mesma execução automática

Resultado esperado: Os códigos de movimentação dos itens são atualizados para refletir o novo cliente/condição sem qualquer pergunta ao usuário.


N - Não (ignora a troca)​

O que fazDetalhe
Reprocessa movimentação?Não
Quando disparaNunca - em MNF001 inclusive sai da rotina imediatamente (exit)
Ação realizadaNenhuma. Os itens mantêm o CD_MOVIMENTACAO atribuído na inclusão original
RiscoSe o novo cliente/condição exige movimentação diferente (ex.: contribuinte x consumidor final), os impostos/CFOP ficam desatualizados até intervenção manual

Simulação passo a passo​

  1. MFA001 → ST_REPRMOVCLIMPD020 = "Não"
  2. Salve os parâmetros (F6)
  3. Abra um Pedido em MPD020 com cliente A e vários itens
  4. Troque o cliente para B
  5. Os itens continuam com a movimentação original do cliente A
  6. Nenhuma pergunta é feita, nenhum recálculo ocorre

Resultado esperado: A troca de cliente/condição não afeta as movimentações já gravadas nos itens. Cabe ao usuário revisar manualmente se for necessário.


P - Perguntar (solicita confirmação)​

O que fazDetalhe
Reprocessa movimentação?Depende da resposta do usuário
Quando disparaAo trocar CD_PESSOA ou CD_CONDPAGTO em pedido/nota já com itens
Ação realizadaExibe a mensagem C-0000 - "Deseja Reprocessar a Movimentação dos Produtos?" (ou "...dos Itens para esta Pessoa?" no MPD020). Se o usuário confirmar, faz o mesmo que a opção S
Interação do usuárioDiálogo Sim/Não

Simulação passo a passo​

  1. MFA001 → ST_REPRMOVCLIMPD020 = "Perguntar"
  2. Salve os parâmetros (F6)
  3. Abra um Pedido em MPD020 com cliente A e itens
  4. Troque o cliente para B
  5. O sistema exibe a pergunta "Deseja Reprocessar a Movimentação dos Itens para esta Pessoa?"
  6. Sim → itens são reprocessados (equivalente à opção S)
  7. Não → itens permanecem com a movimentação original (equivalente à opção N)

Resultado esperado: O usuário decide caso a caso se a movimentação deve ser reprocessada, com base no contexto do pedido.


Observação específica - MRC020 (NF por Ordem)​

No MRC020 (NF por Ordem da Recapadora), o fluxo é ligeiramente diferente:

  • O sistema sempre chama reprocessaMovimentacao('S') antes de consultar o parâmetro
  • Logo depois avalia ST_REPRMOVCLIMPD020:
    • S → marca VaiReprocessarMov := true e reprocessa
    • P → pergunta "Deseja reprocessar as movimentações dos produtos?"
    • N → não faz nada adicional
  • Por fim, clica em btnRecalcular para reprocessar os impostos da nota

Tabela Comparativa Resumida​

OpçãoDescriçãoReprocessa?Pergunta ao usuário?Itens recalculados
SSimSempreNãoSim
NNãoNuncaNãoNão
PPerguntarSob confirmaçãoSim (C-0000)Se usuário disser Sim

Referências no Código Fonte​

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

  • source/MFA001/UMFA001.dfm:4477-4504 - ComboBox cmbReprocessaMovMPD020 com DataField = 'ST_REPRMOVCLIMPD020' e Items.Strings = ('Sim'#9'S', 'Não'#9'N', 'Perguntar'#9'P')
  • source/MFA001/UdmMFA001.pas:258 - declaração tabPARMFATURST_REPRMOVCLIMPD020: TStringField
  • source/MFA001/UdmMFA001.pas:554 - valor padrão no AfterInsert: tabPARMFATURST_REPRMOVCLIMPD020.AsString := tabPARMFATURST_REPROCESSATABPRECO.AsString
  • source/MFA001/UdmMFA001.dfm:1830-1835 - definição do campo TStringField (tamanho 1, FixedChar)
  • source/MFA001/UdmMFA001.dfm:270, 2431, 2603, 2852, 3150 - SELECT/INSERT/UPDATE da PARMFATUR que incluem a coluna

Módulos consumidores​

  • source/MPD020/UdmMPD020.pas:1143-1164 - trocar CD_PESSOA em pedido: if ParmFatur.Values['ST_REPRMOVCLIMPD020'] = 'P' → pergunta; = 'S' → reprocessa automaticamente; dispara buscaMovimentacao em cada tabITEMPEDIDO
  • source/MPD020/UMPD020.pas:1977-1996 - edtCD_CONDPAGTOExit: mesma lógica ao trocar a condição de pagamento
  • source/MPD002/UdmMPD002.pas:4939-4950 - idêntica lógica S/P/N em MPD002 (pedido de venda)
  • source/MPD002/UdmMPD002.pas:5751 - parâmetro incluído no SELECT consolidado de parâmetros
  • source/MNF002/UdmMNF002.pas:4910-4916 - reprocessamento em NF de saída (St_reprocessa)
  • source/MNF002/UdmMNF002.pas:10501 - incluído no SELECT consolidado de parâmetros
  • source/MNF008/UdmMNF008.pas:4375-4381 - mesma lógica em NF cupom/PDV
  • source/MNF008/UdmMNF008.pas:766 - incluído no SELECT consolidado
  • source/MNF001/UdmMNF001.pas:1110, 1378, 1418 - leitura do parâmetro em NF de entrada (campo cacheado em dmMNF001.iST_REPRMOVCLIMPD020)
  • source/MNF001/UdmMNF001.pas:9312-9321 - branching 'N' → exit, 'P' → vaiPerguntar := True, 'S' → Reprocessa := True
  • source/MRC020/UdmMRC020NFORDEM.pas:5329-5337 - variante com reprocessamento prévio + recálculo de impostos na NF Ordem
  • source/MCO006/UdmMCO006.pas:2110 - parâmetro lido na configuração de movimentação

Procedures SQL (Firebird)​

  • Nenhuma referência encontrada em Scripts/ (o parâmetro é usado exclusivamente em código Delphi - nenhum stored procedure consulta ST_REPRMOVCLIMPD020)