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ódulo | Código | Descrição |
|---|
| Pedido de Venda (MPD020) | MPD020 | Reprocessa ao trocar a pessoa (cliente) ou a condição de pagamento do pedido |
| Pedido de Venda (MPD002) | MPD002 | Reprocessa ao trocar a pessoa/condição em grupos de movimentação de saída |
| NF de Saída (MNF002) | MNF002 | Reprocessa movimentação dos itens ao trocar pessoa/condição em NF de saída |
| NF de Entrada (MNF001) | MNF001 | Reprocessa movimentação dos itens ao trocar pessoa/condição em NF de entrada |
| NF Cupom/PDV (MNF008) | MNF008 | Reprocessa movimentação dos itens em NF de saída (cupom/PDV) |
| Recap - NF Ordem (MRC020) | MRC020 | Reprocessa movimentação e recalcula impostos ao trocar operação/pessoa |
| Configuração de Movimentação (MCO006) | MCO006 | Campo lido no painel de configurações para uso por outros módulos |
Campos envolvidos
| Campo | Descriçã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 faz | Detalhe |
|---|
| Reprocessa movimentação? | Sim, sem perguntar |
| Quando dispara | Ao trocar CD_PESSOA ou CD_CONDPAGTO em pedido/nota já com itens |
| Ação realizada | Para cada item, executa buscaMovimentacao (atualiza CD_MOVIMENTACAO e demais campos derivados) |
| Interação do usuário | Nenhuma - execução silenciosa |
Simulação passo a passo
- MFA001 → Parâmetros → Ambos → Opção 1 →
ST_REPRMOVCLIMPD020 = "Sim"
- Salve os parâmetros (F6)
- Abra um Pedido de Venda em MPD020
- Informe um cliente A, adicione alguns itens (todos com sua movimentação buscada para o cliente A)
- Troque o cliente para B (altera
CD_PESSOA)
- Ao confirmar a troca, o sistema percorre todos os itens e chama
buscaMovimentacao em cada um, automaticamente
- 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 faz | Detalhe |
|---|
| Reprocessa movimentação? | Não |
| Quando dispara | Nunca - em MNF001 inclusive sai da rotina imediatamente (exit) |
| Ação realizada | Nenhuma. Os itens mantêm o CD_MOVIMENTACAO atribuído na inclusão original |
| Risco | Se 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
- MFA001 →
ST_REPRMOVCLIMPD020 = "Não"
- Salve os parâmetros (F6)
- Abra um Pedido em MPD020 com cliente A e vários itens
- Troque o cliente para B
- Os itens continuam com a movimentação original do cliente A
- 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 faz | Detalhe |
|---|
| Reprocessa movimentação? | Depende da resposta do usuário |
| Quando dispara | Ao trocar CD_PESSOA ou CD_CONDPAGTO em pedido/nota já com itens |
| Ação realizada | Exibe 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ário | Diálogo Sim/Não |
Simulação passo a passo
- MFA001 →
ST_REPRMOVCLIMPD020 = "Perguntar"
- Salve os parâmetros (F6)
- Abra um Pedido em MPD020 com cliente A e itens
- Troque o cliente para B
- O sistema exibe a pergunta "Deseja Reprocessar a Movimentação dos Itens para esta Pessoa?"
- Sim → itens são reprocessados (equivalente à opção
S)
- 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ção | Descrição | Reprocessa? | Pergunta ao usuário? | Itens recalculados |
|---|
| S | Sim | Sempre | Não | Sim |
| N | Não | Nunca | Não | Não |
| P | Perguntar | Sob confirmação | Sim (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)