Pular para o conteúdo principal

Bloqueia Vendedor (Pedido / Nota Fiscal)

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Aba "Vendedor" → GroupBox "Bloqueia Vendedor" Tabela: PARMFATUR.ST_VENDEDOR Valor padrão: N (Não Bloqueia)

Controla o bloqueio de alteração do vendedor no cabeçalho de documentos (Pedido e/ou Nota Fiscal) quando já existe um vendedor informado, e também define em qual módulo a grade de rateio de vendedores por item fica travada (leitura apenas). O comportamento é aplicado de forma complementar à existência ou não de vendedor preenchido no documento.

Telas impactadas​

MóduloCódigoDescrição
Pedido de VendaMPD002Bloqueia CD_VENDEDOR do pedido quando 'P' ou 'A'
Pedido RápidoMPD020Mesma regra do MPD002 ('A'/'P')
NF SaídaMNF002Bloqueia CD_VENDEDOR da nota quando 'F' ou 'A'
NF Cupom/ContingênciaMNF008Mesma regra do MNF002 ('A'/'F')
Rateio Individual de VendedoresjVendedor - UVendedorIndividualTrava o grid/alteração de comissão do item
Rateio Agrupado de VendedoresjVendedor - UVendedorAgrupadoTrava o grid de comissão por item

Campos envolvidos​

CampoTabelaDescrição
CD_VENDEDORPEDIDO / NOTACódigo do vendedor do documento; passa a ReadOnly conforme o valor configurado
PC_COMISSAO, VL_COMISSAOITEMPEDIDOVENDEDOR / ITEMNOTAVENDEDORComissões no rateio por item; ficam em modo somente-leitura quando o grid é bloqueado

Opções disponíveis​

P - Pedido​

O que fazDetalhe
Bloqueia vendedor do cabeçalho do Pedido?SIM, quando já houver vendedor informado
Bloqueia vendedor do cabeçalho da Nota Fiscal?Não
Bloqueia grid de comissões por item no Pedido?SIM (rateio individual e agrupado)
Bloqueia grid de comissões por item na Nota Fiscal?Não
Lógica DelphiPos(parmfatur.values['ST_VENDEDOR'],'AP') > 0 → trava CD_VENDEDOR no MPD002 / MPD020

Simulação passo a passo​

  1. Vá em MFA001 → aba Vendedor → "Bloqueia Vendedor" = Pedido
  2. Salve os parâmetros (F6)
  3. Abra um Pedido de Venda (MPD002)
  4. Informe um cliente que já possui vendedor associado (o campo CD_VENDEDOR vem preenchido automaticamente)
  5. Tente alterar o vendedor → campo fica ReadOnly, não aceita digitação/F9
  6. Abra a tela de rateio individual (comissões) do item → grid fica cinza e botões "Excluir" / "Altera Comissão" ficam ocultos
  7. Abra uma NF de Saída (MNF002) para o mesmo cliente → vendedor continua editável

Resultado esperado: No Pedido o vendedor vem travado (se já existir) e a comissão por item não pode ser alterada. Na Nota Fiscal o comportamento permanece livre.


F - Nota Fiscal​

O que fazDetalhe
Bloqueia vendedor do cabeçalho do Pedido?Não
Bloqueia vendedor do cabeçalho da Nota Fiscal?SIM, quando já houver vendedor informado
Bloqueia grid de comissões por item no Pedido?Não
Bloqueia grid de comissões por item na Nota Fiscal?SIM (rateio individual e agrupado)
Lógica DelphiPos(parmfatur.values['ST_VENDEDOR'],'AF') > 0 → trava CD_VENDEDOR no MNF002 / MNF008

Simulação passo a passo​

  1. MFA001 → "Bloqueia Vendedor" = Nota Fiscal
  2. Salve os parâmetros (F6)
  3. Abra uma NF de Saída (MNF002)
  4. Informe um cliente com vendedor pré-associado → CD_VENDEDOR vem preenchido
  5. Tente alterar o vendedor → campo bloqueado (ReadOnly)
  6. Abra o rateio de comissões por item → grid somente-leitura; em UVendedorAgrupado os botões do menu popup são desabilitados
  7. Abra um Pedido (MPD002) para o mesmo cliente → vendedor segue editável

Resultado esperado: A NF tem vendedor e comissões travadas; o Pedido permanece livre para ajuste do vendedor e da comissão.


A - Ambos​

O que fazDetalhe
Bloqueia vendedor no Pedido?SIM
Bloqueia vendedor na Nota Fiscal?SIM
Bloqueia grid de comissões por item no Pedido?SIM
Bloqueia grid de comissões por item na Nota Fiscal?SIM
Lógica Delphi'A' cai em ambos os testes (Pos(...,'AP') e Pos(...,'AF'))

Simulação passo a passo​

  1. MFA001 → "Bloqueia Vendedor" = Ambos
  2. Salve os parâmetros (F6)
  3. Abra um Pedido (MPD002) com cliente que possui vendedor → vendedor travado
  4. Abra a grade de comissões do item → somente-leitura
  5. Abra uma NF (MNF002) para o mesmo cliente → vendedor travado
  6. Abra a grade de comissões do item na NF → somente-leitura

Resultado esperado: Em qualquer documento com vendedor pré-associado, nem o vendedor nem a comissão por item podem ser alterados.


N - Não Bloqueia​

O que fazDetalhe
Bloqueia vendedor em qualquer documento?Não
Bloqueia grid de comissões?Não
Campos CD_VENDEDOR e grid de comissãoSempre editáveis

Simulação passo a passo​

  1. MFA001 → "Bloqueia Vendedor" = Não Bloqueia
  2. Salve os parâmetros (F6)
  3. Abra um Pedido (MPD002) com cliente com vendedor pré-associado
  4. Altere o vendedor livremente → permitido
  5. Altere a comissão no rateio por item → permitido
  6. Mesmo comportamento na NF (MNF002/MNF008)

Resultado esperado: Nenhum campo de vendedor/comissão é travado pelo parâmetro. Este é o valor padrão ao criar um novo registro no MFA001.


Observações de Interação​

  • Condição obrigatória para bloqueio: O bloqueio só é aplicado se CD_VENDEDOR estiver preenchido no documento (Trim(tab...CD_VENDEDOR.AsString) <> ''). Se o vendedor ainda não foi informado, o campo permanece editável independentemente do valor do parâmetro, para que o usuário consiga preenchê-lo.
  • Truque da string "AP" / "AF": O código verifica pertencimento por Pos(...) em strings fixas:
    • 'AP' - para o Pedido (aceita tanto 'A' quanto 'P')
    • 'AF' - para a Nota Fiscal (aceita tanto 'A' quanto 'F')
  • Independência de ST_VARIOSVENDEDORES: Este parâmetro controla só o vendedor "principal" no cabeçalho e o grid agregado de rateio. Ele não tem relação com ST_VARIOSVENDEDORES (que define se é permitido múltiplos vendedores). No MPD020 há uma regra combinada: se ST_VENDEDOR ∈ A/P e ST_VARIOSVENDEDORES = 'N' e ST_COMISSAO = 'S', o campo PC_COMISSAOGERAL também é bloqueado.
  • Não confundir com outros campos homônimos:
    • PARMTRANSPORTE.ST_VENDEDOR (tela TRA001) - parâmetro separado, vinculado ao CT-e; referenciado em UdmMNF013.pas (iST_VENDEDOR) e na procedure GRAVA_NOTACTE via PT.ST_VENDEDOR.
    • TIPOPESSOA.ST_VENDEDORPRINCIPAL - indica o vendedor principal do tipo de pessoa (não é parâmetro).
    • PARMSISTEMA.ST_VENDEDORENDERECO (tela ADM010) - campo diferente.
    • PARMRECAP.ST_VENDEDORPEDIDOITEM (recapadora) - campo diferente.
    • PARMOFICINA.ST_OBRIGAVENDEDOR (MOF001) - regra similar para Ordem de Serviço, mas independente.

Tabela Comparativa Resumida​

ValorDescriçãoBloqueia vendedor do Pedido?Bloqueia vendedor da NF?Bloqueia grid comissão Pedido?Bloqueia grid comissão NF?
PPedidoSimNãoSimNão
FNota FiscalNãoSimNãoSim
AAmbosSimSimSimSim
NNão BloqueiaNãoNãoNãoNão

Em todos os casos o bloqueio só ocorre quando CD_VENDEDOR já está preenchido no documento.


Referências no Código Fonte​

Definição do parâmetro (MFA001)​

  • source/MFA001/UMFA001.dfm linha 5210-5238 - ComboBox cmbST_VENDEDOR (TwwDBComboBox) com Items.Strings = ('Pedido'#9'P', 'Nota Fiscal'#9'F', 'Ambos'#9'A', 'Não Bloqueia'#9'N')
  • source/MFA001/UMFA001.dfm linha 5046 - Label lbl25 com Caption = 'Bloqueia Vendedor'
  • source/MFA001/UMFA001.pas linha 575-577 - TabSheet Vendedor e declaração cmbST_VENDEDOR: TwwDBComboBox
  • source/MFA001/UdmMFA001.dfm linha 92, 829-833, 2493, 2731, 2972 - tabPARMFATUR inclui ST_VENDEDOR no SELECT/INSERT/UPDATE
  • source/MFA001/UdmMFA001.pas linha 76 - tabPARMFATURST_VENDEDOR: TStringField
  • source/MFA001/UdmMFA001.pas linha 449 - AfterInsert: tabPARMFATURST_VENDEDOR.AsString := 'N'; (valor padrão)

Consumidores do parâmetro​

MPD002 - Pedido de Venda

  • source/MPD002/UdmMPD002.pas linha 1952 - if (... AND Pos(parmfatur.values['ST_VENDEDOR'],'AP') > 0) then tabPEDIDOCD_VENDEDOR.ReadOnly := True;
  • source/MPD002/UMPD002.pas linha 4265-4269 - if (('P') or ('A')) and vendedor preenchido then tabPEDIDOCD_VENDEDOR.ReadOnly := True;
  • source/MPD002/UdmMPD002.pas linha 5738 - SELECT de PARMFATUR incluindo P.ST_VENDEDOR

MPD020 - Pedido Rápido

  • source/MPD020/UdmMPD020.pas linha 319, 351 - Leitura de ST_VENDEDOR no SELECT de PARMFATUR; dmMPD020.iST_VENDEDOR := Resultado[14];
  • source/MPD020/UdmMPD020.pas linha 391-393 - Bloqueia PC_COMISSAOGERAL quando iST_VENDEDOR ∈ A/P e ST_VARIOSVENDEDORES='N' e ST_COMISSAO='S'
  • source/MPD020/UdmMPD020.pas linha 1228-1231 - if (... and Pos(iST_VENDEDOR, 'AP') > 0) then tabPEDIDOCD_VENDEDOR.ReadOnly := True;

MNF002 - Nota Fiscal Saída

  • source/MNF002/UMNF002.pas linha 6818 - if (... and Pos(parmfatur.values['ST_VENDEDOR'],'AF') > 0) then tabNOTACD_VENDEDOR.ReadOnly := True;
  • source/MNF002/UdmMNF002.pas linha 4493 - Mesma regra no data module
  • source/MNF002/UdmMNF002.pas linha 10494 - SELECT de PARMFATUR incluindo P.ST_VENDEDOR

MNF008 - NF Cupom/Contingência

  • source/MNF008/UMNF008.pas linha 2387 - if (... and Pos(dmMNF008.parmfatur.values['ST_VENDEDOR'],'AF') > 0) then tabNOTACD_VENDEDOR.ReadOnly := True;
  • source/MNF008/UdmMNF008.pas linha 479, 654, 681 - Declaração local iST_VENDEDOR, SELECT em PARMFATUR e atribuição dmMNF008.iST_VENDEDOR := Resultado[17];
  • source/MNF008/UdmMNF008.pas linha 2455 - if ((...) And (Pos(iST_VENDEDOR,'AF') > 0)) then ...
  • source/MNF008/UdmMNF008.pas linha 759 - SELECT de PARMFATUR incluindo P.ST_VENDEDOR

jVendedor - Rateio Individual

  • source/jVendedor/UVendedorIndividual.pas linha 610-616 - Tabela = PEDIDO: if (ParmFatur.Values['ST_VENDEDOR'] = 'P') or ('A') then gridVendedor.ReadOnly := True; btnEXCLUIR.Visible := False; btnALTERACOMISSAO.Enabled := False;
  • source/jVendedor/UVendedorIndividual.pas linha 641-647 - Tabela = NOTA: if (ParmFatur.Values['ST_VENDEDOR'] = 'F') or ('A') then mesmo bloqueio

jVendedor - Rateio Agrupado

  • source/jVendedor/UVendedorAgrupado.pas linha 740-758 - if ((Tp_docto='P' and St_Vendedor in P/A) or (Tp_docto='N' and St_Vendedor in F/A)) then gridVENDEDORES.ReadOnly := True; btnALTERACOMISSAO.Visible := False;
  • source/jVendedor/UVendedorAgrupado.pas linha 1213 - Param.St_Vendedor := Resultado[6]; (leitura do parâmetro)
  • source/jVendedor/UVendedorAgrupado.pas linha 1472-1484 - cdsPRODUTOSAfterScroll: bloqueio extra quando TP_ORIGEM='P' ou St_Vendedor ∈ F/A
  • source/jVendedor/jRateioVendedor.pas linha 61 - Declaração do campo St_Vendedor no record de parâmetros

SQL​

  • Não há stored procedures em Scripts/ que referenciem PARMFATUR.ST_VENDEDOR. As ocorrências em GRAVA_NOTACTE.sql (linhas 72, 86, 97, 271, 293) referem-se a PARMTRANSPORTE.ST_VENDEDOR (apelidado como PT.ST_VENDEDOR), que é um parâmetro diferente da tela TRA001.

Cópia entre empresas​

  • source/CPD009/UdmCPD009.dfm linha 318, 384, 477, 546 - Utilitário de cópia de PARMFATUR entre empresas; inclui ST_VENDEDOR no INSERT/UPDATE/SELECT.