Pular para o conteúdo principal

ST_REPROCESSAVEND — Reprocessar Vendedor ao alterar Cliente

Tela de configuração: MFA001 — Parâmetros de Faturamento Localização: Parâmetros → aba Faturamento → sub-aba Vendedor (Vendedor: TTabSheet, UMFA001.dfm linha 5024) → rótulo "Reprocessar Vendedor ao alterar Cliente" (UMFA001.dfm linhas 5168–5181, Label91) Tabela: PARMFATUR.ST_REPROCESSAVEND Tipo: CHAR(1) — domínio DOM_CHAR1 (S/N) Valor padrão: 'S' — atribuído em UdmMFA001.pas linha 552 no AfterInsert

Componente visual: TwwDBComboBox wwDBComboBox13 (UMFA001.dfm linhas 5500–5526), posicionado em Left=482 Top=138, com itens 'Não'=N / 'Sim'=S. Nome genérico do componente; o DataField aponta para ST_REPROCESSAVEND.

Telas impactadas​

MóduloCódigoPapel
Parâmetros de FaturamentoMFA001Produtora — wwDBComboBox13 (DataField = 'ST_REPROCESSAVEND') grava o valor na PARMFATUR (UMFA001.dfm linhas 5500–5526)
Recebimento de NF Ordem de CompraMRC020Consumidora — UdmMRC020NFORDEM.pas linha 4986 lê Parmfatur.Values['ST_REPROCESSAVEND'] para definir iReprocessaVend. A flag controla se ao alterar Cliente/Pessoa na nota o CD_VENDEDOR é sobrescrito pelo vendedor do novo cliente (linhas 3580, 3608, 3634, 4019)
Manutenção de Notas FiscaisMNF002Consumidora — UdmMNF002.pas linha 6845 lê o parâmetro em conjunto com tabNOTANR_PEDIDO.AsString='' para definir iReprocessaVendedores. Usado nos fluxos de cópia de dados de Pessoa para a nota (linhas 4416, 4432, 4459, 4475, 5372)
Manutenção de NF Complementar/AjusteMNF008Consumidora de leitura — UdmMNF008.pas linha 767: o SELECT carrega ST_REPROCESSAVEND na estrutura de parâmetros devolvida a Result.Values (uso derivado, mesmo padrão de MNF002)
Cotação de Peças (recapagem)MCO006Consumidora de leitura — UdmMCO006.pas linha 2111: carrega ST_REPROCESSAVEND na estrutura de parâmetros devolvida (uso derivado)

Observação: A produção do valor acontece apenas em MFA001. As consumidoras clássicas são MRC020 (NF a partir de Ordem de Compra) e MNF002 (Nota Fiscal manual). MNF008 e MCO006 apenas copiam o parâmetro para seu dicionário de parâmetros mas não o avaliam diretamente nos trechos mapeados.

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_REPROCESSAVENDEste parâmetro. S = sobrescrever CD_VENDEDOR da nota quando o cliente/pessoa é alterado; N = preservar o vendedor já informado na nota
NOTA.CD_VENDEDORCampo sobrescrito (ou preservado) na nota conforme o parâmetro — tanto em MRC020 quanto em MNF002
NOTA.CD_PESSOACliente da nota — a troca desse campo é o gatilho que dispara o reprocesso
NOTA.NR_PEDIDOEm MNF002, se a nota não tem pedido vinculado (NR_PEDIDO='') o reprocesso ocorre independente do parâmetro (or na linha 6845)
RETORNA_VENDEDOR(...) (procedure)Em MRC020 (UdmMRC020NFORDEM.pas linhas 4022–4029), quando o reprocesso está ligado, chama essa procedure para recuperar o vendedor adequado ao par Empresa/Região/Pessoa/Grupo/Marca/Item
VENDEDOR / PESSOA (join)Consulta de validação do vendedor em MRC020 (UdmMRC020NFORDEM.pas linhas 4976–4978) antes de atribuir o iReprocessaVend

Parâmetros relacionados: ST_VENDEDOR define em quais documentos o vendedor é obrigatório (P/F/A/N). ST_REPROCESSAVEND atua somente quando o documento já tem vendedor e o cliente/pessoa é trocado em tela — independe da obrigatoriedade. ST_VARIOSVENDEDORES controla rateio múltiplo por item (é lido pelo mesmo SELECT de parâmetros em MNF002, MNF008 e MCO006).


Opções disponíveis​

S — Sim (padrão — Reprocessar)​

O que fazDetalhe
MRC020 — atribuiçãoUdmMRC020NFORDEM.pas linha 4986: ao validar CD_VENDEDOR, se o parâmetro está ='S', seta iReprocessaVend := True. Linhas 3580 / 3608 / 3634: ao alterar cliente na nota, sobrescreve tabNOTACD_VENDEDOR.AsString := Resultado[10] (vendedor retornado pela consulta da pessoa)
MRC020 — limpezaUdmMRC020NFORDEM.pas linha 3634: quando o cliente é limpo (cleanup), e iReprocessaVend=True, o vendedor da nota também é limpo (tabNOTACD_VENDEDOR.AsString := '')
MRC020 — itemUdmMRC020NFORDEM.pas linhas 4019–4037: no evento de reprocesso de movimentação, quando iReprocessaVend=True, chama RETORNA_VENDEDOR(...) passando Empresa/Região/Pessoa/Grupo/Marca/Item e se o retorno não for vazio, atualiza tabNOTACD_VENDEDOR no tabNOTA.Edit
MRC020 — em loteUMRC020.pas linha 1123: antes de iterar a tabORDEM inteira (importação de várias ordens), o módulo força dmMRC020NFORDEM.iReprocessaVend := True — garantindo que durante o lote o vendedor sempre seja reprocessado por ordem
MNF002UdmMNF002.pas linha 6845: iReprocessaVendedores := ((Trim(Parmfatur.Values['ST_REPROCESSAVEND']) = 'S') or (Trim(dmMNF002.tabNOTANR_PEDIDO.AsString)='')). Quando ='S', as linhas 4416, 4432, 4459, 4475 e 5372 executam tabNOTACD_VENDEDOR.AsString := Resultado[10] — sobrescrevem o vendedor da nota pelo vendedor do cliente (resultado da consulta da PESSOA)
MNF002 — item novoUdmMNF002.pas linhas 5370–5380: ao inserir item na nota, se iReprocessaVendedores=True, consulta RETORNA_VENDEDOR para o item e re-atribui o vendedor da nota

Simulação passo a passo​

  1. Em MFA001 → aba Faturamento → sub-aba Vendedor → Reprocessar Vendedor ao alterar Cliente → selecione Sim → salve (F6).
  2. Em MNF002, crie uma nova nota sem pedido (NR_PEDIDO em branco), escolha o Cliente "ABC Ltda" vinculado ao Vendedor "João". O campo CD_VENDEDOR da nota é preenchido com "João".
  3. Altere o Cliente para "XYZ Ltda" (vinculado ao Vendedor "Maria").
  4. Observação esperada: o CD_VENDEDOR da nota é sobrescrito automaticamente para "Maria". Eventual vendedor digitado manualmente pelo operador é perdido.
  5. Em MRC020, o mesmo comportamento vale ao alterar o cliente na NF originada de ordem de compra: tabNOTACD_VENDEDOR passa a refletir o vendedor do novo cliente.

Resultado esperado: garantia de que o vendedor da nota sempre reflete o vendedor cadastrado no cliente corrente. Útil quando a empresa usa "vendedor fixo por cliente" e quer evitar que o operador esqueça de atualizar o vendedor após trocar o cliente.


N — Não (Preservar vendedor já informado)​

O que fazDetalhe
MRC020UdmMRC020NFORDEM.pas linha 4986: iReprocessaVend := False. As linhas 3580, 3608 e 3634 não atribuem tabNOTACD_VENDEDOR — o valor anterior permanece. A linha 4019 (reprocesso de item) também não entra no if, logo RETORNA_VENDEDOR não é executada e o vendedor do item permanece inalterado
MNF002 — nota com pedidoUdmMNF002.pas linha 6845: iReprocessaVendedores := (False) or (NR_PEDIDO<>''). Quando a nota tem NR_PEDIDO, a expressão resulta False e as linhas 4416/4432/4459/4475/5372 não executam — o vendedor do pedido/informado previamente é preservado
MNF002 — nota sem pedidoExceção importante: UdmMNF002.pas linha 6845 usa or (Trim(dmMNF002.tabNOTANR_PEDIDO.AsString)=''). Quando a nota não tem pedido, iReprocessaVendedores=True mesmo com ST_REPROCESSAVEND='N'. Ou seja: para notas manuais sem origem em pedido, o reprocesso acontece sempre — o parâmetro só tem efeito em notas que vieram de pedido
MRC020 — loteUMRC020.pas linha 1123: mesmo com o parâmetro ='N', a rotina de importação em lote força iReprocessaVend := True explicitamente. Portanto, durante a importação em massa de ordens o parâmetro é sobreposto temporariamente

Simulação passo a passo​

  1. Em MFA001 → aba Faturamento → sub-aba Vendedor → Reprocessar Vendedor ao alterar Cliente → selecione Não → salve (F6).
  2. Em MNF002 importe um pedido do Cliente "ABC Ltda" (Vendedor "João") — a nota nasce com NR_PEDIDO preenchido e CD_VENDEDOR = João.
  3. Altere o Cliente para "XYZ Ltda" (Vendedor cadastrado "Maria").
  4. Observação esperada: o CD_VENDEDOR permanece "João" — o valor digitado/vindo do pedido é preservado. A comissão já negociada no pedido não é alterada.
  5. Contra-prova (nota sem pedido): em uma nota manual (sem importar pedido) com Cliente "ABC Ltda", troque para "XYZ Ltda". O vendedor será trocado para "Maria" mesmo com o parâmetro ='N', por causa da condição or (NR_PEDIDO='') na linha 6845.
  6. Em MRC020, edição avulsa de NF: alterar o cliente não altera mais o vendedor automaticamente — o operador precisa ajustar manualmente se quiser.

Resultado esperado: proteção do vendedor informado/herdado de pedido contra alterações acidentais em cascata. Indicado quando a empresa tem vendedores por ocasião (não vinculados ao cliente) ou quando a comissão negociada não pode mudar por troca de cliente pós-fechamento do pedido.


Interação com ST_VENDEDOR / ST_VARIOSVENDEDORES / ST_VENDPEDIDONOTA​

  • ST_VENDEDOR — Define quando o vendedor é obrigatório (P=Pedido, F=Nota Fiscal, A=Ambos, N=Não Bloqueia). Em MNF002 (UdmMNF002.pas linha 4493), mesmo após o reprocesso do vendedor, o campo tabNOTACD_VENDEDOR.ReadOnly := True é aplicado quando ST_VENDEDOR está em A ou F. Ou seja: ST_REPROCESSAVEND re-escreve o valor automaticamente, e depois ST_VENDEDOR pode travar o campo para edição manual.
  • ST_VARIOSVENDEDORES — Controla rateio por item via jVendedor. ST_REPROCESSAVEND atua apenas no CD_VENDEDOR do cabeçalho da nota (tabNOTA), não mexe no grid ITEMNOTAVENDEDOR de rateios. Em empresas com ST_VARIOSVENDEDORES='S', o reprocesso do cabeçalho pode ficar inconsistente com o grid; recomenda-se desligar ST_REPROCESSAVEND nesse cenário.
  • ST_VENDPEDIDONOTA — Controla se os vendedores do pedido são replicados ao criar a nota. ST_VENDPEDIDONOTA age no momento da importação do pedido para nota; ST_REPROCESSAVEND age na alteração posterior do cliente da nota. Os dois são complementares: ST_VENDPEDIDONOTA='S' garante que os vendedores do pedido nasçam na nota, e ST_REPROCESSAVEND='N' garante que esses vendedores não sejam derrubados se o operador mexer no cliente.
  • NR_PEDIDO (coluna de NOTA) — Em MNF002, a presença de pedido é parte da condição do reprocesso (or (NR_PEDIDO='')). O parâmetro só tem efeito em notas originadas de pedido; em notas manuais o reprocesso sempre ocorre.

Tabela Comparativa Resumida​

CenárioST_REPROCESSAVEND='S'ST_REPROCESSAVEND='N'
MRC020 — alterar cliente na NFSobrescreve CD_VENDEDORPreserva CD_VENDEDOR
MRC020 — limpar clienteLimpa CD_VENDEDORPreserva CD_VENDEDOR
MRC020 — reprocesso de item (RETORNA_VENDEDOR)Executa e re-atribuiNão executa
MRC020 — importação em lote de ordensSobrescreve (forçado em UMRC020.pas 1123)Sobrescreve (forçado em UMRC020.pas 1123)
MNF002 — nota com pedidoSobrescreve CD_VENDEDORPreserva CD_VENDEDOR
MNF002 — nota sem pedidoSobrescreve CD_VENDEDORSobrescreve CD_VENDEDOR (cláusula or NR_PEDIDO='')

Exceção importante: o parâmetro não tem efeito em notas MNF002 sem pedido — o sistema força o reprocesso nesse cenário. Também não tem efeito no UMRC020.pas durante importação em lote — o reprocesso é ativado por código.


Referências no Código Fonte​

Delphi — Tela MFA001 (produtora)​

ArquivoLinhasPapel
source/MFA001/UMFA001.dfm5168–5181TLabel Label91 com Caption = 'Reprocessar Vendedor ao alterar Cliente' (rótulo do combo)
source/MFA001/UMFA001.dfm5500–5526TwwDBComboBox wwDBComboBox13 com DataField = 'ST_REPROCESSAVEND' e itens Não=N / Sim=S
source/MFA001/UdmMFA001.pas256Declaração tabPARMFATURST_REPROCESSAVEND: TStringField
source/MFA001/UdmMFA001.pas552AfterInsert: valor padrão 'S' — tabPARMFATURST_REPROCESSAVEND.AsString := 'S';
source/MFA001/UdmMFA001.dfm268, 1818–1822, 2430, 2850, 3148ST_REPROCESSAVEND nos SQLs do tabPARMFATUR (SelectSQL, InsertSQL, ModifySQL) e no TStringField

Delphi — Consumidores (leem PARMFATUR.ST_REPROCESSAVEND)​

ArquivoLinhasPapel
source/MRC020/UdmMRC020NFORDEM.pas453Declaração da variável local iReprocessaVend: boolean
source/MRC020/UdmMRC020NFORDEM.pas4986iReprocessaVend := (Trim(Parmfatur.Values['ST_REPROCESSAVEND']) = 'S') — leitura do parâmetro
source/MRC020/UdmMRC020NFORDEM.pas3580, 3608, 3634if (iReprocessaVend) then tabNOTACD_VENDEDOR.AsString := ... nos fluxos de alteração/limpeza do cliente
source/MRC020/UdmMRC020NFORDEM.pas4019–4037if (iReprocessaVend) then chama RETORNA_VENDEDOR(...) e atribui tabNOTACD_VENDEDOR no reprocesso de item
source/MRC020/UMRC020.pas1123dmMRC020NFORDEM.iReprocessaVend := True; — força o reprocesso na importação em lote de ordens
source/MNF002/UMNF002.pas535Declaração iReprocessaVendedores: Boolean no form
source/MNF002/UMNF002.pas591, 4900iReprocessaVendedores := True; — inicialização ao abrir e ao gerar embarque
source/MNF002/UdmMNF002.pas6845iReprocessaVendedores := ((Trim(Parmfatur.Values['ST_REPROCESSAVEND']) = 'S') or (Trim(dmMNF002.tabNOTANR_PEDIDO.AsString)='')) — leitura combinada com NR_PEDIDO
source/MNF002/UdmMNF002.pas4416, 4432, 4459, 4475if (iReprocessaVendedores) then tabNOTACD_VENDEDOR.AsString := Resultado[10]; nos fluxos de cópia de dados da Pessoa
source/MNF002/UdmMNF002.pas5372–5380if (iReprocessaVendedores) then — consulta RETORNA_VENDEDOR ao inserir item na nota
source/MNF002/UdmMNF002.pas10502SELECT ... P.ST_REPROCESSAVEND ... — carrega o parâmetro no dicionário ParmFatur
source/MNF008/UdmMNF008.pas767SELECT ... P.ST_REPROCESSAVEND ... — carrega no dicionário de parâmetros (uso derivado)
source/MCO006/UdmMCO006.pas2111SELECT ... P.ST_REPROCESSAVEND ... — carrega no dicionário de parâmetros (uso derivado)

SQL — Procedures (Firebird)​

Nenhuma stored procedure em Scripts/ referencia ST_REPROCESSAVEND. O parâmetro é avaliado exclusivamente no lado Delphi, nas camadas de data module das telas consumidoras (MRC020 e MNF002). A procedure RETORNA_VENDEDOR é acionada pelo Delphi quando o reprocesso está ligado, mas ela própria não lê PARMFATUR.ST_REPROCESSAVEND.