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.dfmlinhas 5096–5109,lbl63) Tabela:PARMFATUR.ST_VENDPEDIDONOTATipo:CHAR(1)— domínioDOM_CHAR1(S/N) Valor padrão:'N'— atribuído emUdmMFA001.paslinha 537 noAfterInsert
Componente visual:
TwwDBComboBox cmbST_MOSTRACOMISSAO1(UMFA001.dfmlinhas 5343–5369), posicionado em Left=482 Top=42, com itens'Sim'=S / 'Não'=N. O nome do componente é legado (antigoST_MOSTRACOMISSAO1) mas oDataFieldaponta paraST_VENDPEDIDONOTA.
Telas impactadas
| Módulo | Código | Papel |
|---|---|---|
| Parâmetros de Faturamento | MFA001 | Produtora — cmbST_MOSTRACOMISSAO1 (DataField = 'ST_VENDPEDIDONOTA') grava o valor na PARMFATUR (UMFA001.dfm linhas 5343–5369) |
| Seleção de Vendedor Individual | jVendedor (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 Agrupado | jVendedor (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 oHint = '[MRC001, MPD002, MNF002, MNF024]'no combo vizinhocmbST_VARIOSVENDEDORES,UMFA001.dfmlinha 5375). A regra doST_VENDPEDIDONOTAé aplicada dentro dojVendedorsempre 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
| Campo | Descrição |
|---|---|
PARMFATUR.ST_VENDPEDIDONOTA | Este parâmetro. S = replicar vendedores do pedido na nota; N = abrir tela de seleção de vendedor para o operador escolher |
ITEMNOTAVENDEDOR.CD_VENDEDOR | Destino da cópia — vendedor por item da nota |
ITEMNOTAVENDEDOR.PC_COMISSAO | Percentual de comissão copiado do pedido |
ITEMNOTAVENDEDOR.CD_TIPO | Tipo de vendedor (principal/secundário) copiado do pedido |
ITEMNOTAVENDEDOR.VL_COMISSAO | Valor de comissão copiado |
ITEMNOTAVENDEDOR.ST_COMISSAOMANUAL | Flag 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_VENDEDORdefine quando o sistema pede vendedor (Pedido/Nota/Ambos/Não Bloqueia). OST_VENDPEDIDONOTAatua como atalho quandoST_VENDEDORobriga 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 faz | Detalhe |
|---|---|
UVendedorIndividual | UVendedorIndividual.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 — Pedido | UVendedorAgrupado.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 — Nota | UVendedorAgrupado.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 ReadOnly | UVendedorAgrupado.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 CNF001 | UVendedorIndividual.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
- Em MFA001 → aba Opção 1 → Repetir Vendedores do Pedido na Nota → selecione
Sim→ salve (F6). - 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).
- Em MNF002 importe esse pedido (F7 ou "Gera NF do Pedido").
- 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.
- 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 faz | Detalhe |
|---|---|
UVendedorIndividual | UVendedorIndividual.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 |
UVendedorAgrupado | UVendedorAgrupado.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
- Em MFA001 → aba Opção 1 → Repetir Vendedores do Pedido na Nota → selecione
Não→ salve (F6). - Em MPD002 crie pedido com vendedor "João" 3%.
- Em MNF002 importe o pedido e inicie a gravação da nota.
- Observação esperada: o pop-up
frmVendedorIndividual(oufrmVendedorAgrupado) 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. - 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). OST_VENDPEDIDONOTAsó tem efeito quandoST_VENDEDORinclui a Nota (FouA) e a nota origina-se de pedido. SeST_VENDEDOR='P', o sistema nunca pede vendedor na nota e oST_VENDPEDIDONOTAé irrelevante.ST_VARIOSVENDEDORES— Define se um item pode ter vários vendedores rateados simultaneamente (S/N). Quando='S', abre oUVendedorAgrupado(rateio); quando='N', abre oUVendedorIndividual(um único vendedor). Ambos consomemST_VENDPEDIDONOTApara decidir se copiam automaticamente do pedido ou pedem digitação.ST_OBRIGATIPOVENDPRINCIPAL— Lido no mesmoSELECTdeUVendedorIndividual.paslinha 201 (SELECT ST_VENDPEDIDONOTA, ST_OBRIGATIPOVENDPRINCIPAL FROM PARMFATUR). Quando='S', obriga existir vendedor comCD_TIPO='P'(principal) — mesmo queST_VENDPEDIDONOTA='S'copie os vendedores do pedido, a validação "tem pelo menos um principal?" acontece depois (VerificaVendedorPrincipal,UVendedorAgrupado.paslinha 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_VENDPEDIDONOTAfaz 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
| Valor | UVendedorIndividual (1 vendedor) | UVendedorAgrupado — Pedido | UVendedorAgrupado — Nota | Grid de vendedor na NF |
|---|---|---|---|---|
S | Copia vendedores de ITEMNOTAVENDEDOR do pedido, não exibe ShowModal se achou | Não auto-confirma (só registra result_aux++) | Se contadores de item batem, chama btnConfirmar.Click automático | Read-only (grid cinza, botões ocultos) |
N | Abre ShowModal para digitação manual | Abre form normalmente | Abre form normalmente | Editá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)
| Arquivo | Linhas | Papel |
|---|---|---|
source/MFA001/UMFA001.dfm | 5096–5109 | TLabel lbl63 com Caption = 'Repetir Vendedores do Pedido na Nota' (rótulo do combo) |
source/MFA001/UMFA001.dfm | 5343–5369 | TwwDBComboBox cmbST_MOSTRACOMISSAO1 com DataField = 'ST_VENDPEDIDONOTA' e itens Sim=S / Não=N (nome legado do componente) |
source/MFA001/UMFA001.pas | 587 | Declaração cmbST_MOSTRACOMISSAO1: TwwDBComboBox |
source/MFA001/UdmMFA001.pas | 237 | Declaração tabPARMFATURST_VENDPEDIDONOTA: TStringField |
source/MFA001/UdmMFA001.pas | 537 | AfterInsert: valor padrão 'N' — tabPARMFATURST_VENDPEDIDONOTA.AsString := 'N'; |
source/MFA001/UdmMFA001.dfm | 252, 1714–1717, 2419, 2590, 2830, 3132 | ST_VENDPEDIDONOTA nos SQLs do tabPARMFATUR (SelectSQL, InsertSQL, ModifySQL) e no TStringField |
Delphi — Consumidores (leem PARMFATUR.ST_VENDPEDIDONOTA)
| Arquivo | Linhas | Papel |
|---|---|---|
source/jVendedor/UVendedorIndividual.pas | 199–204 | SELECT ST_VENDPEDIDONOTA, ST_OBRIGATIPOVENDPRINCIPAL FROM PARMFATUR WHERE CD_EMPRESA = ... — carrega o valor |
source/jVendedor/UVendedorIndividual.pas | 208–211 | Exceção CNF001: força Resultado[0] := 'N' (sempre pedir digitação em Config NF) |
source/jVendedor/UVendedorIndividual.pas | 214 | if ( (Trim(Resultado[0]) = 'N') or (UpperCase(Comissao.Tabela) <> 'NOTA') ) then ShowModal — lógica principal da decisão |
source/jVendedor/UVendedorIndividual.pas | 221–227 | Quando ='S' e VendedorPedidoNota retorna encontrou vendedores → Parametros[20] := 'N' (suprime o form) |
source/jVendedor/UVendedorIndividual.pas | 246–293 | Função VendedorPedidoNota — lê ITEMNOTAVENDEDOR do pedido e preenche o vetor Vendedor[] |
source/jVendedor/UVendedorAgrupado.pas | 1196–1216 | SELECT ... ST_VENDPEDIDONOTA FROM PARMFATUR — carrega em Param.St_VendPedidoNota |
source/jVendedor/UVendedorAgrupado.pas | 537–600 | Auto-confirmação (btnConfirmar.Click) quando ='S', contadores de itens de nota/pedido batem |
source/jVendedor/UVendedorAgrupado.pas | 1471–1479 | Grid 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).