Pular para o conteúdo principal

Parâmetro de Repetição de Comissão entre Itens

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Faturamento → Vendedor → combobox Função: "Associar a Todos os Produtos" Caption (label na tela): Função: "Associar a Todos os Produtos" (rótulo posicionado à esquerda do combo, taRightJustify) Tabela: PARMFATUR.ST_REPETECOMISSAO Valor padrão: V (Vendedores) — definido em UdmMFA001.pas:527 Dependências de visibilidade: só aparece no formulário quando ST_VARIOSVENDEDORES = 'S' e TP_MOSTRAVENDEDORES = 'N' (ver UMFA001.pas:2128-2158 e UMFA001.pas:2566-2586)

Telas impactadas​

MóduloCódigoDescriçãoTipo de uso
Parâmetros de FaturamentoMFA001Configura o valor do parâmetro (combobox com 3 opções)Produtora
Rateio Vendedor Individual (shared unit jVendedor)jVendedor/UVendedorIndividual.pasNo FormShow lê ST_REPETECOMISSAO da PARMFATUR e define o valor inicial do combo cmbST_REPETE exibido ao usuário. O valor escolhido é copiado para Vendedor[i].Tp_Repeticao de cada vendedor retornadoConsumidora
Pedido de VendaMPD002Ao salvar (BtnSalvar), reutiliza o Tp_Repeticao do último item para decidir o que fazer no próximo item: 'N' = abre a tela de rateio, 'V' = repete os vendedores e recalcula a comissão via CALCULA_COMISSAO_V2, outro valor (P) = repete vendedores e percentuais e só recalcula o VL_COMISSAOConsumidora
Ordem de Serviço / RecapagemMPD004Mesma lógica do MPD002, sobre ITEMORCAMENTOVENDEDORConsumidora
Coleta MPD093MPD093Guarda o Tp_Repeticao em stRepeteComissao para propagar para itens seguintesConsumidora
Cupom Fiscal / NFC-e (MNF024)MNF024Carrega o parâmetro via Busca_Parametros (SELECT direto na PARMFATUR) para dmMNF024.iST_REPETECOMISSAO. No momento de montar o rateio de vendedores, se iST_REPETECOMISSAO = 'N' recalcula a comissão por CALCULA_COMISSAO_V2; caso contrário (V/P) apenas recalcula o VL_COMISSAO mantendo os percentuaisConsumidora
Inclusão de NF sobre Pedido / OrdemMRC020Usa FlagVendedores propagado em Vendedorax2.Tp_Repeticao para decidir se mantém somente vendedores novos do pedido (V) ou se dispara nova tela de rateio (N)Consumidora
Ordem de Fábrica / OficinaMOF001/UMOF001.pasLinhas 1788 e 2206: mesma lógica de propagação item-a-item (FlagVendedores := Vendedores[i].Tp_Repeticao)Consumidora

Procedures impactadas​

Nenhuma procedure, view ou trigger em Scripts/ referencia diretamente ST_REPETECOMISSAO (o grep em Scripts/ retorna zero ocorrências). A lógica roda exclusivamente no cliente Delphi, mas o parâmetro influencia quando a procedure CALCULA_COMISSAO_V2 é executada:

ProcedureRelação
CALCULA_COMISSAO_V2Chamada no BtnSalvar do MPD002/MPD004/MNF024 somente quando o valor em memória do Tp_Repeticao do item anterior for 'V'. Com 'P' o sistema apenas multiplica o percentual já existente pelo novo valor líquido; com 'N' abre a tela de rateio (RateioVendedorIndividual) sem executar a procedure de recálculo em lote

Campos envolvidos​

CampoTabelaDescrição
ST_REPETECOMISSAOPARMFATURValor inicial do combo Associar a Todos os Produtos da tela de rateio de vendedores
ST_VARIOSVENDEDORESPARMFATURPré-requisito: precisa ser 'S' para que o parâmetro fique visível no MFA001 e surta efeito (o bloco de rateio só roda quando há vários vendedores)
TP_MOSTRAVENDEDORESPARMFATURPré-requisito: precisa ser 'N' (mostrar sempre) para o combo aparecer no MFA001
ST_COMISSAOITEMPEDIDO / MAQUINA / ITEMCUPOM / ITEMNOTAIndica que o item gera comissão — pré-requisito para entrar no bloco de rateio
PC_COMISSAO, VL_COMISSAO, ST_COMISSAOMANUALITEMPEDIDOVENDEDOR, ITEMORCAMENTOVENDEDOR, ITEMNOTAVENDEDORGravados com valores recalculados ou repetidos conforme a opção escolhida
ST_PEDIDOestrutura em memória Vendedor (jRateioVendedor)Usado pelo MRC020 para separar vendedores herdados do pedido (quando ST_REPETECOMISSAO = 'V' os herdados do item anterior são descartados e apenas os do pedido são mantidos)

Opções disponíveis​

V - Vendedores (default)​

O que fazDetalhe
Abertura do rateioO combo cmbST_REPETE da tela TfrmVendedorIndividual (shared jVendedor) abre marcado em "Vendedores". O usuário pode alterar antes de confirmar
Próximo item (Pedido / OS / Nota)Os mesmos vendedores do item anterior são reaproveitados, mas o % e o VL_COMISSAO são recalculados pela procedure CALCULA_COMISSAO_V2 considerando empresa, vendedor, tipo, pessoa, item, movimentação, cond. pagto, tab. preço, data, valor líquido, desconto e unitário
No MRC020Ao gerar NF sobre pedido/OS, descarta os vendedores herdados do item anterior (St_Pedido='S') e mantém apenas os que vieram do pedido (St_Pedido='N'). Vendedorax2.Tp_Repeticao recebe 'V' para propagar a decisão
Pergunta ao usuário?Não — a tela de rateio só abre no primeiro item; a partir do segundo o sistema aplica a regra silenciosamente

Simulação passo a passo​

  1. Vá em MFA001 → aba Faturamento → Vendedor → combobox Função: "Associar a Todos os Produtos" = Vendedores.
  2. Confirme que Vários Vendedores Por Produto (ST_VARIOSVENDEDORES) = Sim e que TP_MOSTRAVENDEDORES = Mostrar sempre (N) — caso contrário o combo nem aparece.
  3. Salve (F6).
  4. Abra um Pedido de Venda em MPD002, selecione cliente e inclua dois itens comissionáveis (ST_COMISSAO='S') com percentuais diferentes na tabela VENDEDORITEM.
  5. Ao digitar o primeiro item, a tela de Rateio Vendedor Individual abre automaticamente; informe os vendedores e clique em OK.
  6. Inclua o segundo item e salve o pedido (F6).

Resultado esperado:

  • A tela de rateio não reabre para o segundo item.
  • Em ITEMPEDIDOVENDEDOR do segundo item ficam gravados os mesmos CD_VENDEDOR do primeiro, porém o PC_COMISSAO e o VL_COMISSAO são resultado da procedure CALCULA_COMISSAO_V2 (podem diferir do primeiro item se o cadastro VENDEDORITEM tiver percentuais distintos para o novo produto).
  • ST_COMISSAOMANUAL gravado como 'N'.

P - Vendedores e Porcentagem​

O que fazDetalhe
Abertura do rateioCombo cmbST_REPETE abre em "Vendedores e Porcentagem"
Próximo itemRepete vendedores E percentuais idênticos ao item anterior. O VL_COMISSAO é recalculado em memória como (VL_TOTAL - VL_DESCONTO) * PC_COMISSAO / 100 sem consultar CALCULA_COMISSAO_V2
ST_COMISSAOMANUALGravado como 'S' no MPD002 (linha 2618) — sinaliza para o restante do ERP (ex.: MPD002 ao recalcular depois) que o percentual foi "forçado" pelo usuário e não deve ser refeito
Exceção MPD002Só propaga quando tabITEMPEDIDOST_ITEMPEDIDO <> 'A' (item não cancelado) — linha 2609

Simulação passo a passo​

  1. Em MFA001 → ST_REPETECOMISSAO = Vendedores e Porcentagem.
  2. Salve e abra um pedido em MPD002.
  3. Inclua o primeiro item comissionável e no rateio defina Vendedor A = 3%, Vendedor B = 2%.
  4. Inclua um segundo item com preço diferente e salve.

Resultado esperado:

  • ITEMPEDIDOVENDEDOR do segundo item fica com Vendedor A = 3%, Vendedor B = 2% (percentuais idênticos).
  • VL_COMISSAO é recalculado proporcionalmente ao novo valor líquido (ex.: se o item custar R$ 100 líquidos, o Vendedor A recebe R$ 3,00 e o B R$ 2,00).
  • ST_COMISSAOMANUAL = 'S'.
  • A procedure CALCULA_COMISSAO_V2 não é executada para o segundo item.

N - Nenhuma​

O que fazDetalhe
Abertura do rateioCombo cmbST_REPETE abre em "Nenhum"
Próximo itemSempre dispara a tela de rateio (RateioVendedorIndividual) novamente, ignorando o rateio do item anterior
No MNF024Quando iST_REPETECOMISSAO='N' recalcula a comissão via CALCULA_COMISSAO_V2 mesmo sem perguntar ao usuário — lógica diferente do MPD002, pois no cupom fiscal a tela de rateio pode não aparecer
Pergunta ao usuário?Sim, a cada item comissionável

Simulação passo a passo​

  1. Em MFA001 → ST_REPETECOMISSAO = Nenhuma.
  2. Abra um pedido em MPD002 com 3 itens comissionáveis.
  3. Para cada item, ao sair do preço, a tela de rateio deve abrir.

Resultado esperado:

  • A tela de Rateio Vendedor Individual abre 3 vezes (uma por item).
  • Cada item pode ter vendedores completamente diferentes em ITEMPEDIDOVENDEDOR.
  • ST_COMISSAOMANUAL grava conforme o que o usuário informou em cada tela.

Interação com ST_COMISSAO / ST_VARIOSVENDEDORES​

  • ST_COMISSAO (no cadastro do item/grupo) habilita o bloco de rateio. Se um item estiver com ST_COMISSAO='N', o laço que usa FlagVendedores nem é executado e o ST_REPETECOMISSAO é irrelevante para aquele item.
  • ST_VARIOSVENDEDORES controla se o sistema admite mais de um vendedor por item — é pré-requisito do parâmetro (o combo nem fica visível em MFA001 quando ST_VARIOSVENDEDORES='N').
  • TP_MOSTRAVENDEDORES precisa ser 'N' (mostrar sempre) para o combo aparecer no MFA001; quando a exibição da tela de rateio está desligada ('A' ou outro valor), a lógica de repetição perde sentido.
  • ST_MOSTRACOMISSAO e ST_ALTERACOMISSAO atuam em outra camada (visibilidade e bloqueio do grid), e não conflitam com ST_REPETECOMISSAO — elas decidem se o usuário vê/edita percentuais, enquanto ST_REPETECOMISSAO decide se os percentuais serão repetidos ou recalculados do item anterior para o próximo.
CenárioST_VARIOSVENDEDORESTP_MOSTRAVENDEDORESST_REPETECOMISSAOComportamento
Parâmetro invisível na MFA001N——O combo nem aparece; o campo continua gravado no banco mas não é usado
Parâmetro invisível na MFA001SA / outro—Campo existe no banco, mas não é editável pela tela
Parâmetro editável, defaultSNVRateio abre 1x, próximos itens recalculam via CALCULA_COMISSAO_V2
Parâmetro editável, repete tudoSNPRateio abre 1x, próximos itens herdam vendedores e percentuais
Parâmetro editável, sempre perguntaSNNRateio abre para cada item; cada item independente

Tabela Comparativa Resumida​

ValorLabel na MFA001Reabre tela de rateio?Repete vendedores?Repete %?Recalcula via CALCULA_COMISSAO_V2?ST_COMISSAOMANUAL gravado
V (default)VendedoresNãoSimNão (recalcula)SimN
PVendedores e PorcentagemNãoSimSimNão (só recalcula VL_COMISSAO em memória)S (MPD002)
NNenhumaSim (a cada item)NãoNãoSim (nos módulos que não abrem tela, como MNF024)Conforme usuário

Referências no Código Fonte​

Delphi — tela de parâmetros (MFA001)​

ArquivoLinha(s)Conteúdo
source/MFA001/UMFA001.dfm5182-5195Label lblST_REPETECOMISSAO: Caption = 'Função: "Associar a Todos os Produtos"' (Left=201, Top=188, taRightJustify)
source/MFA001/UMFA001.dfm5527-5558cmbST_REPETECOMISSAO: TwwDBComboBox vinculado a ST_REPETECOMISSAO, Items: Vendedores e Porcentagem=P / Vendedores=V / Nenhuma=N. Hint [MRC020, MNF024]. OnChange = cmbST_VARIOSVENDEDORESChange
source/MFA001/UMFA001.pas599-600Declaração de lblST_REPETECOMISSAO e cmbST_REPETECOMISSAO
source/MFA001/UMFA001.pas2128-2158cmbST_VARIOSVENDEDORESChange: se ST_VARIOSVENDEDORES='N' esconde o combo; senão, visibilidade passa a depender de TP_MOSTRAVENDEDORES
source/MFA001/UMFA001.pas2566-2586cmbTP_MOSTRAVENDEDORESChange: só exibe quando ST_VARIOSVENDEDORES='S' e TP_MOSTRAVENDEDORES='N'
source/MFA001/UdmMFA001.pas217Declaração do field tabPARMFATURST_REPETECOMISSAO: TStringField
source/MFA001/UdmMFA001.pas527AfterInsert: tabPARMFATURST_REPETECOMISSAO.AsString := 'V'; (valor default)
source/MFA001/UdmMFA001.dfm1595-1600, 2411, 2578, 2815SELECT, INSERT, UPDATE da PARMFATUR e field persistente

Delphi — tela compartilhada de rateio (jVendedor)​

ArquivoLinha(s)Conteúdo
source/jVendedor/UVendedorIndividual.pas46Declaração do combo cmbST_REPETE: TwwDBComboBox
source/jVendedor/UVendedorIndividual.pas279Valor default 'N' quando não há vendedores (function que preenche o vetor)
source/jVendedor/UVendedorIndividual.pas504Vendedor[i].Tp_Repeticao := frmVendedorIndividual.cmbST_REPETE.Value (copia o valor escolhido pelo usuário para cada registro retornado)
source/jVendedor/UVendedorIndividual.pas569-572FormShow: frmVendedorIndividual.cmbST_REPETE.Value := ParmFatur.Values['ST_REPETECOMISSAO'] — define o valor inicial do combo com base no parâmetro
source/jVendedor/UVendedorIndividual.dfm230-256Definição do combo cmbST_REPETE, Items: Vendedores=V, Vendedores e Porcentagem=P, Nenhum=N, ItemIndex=0

Delphi — telas consumidoras​

ArquivoLinha(s)Conteúdo
source/MPD002/UMPD002.pas1951Declaração FlagVendedores: string
source/MPD002/UMPD002.pas2494Inicializa FlagVendedores := 'N' antes do laço de itens
source/MPD002/UMPD002.pas2568-2623Decisão com base em FlagVendedores: abre tela ('N'), recalcula via CALCULA_COMISSAO_V2 ('V') ou apenas recalcula o VL_COMISSAO em memória ('P')
source/MPD002/UMPD002.pas2658FlagVendedores := Vendedores[i].Tp_Repeticao — propaga para o próximo item
source/MPD004/UMPD004.pas681, 691, 740-820Mesma lógica do MPD002 aplicada a OS (ITEMORCAMENTOVENDEDOR, tabMAQUINA)
source/MPD093/UMPD093.pas518stRepeteComissao := Vendedores[i].Tp_Repeticao
source/MOF001/UMOF001.pas1788, 2206FlagVendedores := Vendedores[i].Tp_Repeticao em dois pontos do módulo de oficina
source/MNF024/UdmMNF024.pas121Declaração iST_REPETECOMISSAO: String
source/MNF024/UdmMNF024.pas146SELECT na PARMFATUR inclui P.ST_REPETECOMISSAO
source/MNF024/UdmMNF024.pas159dmMNF024.iST_REPETECOMISSAO := Resultado[3]
source/MNF024/UMNF024.pas1055-1094Se iST_REPETECOMISSAO='N' executa CALCULA_COMISSAO_V2 para cada vendedor; caso contrário apenas recalcula Vl_Comissao em memória
source/MRC020/UdmMRC020NFORDEM.pas2360-2403, 2585Uso de FlagVendedores/Vendedorax2.Tp_Repeticao para descartar vendedores herdados do item anterior e manter apenas os do pedido quando 'V'

SQL​

Nenhuma procedure, view ou trigger em Scripts/ referencia ST_REPETECOMISSAO. A lógica é 100% cliente Delphi — o parâmetro apenas controla quando a procedure CALCULA_COMISSAO_V2 é chamada pelos módulos listados acima.