Parâmetro de Alteração de Comissão em Grupo
Tela de configuração: MFA001 - Parâmetros de Faturamento
Localização: Parâmetros → Pedidos / O.S. → Parâmetros de Pedidos/Ordem de Serviço (Opção 1)
Caption (label na tela): Altera Comissão de Todo o Grupo do Item
Tabela: PARMFATUR.ST_ALTERACOMISSAOGRUPO
Valor padrão: N (Não) — definido em UdmMFA001.pas:499
Telas impactadas
| Módulo | Código | Descrição | Tipo de uso |
|---|
| Parâmetros de Faturamento | MFA001 | Configura o valor do parâmetro (combobox Sim/Não) | Produtora |
| Pedido de Venda | MPD002 | Lê o parâmetro para propagar PC_COMISSAO a todos os itens do mesmo grupo do produto ao sair do campo de comissão | Consumidora |
Procedures impactadas
Não há procedures SQL no diretório Scripts/ que referenciem ST_ALTERACOMISSAOGRUPO. A lógica do parâmetro é inteiramente executada no cliente Delphi (no MPD002), atualizando o dataset tabITEMPEDIDO em memória.
Campos envolvidos
| Campo | Tabela | Descrição |
|---|
ST_ALTERACOMISSAOGRUPO | PARMFATUR | Liga/desliga a propagação da comissão a todo o grupo |
PC_COMISSAO | ITEMPEDIDO | Percentual de comissão do item do pedido (campo que será replicado) |
CD_GRUPO | ITEMPEDIDO | Código do grupo do produto — chave de agrupamento utilizada para identificar quais itens recebem o mesmo percentual |
Opções disponíveis
S - Sim (propaga comissão ao grupo)
| O que faz | Detalhe |
|---|
| Pergunta ao usuário? | SIM, exibe msgcodigo('C-0000', ['Deseja Alterar o Percentual de todo o Grupo ' + Grupo + '?']) |
| Quando dispara? | No OnExit do campo edtPC_COMISSAO do MPD002 (ao sair do % de comissão do item) |
| O que altera? | Para cada linha de tabITEMPEDIDO cujo CD_GRUPO seja igual ao do item que disparou o evento, coloca o dataset em Edit e grava o novo percentual em PC_COMISSAO |
| Como itera? | Percorre todo o dataset (First + while not Eof do ... Next) com DisableControls e DesabilitaEventos := True, restaurando o RecNo original no final |
| Mensagem final | msgcodigo('I-0000', ['Operação Realizada com Sucesso!']) |
Simulação passo a passo
- Vá em MFA001 → aba Pedidos / O.S. → Parâmetros de Pedidos/Ordem de Serviço → combobox
Altera Comissão de Todo o Grupo do Item = Sim.
- Salve (F6).
- Abra um Pedido de Venda em MPD002.
- Inclua dois ou mais itens do mesmo grupo (ex.: grupo
01 → Produto A e Produto B).
- Inclua também um item de outro grupo (ex.: grupo
02 → Produto C).
- Posicione em Produto A e altere
% Comissão de 2,00 para 5,00. Saia do campo (Tab / Enter).
- Sistema pergunta: "Deseja Alterar o Percentual de todo o Grupo 01?" → clique Sim.
Resultado esperado:
- Produto A →
PC_COMISSAO = 5,00 (alteração original).
- Produto B →
PC_COMISSAO = 5,00 (propagado por estar no grupo 01).
- Produto C →
PC_COMISSAO permanece inalterado (grupo 02 ≠ 01).
- Mensagem "Operação Realizada com Sucesso!" exibida.
- O cursor permanece no item que disparou a alteração (o
RecNo é restaurado).
N - Não (default)
| O que faz | Detalhe |
|---|
| Pergunta ao usuário? | NÃO |
Efeito ao sair do PC_COMISSAO | A função recalculaComissaoGrupo é chamada, mas o if (parmfatur.values['ST_ALTERACOMISSAOGRUPO'] = 'S') retorna falso e nada é executado |
| Alteração de comissão | Afeta somente o item corrente |
Simulação passo a passo
- Em MFA001 →
ST_ALTERACOMISSAOGRUPO = Não.
- Abra um pedido no MPD002 com vários itens do mesmo grupo.
- Altere
% Comissão de um item de 2,00 para 5,00. Saia do campo.
Resultado esperado: Apenas o item editado fica com 5,00. Os demais itens do mesmo grupo mantêm os percentuais originais. Nenhuma pergunta é exibida.
O parâmetro ST_COMISSAO controla se o sistema calcula comissão (valor e percentual) nos itens de pedidos, notas e ordens de serviço. O parâmetro ST_ALTERACOMISSAOGRUPO atua em uma camada posterior: depois que o percentual PC_COMISSAO já está no item do pedido, ele define se uma alteração manual desse percentual deve se propagar aos demais itens do mesmo grupo.
| Cenário | ST_COMISSAO | ST_ALTERACOMISSAOGRUPO | Comportamento no MPD002 |
|---|
| Não calcula comissão | N | — | O campo PC_COMISSAO tende a ficar zerado/ignorado; a propagação em grupo perde sentido |
| Calcula comissão, sem propagação | S (ou V) | N | Cada item mantém o seu próprio PC_COMISSAO. Alterações são locais ao item |
| Calcula comissão, com propagação | S (ou V) | S | Após calcular comissão por item, qualquer ajuste manual de PC_COMISSAO via tela pode ser replicado a todos os itens do mesmo CD_GRUPO, mediante confirmação |
Observação: ST_ALTERACOMISSAOGRUPO não invoca nenhuma das procedures de comissão (CALCULA_COMISSAO, RECALCULA_COMISSAO, etc.). A alteração é feita direto no dataset tabITEMPEDIDO em memória e será persistida no próximo Post/gravação do pedido.
Tabela Comparativa Resumida
| Valor | Descrição | Pergunta na tela? | Afeta quais itens? | Disparo |
|---|
N | Não propaga (default) | Não | Apenas o item corrente | — |
S | Propaga comissão ao grupo | Sim (C-0000) | Todos os itens com o mesmo CD_GRUPO | OnExit de edtPC_COMISSAO no MPD002 |
Referências no Código Fonte
Delphi — tela de parâmetros (MFA001)
| Arquivo | Linha(s) | Conteúdo |
|---|
source/MFA001/UMFA001.dfm | 7957-7970 | Label Label21: Caption = 'Altera Comissão de Todo o Grupo do Item' (Left=291, Top=279) |
source/MFA001/UMFA001.dfm | 8692-8718 | wwDBComboBox7 — ComboBox vinculado a ST_ALTERACOMISSAOGRUPO com itens Sim=S / Não=N |
source/MFA001/UdmMFA001.pas | 148 | Declaração do field tabPARMFATURST_ALTERACOMISSAOGRUPO: TStringField |
source/MFA001/UdmMFA001.pas | 499 | AfterInsert: tabPARMFATURST_ALTERACOMISSAOGRUPO.AsString := 'N'; (valor default) |
source/MFA001/UdmMFA001.dfm | 154, 1200-1203, 2384, 2546, 2761, 3034 | Queries SELECT/INSERT/UPDATE da PARMFATUR e definição do field |
Delphi — tela consumidora (MPD002)
| Arquivo | Linha(s) | Conteúdo |
|---|
source/MPD002/UdmMPD002.pas | 5744 | Carga do parâmetro no SELECT da PARMFATUR (alias P) utilizado pelo pedido |
source/MPD002/UMPD002.pas | 6897-6928 | Procedure recalculaComissaoGrupo(Percentual, Grupo) — lê parmfatur.values['ST_ALTERACOMISSAOGRUPO'], confirma via msgcodigo('C-0000', ...) e percorre tabITEMPEDIDO aplicando o novo PC_COMISSAO em todos os itens com CD_GRUPO igual |
source/MPD002/UMPD002.pas | 6930-6933 | Handler edtPC_COMISSAOExit → chama recalculaComissaoGrupo(PC_COMISSAO, CD_GRUPO) |
SQL
Nenhuma procedure/view/trigger em Scripts/ faz referência a ST_ALTERACOMISSAOGRUPO. A lógica é exclusivamente cliente (Delphi/MPD002).