RNF002 — Comissão sobre Notas Fiscais
Fonte
- Source:
source/RNF002/ - Form:
source/RNF002/URNF002.pas - DataModule:
source/RNF002/UdmRNF002.pas
Objetivo
Relatório analitico/sintetico de comissoes de vendedores sobre notas fiscais emitidas. Permite filtrar por periodo, empresa, vendedores, grupos/subgrupos, marcas, secao, produtos, pessoas (cliente), perfil, regiao/area comercial, tipo de vendedor e modelo fiscal. Suporta quebras por vendedor, area comercial e regiao comercial, alem de exibicao da comissao por item da nota fiscal e cruzamento com meta do vendedor via VIEW_RNF002_META. A carga massiva de filtros usa CAMPOSTEMPORARIOS como staging para passar listas de codigos aos VIEW_*.
Modelos de Relatorio
O combo "Modelo" (cmbTP_MODELO) define o layout impresso e o SQL executado. O handler btnImprimirClick monta um isqlSALDO base com todos os filtros e, conforme o valor selecionado, embrulha esse SQL em um SELECT ... FROM VIEW_COMISSAO(...) com o segundo parametro da view indicando o modo. Ao final chama GeraRelatorio(transaction, iLayout, isqlSALDO).
Modelo 1: Data, N Nota e Cliente (padrao)
Quando usado: cmbTP_MODELO.Value = 'N' (item "Data, Nº Nota e Cliente" — default ao abrir a tela). Layout RNF002 (ou RNF002_R quando ha quebra por Area/Regiao Comercial).
Relatorio analitico padrao: uma linha por nota do vendedor, com totalizadores. E o unico modelo que expoe os filtros "Quebra por Area Comercial" e "Quebra por Regiao Comercial".
SQL Base:
SELECT V.*, <iCamposQuebra>, <VL_BONUS> VL_BONUS
FROM VIEW_COMISSAO(<isqlSALDO>, 'N', <iQUEBRA>, NULL,
<chkST_DEMONSTRAPEDIDO>, NULL, <CD_EMPRESA_SESSAO>) V
<iLeft> -- JOIN NOTA + LEFT JOIN RETORNA_DADOSCADASTRAIS p/ END_C (area/regiao)
<iCanhoto> -- INNER JOIN CANHOTONOTAFISCAL quando chkCanhoto
<iWhere> -- filtros Area/Regiao Comercial aplicados sobre END_C
ORDER BY NM_EMPRESA <iOrder>, [NM_VENDEDOR,] DT_EMISSAO, NR_NOTA, NM_PESSOA
Modelo 2: Cliente
Quando usado: cmbTP_MODELO.Value = 'C' (item "Cliente"). Layout RNF002_CLI.
Mesma base de VIEW_COMISSAO(..., 'N', ...) do Modelo 1 com layout orientado a agrupamento por cliente. Nao expoe quebras de Area/Regiao Comercial.
SQL Base: identico ao Modelo 1 (layout RNF002_CLI troca a apresentacao).
Modelo 3: Indice Sobre Desconto
Quando usado: cmbTP_MODELO.Value = 'D' (item "Índice Sobre Desconto"). Layout RNF002_D.
Nao usa VIEW_COMISSAO. Monta um SELECT direto sobre NOTA/ITEMNOTA/ITEM/MOVIMENTACAO/PESSOA agregando por nota, calculando percentual medio de desconto e valor liquido. Este modelo oculta o checkbox "Quebra por Vendedor". Quando informado Tipo de Vendedor, adiciona INNER JOIN ITEMNOTAVENDEDOR ITV na base.
SQL Base:
SELECT N.CD_EMPRESA, N.NR_NOTAFISCAL, N.DT_EMISSAO, C.NM_PESSOA,
SUM(COALESCE(NI.PS_ITEMNOTA, NI.QT_ITEMNOTA)) QTDE,
SUM(NI.QT_ITEMNOTA) QT_ITEMNOTA,
SUM(NI.PS_ITEMNOTA) PS_ITEMNOTA,
AVG((COALESCE(NI.VL_DESCONTO,0) * 100) / COALESCE(NI.VL_TOTAL,0)) PC_DESCONTO,
SUM(COALESCE(NI.VL_TOTAL,0) - COALESCE(NI.VL_DESCONTO,0)) VL_LIQUIDO,
SUM(COALESCE(NI.VL_TOTAL,0)) VL_TOTAL,
AVG(COALESCE(NI.PC_COMISSAO,0)) PC_COMISSAO,
SUM(CAST(((COALESCE(NI.VL_TOTAL,0) - COALESCE(NI.VL_DESCONTO,0))
* COALESCE(NI.PC_COMISSAO,0)) / 100 AS NUMERIC(15,2))) VL_COMISSAO
<iCamposQuebra>
FROM NOTA N
LEFT JOIN PESSOA V ON V.CD_PESSOA = N.CD_VENDEDOR
INNER JOIN PESSOA C ON C.CD_PESSOA = N.CD_PESSOA
INNER JOIN ENDERECOPESSOA E ON E.CD_PESSOA = N.CD_PESSOA
AND E.CD_ENDERECO = N.CD_ENDERECO
INNER JOIN MUNICIPIO Mu ON Mu.CD_MUNICIPIO = E.CD_MUNICIPIO
INNER JOIN ITEMNOTA NI ON NI.CD_EMPRESA = N.CD_EMPRESA
AND NI.NR_LANCAMENTO = N.NR_LANCAMENTO
AND NI.TP_NOTA = N.TP_NOTA
AND NI.CD_SERIE = N.CD_SERIE
<iinner> -- CANHOTONOTAFISCAL, PESSOAPERFIL, ITEMNOTAVENDEDOR, PESSOAVENDEDOR conforme filtros
INNER JOIN MOVIMENTACAO M ON M.CD_MOVIMENTACAO = NI.CD_MOVIMENTACAO
INNER JOIN ITEM I ON I.CD_ITEM = NI.CD_ITEM
WHERE N.ST_NOTA = 'V'
AND N.TP_NOTA = 'S'
AND M.ST_COMISSAO = 'S'
AND (COALESCE(NI.VL_TOTAL,0) - COALESCE(NI.VL_DESCONTO,0)) > 0
<isqlSALDO> -- filtros (empresa, periodo, perfil, pessoa, vendedor, marca, grupo, secao)
GROUP BY N.CD_EMPRESA, N.NR_NOTAFISCAL, N.DT_EMISSAO, I.CD_ITEM, I.DS_ITEM, C.NM_PESSOA
<iGroup>
ORDER BY N.CD_EMPRESA <iOrder>, N.DT_EMISSAO, N.NR_NOTAFISCAL
Modelo 4: Rateio Sobre Nota/Cliente
Quando usado: cmbTP_MODELO.Value = 'S' (item "Rateio Sobre Nota/Cliente"). Layout RNF002_S.
SQL Base:
SELECT /*RNF002_S*/ *
FROM VIEW_COMISSAO(<isqlSALDO>, 'S', <iQUEBRA>, NULL, 'N', NULL, <CD_EMPRESA_SESSAO>) V
<iLeft>
<iCanhoto>
<iWhere>
ORDER BY NM_EMPRESA, NM_VENDEDOR, DT_EMISSAO, NR_NOTA, NM_PESSOA
Modelo 5: Comissao por Metas
Quando usado: cmbTP_MODELO.Value = 'M' (item "Comissão por Metas"). Layout RNF002_M.
Unico modelo que usa VIEW_RNF002_META (nao VIEW_COMISSAO). Obriga empresa + data inicial + data final preenchidas. Usa iWhereMeta separado (aplicado dentro da procedure).
SQL Base:
SELECT DISTINCT V.O_CD_EMPRESA, V.O_NM_EMPRESA, V.O_NM_VENDEDOR, V.O_DS_MES,
V.O_VL_VENDA, V.O_VL_META, V.O_PC_META,
V.O_PC_METAALCANCADA, V.O_VL_COMISSAO, V.O_PC_COMISSAO
FROM VIEW_RNF002_META(<CD_EMPRESA>, <iWhereMeta>, <DT_INICIAL>, <DT_FINAL>) V
ORDER BY V.O_NM_VENDEDOR, V.O_DT_INIC
Modelo 6: Sintetico
Quando usado: cmbTP_MODELO.Value = 'A' (item "Sintético"). Layout RNF002_A.
Analitico por item de nota via VIEW_COMISSAO com modo 'T' (total por nota/vendedor), expondo VL_COMISSAODISTR, VL_COMISSAOPAGA e dados de parcela/cond. pagto. Com quebra Area/Regiao comercial ativa, passa a usar layout RNF002_R.
SQL Base:
SELECT V.NM_EMPRESA <iCamposQuebra>, V.NM_VENDEDOR, V.CD_VENDEDOR, V.CD_EMPRESA,
V.NR_LANCAMENTO, V.CD_SERIE, V.TP_NOTA, V.DT_EMISSAO, V.DT_VENCIMENTO,
V.CD_PESSOA, V.NM_PESSOA, V.NR_NOTA,
V.VL_TOTAL, V.VL_SALDO, V.VL_LIQUIDO, V.PC_COMISSAO, V.VL_COMISSAO,
V.VL_LIQUIDO_DIST,
V.VL_COMISSAO_DIST VL_COMISSAODISTR,
V.VL_COMISSAOTOTAL, V.VL_COMISSAOPAGA,
V.CD_ITEM, V.DS_ITEM, V.DS_ESTADO, V.ST_ITEMPEDIDO, V.NR_DOCUMENTO,
V.COND_PAGTO, V.DT_FATURADO, V.NM_PREPOSTO, V.NM_DISTRIBUIDOR, V.DS_APELIDO,
V.NR_PARCELA, V.DT_LIQUIDACAO, V.VL_PARCELA, V.VL_SALDODOCUMENTO,
CASE V.NM_VENDEDOR WHEN '' THEN V.VL_TOTAL ELSE 0 END VL_TOTALDISTR,
V.PC_COMISSAOPARM, V.VL_COMISSAOPARM
FROM VIEW_COMISSAO(<isqlSALDO>, 'T', <iQUEBRA>, NULL, 'N', NULL, <CD_EMPRESA_SESSAO>) V
<iLeft>
<iWhere>
ORDER BY NM_EMPRESA <iOrder>, NM_VENDEDOR, NM_DISTRIBUIDOR, DT_EMISSAO, NR_NOTA, NM_PESSOA
Modelo 7: Comissao Sobre Produtos e Despesas
Quando usado: cmbTP_MODELO.Value = 'Y' (item "Comissão Sobre Produtos e Despesas"). Layout RNF002.
Chama VIEW_COMISSAO com modo 'W' se "Exibir Comissao por Item da Nota Fiscal" estiver marcado, caso contrario modo 'Y'.
SQL Base:
SELECT DISTINCT V.* <iCamposQuebra>, <VL_BONUS> VL_BONUS
FROM VIEW_COMISSAO(<isqlSALDO>, <'W'|'Y'>, <iQUEBRA>, NULL, 'N', NULL, <CD_EMPRESA_SESSAO>) V
<iLeft>
<iCanhoto>
<iWhere>
ORDER BY NM_EMPRESA <iOrder>, NM_VENDEDOR, DT_EMISSAO, NR_NOTA, NM_PESSOA
Modelo 8: Comissao Sobre Notas
Quando usado: cmbTP_MODELO.Value = 'V' (item "Comissão Sobre Notas"). Layout RNF002_B.
Agrega por data e vendedor, incluindo comparacao com tabela de preco (O_VL_TABPRECO) e calculando diferenca (desvio da tabela).
SQL Base:
SELECT V.DT_EMISSAO, V.NM_VENDEDOR,
SUM(COALESCE(V.VL_TOTAL,0)) VLTOTALDIA,
SUM(COALESCE(V.VL_COMISSAO,0)) VL_COMISSAO,
SUM(COALESCE(V.O_VL_TABPRECO,0)) VL_TABELA,
SUM(V.VL_TOTAL - V.O_VL_DIFTABPRECO) DIFERENCA,
CASE WHEN SUM(COALESCE(V.VL_TOTAL,0)) = 0 THEN 0
ELSE (SUM(COALESCE(V.VL_COMISSAO,0))*100 /
SUM(COALESCE(V.VL_TOTAL,0))) END PC_COMISSAO
FROM VIEW_COMISSAO(<isqlSALDO>, 'V', <iQUEBRA>, 'N', 'N', NULL, <CD_EMPRESA_SESSAO>) V
<iLeft>
<iWhere>
GROUP BY V.DT_EMISSAO, V.NM_VENDEDOR
ORDER BY V.NM_VENDEDOR, V.DT_EMISSAO
Modelo 9: Comissao X Deducao de Imposto
Quando usado: cmbTP_MODELO.Value = 'L' (item "Comissão X Dedução de Imposto"). Layout RNF002_L.
Compara comissao bruta contra comissao liquida (liquida de impostos) por nota.
SQL Base:
SELECT V.NM_EMPRESA||' - '||V.CD_EMPRESA NMEMPRESA,
V.NM_VENDEDOR||' - '||V.CD_VENDEDOR NMVENDEDOR,
V.DT_EMISSAO,
V.VL_COMISSAOTOTAL COMISSAOBRUTA,
V.VL_COMISSAOPAGA COMISSAOLIQUIDA,
V.NR_NOTA,
V.NM_PESSOA||' - '||V.CD_PESSOA NMPESSOA
FROM VIEW_COMISSAO(<isqlSALDO>, 'L', <iQUEBRA>, 'N', 'N', NULL, <CD_EMPRESA_SESSAO>) V
ORDER BY V.NM_EMPRESA, V.CD_EMPRESA, V.NM_VENDEDOR, V.CD_VENDEDOR,
V.DT_EMISSAO, V.NR_NOTA, V.NM_PESSOA, V.CD_PESSOA
Modelo 10: Comissao por Cliente/Nota/Produtos
Quando usado: cmbTP_MODELO.Value = 'X' (item "Comissão por Cliente/Nota/Produtos"). Layout RNF002_X.
Antes de imprimir, insere um registro de controle em CAMPOSTEMPORARIOS (chaveado por CURRENT_CONNECTION + CD_MODULO='RNF002') usado pelo layout como flag de sessao.
SQL Base:
SELECT DISTINCT V.* <iCamposQuebra>, <VL_BONUS> VL_BONUS
FROM VIEW_COMISSAO(<isqlSALDO>, 'X', <iQUEBRA>, NULL, 'N', NULL, <CD_EMPRESA_SESSAO>) V
<iLeft>
<iCanhoto>
<iWhere>
ORDER BY NM_EMPRESA <iOrder>, NM_VENDEDOR, NM_PESSOA, CD_PESSOA, DT_EMISSAO, NR_NOTA
-- Controle auxiliar executado antes do relatorio:
INSERT INTO CAMPOSTEMPORARIOS (NR_CONEXAO, NM_CAMPO, CD_MODULO, VL_CAMPO, DT_REGISTRO)
VALUES (CURRENT_CONNECTION, '', 'RNF002', '', CURRENT_TIMESTAMP);
Filtros
Campos simples:
- Empresa (Lista de Empresas F9) — default = empresa da sessao, validado contra
RETORNA_EMPRESA(usuario, '1'). - Dt Emissao Inicial (data).
- Final (data) — valida
DT_INICIAL <= DT_FINAL. - Valor de Bonus por Vendedor (numerico; nao aceita negativo).
- Tipo Produto (Produtos / Serviços / Todos) — default "Todos"; internamente filtra
ITEM.TP_ITEM. - Gera Receita (Sim / Nao / Todos) — default "Todos"; filtra
MOVIMENTACAO.ST_RECEITA. - Modelo (10 opcoes — ver "Modelos de Relatório") — default "Data, Nº Nota e Cliente".
- Somente Vendedor Comissionado (checkbox, default ligado) — aplica
NI.PC_COMISSAO > 0ouITV.PC_COMISSAO > 0quandoPARMFATUR.ST_VARIOSVENDEDORES='S'. - Exibir Comissao por Item da Nota Fiscal (checkbox) — no modelo "Comissao Sobre Produtos e Despesas" alterna entre modo
'W'(com item) e'Y'(sem item) daVIEW_COMISSAO. - Demonstrar Pedidos da Nota (checkbox) — repassa 'S'/'N' para o parametro de pedido da
VIEW_COMISSAOnos modelos que exibem pedidos. - Notas Relacionadas Com Canhoto (checkbox) — ativa
INNER JOIN CANHOTONOTAFISCAL. - Quebra por Vendedor (checkbox, default ligado; forcado ligado + desabilitado se
PARMFATUR.ST_VARIOSVENDEDORES='S'; oculto no modelo "Indice Sobre Desconto") — concatena 'V' emiQUEBRAe adicionaNM_VENDEDORna ordenacao. - Quebra por Area Comercial (checkbox; visivel apenas no modelo "Data, Nº Nota e Cliente") — adiciona colunas/ordenacao por
END_C.CD_AREACOMERCIALe forca layoutRNF002_R. - Quebra por Regiao Comercial (checkbox; visivel apenas no modelo "Data, Nº Nota e Cliente") — adiciona colunas/ordenacao por
END_C.CD_REGIAOCOMERCIALe forca layoutRNF002_R.
Filtros de grid (multi-selecao via F9):
- Vendedores (Lista de Vendedores F9) — filtra
N.CD_VENDEDOR IN (...)(ouITV.CD_VENDEDORno modelo 'M'). - Grupos (Lista de Grupos F9) + checkbox "Exclusao de Grupos" — inclui ou exclui
I.CD_GRUPO IN/NOT IN (...). - Vendedores da Pessoa (Lista de Vendedores F9) — aplica
PV.CD_VENDEDOR IN (...)com join emPESSOAVENDEDOR(quandoST_VARIOSVENDEDORES='S') ouVENDEDOR(caso contrario). - Produtos (Lista de Produtos F9) — filtra
I.CD_ITEM IN (...). - Marcas (Lista de Marcas F9) — filtra
I.CD_MARCA IN (...). - Secao de Produtos (Lista de Seção de Produtos F9) — filtra
I.CD_SECAO IN (...). - Pessoa (Lista de Pessoas F9) — filtra
N.CD_PESSOA IN (...). - Tipo de Vendedor (Lista de Tipo de Vendedor F9; aba "Filtros 1", visivel apenas quando
PARMFATUR.ST_VARIOSVENDEDORES='S') — filtraITV.CD_TIPO IN (...)(no modelo 'D' adicionaINNER JOIN ITEMNOTAVENDEDOR). - Perfil (Lista de Perfis F9; aba "Filtros 2") + checkbox "Nao listar os perfis informados" — inclui ou exclui
COALESCE(PP.CD_PERFIL,-99999) IN/NOT IN (...)comLEFT JOIN PESSOAPERFIL. - Area Comercial (Lista de Áreas Comerciais F9; aba "Filtros 2"; visivel so no modelo "Data, Nº Nota e Cliente") — filtra
END_C.CD_AREACOMERCIAL IN (...). - Regioes Comerciais (Lista de Regiões Comerciais F9; aba "Filtros 2"; visivel so no modelo "Data, Nº Nota e Cliente") — filtra
END_C.CD_REGIAOCOMERCIAL IN (...).
Parametros que Influenciam
| Tabela | Campo | Efeito |
|---|---|---|
| PARMFATUR | ST_VARIOSVENDEDORES | Se 'S': forca "Quebra por Vendedor" marcada e desabilitada, exibe o grupo "Tipo de Vendedor", troca o JOIN de VENDEDOR para PESSOAVENDEDOR no filtro Vendedor da Pessoa e avalia comissao em ITEMNOTAVENDEDOR.PC_COMISSAO em vez de ITEMNOTA.PC_COMISSAO. Se 'N': grupo "Tipo de Vendedor" fica oculto. |
Perguntas Frequentes
P: Qual e a finalidade da tela RNF002? R: A tela RNF002 e utilizada para gerar relatorios de comissao de vendedores. Ela oferece diversos modelos de relatorio: Normal, Detalhado, por Metas, por Bonus, Nota a Nota, entre outros. O módulo utiliza a VIEW_COMISSAO para calcular as comissoes com base nas notas fiscais emitidas. Os filtros disponiveis incluem empresa, periodo, vendedor, produto, grupo, marca, secao, pessoa, perfil, regiao comercial e area comercial. Tambem permite configurar o tipo de comissao (sobre venda ou sobre recebimento) e o calculo de bonus por vendedor.
P: Ao tentar gerar o relatorio de Comissao por Metas, o sistema apresenta a mensagem "E obrigatorio informar a Empresa para o tipo de relatorio Comissao por Metas!". Como proceder? R: Para o modelo de relatorio "Comissao por Metas", o campo Empresa e obrigatorio. Informe o codigo da empresa no campo correspondente antes de gerar o relatorio.
P: Ao gerar o relatorio de Metas, recebo a mensagem "E obrigatorio informar a data Inicial e Final!". O que devo fazer? R: Para o modelo de relatorio "Comissao por Metas", as datas inicial e final sao obrigatorias. Preencha ambos os campos de data antes de gerar o relatorio.
P: Ao informar a Empresa, o sistema exibe a mensagem "O Usuario Logado nao pertence a Empresa Selecionada. Verifique! [ADM001]". Como resolver? R: O usuario atual nao possui acesso a empresa informada. Verifique se o codigo da empresa esta correto ou solicite ao administrador do sistema que vincule seu usuario a empresa desejada na tela ADM001.
P: Ao informar a Empresa, recebo a mensagem "A Empresa nao esta Cadastrada [ADM002]!". O que significa? R: O codigo de empresa informado nao existe no cadastro do sistema. Verifique o codigo digitado ou utilize a tecla F9 para buscar uma empresa valida na tela ADM002.
P: O sistema apresenta a mensagem "O Produto nao esta Ativo [TPO001]!". Como proceder? R: O produto informado esta com status inativo no cadastro. Verifique se o codigo esta correto. Caso precise utilizar este produto, acesse a tela TPO001 para verificar e reativar o cadastro.
P: Recebi a mensagem "O Código do Produto nao esta Cadastrado [TPO001]!". Como resolver? R: O codigo de produto informado nao existe no cadastro de produtos. Verifique o codigo digitado ou use a tecla F9 para buscar um produto valido na tela TPO001.
P: Ao informar as datas, recebo a mensagem "A Data Inicial nao pode ser Maior que a Data Final!". O que devo fazer? R: A data informada no campo "Data Inicial" e posterior a "Data Final". Corrija as datas para que a data inicial seja igual ou anterior a data final.
P: O sistema exibe a mensagem "A Data Final nao pode ser Menor que a Data Inicial!". Como corrigir? R: A data informada no campo "Data Final" e anterior a "Data Inicial". Ajuste a data final para que seja igual ou posterior a data inicial.
P: Ao informar o Grupo, o sistema apresenta a mensagem "O Grupo nao esta Cadastrado [TPO006]!". O que significa? R: O codigo de grupo informado nao existe no cadastro de grupos de produtos. Verifique o codigo digitado ou use a tecla F9 para buscar um grupo valido na tela TPO006.
P: Recebi a mensagem "O Vendedor nao esta Cadastrado [TFA007]!". Como proceder? R: O codigo de vendedor informado nao existe no cadastro de vendedores. Verifique o codigo digitado ou utilize a tecla F9 para localizar um vendedor valido na tela TFA007.
P: Ao informar a Marca, o sistema exibe a mensagem "A Marca nao esta Cadastrada [TPO002]!". Como resolver? R: O codigo de marca informado nao existe no cadastro de marcas. Verifique o codigo digitado ou use a tecla F9 para buscar uma marca valida na tela TPO002.
P: Recebi a mensagem "A Secao nao esta Cadastrada [TPO008]!". O que devo fazer? R: O codigo de secao informado nao existe no cadastro de secoes. Verifique o codigo digitado ou use a tecla F9 para buscar uma secao valida na tela TPO008.
P: Ao informar a Pessoa, o sistema apresenta a mensagem "A Pessoa nao esta Cadastrada [TFA001]!". Como proceder? R: O codigo de pessoa informado nao existe no cadastro de pessoas fisicas/juridicas. Verifique o codigo digitado ou use a tecla F9 para buscar uma pessoa valida na tela TFA001.
P: Recebi a mensagem "Perfil nao cadastrado! Verifique[TPO033]!". Como resolver? R: O codigo de perfil informado nao existe no cadastro de perfis. Verifique o codigo digitado ou use a tecla F9 para buscar um perfil valido na tela TPO033.
P: O sistema exibe a mensagem "Valor de Bonus por Vendedor nao pode ser negativo. Verifique!". O que devo fazer? R: O valor informado no campo de bonus por vendedor e negativo. Informe um valor igual ou superior a zero para o campo de bonus.
P: Ao informar a Regiao Comercial, recebo a mensagem "A Regiao Comercial nao esta Cadastrada! Verifique [TFA014]". Como proceder? R: O codigo de regiao comercial informado nao existe no cadastro. Verifique o codigo digitado ou use a tecla F9 para buscar uma regiao comercial valida na tela TFA014.
P: Recebi a mensagem "A Area Comercial nao esta Cadastrada! Verifique [TFA080]". Como resolver? R: O codigo de area comercial informado nao existe no cadastro. Verifique o codigo digitado ou use a tecla F9 para buscar uma area comercial valida na tela TFA080.
Mensagens exibidas
Levantadas de source/RNF002/ pela camada 0 (commit 96fc51e236).
Mais 18 mensagens com texto literal no código: RNF002.
Parâmetros lidos
Campos PARM* lidos via values[] em source/RNF002/ (commit 96fc51e236).
| Parâmetro | Tabela |
|---|---|
| ST_VARIOSVENDEDORES | PARMFATUR |
Tabelas de Escrita (INSERT/UPDATE/DELETE)
| Tabela | Operacoes |
|---|---|
| CAMPOSTEMPORARIOS | INSERT |
| EMPRESA | DELETE, INSERT, SELECT, UPDATE |
| GRUPO | DELETE, INSERT, SELECT, UPDATE |
| HISTORICO | DELETE, INSERT, SELECT, UPDATE |
| ITEM | DELETE, INSERT, SELECT, UPDATE |
| MARCA | DELETE, INSERT, SELECT, UPDATE |
| PESSOA | DELETE, INSERT, SELECT, UPDATE |
| SECAO | DELETE, INSERT, SELECT, UPDATE |
As operacoes DELETE/INSERT/UPDATE nas tabelas-mestras (EMPRESA, GRUPO, HISTORICO, ITEM, MARCA, PESSOA, SECAO) vem de infraestrutura compartilhada do framework, nao de gravacoes transacionais da tela. A unica gravacao de negocio real e o
INSERTemCAMPOSTEMPORARIOSpara passagem de filtros para as procedures.
Tabelas de Leitura (SELECT)
| Tabela | Operacoes |
|---|---|
| AREACOMERCIAL | SELECT |
| CANHOTONOTAFISCAL | SELECT |
| CFO | SELECT |
| ENDERECOPESSOA | SELECT |
| ITEMNOTA | SELECT |
| ITEMNOTAVENDEDOR | SELECT |
| MOVIMENTACAO | SELECT |
| MUNICIPIO | SELECT |
| NOTA | SELECT |
| PERFIL | SELECT |
| PESSOAPERFIL | SELECT |
| PESSOAVENDEDOR | SELECT |
| REGIAOCOMERCIAL | SELECT |
| TIPOVENDEDOR | SELECT |
| VENDEDOR | SELECT |
Procedures Chamadas
| Procedure | Tabelas Acessadas |
|---|---|
| RETORNA_DADOSCADASTRAIS | AREACOMERCIAL (SELECT), ENDERECOPESSOA (SELECT), ESTADO (SELECT), FORMAPAGTO (SELECT), GRUPOPCP (SELECT), MUNICIPIO (SELECT) +4 |
| RETORNA_EMPRESA | EMPRESA (SELECT), USUARIOEMPRESA (SELECT) |
| VIEW_COMISSAO | EMPRESA (SELECT), PARMFATUR (SELECT), SESSAO (INSERT/SELECT) |
| VIEW_RNF002_META | COMISSAOVENDEDOR (SELECT), EMPRESA (SELECT), GRUPO (SELECT), ITEM (SELECT), ITEMNOTA (SELECT), ITEMNOTAVENDEDOR (SELECT) +11 |
Tabelas via Procedures (acesso indireto)
| Tabela | Operacoes |
|---|---|
| AREACOMERCIAL | SELECT |
| COMISSAOVENDEDOR | SELECT |
| EMPRESA | SELECT |
| ENDERECOPESSOA | SELECT |
| ESTADO | SELECT |
| FORMAPAGTO | SELECT |
| GRUPO | SELECT |
| GRUPOPCP | SELECT |
| ITEM | SELECT |
| ITEMNOTA | SELECT |
| ITEMNOTAVENDEDOR | SELECT |
| MARCA | SELECT |
| METAVENDEDOR | SELECT |
| MOVESTOQUE | SELECT |
| MOVIMENTACAO | SELECT |
| MUNICIPIO | SELECT |
| NOTA | SELECT |
| PAISBACEN | SELECT |
| PARMFATUR | SELECT |
| PESSOA | SELECT |
| ... | +8 tabelas |
Dependencias Aferentes (quem alimenta esta tela)
Telas que escrevem em tabelas lidas por esta tela. Limitado a 30 entradas mais acopladas.
| Tela | Título | Tabelas em Comum |
|---|---|---|
| RNF005 | Demonstrativo de Notas Fiscais | AREACOMERCIAL, CFO, EMPRESA, GRUPO, HISTORICO +5 |
| CNF001 | Consulta de Notas Fiscais | EMPRESA, GRUPO, ITEM, ITEMNOTA, ITEMNOTAVENDEDOR +4 |
| MNF001 | Recebimento de Notas Fiscais de Compra | EMPRESA, ENDERECOPESSOA, GRUPO, ITEM, ITEMNOTA +4 |
| MNF011 | Alteração de Comissões | EMPRESA, ENDERECOPESSOA, ITEM, ITEMNOTA, ITEMNOTAVENDEDOR +4 |
| CNF009 | Programação/Fechamento de Comissões | EMPRESA, GRUPO, ITEM, ITEMNOTAVENDEDOR, MARCA +2 |
| RRC023 | EMPRESA, GRUPO, ITEM, MARCA, PERFIL +2 | |
| TFA001 | Pessoas Física / Jurídica | AREACOMERCIAL, ENDERECOPESSOA, PESSOA, PESSOAPERFIL, PESSOAVENDEDOR +2 |
| TFA006 | Tabelas de Preço | EMPRESA, GRUPO, ITEM, MARCA, PERFIL +2 |
| CEQ001 | Saldo em Estoque | EMPRESA, GRUPO, ITEM, MARCA, PERFIL +1 |
| CNF007 | EMPRESA, GRUPO, ITEM, MARCA, NOTA +1 | |
| CNF008 | Demonstrativo de Margens sobre Vendas | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 |
| CNF012 | Consulta de CTRC | EMPRESA, ITEM, ITEMNOTA, MOVIMENTACAO, NOTA +1 |
| MNF024 | EMPRESA, ITEM, ITEMNOTA, ITEMNOTAVENDEDOR, MOVIMENTACAO +1 | |
| MNF030 | EMPRESA, ENDERECOPESSOA, ITEM, ITEMNOTA, NOTA +1 | |
| MPD011 | Confirmação Ordem Carregamento | EMPRESA, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA, PESSOA +1 |
| MRC020 | Confirmação de Ordem de Carregamento Recapadora | EMPRESA, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA, PESSOA +1 |
| REQ001 | Saldo em Estoque por Produto | EMPRESA, GRUPO, ITEM, MARCA, PERFIL +1 |
| REQ012 | Relação de Entradas e Saídas do Estoque | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 |
| RNF010 | Curva ABC de Produtos | GRUPO, ITEM, MARCA, PERFIL, PESSOA +1 |
| RNF014 | Demonstrativo de Movimentação de Itens | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 |
| RRC020 | EMPRESA, GRUPO, ITEM, PERFIL, PESSOA +1 | |
| CEQ004 | Sugestão de Produção | EMPRESA, GRUPO, ITEM, MARCA, SECAO |
| CEQ005 | Movimentos Estoque | EMPRESA, GRUPO, ITEM, MARCA, SECAO |
| CFA003 | Gerenciamento de Margens sobre Produtos | EMPRESA, GRUPO, ITEM, MARCA, SECAO |
| CNF005 | Análise de Produtos para Compra | EMPRESA, GRUPO, ITEM, MARCA, PESSOA |
| CNF006 | Gerenciamento de Preços para Venda | EMPRESA, GRUPO, ITEM, MARCA, SECAO |
| CPD001 | Consulta de Pedidos | EMPRESA, GRUPO, ITEM, MOVIMENTACAO, PESSOA |
| MCB015 | Envio de Email | EMPRESA, MUNICIPIO, PESSOA, REGIAOCOMERCIAL, VENDEDOR |
| MEQ074 | Simulação de Produção | EMPRESA, GRUPO, ITEM, MARCA, SECAO |
| MNF032 | Importação de XML Transmitido | ENDERECOPESSOA, ITEMNOTA, ITEMNOTAVENDEDOR, NOTA, PESSOA |
| ... | +543 telas |
Dependencias Eferentes (quem consome dados desta tela)
Apenas CAMPOSTEMPORARIOS e escrito de forma transacional (staging descartavel). As demais tabelas na lista de escrita sao compartilhadas. Lista abaixo mostra telas que leem algumas delas.
| Tela | Título | Tabelas em Comum |
|---|---|---|
jCommon | CAMPOSTEMPORARIOS, EMPRESA, GRUPO, HISTORICO, ITEM +3 | |
| CEQ001 | Saldo em Estoque | EMPRESA, GRUPO, HISTORICO, ITEM, MARCA +2 |
| CEQ005 | Movimentos Estoque | EMPRESA, GRUPO, HISTORICO, ITEM, MARCA +2 |
| CNF001 | Consulta de Notas Fiscais | EMPRESA, GRUPO, HISTORICO, ITEM, MARCA +2 |
| CNF007 | EMPRESA, GRUPO, HISTORICO, ITEM, MARCA +2 | |
| CNF009 | Programação/Fechamento de Comissões | EMPRESA, GRUPO, HISTORICO, ITEM, MARCA +2 |
| MCO006 | Compra de Peças (Oficina) | CAMPOSTEMPORARIOS, EMPRESA, GRUPO, ITEM, MARCA +2 |
| MNF001 | Recebimento de Notas Fiscais de Compra | EMPRESA, GRUPO, HISTORICO, ITEM, MARCA +2 |
| REQ005 | Ordens de Produção | EMPRESA, GRUPO, HISTORICO, ITEM, MARCA +2 |
| REQ006 | Movimentos do Estoque | EMPRESA, GRUPO, HISTORICO, ITEM, MARCA +2 |
| REQ012 | Relação de Entradas e Saídas do Estoque | EMPRESA, GRUPO, HISTORICO, ITEM, MARCA +2 |
| RNF005 | Demonstrativo de Notas Fiscais | EMPRESA, GRUPO, HISTORICO, ITEM, MARCA +2 |
| TFA007 | Vendedores | EMPRESA, GRUPO, HISTORICO, ITEM, MARCA +2 |
| TPO001 | Produtos | EMPRESA, GRUPO, HISTORICO, ITEM, MARCA +2 |
| CNF005 | Análise de Produtos para Compra | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 |
| CNF008 | Demonstrativo de Margens sobre Vendas | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 |
| CPD001 | Consulta de Pedidos | EMPRESA, GRUPO, HISTORICO, ITEM, PESSOA +1 |
JunsoftIntegracao | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 | |
LOP018 | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 | |
LOP031 | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 | |
| MCO008 | COMPRA DE ITENS | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 |
| MEQ013 | Acerto de Saldo em Estoque | EMPRESA, GRUPO, HISTORICO, ITEM, MARCA +1 |
| MNF036 | Transferência por Estoque Mínimo | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 |
| REQ017 | Estatística de Produtos | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 |
| REQ024 | Relatório de Estoque por Grade | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 |
| RNF006 | Relação de Custo X Lucro sobre Vendas | EMPRESA, GRUPO, HISTORICO, ITEM, MARCA +1 |
| RNF010 | Curva ABC de Produtos | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 |
| RNF013 | Etiquetas de Volume sobre Nota Fiscal | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 |
| RNF014 | Demonstrativo de Movimentação de Itens | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 |
| RPD001 | Relação Analítica de Pedidos | EMPRESA, GRUPO, ITEM, MARCA, PESSOA +1 |
| ... | +1382 telas |
Regras de Negocio
- Filtro obrigatorio de periodo por data de emissao da nota (inicial/final).
- Filtro por empresa respeita
USUARIOEMPRESAdo usuario corrente (viaRETORNA_EMPRESA). - Opcao "Somente Vendedor Comissionado" (
chkCOMISSAO) restringe o resultado a linhas onde ha comissao atribuida emITEMNOTAVENDEDOR. - "Valor de Bonus por Vendedor" e "Gera Receita" modificam o calculo de base de comissao.
- Quebras disponiveis: por Vendedor (
chkVENDEDOR), Area Comercial (chkAreaComercial), Regiao Comercial (chkRegiaoComercial). - "Exibir Comissao por Item da Nota Fiscal" (
chkITEM) alterna layout sintetico x analitico por item. - "Notas Relacionadas Com Canhoto" filtra somente notas com assinatura em
CANHOTONOTAFISCAL. - "Demonstrar Pedidos da Nota" acrescenta rastreio do pedido origem da nota.
- Exclusao de grupos (
chkGrupo+ lista de grupos marcados) funciona como filtro negativo. - Exclusao de perfis (
chkPerfil) permite omitir perfis especificos na listagem. - Listas de filtros (vendedores, grupos, produtos, marcas, secao, pessoa, tipo de vendedor, perfil, regiao, area) sao transferidas para o banco via insert em
CAMPOSTEMPORARIOS(staging ligado aSESSAO). - A procedure
VIEW_RNF002_METAcruza as vendas comMETAVENDEDORpara apurar atingimento de meta.
Modelos de Relatório
O combo "Modelo" (cmbTP_MODELO) define o layout impresso e o SQL executado. O handler btnImprimirClick monta um isqlSALDO base com todos os filtros e, conforme o valor selecionado, embrulha esse SQL em um SELECT ... FROM VIEW_COMISSAO(...) com o segundo parametro da view indicando o modo. Ao final chama GeraRelatorio(transaction, iLayout, isqlSALDO).
Modelo 1: Data, N Nota e Cliente (padrao)
Quando usado: cmbTP_MODELO.Value = 'N' (item "Data, Nº Nota e Cliente" — default ao abrir a tela). Layout RNF002 (ou RNF002_R quando ha quebra por Area/Regiao Comercial).
Relatório analitico padrao: uma linha por nota do vendedor, com totalizadores. E o unico modelo que expoe os filtros "Quebra por Area Comercial" e "Quebra por Regiao Comercial".
SQL Base:
SELECT V.*, <iCamposQuebra>, <VL_BONUS> VL_BONUS
FROM VIEW_COMISSAO(<isqlSALDO>, 'N', <iQUEBRA>, NULL,
<chkST_DEMONSTRAPEDIDO>, NULL, <CD_EMPRESA_SESSAO>) V
<iLeft> -- JOIN NOTA + LEFT JOIN RETORNA_DADOSCADASTRAIS p/ END_C (area/regiao)
<iCanhoto> -- INNER JOIN CANHOTONOTAFISCAL quando chkCanhoto
<iWhere> -- filtros Area/Regiao Comercial aplicados sobre END_C
ORDER BY NM_EMPRESA <iOrder>, [NM_VENDEDOR,] DT_EMISSAO, NR_NOTA, NM_PESSOA
Modelo 2: Cliente
Quando usado: cmbTP_MODELO.Value = 'C' (item "Cliente"). Layout RNF002_CLI.
Mesma base de VIEW_COMISSAO(..., 'N', ...) do Modelo 1 com layout orientado a agrupamento por cliente. Nao expoe quebras de Area/Regiao Comercial.
SQL Base: identico ao Modelo 1 (layout RNF002_CLI troca a apresentacao).
Modelo 3: Indice Sobre Desconto
Quando usado: cmbTP_MODELO.Value = 'D' (item "Índice Sobre Desconto"). Layout RNF002_D.
Nao usa VIEW_COMISSAO. Monta um SELECT direto sobre NOTA/ITEMNOTA/ITEM/MOVIMENTACAO/PESSOA agregando por nota, calculando percentual medio de desconto e valor liquido. Este modelo oculta o checkbox "Quebra por Vendedor". Quando informado Tipo de Vendedor, adiciona INNER JOIN ITEMNOTAVENDEDOR ITV na base.
SQL Base:
SELECT N.CD_EMPRESA, N.NR_NOTAFISCAL, N.DT_EMISSAO, C.NM_PESSOA,
SUM(COALESCE(NI.PS_ITEMNOTA, NI.QT_ITEMNOTA)) QTDE,
SUM(NI.QT_ITEMNOTA) QT_ITEMNOTA,
SUM(NI.PS_ITEMNOTA) PS_ITEMNOTA,
AVG((COALESCE(NI.VL_DESCONTO,0) * 100) / COALESCE(NI.VL_TOTAL,0)) PC_DESCONTO,
SUM(COALESCE(NI.VL_TOTAL,0) - COALESCE(NI.VL_DESCONTO,0)) VL_LIQUIDO,
SUM(COALESCE(NI.VL_TOTAL,0)) VL_TOTAL,
AVG(COALESCE(NI.PC_COMISSAO,0)) PC_COMISSAO,
SUM(CAST(((COALESCE(NI.VL_TOTAL,0) - COALESCE(NI.VL_DESCONTO,0))
* COALESCE(NI.PC_COMISSAO,0)) / 100 AS NUMERIC(15,2))) VL_COMISSAO
<iCamposQuebra>
FROM NOTA N
LEFT JOIN PESSOA V ON V.CD_PESSOA = N.CD_VENDEDOR
INNER JOIN PESSOA C ON C.CD_PESSOA = N.CD_PESSOA
INNER JOIN ENDERECOPESSOA E ON E.CD_PESSOA = N.CD_PESSOA
AND E.CD_ENDERECO = N.CD_ENDERECO
INNER JOIN MUNICIPIO Mu ON Mu.CD_MUNICIPIO = E.CD_MUNICIPIO
INNER JOIN ITEMNOTA NI ON NI.CD_EMPRESA = N.CD_EMPRESA
AND NI.NR_LANCAMENTO = N.NR_LANCAMENTO
AND NI.TP_NOTA = N.TP_NOTA
AND NI.CD_SERIE = N.CD_SERIE
<iinner> -- CANHOTONOTAFISCAL, PESSOAPERFIL, ITEMNOTAVENDEDOR, PESSOAVENDEDOR conforme filtros
INNER JOIN MOVIMENTACAO M ON M.CD_MOVIMENTACAO = NI.CD_MOVIMENTACAO
INNER JOIN ITEM I ON I.CD_ITEM = NI.CD_ITEM
WHERE N.ST_NOTA = 'V'
AND N.TP_NOTA = 'S'
AND M.ST_COMISSAO = 'S'
AND (COALESCE(NI.VL_TOTAL,0) - COALESCE(NI.VL_DESCONTO,0)) > 0
<isqlSALDO> -- filtros (empresa, periodo, perfil, pessoa, vendedor, marca, grupo, secao)
GROUP BY N.CD_EMPRESA, N.NR_NOTAFISCAL, N.DT_EMISSAO, I.CD_ITEM, I.DS_ITEM, C.NM_PESSOA
<iGroup>
ORDER BY N.CD_EMPRESA <iOrder>, N.DT_EMISSAO, N.NR_NOTAFISCAL
Modelo 4: Rateio Sobre Nota/Cliente
Quando usado: cmbTP_MODELO.Value = 'S' (item "Rateio Sobre Nota/Cliente"). Layout RNF002_S.
SQL Base:
SELECT /*RNF002_S*/ *
FROM VIEW_COMISSAO(<isqlSALDO>, 'S', <iQUEBRA>, NULL, 'N', NULL, <CD_EMPRESA_SESSAO>) V
<iLeft>
<iCanhoto>
<iWhere>
ORDER BY NM_EMPRESA, NM_VENDEDOR, DT_EMISSAO, NR_NOTA, NM_PESSOA
Modelo 5: Comissao por Metas
Quando usado: cmbTP_MODELO.Value = 'M' (item "Comissão por Metas"). Layout RNF002_M.
Unico modelo que usa VIEW_RNF002_META (nao VIEW_COMISSAO). Obriga empresa + data inicial + data final preenchidas. Usa iWhereMeta separado (aplicado dentro da procedure).
SQL Base:
SELECT DISTINCT V.O_CD_EMPRESA, V.O_NM_EMPRESA, V.O_NM_VENDEDOR, V.O_DS_MES,
V.O_VL_VENDA, V.O_VL_META, V.O_PC_META,
V.O_PC_METAALCANCADA, V.O_VL_COMISSAO, V.O_PC_COMISSAO
FROM VIEW_RNF002_META(<CD_EMPRESA>, <iWhereMeta>, <DT_INICIAL>, <DT_FINAL>) V
ORDER BY V.O_NM_VENDEDOR, V.O_DT_INIC
Modelo 6: Sintetico
Quando usado: cmbTP_MODELO.Value = 'A' (item "Sintético"). Layout RNF002_A.
Analitico por item de nota via VIEW_COMISSAO com modo 'T' (total por nota/vendedor), expondo VL_COMISSAODISTR, VL_COMISSAOPAGA e dados de parcela/cond. pagto. Com quebra Area/Regiao comercial ativa, passa a usar layout RNF002_R.
SQL Base:
SELECT V.NM_EMPRESA <iCamposQuebra>, V.NM_VENDEDOR, V.CD_VENDEDOR, V.CD_EMPRESA,
V.NR_LANCAMENTO, V.CD_SERIE, V.TP_NOTA, V.DT_EMISSAO, V.DT_VENCIMENTO,
V.CD_PESSOA, V.NM_PESSOA, V.NR_NOTA,
V.VL_TOTAL, V.VL_SALDO, V.VL_LIQUIDO, V.PC_COMISSAO, V.VL_COMISSAO,
V.VL_LIQUIDO_DIST,
V.VL_COMISSAO_DIST VL_COMISSAODISTR,
V.VL_COMISSAOTOTAL, V.VL_COMISSAOPAGA,
V.CD_ITEM, V.DS_ITEM, V.DS_ESTADO, V.ST_ITEMPEDIDO, V.NR_DOCUMENTO,
V.COND_PAGTO, V.DT_FATURADO, V.NM_PREPOSTO, V.NM_DISTRIBUIDOR, V.DS_APELIDO,
V.NR_PARCELA, V.DT_LIQUIDACAO, V.VL_PARCELA, V.VL_SALDODOCUMENTO,
CASE V.NM_VENDEDOR WHEN '' THEN V.VL_TOTAL ELSE 0 END VL_TOTALDISTR,
V.PC_COMISSAOPARM, V.VL_COMISSAOPARM
FROM VIEW_COMISSAO(<isqlSALDO>, 'T', <iQUEBRA>, NULL, 'N', NULL, <CD_EMPRESA_SESSAO>) V
<iLeft>
<iWhere>
ORDER BY NM_EMPRESA <iOrder>, NM_VENDEDOR, NM_DISTRIBUIDOR, DT_EMISSAO, NR_NOTA, NM_PESSOA
Modelo 7: Comissao Sobre Produtos e Despesas
Quando usado: cmbTP_MODELO.Value = 'Y' (item "Comissão Sobre Produtos e Despesas"). Layout RNF002.
Chama VIEW_COMISSAO com modo 'W' se "Exibir Comissao por Item da Nota Fiscal" estiver marcado, caso contrario modo 'Y'.
SQL Base:
SELECT DISTINCT V.* <iCamposQuebra>, <VL_BONUS> VL_BONUS
FROM VIEW_COMISSAO(<isqlSALDO>, <'W'|'Y'>, <iQUEBRA>, NULL, 'N', NULL, <CD_EMPRESA_SESSAO>) V
<iLeft>
<iCanhoto>
<iWhere>
ORDER BY NM_EMPRESA <iOrder>, NM_VENDEDOR, DT_EMISSAO, NR_NOTA, NM_PESSOA
Modelo 8: Comissao Sobre Notas
Quando usado: cmbTP_MODELO.Value = 'V' (item "Comissão Sobre Notas"). Layout RNF002_B.
Agrega por data e vendedor, incluindo comparacao com tabela de preco (O_VL_TABPRECO) e calculando diferenca (desvio da tabela).
SQL Base:
SELECT V.DT_EMISSAO, V.NM_VENDEDOR,
SUM(COALESCE(V.VL_TOTAL,0)) VLTOTALDIA,
SUM(COALESCE(V.VL_COMISSAO,0)) VL_COMISSAO,
SUM(COALESCE(V.O_VL_TABPRECO,0)) VL_TABELA,
SUM(V.VL_TOTAL - V.O_VL_DIFTABPRECO) DIFERENCA,
CASE WHEN SUM(COALESCE(V.VL_TOTAL,0)) = 0 THEN 0
ELSE (SUM(COALESCE(V.VL_COMISSAO,0))*100 /
SUM(COALESCE(V.VL_TOTAL,0))) END PC_COMISSAO
FROM VIEW_COMISSAO(<isqlSALDO>, 'V', <iQUEBRA>, 'N', 'N', NULL, <CD_EMPRESA_SESSAO>) V
<iLeft>
<iWhere>
GROUP BY V.DT_EMISSAO, V.NM_VENDEDOR
ORDER BY V.NM_VENDEDOR, V.DT_EMISSAO
Modelo 9: Comissao X Deducao de Imposto
Quando usado: cmbTP_MODELO.Value = 'L' (item "Comissão X Dedução de Imposto"). Layout RNF002_L.
Compara comissao bruta contra comissao liquida (liquida de impostos) por nota.
SQL Base:
SELECT V.NM_EMPRESA||' - '||V.CD_EMPRESA NMEMPRESA,
V.NM_VENDEDOR||' - '||V.CD_VENDEDOR NMVENDEDOR,
V.DT_EMISSAO,
V.VL_COMISSAOTOTAL COMISSAOBRUTA,
V.VL_COMISSAOPAGA COMISSAOLIQUIDA,
V.NR_NOTA,
V.NM_PESSOA||' - '||V.CD_PESSOA NMPESSOA
FROM VIEW_COMISSAO(<isqlSALDO>, 'L', <iQUEBRA>, 'N', 'N', NULL, <CD_EMPRESA_SESSAO>) V
ORDER BY V.NM_EMPRESA, V.CD_EMPRESA, V.NM_VENDEDOR, V.CD_VENDEDOR,
V.DT_EMISSAO, V.NR_NOTA, V.NM_PESSOA, V.CD_PESSOA
Modelo 10: Comissao por Cliente/Nota/Produtos
Quando usado: cmbTP_MODELO.Value = 'X' (item "Comissão por Cliente/Nota/Produtos"). Layout RNF002_X.
Antes de imprimir, insere um registro de controle em CAMPOSTEMPORARIOS (chaveado por CURRENT_CONNECTION + CD_MODULO='RNF002') usado pelo layout como flag de sessao.
SQL Base:
SELECT DISTINCT V.* <iCamposQuebra>, <VL_BONUS> VL_BONUS
FROM VIEW_COMISSAO(<isqlSALDO>, 'X', <iQUEBRA>, NULL, 'N', NULL, <CD_EMPRESA_SESSAO>) V
<iLeft>
<iCanhoto>
<iWhere>
ORDER BY NM_EMPRESA <iOrder>, NM_VENDEDOR, NM_PESSOA, CD_PESSOA, DT_EMISSAO, NR_NOTA
-- Controle auxiliar executado antes do relatorio:
INSERT INTO CAMPOSTEMPORARIOS (NR_CONEXAO, NM_CAMPO, CD_MODULO, VL_CAMPO, DT_REGISTRO)
VALUES (CURRENT_CONNECTION, '', 'RNF002', '', CURRENT_TIMESTAMP);