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 emUdmMFA001.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
PARMFATURe é 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ódulo | Código | Descrição | Comportamento |
|---|---|---|---|
| Parâmetros Faturamento | MFA001 | Configuração (cmb cmbTP_RARTEIOCC) | Combo que define o tipo |
| Consulta Nota Fiscal | CNF001 | Consulta detalhada de NF | Ajusta layout do grid de Centro de Custo e visibilidade dos campos CD_ITEMCENTRORES/DS_ITEMCENTRORES |
| NF de Entrada (Simulação) | MNF008 | Emissão/Simulação de NF de entrada | Usa valor no SELECT de PARMFATUR; lógica de rateio agrupado/individual presente (atualmente comentada) |
| NF de Entrada | MNF002 | Emissão de NF de entrada | Carrega o valor junto com demais parâmetros de operação |
| NF Livre | MNF007 | Emissão de NF livre | Aciona rotina de rateio de Centro de Resultado na confirmação |
| Conferência de Pedido / NF | MNF017 | Processa 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-e | MNF013 | Emissão de Conhecimento de Transporte | Carrega o parâmetro (iTP_RARTEIOCC) e executa rateio de Centro de Resultado |
| Cupom/NF (Legado) | MNF010 | Emissão — trechos comentados | Referência comentada ao TP_RARTEIOCC (mantida por legado) |
| Movimentação Caixa | MFC004 | Recebimento/pagamento no caixa | Lê TP_RARTEIOCC para itp_RateioCC (variável local — não aplica lógica ativa nas versões atuais) |
| Comissão | MCO006 | Cálculo de comissão | Carrega o parâmetro no SELECT amplo de PARMFATUR |
Procedures impactadas
- Nenhuma stored procedure em
Scripts/faz referência direta aTP_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çãoRateioCR()sempre lê o valor diretamente dePARMFATURno início da execução e alimenta a classeTCentroResultado.TipoRateio(jRateioCR.pas:22).
Campos envolvidos
| Campo | Descrição |
|---|---|
PARMFATUR.TP_RARTEIOCC | Campo do parâmetro (CHAR(1), Size = 1 em UdmMFA001.dfm:1325-1328) |
ITEMNOTA.ST_CENTROCUSTO | Flag que indica se o item tem Centro de Custo |
ITEMNOTA.CD_ITEMCENTRORES / DS_ITEMCENTRORES | Exibidos quando modo individual ativo (CNF001) |
HISTORICO.CD_CONTACREDITO / CD_CONTADEBITO | Contas contábeis consultadas via VIEW_PLANOCONTAS no MNF017 |
MOVIMENTACAO.CD_HISTORICO | Origem do histórico contábil para o rateio |
Opções disponíveis
I - Individual
| O que faz | Detalhe |
|---|---|
| Rateio por item | Para cada item da nota, abre um rateio de Centro de Resultado separado |
| Granularidade | Fino — 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 Custo | Layout padrão (Top=52, Height=199 no CNF001 — bloco else em UCNF001.pas:1551-1553) |
| MNF017 | Executa 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) |
| jCentroResultado | TCentroResultado.TipoRateio recebe 'I'; se parâmetro externo iParametros[7] <> 'P', RateioCC.RateioIndividual = True e abre frmRateioIndividual (UdmCentroResultado.pas:475-487) |
| Valor padrão | Sim — é o valor atribuído em AfterInsert do PARMFATUR (UdmMFA001.pas:512) |
Simulação passo a passo
- Em MFA001 → Parâmetros → Notas Fiscais → Parâmetros de Notas → "Tipo de Rateio de Centro de Resultado" = Individual
- Salve (F6)
- 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' - Ao confirmar a nota, o MNF017 entra no bloco da linha 1266 e, para cada item:
- Executa
SELECT P.CD_CONTA, P.ST_CENTROCUSTO, ...viaVIEW_PLANOCONTAS - Se a conta crédito tem centro de custo ativo, chama
RateioCR()abrindo o formuláriofrmRateioIndividual
- Executa
- Operador distribui os percentuais por centro de resultado item a item
- Em CNF001 (consulta da NF), os campos
CD_ITEMCENTRORESeDS_ITEMCENTRORESaparecem 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 faz | Detalhe |
|---|---|
| Rateio único | Um único rateio para a nota inteira (soma dos valores) |
| Granularidade | Grosso — 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 SQL | No 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 = ...', '')) |
| MNF017 | O 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) |
| jCentroResultado | Se iParametros[7] = 'P' força RateioAgrupado = True e abre frmRateioAgrupado (UdmCentroResultado.pas:469-472, 505-509) |
Simulação passo a passo
- Em MFA001 → Parâmetros → Notas Fiscais → Parâmetros de Notas → "Tipo de Rateio de Centro de Resultado" = Agrupado
- Salve (F6)
- Emita uma NF com os mesmos dois itens do cenário anterior
- Ao confirmar a nota, o MNF017 não entra no bloco item-a-item (linha 1266 é falsa)
- É aberto um único formulário de rateio (
frmRateioAgrupado) com o valor TOTAL da nota - Operador distribui o percentual para os centros de resultado uma única vez
- 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 - 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ção | Descrição | Quantidade de rateios por nota | Campos CD_ITEMCENTRORES visíveis? | Grid CC (CNF001) |
|---|---|---|---|---|
| I | Individual (por item) | N (um por item com CC ativo) | Sim | Top=52, Height=199 |
| A | Agrupado (por nota) | 1 (um total para a nota) | Não | Top=22, Height=229 |
Referências no Código Fonte
MFA001 (tela de configuração)
source/MFA001/UMFA001.pas:398— declaração do componentecmbTP_RARTEIOCC: TwwDBComboBoxsource/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çãotabPARMFATURTP_RARTEIOCC: TStringFieldsource/MFA001/UdmMFA001.pas:512— valor padrão 'I' emAfterInsertdotabPARMFATURsource/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 datasettabPARMFATUR
Módulos consumidores
source/CNF001/UCNF001.pas:1403-1409, 1547-1557— ajusta visibilidade/layout noiniciare no evento de clique conforme 'I'/'A'source/CNF001/UCNF001.pas:1956— usaSeSenao(...= 'I', ' AND IC.CD_ITEM = ', '')no SQL do grid de saldossource/MNF002/UdmMNF002.pas:10500— incluso no SELECT principal dePARMFATURsource/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; testeif (dmMNF008.ParmFatur.Values['TP_RARTEIOCC'] = 'A')comentado (código legado)source/MNF010/UMSGMNF010.pas:519-521— bloco comentado com SELECT do parâmetrosource/MNF013/UdmMNF013.pas:539, 701, 727— declaraçãoiTP_RARTEIOCC, inclusão no SELECT e atribuiçãodmMNF013.iTP_RARTEIOCC := Resultado[19]source/MNF013/UMNF013.pas:2362— testeif dmMNF013.iTP_RARTEIOCC = 'A'(comentado, bloco de rateio mantido sem o teste)source/MNF017/UdmMNF017.pas:1266-1310— uso ativo: quando = 'I', buscaVIEW_PLANOCONTASe chamaRateioCR()item a itemsource/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çãoitp_RateioCC: Stringe carregamento viaSELECT 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 aRateioCC.TipoRateiosource/jCentroResultado/UdmCentroResultado.pas:326— usaRateioCC.TipoRateiono INSERT do movimento de rateiosource/jCentroResultado/UdmCentroResultado.pas:469-509— fluxo que decide entrefrmRateioIndividualefrmRateioAgrupadobaseado emRateioIndividual/RateioAgrupado(regras combinadas comiParametros[7])source/jCentroResultado/jRateioCR.pas:17-55— classeTCentroResultadocomproperty TipoRateio: Stringe métodosetTipoRateio
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).