Bloqueia Vendedor (Pedido / Nota Fiscal)
Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Aba "Vendedor" → GroupBox "Bloqueia Vendedor" Tabela:
PARMFATUR.ST_VENDEDORValor 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ódulo | Código | Descrição |
|---|---|---|
| Pedido de Venda | MPD002 | Bloqueia CD_VENDEDOR do pedido quando 'P' ou 'A' |
| Pedido Rápido | MPD020 | Mesma regra do MPD002 ('A'/'P') |
| NF Saída | MNF002 | Bloqueia CD_VENDEDOR da nota quando 'F' ou 'A' |
| NF Cupom/Contingência | MNF008 | Mesma regra do MNF002 ('A'/'F') |
| Rateio Individual de Vendedores | jVendedor - UVendedorIndividual | Trava o grid/alteração de comissão do item |
| Rateio Agrupado de Vendedores | jVendedor - UVendedorAgrupado | Trava o grid de comissão por item |
Campos envolvidos
| Campo | Tabela | Descrição |
|---|---|---|
CD_VENDEDOR | PEDIDO / NOTA | Código do vendedor do documento; passa a ReadOnly conforme o valor configurado |
PC_COMISSAO, VL_COMISSAO | ITEMPEDIDOVENDEDOR / ITEMNOTAVENDEDOR | Comissões no rateio por item; ficam em modo somente-leitura quando o grid é bloqueado |
Opções disponíveis
P - Pedido
| O que faz | Detalhe |
|---|---|
| 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 Delphi | Pos(parmfatur.values['ST_VENDEDOR'],'AP') > 0 → trava CD_VENDEDOR no MPD002 / MPD020 |
Simulação passo a passo
- Vá em MFA001 → aba Vendedor → "Bloqueia Vendedor" = Pedido
- Salve os parâmetros (F6)
- Abra um Pedido de Venda (MPD002)
- Informe um cliente que já possui vendedor associado (o campo
CD_VENDEDORvem preenchido automaticamente) - Tente alterar o vendedor → campo fica
ReadOnly, não aceita digitação/F9 - Abra a tela de rateio individual (comissões) do item → grid fica cinza e botões "Excluir" / "Altera Comissão" ficam ocultos
- 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 faz | Detalhe |
|---|---|
| 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 Delphi | Pos(parmfatur.values['ST_VENDEDOR'],'AF') > 0 → trava CD_VENDEDOR no MNF002 / MNF008 |
Simulação passo a passo
- MFA001 → "Bloqueia Vendedor" = Nota Fiscal
- Salve os parâmetros (F6)
- Abra uma NF de Saída (MNF002)
- Informe um cliente com vendedor pré-associado →
CD_VENDEDORvem preenchido - Tente alterar o vendedor → campo bloqueado (
ReadOnly) - Abra o rateio de comissões por item → grid somente-leitura; em
UVendedorAgrupadoos botões do menu popup são desabilitados - 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 faz | Detalhe |
|---|---|
| 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
- MFA001 → "Bloqueia Vendedor" = Ambos
- Salve os parâmetros (F6)
- Abra um Pedido (MPD002) com cliente que possui vendedor → vendedor travado
- Abra a grade de comissões do item → somente-leitura
- Abra uma NF (MNF002) para o mesmo cliente → vendedor travado
- 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 faz | Detalhe |
|---|---|
| Bloqueia vendedor em qualquer documento? | Não |
| Bloqueia grid de comissões? | Não |
Campos CD_VENDEDOR e grid de comissão | Sempre editáveis |
Simulação passo a passo
- MFA001 → "Bloqueia Vendedor" = Não Bloqueia
- Salve os parâmetros (F6)
- Abra um Pedido (MPD002) com cliente com vendedor pré-associado
- Altere o vendedor livremente → permitido
- Altere a comissão no rateio por item → permitido
- 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_VENDEDORestiver 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: seST_VENDEDOR∈A/PeST_VARIOSVENDEDORES = 'N'eST_COMISSAO = 'S', o campoPC_COMISSAOGERALtambém é bloqueado. - Não confundir com outros campos homônimos:
PARMTRANSPORTE.ST_VENDEDOR(tela TRA001) - parâmetro separado, vinculado ao CT-e; referenciado emUdmMNF013.pas(iST_VENDEDOR) e na procedureGRAVA_NOTACTEviaPT.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
| Valor | Descrição | Bloqueia vendedor do Pedido? | Bloqueia vendedor da NF? | Bloqueia grid comissão Pedido? | Bloqueia grid comissão NF? |
|---|---|---|---|---|---|
| P | Pedido | Sim | Não | Sim | Não |
| F | Nota Fiscal | Não | Sim | Não | Sim |
| A | Ambos | Sim | Sim | Sim | Sim |
| N | Não Bloqueia | Não | Não | Não | Não |
Em todos os casos o bloqueio só ocorre quando
CD_VENDEDORjá está preenchido no documento.
Referências no Código Fonte
Definição do parâmetro (MFA001)
source/MFA001/UMFA001.dfmlinha 5210-5238 - ComboBoxcmbST_VENDEDOR(TwwDBComboBox) comItems.Strings = ('Pedido'#9'P', 'Nota Fiscal'#9'F', 'Ambos'#9'A', 'Não Bloqueia'#9'N')source/MFA001/UMFA001.dfmlinha 5046 - Labellbl25comCaption = 'Bloqueia Vendedor'source/MFA001/UMFA001.paslinha 575-577 - TabSheetVendedore declaraçãocmbST_VENDEDOR: TwwDBComboBoxsource/MFA001/UdmMFA001.dfmlinha 92, 829-833, 2493, 2731, 2972 -tabPARMFATURincluiST_VENDEDORno SELECT/INSERT/UPDATEsource/MFA001/UdmMFA001.paslinha 76 -tabPARMFATURST_VENDEDOR: TStringFieldsource/MFA001/UdmMFA001.paslinha 449 -AfterInsert:tabPARMFATURST_VENDEDOR.AsString := 'N';(valor padrão)
Consumidores do parâmetro
MPD002 - Pedido de Venda
source/MPD002/UdmMPD002.paslinha 1952 -if (... AND Pos(parmfatur.values['ST_VENDEDOR'],'AP') > 0) then tabPEDIDOCD_VENDEDOR.ReadOnly := True;source/MPD002/UMPD002.paslinha 4265-4269 -if (('P') or ('A')) and vendedor preenchido then tabPEDIDOCD_VENDEDOR.ReadOnly := True;source/MPD002/UdmMPD002.paslinha 5738 - SELECT de PARMFATUR incluindoP.ST_VENDEDOR
MPD020 - Pedido Rápido
source/MPD020/UdmMPD020.paslinha 319, 351 - Leitura deST_VENDEDORno SELECT de PARMFATUR;dmMPD020.iST_VENDEDOR := Resultado[14];source/MPD020/UdmMPD020.paslinha 391-393 - BloqueiaPC_COMISSAOGERALquandoiST_VENDEDOR ∈ A/PeST_VARIOSVENDEDORES='N'eST_COMISSAO='S'source/MPD020/UdmMPD020.paslinha 1228-1231 -if (... and Pos(iST_VENDEDOR, 'AP') > 0) then tabPEDIDOCD_VENDEDOR.ReadOnly := True;
MNF002 - Nota Fiscal Saída
source/MNF002/UMNF002.paslinha 6818 -if (... and Pos(parmfatur.values['ST_VENDEDOR'],'AF') > 0) then tabNOTACD_VENDEDOR.ReadOnly := True;source/MNF002/UdmMNF002.paslinha 4493 - Mesma regra no data modulesource/MNF002/UdmMNF002.paslinha 10494 - SELECT de PARMFATUR incluindoP.ST_VENDEDOR
MNF008 - NF Cupom/Contingência
source/MNF008/UMNF008.paslinha 2387 -if (... and Pos(dmMNF008.parmfatur.values['ST_VENDEDOR'],'AF') > 0) then tabNOTACD_VENDEDOR.ReadOnly := True;source/MNF008/UdmMNF008.paslinha 479, 654, 681 - Declaração localiST_VENDEDOR, SELECT em PARMFATUR e atribuiçãodmMNF008.iST_VENDEDOR := Resultado[17];source/MNF008/UdmMNF008.paslinha 2455 -if ((...) And (Pos(iST_VENDEDOR,'AF') > 0)) then ...source/MNF008/UdmMNF008.paslinha 759 - SELECT de PARMFATUR incluindoP.ST_VENDEDOR
jVendedor - Rateio Individual
source/jVendedor/UVendedorIndividual.paslinha 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.paslinha 641-647 - Tabela = NOTA:if (ParmFatur.Values['ST_VENDEDOR'] = 'F') or ('A') thenmesmo bloqueio
jVendedor - Rateio Agrupado
source/jVendedor/UVendedorAgrupado.paslinha 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.paslinha 1213 -Param.St_Vendedor := Resultado[6];(leitura do parâmetro)source/jVendedor/UVendedorAgrupado.paslinha 1472-1484 -cdsPRODUTOSAfterScroll: bloqueio extra quandoTP_ORIGEM='P'ouSt_Vendedor ∈ F/Asource/jVendedor/jRateioVendedor.paslinha 61 - Declaração do campoSt_Vendedorno record de parâmetros
SQL
- Não há stored procedures em
Scripts/que referenciemPARMFATUR.ST_VENDEDOR. As ocorrências emGRAVA_NOTACTE.sql(linhas 72, 86, 97, 271, 293) referem-se aPARMTRANSPORTE.ST_VENDEDOR(apelidado comoPT.ST_VENDEDOR), que é um parâmetro diferente da tela TRA001.
Cópia entre empresas
source/CPD009/UdmCPD009.dfmlinha 318, 384, 477, 546 - Utilitário de cópia de PARMFATUR entre empresas; incluiST_VENDEDORno INSERT/UPDATE/SELECT.