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_REPETECOMISSAOValor padrão:V(Vendedores) — definido emUdmMFA001.pas:527Dependências de visibilidade: só aparece no formulário quandoST_VARIOSVENDEDORES = 'S'eTP_MOSTRAVENDEDORES = 'N'(verUMFA001.pas:2128-2158eUMFA001.pas:2566-2586)
Telas impactadas
| Módulo | Código | Descrição | Tipo de uso |
|---|---|---|---|
| Parâmetros de Faturamento | MFA001 | Configura o valor do parâmetro (combobox com 3 opções) | Produtora |
Rateio Vendedor Individual (shared unit jVendedor) | jVendedor/UVendedorIndividual.pas | No 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 retornado | Consumidora |
| Pedido de Venda | MPD002 | Ao 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_COMISSAO | Consumidora |
| Ordem de Serviço / Recapagem | MPD004 | Mesma lógica do MPD002, sobre ITEMORCAMENTOVENDEDOR | Consumidora |
| Coleta MPD093 | MPD093 | Guarda o Tp_Repeticao em stRepeteComissao para propagar para itens seguintes | Consumidora |
| Cupom Fiscal / NFC-e (MNF024) | MNF024 | Carrega 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 percentuais | Consumidora |
| Inclusão de NF sobre Pedido / Ordem | MRC020 | Usa 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 / Oficina | MOF001/UMOF001.pas | Linhas 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:
| Procedure | Relação |
|---|---|
CALCULA_COMISSAO_V2 | Chamada 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
| Campo | Tabela | Descrição |
|---|---|---|
ST_REPETECOMISSAO | PARMFATUR | Valor inicial do combo Associar a Todos os Produtos da tela de rateio de vendedores |
ST_VARIOSVENDEDORES | PARMFATUR | Pré-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_MOSTRAVENDEDORES | PARMFATUR | Pré-requisito: precisa ser 'N' (mostrar sempre) para o combo aparecer no MFA001 |
ST_COMISSAO | ITEMPEDIDO / MAQUINA / ITEMCUPOM / ITEMNOTA | Indica que o item gera comissão — pré-requisito para entrar no bloco de rateio |
PC_COMISSAO, VL_COMISSAO, ST_COMISSAOMANUAL | ITEMPEDIDOVENDEDOR, ITEMORCAMENTOVENDEDOR, ITEMNOTAVENDEDOR | Gravados com valores recalculados ou repetidos conforme a opção escolhida |
ST_PEDIDO | estrutura 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 faz | Detalhe |
|---|---|
| Abertura do rateio | O 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 MRC020 | Ao 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
- Vá em MFA001 → aba Faturamento → Vendedor → combobox
Função: "Associar a Todos os Produtos"= Vendedores. - Confirme que
Vários Vendedores Por Produto(ST_VARIOSVENDEDORES) = Sim e queTP_MOSTRAVENDEDORES= Mostrar sempre (N) — caso contrário o combo nem aparece. - Salve (F6).
- Abra um Pedido de Venda em MPD002, selecione cliente e inclua dois itens comissionáveis (
ST_COMISSAO='S') com percentuais diferentes na tabelaVENDEDORITEM. - Ao digitar o primeiro item, a tela de Rateio Vendedor Individual abre automaticamente; informe os vendedores e clique em OK.
- Inclua o segundo item e salve o pedido (F6).
Resultado esperado:
- A tela de rateio não reabre para o segundo item.
- Em
ITEMPEDIDOVENDEDORdo segundo item ficam gravados os mesmosCD_VENDEDORdo primeiro, porém oPC_COMISSAOe oVL_COMISSAOsão resultado da procedureCALCULA_COMISSAO_V2(podem diferir do primeiro item se o cadastroVENDEDORITEMtiver percentuais distintos para o novo produto). ST_COMISSAOMANUALgravado como'N'.
P - Vendedores e Porcentagem
| O que faz | Detalhe |
|---|---|
| Abertura do rateio | Combo cmbST_REPETE abre em "Vendedores e Porcentagem" |
| Próximo item | Repete 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_COMISSAOMANUAL | Gravado 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 MPD002 | Só propaga quando tabITEMPEDIDOST_ITEMPEDIDO <> 'A' (item não cancelado) — linha 2609 |
Simulação passo a passo
- Em MFA001 →
ST_REPETECOMISSAO= Vendedores e Porcentagem. - Salve e abra um pedido em MPD002.
- Inclua o primeiro item comissionável e no rateio defina
Vendedor A = 3%,Vendedor B = 2%. - Inclua um segundo item com preço diferente e salve.
Resultado esperado:
ITEMPEDIDOVENDEDORdo segundo item fica comVendedor 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_V2não é executada para o segundo item.
N - Nenhuma
| O que faz | Detalhe |
|---|---|
| Abertura do rateio | Combo cmbST_REPETE abre em "Nenhum" |
| Próximo item | Sempre dispara a tela de rateio (RateioVendedorIndividual) novamente, ignorando o rateio do item anterior |
| No MNF024 | Quando 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
- Em MFA001 →
ST_REPETECOMISSAO= Nenhuma. - Abra um pedido em MPD002 com 3 itens comissionáveis.
- 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_COMISSAOMANUALgrava 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 comST_COMISSAO='N', o laço que usaFlagVendedoresnem é executado e oST_REPETECOMISSAOé irrelevante para aquele item.ST_VARIOSVENDEDOREScontrola se o sistema admite mais de um vendedor por item — é pré-requisito do parâmetro (o combo nem fica visível em MFA001 quandoST_VARIOSVENDEDORES='N').TP_MOSTRAVENDEDORESprecisa 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_MOSTRACOMISSAOeST_ALTERACOMISSAOatuam em outra camada (visibilidade e bloqueio do grid), e não conflitam comST_REPETECOMISSAO— elas decidem se o usuário vê/edita percentuais, enquantoST_REPETECOMISSAOdecide se os percentuais serão repetidos ou recalculados do item anterior para o próximo.
| Cenário | ST_VARIOSVENDEDORES | TP_MOSTRAVENDEDORES | ST_REPETECOMISSAO | Comportamento |
|---|---|---|---|---|
| Parâmetro invisível na MFA001 | N | — | — | O combo nem aparece; o campo continua gravado no banco mas não é usado |
| Parâmetro invisível na MFA001 | S | A / outro | — | Campo existe no banco, mas não é editável pela tela |
| Parâmetro editável, default | S | N | V | Rateio abre 1x, próximos itens recalculam via CALCULA_COMISSAO_V2 |
| Parâmetro editável, repete tudo | S | N | P | Rateio abre 1x, próximos itens herdam vendedores e percentuais |
| Parâmetro editável, sempre pergunta | S | N | N | Rateio abre para cada item; cada item independente |
Tabela Comparativa Resumida
| Valor | Label na MFA001 | Reabre tela de rateio? | Repete vendedores? | Repete %? | Recalcula via CALCULA_COMISSAO_V2? | ST_COMISSAOMANUAL gravado |
|---|---|---|---|---|---|---|
V (default) | Vendedores | Não | Sim | Não (recalcula) | Sim | N |
P | Vendedores e Porcentagem | Não | Sim | Sim | Não (só recalcula VL_COMISSAO em memória) | S (MPD002) |
N | Nenhuma | Sim (a cada item) | Não | Não | Sim (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)
| Arquivo | Linha(s) | Conteúdo |
|---|---|---|
source/MFA001/UMFA001.dfm | 5182-5195 | Label lblST_REPETECOMISSAO: Caption = 'Função: "Associar a Todos os Produtos"' (Left=201, Top=188, taRightJustify) |
source/MFA001/UMFA001.dfm | 5527-5558 | cmbST_REPETECOMISSAO: TwwDBComboBox vinculado a ST_REPETECOMISSAO, Items: Vendedores e Porcentagem=P / Vendedores=V / Nenhuma=N. Hint [MRC020, MNF024]. OnChange = cmbST_VARIOSVENDEDORESChange |
source/MFA001/UMFA001.pas | 599-600 | Declaração de lblST_REPETECOMISSAO e cmbST_REPETECOMISSAO |
source/MFA001/UMFA001.pas | 2128-2158 | cmbST_VARIOSVENDEDORESChange: se ST_VARIOSVENDEDORES='N' esconde o combo; senão, visibilidade passa a depender de TP_MOSTRAVENDEDORES |
source/MFA001/UMFA001.pas | 2566-2586 | cmbTP_MOSTRAVENDEDORESChange: só exibe quando ST_VARIOSVENDEDORES='S' e TP_MOSTRAVENDEDORES='N' |
source/MFA001/UdmMFA001.pas | 217 | Declaração do field tabPARMFATURST_REPETECOMISSAO: TStringField |
source/MFA001/UdmMFA001.pas | 527 | AfterInsert: tabPARMFATURST_REPETECOMISSAO.AsString := 'V'; (valor default) |
source/MFA001/UdmMFA001.dfm | 1595-1600, 2411, 2578, 2815 | SELECT, INSERT, UPDATE da PARMFATUR e field persistente |
Delphi — tela compartilhada de rateio (jVendedor)
| Arquivo | Linha(s) | Conteúdo |
|---|---|---|
source/jVendedor/UVendedorIndividual.pas | 46 | Declaração do combo cmbST_REPETE: TwwDBComboBox |
source/jVendedor/UVendedorIndividual.pas | 279 | Valor default 'N' quando não há vendedores (function que preenche o vetor) |
source/jVendedor/UVendedorIndividual.pas | 504 | Vendedor[i].Tp_Repeticao := frmVendedorIndividual.cmbST_REPETE.Value (copia o valor escolhido pelo usuário para cada registro retornado) |
source/jVendedor/UVendedorIndividual.pas | 569-572 | FormShow: frmVendedorIndividual.cmbST_REPETE.Value := ParmFatur.Values['ST_REPETECOMISSAO'] — define o valor inicial do combo com base no parâmetro |
source/jVendedor/UVendedorIndividual.dfm | 230-256 | Definição do combo cmbST_REPETE, Items: Vendedores=V, Vendedores e Porcentagem=P, Nenhum=N, ItemIndex=0 |
Delphi — telas consumidoras
| Arquivo | Linha(s) | Conteúdo |
|---|---|---|
source/MPD002/UMPD002.pas | 1951 | Declaração FlagVendedores: string |
source/MPD002/UMPD002.pas | 2494 | Inicializa FlagVendedores := 'N' antes do laço de itens |
source/MPD002/UMPD002.pas | 2568-2623 | Decisã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.pas | 2658 | FlagVendedores := Vendedores[i].Tp_Repeticao — propaga para o próximo item |
source/MPD004/UMPD004.pas | 681, 691, 740-820 | Mesma lógica do MPD002 aplicada a OS (ITEMORCAMENTOVENDEDOR, tabMAQUINA) |
source/MPD093/UMPD093.pas | 518 | stRepeteComissao := Vendedores[i].Tp_Repeticao |
source/MOF001/UMOF001.pas | 1788, 2206 | FlagVendedores := Vendedores[i].Tp_Repeticao em dois pontos do módulo de oficina |
source/MNF024/UdmMNF024.pas | 121 | Declaração iST_REPETECOMISSAO: String |
source/MNF024/UdmMNF024.pas | 146 | SELECT na PARMFATUR inclui P.ST_REPETECOMISSAO |
source/MNF024/UdmMNF024.pas | 159 | dmMNF024.iST_REPETECOMISSAO := Resultado[3] |
source/MNF024/UMNF024.pas | 1055-1094 | Se iST_REPETECOMISSAO='N' executa CALCULA_COMISSAO_V2 para cada vendedor; caso contrário apenas recalcula Vl_Comissao em memória |
source/MRC020/UdmMRC020NFORDEM.pas | 2360-2403, 2585 | Uso 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.