Pular para o conteúdo principal

TP_RARTEIOCC - Tipo de Rateio de Centro de Resultado

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Notas Fiscais → Parâmetros de Notas Label na tela: "Tipo de Rateio de Centro de Resultado" (Label48 em UMFA001.dfm:6263) Tabela: PARMFATUR.TP_RARTEIOCC (CHAR(1)) Valor padrão: I (Individual) — definido em UdmMFA001.pas:512

Observação sobre o nome: O nome do campo no banco contém um caractere invertido ("RARTEIO" ao invés de "RATEIO"). Este é o nome real na tabela PARMFATUR e é assim referenciado em todo o código-fonte. Trata-se de um "Rateio de Centro de Resultado" (rateio por Centro de Custo / Conta Contábil).

Telas impactadas​

MóduloCódigoDescriçãoComportamento
Parâmetros FaturamentoMFA001Configuração (cmb cmbTP_RARTEIOCC)Combo que define o tipo
Consulta Nota FiscalCNF001Consulta detalhada de NFAjusta layout do grid de Centro de Custo e visibilidade dos campos CD_ITEMCENTRORES/DS_ITEMCENTRORES
NF de Entrada (Simulação)MNF008Emissão/Simulação de NF de entradaUsa valor no SELECT de PARMFATUR; lógica de rateio agrupado/individual presente (atualmente comentada)
NF de EntradaMNF002Emissão de NF de entradaCarrega o valor junto com demais parâmetros de operação
NF LivreMNF007Emissão de NF livreAciona rotina de rateio de Centro de Resultado na confirmação
Conferência de Pedido / NFMNF017Processa rateio por item de nota (UdmMNF017.pas) e conferência de pedido (uMNF017ConfPedido.pas)Principal consumidora — quando = 'I' (individual), executa rateio item a item chamando RateioCR()
CT-eMNF013Emissão de Conhecimento de TransporteCarrega o parâmetro (iTP_RARTEIOCC) e executa rateio de Centro de Resultado
Cupom/NF (Legado)MNF010Emissão — trechos comentadosReferência comentada ao TP_RARTEIOCC (mantida por legado)
Movimentação CaixaMFC004Recebimento/pagamento no caixaLê TP_RARTEIOCC para itp_RateioCC (variável local — não aplica lógica ativa nas versões atuais)
ComissãoMCO006Cálculo de comissãoCarrega o parâmetro no SELECT amplo de PARMFATUR

Procedures impactadas​

  • Nenhuma stored procedure em Scripts/ faz referência direta a TP_RARTEIOCC (busca por "RARTEIOCC" no corpo das procedures: 0 matches). A lógica é 100% resolvida no lado Delphi.
  • O ponto central fica em source/jCentroResultado/UdmCentroResultado.pas:299-302 — a função RateioCR() sempre lê o valor diretamente de PARMFATUR no início da execução e alimenta a classe TCentroResultado.TipoRateio (jRateioCR.pas:22).

Campos envolvidos​

CampoDescrição
PARMFATUR.TP_RARTEIOCCCampo do parâmetro (CHAR(1), Size = 1 em UdmMFA001.dfm:1325-1328)
ITEMNOTA.ST_CENTROCUSTOFlag que indica se o item tem Centro de Custo
ITEMNOTA.CD_ITEMCENTRORES / DS_ITEMCENTRORESExibidos quando modo individual ativo (CNF001)
HISTORICO.CD_CONTACREDITO / CD_CONTADEBITOContas contábeis consultadas via VIEW_PLANOCONTAS no MNF017
MOVIMENTACAO.CD_HISTORICOOrigem do histórico contábil para o rateio

Opções disponíveis​

I - Individual​

O que fazDetalhe
Rateio por itemPara cada item da nota, abre um rateio de Centro de Resultado separado
GranularidadeFino — cada item pode ter centros de custo diferentes
Campos visíveis (CNF001)edtCD_ITEMCENTRORES e edtDS_ITEMCENTRORES ficam visíveis (UCNF001.pas:1408-1409 e 1556-1557)
Grid Centro de CustoLayout padrão (Top=52, Height=199 no CNF001 — bloco else em UCNF001.pas:1551-1553)
MNF017Executa bloco condicional if (ParmFatur.Values['TP_RARTEIOCC'] = 'I') then begin ... end em UdmMNF017.pas:1266 — busca VIEW_PLANOCONTAS para cada item e chama RateioCR() por item de nota (linhas 1266-1310)
jCentroResultadoTCentroResultado.TipoRateio recebe 'I'; se parâmetro externo iParametros[7] <> 'P', RateioCC.RateioIndividual = True e abre frmRateioIndividual (UdmCentroResultado.pas:475-487)
Valor padrãoSim — é o valor atribuído em AfterInsert do PARMFATUR (UdmMFA001.pas:512)

Simulação passo a passo​

  1. Em MFA001 → Parâmetros → Notas Fiscais → Parâmetros de Notas → "Tipo de Rateio de Centro de Resultado" = Individual
  2. Salve (F6)
  3. Em MNF002/MNF007/MNF017, emita uma NF com dois itens, ambos vinculados a Movimentação cuja Conta Crédito está parametrizada com ST_CENTROCUSTO = 'S'
  4. Ao confirmar a nota, o MNF017 entra no bloco da linha 1266 e, para cada item:
    • Executa SELECT P.CD_CONTA, P.ST_CENTROCUSTO, ... via VIEW_PLANOCONTAS
    • Se a conta crédito tem centro de custo ativo, chama RateioCR() abrindo o formulário frmRateioIndividual
  5. Operador distribui os percentuais por centro de resultado item a item
  6. Em CNF001 (consulta da NF), os campos CD_ITEMCENTRORES e DS_ITEMCENTRORES aparecem visíveis indicando qual o centro de resultado de cada item

Resultado esperado: Cada item da nota ganha seu próprio rateio de centro de resultado. Se a NF tem 5 itens com CC ativo, o usuário preenche 5 rateios (um por item).


A - Agrupado​

O que fazDetalhe
Rateio únicoUm único rateio para a nota inteira (soma dos valores)
GranularidadeGrosso — a nota toda é tratada como um valor só
Campos ocultos (CNF001)edtCD_ITEMCENTRORES e edtDS_ITEMCENTRORES ficam invisíveis (comparação em UCNF001.pas:1408-1409 retorna False quando = 'A')
Grid Centro de Custo (CNF001)Layout expandido: Top = 22, Height = 229 (UCNF001.pas:1403-1406 e 1547-1550) — aproveita o espaço dos campos ocultos
Grid consolida SQLNo relatório de saldos do CNF001 (UCNF001.pas:1956), o GROUP BY não inclui CD_ITEM quando modo = Agrupado (cláusula SeSenao(...= 'I', ' AND IC.CD_ITEM = ...', ''))
MNF017O bloco if (ParmFatur.Values['TP_RARTEIOCC'] = 'I') da linha 1266 é pulado; o rateio ocorre via outra rotina na conferência de pedido (uMNF017ConfPedido.pas:999)
jCentroResultadoSe iParametros[7] = 'P' força RateioAgrupado = True e abre frmRateioAgrupado (UdmCentroResultado.pas:469-472, 505-509)

Simulação passo a passo​

  1. Em MFA001 → Parâmetros → Notas Fiscais → Parâmetros de Notas → "Tipo de Rateio de Centro de Resultado" = Agrupado
  2. Salve (F6)
  3. Emita uma NF com os mesmos dois itens do cenário anterior
  4. Ao confirmar a nota, o MNF017 não entra no bloco item-a-item (linha 1266 é falsa)
  5. É aberto um único formulário de rateio (frmRateioAgrupado) com o valor TOTAL da nota
  6. Operador distribui o percentual para os centros de resultado uma única vez
  7. Em CNF001 (consulta da NF), o grid de Centro de Custo ocupa a área maior (Top=22, Height=229) e os campos de "Item de Centro de Resultado" somem — pois agora o rateio é da nota toda, não por item
  8. Relatórios de saldo por centro de custo agregam os valores sem discriminar item

Resultado esperado: A nota inteira gera um único rateio. Se a NF tem R$ 10.000,00 totais, o usuário distribui esses R$ 10.000,00 entre N centros de custo — sem se preocupar com cada item.


Tabela Comparativa Resumida​

OpçãoDescriçãoQuantidade de rateios por notaCampos CD_ITEMCENTRORES visíveis?Grid CC (CNF001)
IIndividual (por item)N (um por item com CC ativo)SimTop=52, Height=199
AAgrupado (por nota)1 (um total para a nota)NãoTop=22, Height=229

Referências no Código Fonte​

MFA001 (tela de configuração)​

  • source/MFA001/UMFA001.pas:398 — declaração do componente cmbTP_RARTEIOCC: TwwDBComboBox
  • source/MFA001/UMFA001.dfm:7112-7138 — TwwDBComboBox cmbTP_RARTEIOCC (DataField = 'TP_RARTEIOCC'; MapList = True; Style = csDropDownList; Items: 'Individual'#9'I', 'Agrupado'#9'A')
  • source/MFA001/UMFA001.dfm:6257-6270 — Label48 com Caption 'Tipo de Rateio de Centro de Resultado'
  • source/MFA001/UdmMFA001.pas:171 — declaração tabPARMFATURTP_RARTEIOCC: TStringField
  • source/MFA001/UdmMFA001.pas:512 — valor padrão 'I' em AfterInsert do tabPARMFATUR
  • source/MFA001/UdmMFA001.dfm:1325-1328 — definição do TStringField (Size = 1)
  • source/MFA001/UdmMFA001.dfm:179, 2395, 2558, 2781, 3059 — campo no SELECT/INSERT/UPDATE do dataset tabPARMFATUR

Módulos consumidores​

  • source/CNF001/UCNF001.pas:1403-1409, 1547-1557 — ajusta visibilidade/layout no iniciar e no evento de clique conforme 'I'/'A'
  • source/CNF001/UCNF001.pas:1956 — usa SeSenao(...= 'I', ' AND IC.CD_ITEM = ', '') no SQL do grid de saldos
  • source/MNF002/UdmMNF002.pas:10500 — incluso no SELECT principal de PARMFATUR
  • source/MNF007/UMNF007.pas:1629-1630 — comentário "Rateio de Centro de Resultado Individual e Agrupado" (bloco que invoca rateio do Centro de Resultado; teste condicional atualmente comentado)
  • source/MNF008/UdmMNF008.pas:765, 1203 — incluso no SELECT; teste if (dmMNF008.ParmFatur.Values['TP_RARTEIOCC'] = 'A') comentado (código legado)
  • source/MNF010/UMSGMNF010.pas:519-521 — bloco comentado com SELECT do parâmetro
  • source/MNF013/UdmMNF013.pas:539, 701, 727 — declaração iTP_RARTEIOCC, inclusão no SELECT e atribuição dmMNF013.iTP_RARTEIOCC := Resultado[19]
  • source/MNF013/UMNF013.pas:2362 — teste if dmMNF013.iTP_RARTEIOCC = 'A' (comentado, bloco de rateio mantido sem o teste)
  • source/MNF017/UdmMNF017.pas:1266-1310 — uso ativo: quando = 'I', busca VIEW_PLANOCONTAS e chama RateioCR() item a item
  • source/MNF017/uMNF017ConfPedido.pas:978, 999 — comentários referenciando o parâmetro na conferência de pedido (blocos mantidos sem teste)
  • source/MFC004/UMFC004.pas:291, 410-416 — declaração itp_RateioCC: String e carregamento via SELECT P.TP_CODFORNEC, TP_RARTEIOCC FROM PARMFATUR (variável atualmente não consumida)
  • source/MCO006/UdmMCO006.pas:2109 — incluso no SELECT amplo de PARMFATUR

Shared unit jCentroResultado (engine de rateio)​

  • source/jCentroResultado/UdmCentroResultado.pas:299-302 — SELECT direto: SELECT TP_RARTEIOCC FROM PARMFATUR WHERE CD_EMPRESA = ..., atribui a RateioCC.TipoRateio
  • source/jCentroResultado/UdmCentroResultado.pas:326 — usa RateioCC.TipoRateio no INSERT do movimento de rateio
  • source/jCentroResultado/UdmCentroResultado.pas:469-509 — fluxo que decide entre frmRateioIndividual e frmRateioAgrupado baseado em RateioIndividual / RateioAgrupado (regras combinadas com iParametros[7])
  • source/jCentroResultado/jRateioCR.pas:17-55 — classe TCentroResultado com property TipoRateio: String e método setTipoRateio

Scripts SQL​

  • Nenhuma procedure/view em D:/Desenvolvimento/JunsoftERP_V2/Scripts/ faz referência ao parâmetro. A lógica condicional do rateio é totalmente resolvida no lado cliente (Delphi).