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.dfmlinha 5024) → rótulo "Reprocessar Vendedor ao alterar Cliente" (UMFA001.dfmlinhas 5168–5181,Label91) Tabela:PARMFATUR.ST_REPROCESSAVENDTipo:CHAR(1)— domínioDOM_CHAR1(S/N) Valor padrão:'S'— atribuído emUdmMFA001.paslinha 552 noAfterInsert
Componente visual:
TwwDBComboBox wwDBComboBox13(UMFA001.dfmlinhas 5500–5526), posicionado em Left=482 Top=138, com itens'Não'=N / 'Sim'=S. Nome genérico do componente; oDataFieldaponta paraST_REPROCESSAVEND.
Telas impactadas
| Módulo | Código | Papel |
|---|---|---|
| Parâmetros de Faturamento | MFA001 | Produtora — wwDBComboBox13 (DataField = 'ST_REPROCESSAVEND') grava o valor na PARMFATUR (UMFA001.dfm linhas 5500–5526) |
| Recebimento de NF Ordem de Compra | MRC020 | Consumidora — 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 Fiscais | MNF002 | Consumidora — 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/Ajuste | MNF008 | Consumidora 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) | MCO006 | Consumidora 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
| Campo | Descrição |
|---|---|
PARMFATUR.ST_REPROCESSAVEND | Este parâmetro. S = sobrescrever CD_VENDEDOR da nota quando o cliente/pessoa é alterado; N = preservar o vendedor já informado na nota |
NOTA.CD_VENDEDOR | Campo sobrescrito (ou preservado) na nota conforme o parâmetro — tanto em MRC020 quanto em MNF002 |
NOTA.CD_PESSOA | Cliente da nota — a troca desse campo é o gatilho que dispara o reprocesso |
NOTA.NR_PEDIDO | Em 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_VENDEDORdefine em quais documentos o vendedor é obrigatório (P/F/A/N).ST_REPROCESSAVENDatua somente quando o documento já tem vendedor e o cliente/pessoa é trocado em tela — independe da obrigatoriedade.ST_VARIOSVENDEDOREScontrola rateio múltiplo por item (é lido pelo mesmoSELECTde parâmetros em MNF002, MNF008 e MCO006).
Opções disponíveis
S — Sim (padrão — Reprocessar)
| O que faz | Detalhe |
|---|---|
| MRC020 — atribuição | UdmMRC020NFORDEM.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 — limpeza | UdmMRC020NFORDEM.pas linha 3634: quando o cliente é limpo (cleanup), e iReprocessaVend=True, o vendedor da nota também é limpo (tabNOTACD_VENDEDOR.AsString := '') |
| MRC020 — item | UdmMRC020NFORDEM.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 lote | UMRC020.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 |
| MNF002 | UdmMNF002.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 novo | UdmMNF002.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
- Em MFA001 → aba Faturamento → sub-aba Vendedor → Reprocessar Vendedor ao alterar Cliente → selecione
Sim→ salve (F6). - Em MNF002, crie uma nova nota sem pedido (
NR_PEDIDOem branco), escolha o Cliente "ABC Ltda" vinculado ao Vendedor "João". O campoCD_VENDEDORda nota é preenchido com "João". - Altere o Cliente para "XYZ Ltda" (vinculado ao Vendedor "Maria").
- Observação esperada: o
CD_VENDEDORda nota é sobrescrito automaticamente para "Maria". Eventual vendedor digitado manualmente pelo operador é perdido. - Em MRC020, o mesmo comportamento vale ao alterar o cliente na NF originada de ordem de compra:
tabNOTACD_VENDEDORpassa 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 faz | Detalhe |
|---|---|
| MRC020 | UdmMRC020NFORDEM.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 pedido | UdmMNF002.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 pedido | Exceçã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 — lote | UMRC020.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
- Em MFA001 → aba Faturamento → sub-aba Vendedor → Reprocessar Vendedor ao alterar Cliente → selecione
Não→ salve (F6). - Em MNF002 importe um pedido do Cliente "ABC Ltda" (Vendedor "João") — a nota nasce com
NR_PEDIDOpreenchido eCD_VENDEDOR= João. - Altere o Cliente para "XYZ Ltda" (Vendedor cadastrado "Maria").
- Observação esperada: o
CD_VENDEDORpermanece "João" — o valor digitado/vindo do pedido é preservado. A comissão já negociada no pedido não é alterada. - 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çãoor (NR_PEDIDO='')na linha 6845. - 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.paslinha 4493), mesmo após o reprocesso do vendedor, o campotabNOTACD_VENDEDOR.ReadOnly := Trueé aplicado quandoST_VENDEDORestá emAouF. Ou seja:ST_REPROCESSAVENDre-escreve o valor automaticamente, e depoisST_VENDEDORpode travar o campo para edição manual.ST_VARIOSVENDEDORES— Controla rateio por item viajVendedor.ST_REPROCESSAVENDatua apenas noCD_VENDEDORdo cabeçalho da nota (tabNOTA), não mexe no gridITEMNOTAVENDEDORde rateios. Em empresas comST_VARIOSVENDEDORES='S', o reprocesso do cabeçalho pode ficar inconsistente com o grid; recomenda-se desligarST_REPROCESSAVENDnesse cenário.ST_VENDPEDIDONOTA— Controla se os vendedores do pedido são replicados ao criar a nota.ST_VENDPEDIDONOTAage no momento da importação do pedido para nota;ST_REPROCESSAVENDage 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, eST_REPROCESSAVEND='N'garante que esses vendedores não sejam derrubados se o operador mexer no cliente.NR_PEDIDO(coluna deNOTA) — 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ário | ST_REPROCESSAVEND='S' | ST_REPROCESSAVEND='N' |
|---|---|---|
| MRC020 — alterar cliente na NF | Sobrescreve CD_VENDEDOR | Preserva CD_VENDEDOR |
| MRC020 — limpar cliente | Limpa CD_VENDEDOR | Preserva CD_VENDEDOR |
MRC020 — reprocesso de item (RETORNA_VENDEDOR) | Executa e re-atribui | Não executa |
| MRC020 — importação em lote de ordens | Sobrescreve (forçado em UMRC020.pas 1123) | Sobrescreve (forçado em UMRC020.pas 1123) |
| MNF002 — nota com pedido | Sobrescreve CD_VENDEDOR | Preserva CD_VENDEDOR |
| MNF002 — nota sem pedido | Sobrescreve CD_VENDEDOR | Sobrescreve 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)
| Arquivo | Linhas | Papel |
|---|---|---|
source/MFA001/UMFA001.dfm | 5168–5181 | TLabel Label91 com Caption = 'Reprocessar Vendedor ao alterar Cliente' (rótulo do combo) |
source/MFA001/UMFA001.dfm | 5500–5526 | TwwDBComboBox wwDBComboBox13 com DataField = 'ST_REPROCESSAVEND' e itens Não=N / Sim=S |
source/MFA001/UdmMFA001.pas | 256 | Declaração tabPARMFATURST_REPROCESSAVEND: TStringField |
source/MFA001/UdmMFA001.pas | 552 | AfterInsert: valor padrão 'S' — tabPARMFATURST_REPROCESSAVEND.AsString := 'S'; |
source/MFA001/UdmMFA001.dfm | 268, 1818–1822, 2430, 2850, 3148 | ST_REPROCESSAVEND nos SQLs do tabPARMFATUR (SelectSQL, InsertSQL, ModifySQL) e no TStringField |
Delphi — Consumidores (leem PARMFATUR.ST_REPROCESSAVEND)
| Arquivo | Linhas | Papel |
|---|---|---|
source/MRC020/UdmMRC020NFORDEM.pas | 453 | Declaração da variável local iReprocessaVend: boolean |
source/MRC020/UdmMRC020NFORDEM.pas | 4986 | iReprocessaVend := (Trim(Parmfatur.Values['ST_REPROCESSAVEND']) = 'S') — leitura do parâmetro |
source/MRC020/UdmMRC020NFORDEM.pas | 3580, 3608, 3634 | if (iReprocessaVend) then tabNOTACD_VENDEDOR.AsString := ... nos fluxos de alteração/limpeza do cliente |
source/MRC020/UdmMRC020NFORDEM.pas | 4019–4037 | if (iReprocessaVend) then chama RETORNA_VENDEDOR(...) e atribui tabNOTACD_VENDEDOR no reprocesso de item |
source/MRC020/UMRC020.pas | 1123 | dmMRC020NFORDEM.iReprocessaVend := True; — força o reprocesso na importação em lote de ordens |
source/MNF002/UMNF002.pas | 535 | Declaração iReprocessaVendedores: Boolean no form |
source/MNF002/UMNF002.pas | 591, 4900 | iReprocessaVendedores := True; — inicialização ao abrir e ao gerar embarque |
source/MNF002/UdmMNF002.pas | 6845 | iReprocessaVendedores := ((Trim(Parmfatur.Values['ST_REPROCESSAVEND']) = 'S') or (Trim(dmMNF002.tabNOTANR_PEDIDO.AsString)='')) — leitura combinada com NR_PEDIDO |
source/MNF002/UdmMNF002.pas | 4416, 4432, 4459, 4475 | if (iReprocessaVendedores) then tabNOTACD_VENDEDOR.AsString := Resultado[10]; nos fluxos de cópia de dados da Pessoa |
source/MNF002/UdmMNF002.pas | 5372–5380 | if (iReprocessaVendedores) then — consulta RETORNA_VENDEDOR ao inserir item na nota |
source/MNF002/UdmMNF002.pas | 10502 | SELECT ... P.ST_REPROCESSAVEND ... — carrega o parâmetro no dicionário ParmFatur |
source/MNF008/UdmMNF008.pas | 767 | SELECT ... P.ST_REPROCESSAVEND ... — carrega no dicionário de parâmetros (uso derivado) |
source/MCO006/UdmMCO006.pas | 2111 | SELECT ... 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.