Pular para o conteúdo principal

ST_VENDPEDIDONOTA — Repetir Vendedores do Pedido na Nota Fiscal

Tela de configuração: MFA001 — Parâmetros de Faturamento Localização: Parâmetros → Faturamento → aba Vendedor → rótulo "Repetir Vendedores do Pedido na Nota" (UMFA001.dfm linhas 5096–5109, lbl63) Tabela: PARMFATUR.ST_VENDPEDIDONOTA Tipo: CHAR(1) — domínio DOM_CHAR1 (S/N) Valor padrão: 'N' — atribuído em UdmMFA001.pas linha 537 no AfterInsert

Componente visual: TwwDBComboBox cmbST_MOSTRACOMISSAO1 (UMFA001.dfm linhas 5343–5369), posicionado em Left=482 Top=42, com itens 'Sim'=S / 'Não'=N. O nome do componente é legado (antigo ST_MOSTRACOMISSAO1) mas o DataField aponta para ST_VENDPEDIDONOTA.

Telas impactadas​

MóduloCódigoPapel
Parâmetros de FaturamentoMFA001Produtora — cmbST_MOSTRACOMISSAO1 (DataField = 'ST_VENDPEDIDONOTA') grava o valor na PARMFATUR (UMFA001.dfm linhas 5343–5369)
Seleção de Vendedor IndividualjVendedor (shared unit, consumida por MPD002/MPD005/MNF002/MNF024/MRC001/CNF001 etc.)Consumidora — UVendedorIndividual.pas linhas 199–234: quando o documento em edição é uma NOTA e o parâmetro está ='S', tenta copiar os vendedores do pedido automaticamente e não exibe o form de digitação (ShowModal é suprimido). Em CNF001 o valor é forçado a 'N' (linha 209)
Seleção de Vendedor AgrupadojVendedor (shared unit)Consumidora — UVendedorAgrupado.pas linhas 1196–1216: carrega ST_VENDPEDIDONOTA em Param.St_VendPedidoNota. Lógica de auto-confirmação e grid read-only em UVendedorAgrupado.pas linhas 537–600 e 1471–1479

Nota sobre consumidores: A shared unit jVendedor é invocada dinamicamente por telas de movimento (ver o Hint = '[MRC001, MPD002, MNF002, MNF024]' no combo vizinho cmbST_VARIOSVENDEDORES, UMFA001.dfm linha 5375). A regra do ST_VENDPEDIDONOTA é aplicada dentro do jVendedor sempre que esses módulos pedem a seleção de vendedor durante a geração da nota fiscal a partir de um pedido existente.

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_VENDPEDIDONOTAEste parâmetro. S = replicar vendedores do pedido na nota; N = abrir tela de seleção de vendedor para o operador escolher
ITEMNOTAVENDEDOR.CD_VENDEDORDestino da cópia — vendedor por item da nota
ITEMNOTAVENDEDOR.PC_COMISSAOPercentual de comissão copiado do pedido
ITEMNOTAVENDEDOR.CD_TIPOTipo de vendedor (principal/secundário) copiado do pedido
ITEMNOTAVENDEDOR.VL_COMISSAOValor de comissão copiado
ITEMNOTAVENDEDOR.ST_COMISSAOMANUALFlag que indica se a comissão foi manual no pedido (preservada na cópia)
ITEMPEDIDOVENDEDOR / ITEMNOTAVENDEDOR (leitura)UVendedorIndividual.VendedorPedidoNota lê ITEMNOTAVENDEDOR com TP_NOTA='S' (origem pedido) filtrando por CD_EMPRESA/NR_LANCAMENTO/CD_SERIE/CD_ITEM
Comissao.Tabela (variável Delphi)Identifica o tipo de tabela em edição — só tem efeito quando UpperCase(Tabela) = 'NOTA' (UVendedorIndividual.pas linha 214)

Parâmetro relacionado: ST_VENDEDOR define quando o sistema pede vendedor (Pedido/Nota/Ambos/Não Bloqueia). O ST_VENDPEDIDONOTA atua como atalho quando ST_VENDEDOR obriga a digitação na nota — em vez de pedir novamente, copia do pedido que originou a nota.


Opções disponíveis​

S — Sim (Repetir automaticamente)​

O que fazDetalhe
UVendedorIndividualUVendedorIndividual.pas linhas 214–234: quando UpperCase(Tabela) = 'NOTA' e ST_VENDPEDIDONOTA='S', chama VendedorPedidoNota (linhas 246–293). Essa função lê ITEMNOTAVENDEDOR do pedido (filtrado por NR_LANCAMENTO/CD_SERIE/CD_ITEM) e preenche o vetor Vendedor[] com CD_VENDEDOR/PC_COMISSAO/CD_TIPO/VL_COMISSAO/ST_COMISSAOMANUAL. Se encontrou algum vendedor, seta Parametros[20] := 'N' (flag "não abrir form") e não executa ShowModal
UVendedorAgrupado — PedidoUVendedorAgrupado.pas linha 539: se o documento em edição é Pedido (Tp_docto = 'P') e o parâmetro está ='S', incrementa result_aux e a confirmação automática (btnConfirmar.Click, linha 596) não dispara — o form continua aberto para digitação
UVendedorAgrupado — NotaUVendedorAgrupado.pas linhas 544–592: para Tp_docto = 'N', conta itens da nota (ITEMNOTA) e itens-de-pedido já vinculados (via RETORNA_CHAVEPEDIDO). Se os contadores batem e há pedido-origem, result_aux permanece 0 e o sistema chama btnConfirmar.Click (linha 596) fechando o form automaticamente sem ação do operador
UVendedorAgrupado — Grid ReadOnlyUVendedorAgrupado.pas linhas 1471–1479: quando em edição de Nota (Tp_docto='N') e item tem origem Pedido (TP_ORIGEM='P'), o grid de vendedores fica em modo leitura (cor $EEEEEE, botões de alterar comissão e excluir invisíveis) — impede o operador de editar os dados herdados do pedido
Tratamento CNF001UVendedorIndividual.pas linhas 208–211: se o módulo chamador é CNF001 (Config NF), o resultado é forçado a 'N' para obrigar a abrir o form mesmo com parâmetro ligado

Simulação passo a passo​

  1. Em MFA001 → aba Opção 1 → Repetir Vendedores do Pedido na Nota → selecione Sim → salve (F6).
  2. Em MPD002 crie um pedido para o cliente e informe o(s) vendedor(es) com comissões (ex.: Vendedor "João" 3% principal + Vendedor "Maria" 1% secundário).
  3. Em MNF002 importe esse pedido (F7 ou "Gera NF do Pedido").
  4. Observação esperada: o sistema não abre o pop-up de seleção de vendedor — os vendedores João e Maria aparecem diretamente no grid de vendedores da nota com as mesmas comissões do pedido.
  5. Ao abrir o grid de vendedores do item da nota (via UVendedorAgrupado), as linhas aparecem em cinza claro e os botões Alterar Comissão / Excluir ficam ocultos.

Resultado esperado: zero digitação de vendedor na NF quando ela origina-se integralmente de pedidos já com vendedor cadastrado. Produtividade maior em empresas com venda 100% por vendedor. O operador perde flexibilidade de alterar a comissão no momento da nota.


N — Não (padrão)​

O que fazDetalhe
UVendedorIndividualUVendedorIndividual.pas linha 214: o if avalia Trim(Resultado[0]) = 'N' como verdadeiro e executa frmVendedorIndividual.ShowModal (linha 216) — o operador precisa escolher/confirmar o vendedor de cada item da nota
UVendedorAgrupadoUVendedorAgrupado.pas linha 537: o bloco if (Param.St_VendPedidoNota = 'S') inteiro é pulado. O form de agrupamento exibe normalmente. A lógica de grid read-only (linha 1471) também não dispara — os vendedores continuam editáveis

Simulação passo a passo​

  1. Em MFA001 → aba Opção 1 → Repetir Vendedores do Pedido na Nota → selecione Não → salve (F6).
  2. Em MPD002 crie pedido com vendedor "João" 3%.
  3. Em MNF002 importe o pedido e inicie a gravação da nota.
  4. Observação esperada: o pop-up frmVendedorIndividual (ou frmVendedorAgrupado) abre para cada item pedindo confirmação do vendedor. O vendedor do pedido pode aparecer pré-selecionado mas o operador deve confirmar (F3/OK) para cada item.
  5. O operador pode alterar a comissão ou trocar o vendedor na hora da nota sem sair do fluxo.

Resultado esperado: controle total do usuário sobre vendedor e comissão no momento da emissão da nota. Útil quando há regras de comissão que mudam entre pedido e nota (ex.: cliente mudou condição, vendedor saiu, rateio precisa ajuste manual).


Interação com ST_VENDEDOR / ST_VARIOSVENDEDORES / ST_OBSPEDIDONOTA​

  • ST_VENDEDOR — Define em quais documentos o sistema exige vendedor (P=Pedido, F=Nota Fiscal, A=Ambos, N=Não Bloqueia). O ST_VENDPEDIDONOTA só tem efeito quando ST_VENDEDOR inclui a Nota (F ou A) e a nota origina-se de pedido. Se ST_VENDEDOR='P', o sistema nunca pede vendedor na nota e o ST_VENDPEDIDONOTA é irrelevante.
  • ST_VARIOSVENDEDORES — Define se um item pode ter vários vendedores rateados simultaneamente (S/N). Quando ='S', abre o UVendedorAgrupado (rateio); quando ='N', abre o UVendedorIndividual (um único vendedor). Ambos consomem ST_VENDPEDIDONOTA para decidir se copiam automaticamente do pedido ou pedem digitação.
  • ST_OBRIGATIPOVENDPRINCIPAL — Lido no mesmo SELECT de UVendedorIndividual.pas linha 201 (SELECT ST_VENDPEDIDONOTA, ST_OBRIGATIPOVENDPRINCIPAL FROM PARMFATUR). Quando ='S', obriga existir vendedor com CD_TIPO='P' (principal) — mesmo que ST_VENDPEDIDONOTA='S' copie os vendedores do pedido, a validação "tem pelo menos um principal?" acontece depois (VerificaVendedorPrincipal, UVendedorAgrupado.pas linha 1219+).
  • ST_OBSPEDIDONOTA — Parâmetro "irmão" na aba Opção 2 — controla a cópia da observação textual do pedido para a nota. ST_VENDPEDIDONOTA faz o mesmo para vendedores e comissões. São complementares: empresas que preferem "Nota reflete fielmente o Pedido" costumam ligar ambos; empresas que revisam tudo na hora da emissão costumam desligar ambos.

Tabela Comparativa Resumida​

ValorUVendedorIndividual (1 vendedor)UVendedorAgrupado — PedidoUVendedorAgrupado — NotaGrid de vendedor na NF
SCopia vendedores de ITEMNOTAVENDEDOR do pedido, não exibe ShowModal se achouNão auto-confirma (só registra result_aux++)Se contadores de item batem, chama btnConfirmar.Click automáticoRead-only (grid cinza, botões ocultos)
NAbre ShowModal para digitação manualAbre form normalmenteAbre form normalmenteEditável

Exceção CNF001: independentemente do parâmetro, UVendedorIndividual.pas linhas 208–211 força Resultado[0] := 'N' — o Config NF sempre pede digitação manual de vendedor.


Referências no Código Fonte​

Delphi — Tela MFA001 (produtora)​

ArquivoLinhasPapel
source/MFA001/UMFA001.dfm5096–5109TLabel lbl63 com Caption = 'Repetir Vendedores do Pedido na Nota' (rótulo do combo)
source/MFA001/UMFA001.dfm5343–5369TwwDBComboBox cmbST_MOSTRACOMISSAO1 com DataField = 'ST_VENDPEDIDONOTA' e itens Sim=S / Não=N (nome legado do componente)
source/MFA001/UMFA001.pas587Declaração cmbST_MOSTRACOMISSAO1: TwwDBComboBox
source/MFA001/UdmMFA001.pas237Declaração tabPARMFATURST_VENDPEDIDONOTA: TStringField
source/MFA001/UdmMFA001.pas537AfterInsert: valor padrão 'N' — tabPARMFATURST_VENDPEDIDONOTA.AsString := 'N';
source/MFA001/UdmMFA001.dfm252, 1714–1717, 2419, 2590, 2830, 3132ST_VENDPEDIDONOTA nos SQLs do tabPARMFATUR (SelectSQL, InsertSQL, ModifySQL) e no TStringField

Delphi — Consumidores (leem PARMFATUR.ST_VENDPEDIDONOTA)​

ArquivoLinhasPapel
source/jVendedor/UVendedorIndividual.pas199–204SELECT ST_VENDPEDIDONOTA, ST_OBRIGATIPOVENDPRINCIPAL FROM PARMFATUR WHERE CD_EMPRESA = ... — carrega o valor
source/jVendedor/UVendedorIndividual.pas208–211Exceção CNF001: força Resultado[0] := 'N' (sempre pedir digitação em Config NF)
source/jVendedor/UVendedorIndividual.pas214if ( (Trim(Resultado[0]) = 'N') or (UpperCase(Comissao.Tabela) <> 'NOTA') ) then ShowModal — lógica principal da decisão
source/jVendedor/UVendedorIndividual.pas221–227Quando ='S' e VendedorPedidoNota retorna encontrou vendedores → Parametros[20] := 'N' (suprime o form)
source/jVendedor/UVendedorIndividual.pas246–293Função VendedorPedidoNota — lê ITEMNOTAVENDEDOR do pedido e preenche o vetor Vendedor[]
source/jVendedor/UVendedorAgrupado.pas1196–1216SELECT ... ST_VENDPEDIDONOTA FROM PARMFATUR — carrega em Param.St_VendPedidoNota
source/jVendedor/UVendedorAgrupado.pas537–600Auto-confirmação (btnConfirmar.Click) quando ='S', contadores de itens de nota/pedido batem
source/jVendedor/UVendedorAgrupado.pas1471–1479Grid read-only (gridVENDEDORES.ReadOnly := True) quando em Nota com item de origem Pedido

SQL — Procedures (Firebird)​

Nenhuma stored procedure lê diretamente PARMFATUR.ST_VENDPEDIDONOTA (busca em Scripts/ não encontrou referências). O parâmetro é avaliado exclusivamente no lado Delphi na camada jVendedor, dentro dos fluxos de seleção de vendedor invocados pelas telas de pedido/nota (MPD002, MPD005, MNF002, MNF024, MRC001 etc., conforme hint UMFA001.dfm linha 5375).