Pular para o conteúdo principal

RFI003 — Registro de Entradas e Saidas

Fonte​

  • Form: source/RFI003/URFI003.pas
  • Form (design): source/RFI003/URFI003.dfm
  • DataModule: source/RFI003/UdmRFI003.pas
  • DataModule (design): source/RFI003/UdmRFI003.dfm
  • Package: source/RFI003/RFI003.dpk

Objetivo​

Gera o Livro Fiscal de Registro de Entradas ou de Saidas de notas fiscais, atendendo ao regime ICMS/IPI. Permite escolher entre 4 modelos de impressão (padrao legal, modelos customizados para recapadoras e variante Morecap), com opcoes de quebra mensal, demonstrativos por estado/municipio, lista de emitentes, termos de abertura e encerramento, paginacao controlada e filtros por serie/especie e CFO.

Modelos de Relatorio​

A tela expoe o combobox Modelo (valores internos M, O, P, 4) que seleciona o layout e a consulta base. O combobox Tipo Operacao (E=Entradas / S=Saidas) controla se o livro e de entrada ou de saida e influencia o RAF de impressao dos Modelos 2, 3 e 4.

Modelo 1: Padrao​

Quando usado: cmbMODELO.Value = 'M' (item "Modelo 1" do combobox). Gera o layout legal padrao para o Livro de Registro de Entradas/Saidas, com os demonstrativos opcionais (Estado, Municipio, Emitentes, Termos). RAF gerado como RFI003.raf via Relatorio.

SQL Base: selectable procedure VIEW_RFI003 (parametros abaixo) — retorna cabecalho, totais por nota e campos de ICMS/IPI agregados para o periodo.

SELECT X.CD_EMPRESA, X.NM_EMPRESA, X.NR_CNPJCPF, X.NR_INSCEST, X.NR_LIVRO,
X.NR_LANCAMENTO, X.DT_EMISSAO, X.CD_CFO, X.PC_ALIQICMS, X.PC_ALIQIPI,
X.TP_IMPOSTO, X.CD_VALORFISCAL, X.NR_NOTAFISCALORDER, X.DS_TPIMPOSTO,
X.CD_ICMS, X.CD_IPI, X.CD_MESQUEBRA, X.TP_NOTA, X.VL_TOTAL,
X.VL_NOTAFISCAL, X.VL_BASE, X.VL_IMPOSTO, X.VL_ISENTO, X.VL_OUTRAS,
X.VL_SUBSTRIB, X.NM_PESSOA, X.CD_SERIE, X.PC_IMPOSTO, X.ST_NOTA,
X.SG_ESTADO, CAST(X.NR_NOTAFISCAL AS INTEGER) NR_NOTAFISCAL,
CAST(X.NR_NOTAFISCAL || ' - ' || X.CD_SERIE AS VARCHAR(32)) NR_NOTASERIE,
X.VL_BASEICMS, X.VL_IMPOSTOICMS, X.VL_ISENTOICMS, X.VL_OUTRASICMS,
X.VL_OUTRASIPI, X.VL_BASEIPI, X.VL_IMPOSTOIPI, X.VL_ISENTOIPI,
X.NR_CNPJCPFNF, X.NR_INSCESTNF, X.DS_OBSERVACAO, X.CD_ESPECIE,
X.DT_SAIDANF, X.CD_MOVIMENTACAO, X.DT_DIAEMISSAO,
X.VL_BASEICMS1, X.VL_BASEICMS2, X.VL_BASEICMS3,
X.VL_BASEIPI1, X.VL_BASEIPI2, X.VL_BASEIPI3,
X.VL_TOTBASEICMS1, X.VL_TOTBASEICMS2, X.VL_TOTBASEICMS3,
X.VL_TOTBASEIPI1, X.VL_TOTBASEIPI2, X.VL_TOTBASEIPI3,
X.NR_NOTAFISCAL1, X.VL_OPERACAOIPI, X.VL_OPERACAOICMS,
X.DT_EMISSAOORDER, X.VL_BASESUBST, X.NM_PESSOAEST, X.DT_PERIODO,
:DT_PERIODOEXTENSO DT_PERIODOEXTENSO, X.VL_TOTALSUM, X.VL_CONTABIL
FROM VIEW_RFI003(:CD_EMPRESA, :DT_INICIAL, :DT_FINAL, :TP_LIVRO,
:ISQL_SALDO, :ISQL_IMPOSTO, :ISQL_CUPOM,
:ST_QUEBRAMES, :ST_INUTILIZADAS, :TP_MODELO) X
ORDER BY CD_MESQUEBRA, DT_EMISSAO, NR_NOTAFISCAL, NR_LANCAMENTO,
CD_CFO, TP_IMPOSTO, PC_IMPOSTO, VL_BASE

Modelo 2: Recapagem Lider​

Quando usado: cmbMODELO.Value = 'O' (item "Modelo 2" do combobox). Layout customizado para a recapadora Lider. Para Entradas gera o RAF RFI003_1 (via Relatorio2), para Saidas gera RFI003_2 (via Relatorio3). Na montagem do ORDER BY adiciona CASE WHEN X.NR_NOTAFISCAL IS NULL THEN 1 ELSE 0 END para empurrar NFs nulas ao final. Desabilita automaticamente o grupo Opcoes (sem quebra mensal, sem demonstrativos, sem termos).

SQL Base: mesma VIEW_RFI003 do Modelo 1, com ORDER BY ligeiramente diferente.

SELECT X.CD_EMPRESA, X.NM_EMPRESA, ... /* mesmas colunas do Modelo 1 */
FROM VIEW_RFI003(:CD_EMPRESA, :DT_INICIAL, :DT_FINAL, :TP_LIVRO,
:ISQL_SALDO, :ISQL_IMPOSTO, :ISQL_CUPOM,
:ST_QUEBRAMES, :ST_INUTILIZADAS, :TP_MODELO) X
ORDER BY DT_EMISSAOORDER, NR_NOTAFISCALORDER,
CASE DS_TPIMPOSTO WHEN 'ICMS' THEN 1 WHEN 'ST' THEN 2
WHEN 'IPI' THEN 3 END,
CASE WHEN X.NR_NOTAFISCAL IS NULL THEN 1 ELSE 0 END,
X.ORDENACAO, X.NR_LANCAMENTO DESC, X.CD_MESQUEBRA,
X.NR_NOTAFISCAL DESC, X.NR_LANCAMENTO, X.CD_CFO,
X.TP_IMPOSTO, X.PC_IMPOSTO, X.VL_BASE

Modelo 3: Recapadora (VIEW_RFI003_V2)​

Quando usado: cmbMODELO.Value = 'P' (item "Modelo 3" do combobox). Usa a view V2 (VIEW_RFI003_V2) para atender regras especificas de recapadora (tratamento de IPI zerado em entradas: quando TP_NOTA='E' a procedure e chamada com tpLivro='P' em vez de 'E'). Entradas renderiza o RAF RFI003_3, Saidas renderiza RFI003_4.

SQL Base (Entradas):

SELECT V.CD_EMPRESA, V.NM_EMPRESA, V.NR_CNPJCPF, V.NR_INSCEST,
V.TP_NOTA, V.TP_IMPOSTO, V.NR_NOTAFISCAL, V.NR_LANCAMENTO,
V.DT_EMISSAO, V.DT_SAIDANF, V.CD_ESPECIE, V.CD_SERIE,
V.NR_CNPJCPFNF, V.NM_PESSOA, V.SG_ESTADO, V.VL_CONTABIL,
V.CD_CFO, V.CD_VALORFISCAL, V.DT_DIAEMISSAO,
V.VL_BASE, V.PC_IMPOSTO, V.VL_OUTRAS, V.VL_ISENTO,
IIF(V.TP_IMPOSTO = 'P', V.VL_IMPOSTO, 0) VL_IPI,
IIF(V.TP_IMPOSTO = 'I', V.VL_IMPOSTO, 0) VL_ICMS,
V.VL_IMPOSTO, V.CD_MOVIMENTACAO, V.DT_DIAEMISSAONF,
V.DS_TPIMPOSTO, COALESCE(V.DS_OBSERVACAO, '') DS_OBSERVACAO,
V.VL_BASEICMS, V.VL_IMPOSTOICMS, V.VL_ISENTOICMS, V.VL_OUTRASICMS,
V.VL_BASEIPI, V.VL_IMPOSTOIPI, V.VL_ISENTOIPI, V.VL_OUTRASIPI,
V.VL_ICMS_1, V.VL_ICMS_2, V.VL_ICMS_3,
V.VL_IPI_1, V.VL_IPI_2, V.VL_IPI_3
FROM VIEW_RFI003_V2(:CD_EMPRESA, :ISQL_SALDO, :ISQL_IMPOSTO,
:ISQL_CUPOM, 'P') V
ORDER BY V.ORDENACAO, V.NR_LANCAMENTO DESC, V.CD_MESQUEBRA,
V.NR_NOTAFISCAL DESC, V.NR_LANCAMENTO, V.CD_CFO,
V.TP_IMPOSTO, V.PC_IMPOSTO, V.VL_BASE

Modelo 4: Morecap (com Resumos CFOP e UF)​

Quando usado: cmbMODELO.Value = '4' (item "Modelo 4" do combobox). Variante para a Morecap — sempre com quebra mensal (forca DT_PERIODO, DT_EMISSAO, NR_NOTAFISCALORDER no ORDER BY). Gera tres datasets encadeados via TListSQLGeraRelatorio: detalhe do livro + resumo por grupo CFOP + resumo por Unidade de Federacao (contribuinte/nao contribuinte quando saida). Entradas renderiza o RAF RFI003_4E, Saidas renderiza RFI003_4S. Desabilita o grupo Opcoes.

SQL Base do detalhe: mesma VIEW_RFI003 do Modelo 1 (TP_MODELO interno e 4E ou 4S conforme tipo).

SQL Base do resumo CFOP (dataset secundario):

SELECT CASE
WHEN V.CD_CFO BETWEEN 1000 AND 1999 THEN '1000 - Entradas ou Aquisicoes de Serviços do Estado'
WHEN V.CD_CFO BETWEEN 2000 AND 2999 THEN '2000 - Entradas ou Aquisicoes de Serviços de outros Estados'
WHEN V.CD_CFO BETWEEN 3000 AND 3999 THEN '3000 - Entradas ou Aquisicoes de Serviços do Exterior'
WHEN V.CD_CFO BETWEEN 5000 AND 5999 THEN '5000 - Saidas ou Prestacoes de Serviços para o Estado'
WHEN V.CD_CFO BETWEEN 6000 AND 6999 THEN '6000 - Saidas ou Prestacoes de Serviços para outros Estados'
WHEN V.CD_CFO BETWEEN 7000 AND 7999 THEN '7000 - Saidas ou Prestacoes de Serviços para o Exterior'
END DS_GRUPOCFOP,
V.CD_CFO,
SUM(V.VL_TOTAL) VL_TOTAL, SUM(V.VL_BASEICMS) VL_BASEICMS,
SUM(V.VL_BASEICMS1) VL_BASEICMS1, SUM(V.VL_IMPOSTOICMS) VL_IMPOSTOICMS,
SUM(V.VL_ISENTOICMS) VL_ISENTOICMS, SUM(V.VL_OUTRASICMS) VL_OUTRASICMS,
SUM(COALESCE(V.VL_OUTRASICMS, 0) + COALESCE(V.VL_OUTRASIPI, 0)) VL_SUM_OUTRAS,
SUM(V.VL_SUBSTRIB) VL_SUBSTRIB, SUM(V.VL_BASESUBST) VL_BASESUBST,
SUM(V.VL_CONTABIL) VL_CONTABIL
FROM VIEW_RFI003(:CD_EMPRESA, :DT_INICIAL, :DT_FINAL, :TP_LIVRO,
:ISQL_SALDO, :ISQL_IMPOSTO, :ISQL_CUPOM,
:ST_QUEBRAMES, :ST_INUTILIZADAS, :TP_MODELO) V
WHERE PRIMEIRODIAMES(V.DT_PERIODO) = PRIMEIRODIAMES(:DT_PERIODO)
GROUP BY DS_GRUPOCFOP, V.CD_CFO

SQL Base do resumo UF (dataset secundario):

SELECT CASE /* apenas para Saidas; em Entradas e literal unico */
WHEN V.NR_INSCEST IS NOT NULL THEN 'Totais por Unidade de Federacao - Contribuinte'
WHEN V.NR_INSCEST IS NULL THEN 'Totais por Unidade de Federacao - Nao Contribuinte'
END DS_GRUPOCONTR,
V.SG_ESTADO,
SUM(V.VL_TOTAL) VL_TOTAL, SUM(V.VL_BASEICMS) VL_BASEICMS,
SUM(V.VL_BASEICMS1) VL_BASEICMS1, SUM(V.VL_IMPOSTOICMS) VL_IMPOSTOICMS,
SUM(V.VL_ISENTOICMS) VL_ISENTOICMS, SUM(V.VL_OUTRASICMS) VL_OUTRASICMS,
SUM(COALESCE(V.VL_OUTRASICMS, 0) + COALESCE(V.VL_OUTRASIPI, 0)) VL_SUM_OUTRAS,
SUM(V.VL_SUBSTRIB) VL_SUBSTRIB, SUM(V.VL_CONTABIL) VL_CONTABIL
FROM VIEW_RFI003(:CD_EMPRESA, :DT_INICIAL, :DT_FINAL, :TP_LIVRO,
:ISQL_SALDO, :ISQL_IMPOSTO, :ISQL_CUPOM,
:ST_QUEBRAMES, :ST_INUTILIZADAS, :TP_MODELO) V
WHERE PRIMEIRODIAMES(V.DT_PERIODO) = PRIMEIRODIAMES(:DT_PERIODO)
GROUP BY DS_GRUPOCONTR, V.SG_ESTADO

Demonstrativos e Termos (sub-relatorios — Modelo 1)​

Quando marcadas as opcoes de Emitir Demonstrativo por Estado, Emitir Lista de Codigos Emitentes, Emitir Demonstrativo por Municipio e Emitir Termo de Abertura/Encerramento, os seguintes SQL auxiliares sao montados (todos partem do mesmo VIEW_LIVROFISCAL(isqlSALDO, isqlIMPOSTO, isqlCUPOM)):

  • Demonstrativo por Estado: montado em ppGroupFooterBand1BeforePrint com quebra por mes via extract(month from V.DT_EMISSAO) e JOIN em ESTADO (usa VIEW_LIVROFISCAL).
  • Lista de Emitentes: SELECT DISTINCT E.CD_EMPRESA, E.NM_EMPRESA, PE.NR_CNPJCPF, EE.NR_INSCEST, V.NM_PESSOA, V.SG_ESTADO, V.NR_CNPJCPF, V.NR_INSCEST FROM VIEW_LIVROFISCAL(...) V INNER JOIN EMPRESA E ON (V.CD_EMPRESA = E.CD_EMPRESA) INNER JOIN PESSOA PE ON (E.CD_PESSOA = PE.CD_PESSOA) INNER JOIN ENDERECOPESSOA EE ON primeiro endereco da pessoa.
  • Demonstrativo por Municipio: SELECT V.DS_MUNICIPIO||'-'||V.SG_ESTADO, V.NR_CNPJCPF, V.NR_INSCEST, SUM(VL_TOTAL/BASE/IMPOSTO/ISENTO/OUTRAS/SUBSTRIB) FROM VIEW_LIVROFISCAL(...) V GROUP BY V.DS_MUNICIPIO, V.SG_ESTADO, V.NR_CNPJCPF, V.NR_INSCEST.
  • Termos de Abertura/Encerramento: SELECT FIRST 1 E.NM_EMPRESA, EP.DS_ENDERECO, M.DS_MUNICIPIO, M.SG_ESTADO, EP.NR_CEP, E.NR_REGISTROJUNTA, E.DT_REGISTROJUNTA, EP.NR_INSCEST, P.NR_CNPJCPF, E.NR_INSCMUNICIPAL, PS.NM_PESSOA (socio responsavel), T.DS_TIPOSOCIO, PC.NM_PESSOA (contador), C.NR_CRCCONTADOR FROM EMPRESA E JOIN PESSOA P JOIN ENDERECOPESSOA EP JOIN MUNICIPIO M LEFT JOIN SOCIO S (ST_RESPONSAVEL='S') JOIN PESSOA PS JOIN TIPOSOCIO T LEFT JOIN CONTADOR C JOIN PESSOA PC.

Filtros​

Campos simples:

  • Empresa (Lista de Empresas cadastradas) F9 — default: empresa da sessao; lookup EMPRESAUSUARIO.
  • Periodo De / Ate — default vindo de PARMCONTABIL.DT_BLOQINICIAL/DT_BLOQFINAL da empresa; valida que final >= inicial; se final vazio, ajusta para ultimo dia do mes do inicial.
  • Tipo Operacao (Entradas / Saidas) — default "Entradas"; mudanca recarrega NR_LIVRO a partir de LIVRO (NR_ENTRADA ou NR_SAIDA do ano da data final).
  • Modelo (Modelo 1 / Modelo 2 / Modelo 3 / Modelo 4) — default "Modelo 1"; selecionar 2/3/4 oculta o grupo Opcoes.
  • Pagina Inicial — numero da pagina em que o livro inicia (para paginacao continua entre meses).
  • N Paginas do Livro — se informado, fixa o numero total de paginas; se vazio usa Relatório.PageCount.
  • Livro N — campo somente-leitura preenchido automaticamente via consulta a LIVRO apos informar o periodo.

Opcoes (grupo exibido apenas no Modelo 1):

  • Mostrar Serviços do Cupom Fiscal — quando desmarcado filtra N.TP_TRIBUTACAO <> 'ISS'.
  • Quebrar relatorio para cada Mes — default marcado; aciona demonstrativos por mes.
  • Emitir Lista de Codigos Emitentes — exibe sub-relatorio RelEmitente ao final.
  • Emitir Demonstrativo por Estado — default marcado; ativa sub-relatorio RelResumo (agrupado por SG_ESTADO via VIEW_LIVROFISCAL).
  • Demonstrativo em Nova Pagina — so vale quando Demonstrativo por Estado esta marcado; forca page break (NovoResumo.Visible).
  • Emitir Termo de Abertura — ativa sub-relatorio TermoA na primeira pagina (imprime conteudo legal com socio responsavel e contador).
  • Emitir Termo de Encerramento — ativa sub-relatorio TermoF na ultima pagina.
  • Emitir Demonstrativo por Municipio — exibe sub-relatorio RelMunicipio.
  • Mostrar NF-e Inutilizadas — passa ST_INUTILIZADAS='S' para VIEW_RFI003.

Filtros de grid (multi-selecao via F9):

  • Filtros por Serie (Lista de Serie/Especie) F9 — grid gridSERIE com colunas Serie e Especie; lookup SERIEESPECIE; aplica IN (cd_serie, ...) em N.CD_SERIE. Valida via MODELONF que a serie gera fiscal (ST_FISCAL <> 'N').
  • CFOP (Lista de CFOP) F9 — grid gridCFO com colunas CFO e Descricao; lookup CFOP; aplica IN (cd_cfo, ...) em IT.CD_CFO. Checkbox Excecao inverte para NOT IN.

Botao adicional:

  • Atualizar — abre a tela TFI013 (Atualizacao do Livro Fiscal) passando Módulo='RFI003' para recalcular lancamentos antes da emissao.

Parametros que Influenciam​

TabelaCampoEfeito
PARMCONTABILDT_BLOQINICIALPreenche o filtro "Periodo De" como default ao abrir a tela.
PARMCONTABILDT_BLOQFINALPreenche o filtro "Periodo Ate" como default ao abrir a tela.
PARMSISTEMADS_RODAPETexto impresso no rodape dos 4 modelos (eventos edtDS_RODAPEPrint, edtDS_RODAPE1Print, edtDS_RODAPE2Print, edtDS_RODAPE3Print, edtDS_RODAPE4Print).

Perguntas Frequentes​

P: Ao tentar emitir o relatório, o sistema apresenta a mensagem "É Obrigatório Informar a Empresa para Emitir o Relatório!". Como devo proceder? R: O campo "Empresa" é obrigatório para a emissão do livro de registro. Informe o código da empresa ou utilize a tecla F9 para selecionar a empresa na lista disponível.

P: O sistema apresenta a mensagem "É Obrigatório Informar a Data Inicial para Emitir o Relatório!". O que fazer? R: O campo "Período De" (data inicial) é obrigatório. Preencha a data inicial do período que deseja consultar.

P: Recebi a mensagem "É Obrigatório Informar a Data Final para Emitir o Relatório!". Como resolver? R: O campo "Até" (data final) é obrigatório. Preencha a data final do período que deseja consultar.

P: O sistema exibe "A Data Final não pode ser Menor que a Data Inicial!". O que significa? R: A data informada no campo "Até" é anterior à data informada no campo "Período De". Ajuste as datas para que a data final seja igual ou posterior à data inicial.

P: O sistema apresenta a mensagem "A Empresa não está Cadastrada [ADM002]!". O que devo fazer? R: O código de empresa informado não foi localizado no cadastro de empresas. Verifique se o código está correto ou acesse a tela Cadastro de Empresas (ADM002) para consultar os códigos disponíveis.

P: Recebi a mensagem "Série não cadastrada, Verifique [TFI007]!". O que isso significa? R: A série da nota fiscal referenciada não está cadastrada no sistema. Acesse a tela Cadastro de Séries (TFI007) e verifique se a série está devidamente cadastrada.

P: O sistema exibe "Série X Não Gera Fiscal, Verifique [TFI007]". O que devo fazer? R: A série da nota fiscal está cadastrada, porém está configurada para não gerar informações fiscais. Acesse a tela Cadastro de Séries (TFI007) e verifique a configuração da série para geração fiscal.

P: Recebi a mensagem "CFOP não está cadastrado! Verifique [TFI002]!". O que significa? R: O Código Fiscal de Operações e Prestações (CFOP) utilizado em uma nota fiscal não está cadastrado no sistema. Acesse a tela Cadastro de CFOP (TFI002) e realize o cadastro do CFOP necessário.

P: O sistema exibe a mensagem referente ao código W-1637: "O Usuário não possui acesso a tela Controle Numeração de Livros! [TFI013]". O que devo fazer? R: O usuário logado não possui permissão para acessar a tela de Controle de Numeração de Livros. Solicite ao administrador do sistema que conceda o acesso necessário na tela Controle de Numeração de Livros (TFI013).

P: Para que serve a tela RFI003? R: A tela RFI003 é utilizada para emitir o Livro de Registro de Entradas e Saídas, um relatório fiscal obrigatório. Permite filtrar por tipo de operação, período, empresa, número do livro, número de páginas e modelo do livro. Também oferece a opção de mostrar serviços do cupom fiscal.

Tabelas de Escrita (INSERT/UPDATE/DELETE)​

TabelaOperacoes
EMPRESADELETE, UPDATE

Nota: as operacoes de escrita em EMPRESA detectadas pelo mapper vem de SQL gerados em design-time no daDataModule1 (ReportBuilder) — nao ha INSERT/UPDATE real em tempo de execucao. Esta tela e consumidora para todos os fins praticos de fluxo fiscal.

Tabelas de Leitura (SELECT)​

TabelaOperacoes
LIVROSELECT
EMPRESASELECT
PARMSISTEMASELECT
MODELONFSELECT
CFOSELECT
ESTADOSELECT
PARMCONTABILSELECT
ENDERECOPESSOASELECT
PESSOASELECT
MUNICIPIOSELECT
SOCIOSELECT
TIPOSOCIOSELECT
CONTADORSELECT
PARMNOTASELECT

Procedures Chamadas​

ProcedureTabelas Acessadas
RETORNA_DATACABECALHO(formata descricao textual do periodo)
VIEW_LIVROFISCALNOTA, ITEMNOTA, IMPOSTO, EMPRESA, PESSOA, ENDERECOPESSOA, MUNICIPIO, CFO, ESTADO, MODELONF, CUPOMFISCAL, PARMFISCAL, PARMCUPOM (SELECT)
VIEW_RAZAOCONTABILMOVTOCONTABIL, HISTORICOCONTABIL, NOTACTB, ITEMNOTACTB, IMPOSTONOTACTB, IMPOSTONOTACTBDIA, CONTASPESSOA, PARMNOTACTB (SELECT)
VIEW_RFI003NOTA, ITEMNOTA, IMPOSTO, CUPOMFISCAL, ITEM, MOVIMENTACAO, EMPRESA, PESSOA, ENDERECOPESSOA, CFO, MODELONF, INUTNFE, PARMFISCAL, PARMCUPOM (SELECT)
VIEW_RFI003_V2NOTA, ITEMNOTA, IMPOSTO, ITEM, MOVIMENTACAO, EMPRESA, PESSOA, CFO, MODELONF, PARMFISCAL (SELECT)

Tabelas via Procedures (acesso indireto)​

TabelaOperacoes
CFOSELECT
CONTASPESSOASELECT
CUPOMFISCALSELECT
EMPRESASELECT
ENDERECOPESSOASELECT
ESTADOSELECT
HISTORICOCONTABILSELECT
IMPOSTOSELECT
IMPOSTONOTACTBSELECT
IMPOSTONOTACTBDIASELECT
INUTNFESELECT
ITEMSELECT
ITEMNOTASELECT
ITEMNOTACTBSELECT
LIVROSELECT
MODELONFSELECT
MOVIMENTACAOSELECT
MOVTOCONTABILSELECT
MUNICIPIOSELECT
NOTASELECT
NOTACTBSELECT
PARMCUPOMSELECT
PARMFISCALSELECT
PARMNOTACTBSELECT
PESSOASELECT

Dependencias Aferentes (quem alimenta esta tela)​

Telas que escrevem em tabelas lidas por RFI003. Principais produtoras de dados fiscais/cadastrais consumidos aqui:

TelaTítuloTabelas em Comum
MNF001Manutencao de Nota Fiscal de EntradaNOTA, ITEMNOTA, IMPOSTO (via VIEW_RFI003/VIEW_LIVROFISCAL)
MNF002Manutencao de Nota Fiscal de SaidaNOTA, ITEMNOTA, IMPOSTO (via VIEW_RFI003/VIEW_LIVROFISCAL)
TFI013Atualizacao do Livro FiscalNOTA, ITEMNOTA, LIVRO, NR_LANCAMENTO
ADM002Cadastro de EmpresasEMPRESA, ENDERECOPESSOA, PESSOA
TPO002Cadastro de PessoasPESSOA, ENDERECOPESSOA
TFI002Cadastro de CFOPCFO
TFI007Cadastro de Serie e Especie (Modelo NF)MODELONF
MCB001Parametros ContábeisPARMCONTABIL
MFA002Parametros de Nota FiscalPARMNOTA
FER003Parametros do SistemaPARMSISTEMA
ADM005Cadastro de Socios / ResponsaveisSOCIO, TIPOSOCIO
ADM006Cadastro de ContadorCONTADOR

Dependencias Eferentes (quem consome dados desta tela)​

RFI003 e essencialmente um relatorio (consumidor). A unica tabela marcada como escrita (EMPRESA) vem de SQL do engine ReportBuilder em design-time, sem efeito pratico em runtime — portanto nao ha consumo downstream significativo gerado por esta tela.

Modelos de Relatório​

A tela expoe o combobox Modelo (valores internos M, O, P, 4) que seleciona o layout e a consulta base. O combobox Tipo Operacao (E=Entradas / S=Saidas) controla se o livro e de entrada ou de saida e influencia o RAF de impressão dos Modelos 2, 3 e 4.

Modelo 1: Padrao​

Quando usado: cmbMODELO.Value = 'M' (item "Modelo 1" do combobox). Gera o layout legal padrao para o Livro de Registro de Entradas/Saidas, com os demonstrativos opcionais (Estado, Municipio, Emitentes, Termos). RAF gerado como RFI003.raf via Relatório.

SQL Base: selectable procedure VIEW_RFI003 (parametros abaixo) — retorna cabecalho, totais por nota e campos de ICMS/IPI agregados para o periodo.

SELECT X.CD_EMPRESA, X.NM_EMPRESA, X.NR_CNPJCPF, X.NR_INSCEST, X.NR_LIVRO,
X.NR_LANCAMENTO, X.DT_EMISSAO, X.CD_CFO, X.PC_ALIQICMS, X.PC_ALIQIPI,
X.TP_IMPOSTO, X.CD_VALORFISCAL, X.NR_NOTAFISCALORDER, X.DS_TPIMPOSTO,
X.CD_ICMS, X.CD_IPI, X.CD_MESQUEBRA, X.TP_NOTA, X.VL_TOTAL,
X.VL_NOTAFISCAL, X.VL_BASE, X.VL_IMPOSTO, X.VL_ISENTO, X.VL_OUTRAS,
X.VL_SUBSTRIB, X.NM_PESSOA, X.CD_SERIE, X.PC_IMPOSTO, X.ST_NOTA,
X.SG_ESTADO, CAST(X.NR_NOTAFISCAL AS INTEGER) NR_NOTAFISCAL,
CAST(X.NR_NOTAFISCAL || ' - ' || X.CD_SERIE AS VARCHAR(32)) NR_NOTASERIE,
X.VL_BASEICMS, X.VL_IMPOSTOICMS, X.VL_ISENTOICMS, X.VL_OUTRASICMS,
X.VL_OUTRASIPI, X.VL_BASEIPI, X.VL_IMPOSTOIPI, X.VL_ISENTOIPI,
X.NR_CNPJCPFNF, X.NR_INSCESTNF, X.DS_OBSERVACAO, X.CD_ESPECIE,
X.DT_SAIDANF, X.CD_MOVIMENTACAO, X.DT_DIAEMISSAO,
X.VL_BASEICMS1, X.VL_BASEICMS2, X.VL_BASEICMS3,
X.VL_BASEIPI1, X.VL_BASEIPI2, X.VL_BASEIPI3,
X.VL_TOTBASEICMS1, X.VL_TOTBASEICMS2, X.VL_TOTBASEICMS3,
X.VL_TOTBASEIPI1, X.VL_TOTBASEIPI2, X.VL_TOTBASEIPI3,
X.NR_NOTAFISCAL1, X.VL_OPERACAOIPI, X.VL_OPERACAOICMS,
X.DT_EMISSAOORDER, X.VL_BASESUBST, X.NM_PESSOAEST, X.DT_PERIODO,
:DT_PERIODOEXTENSO DT_PERIODOEXTENSO, X.VL_TOTALSUM, X.VL_CONTABIL
FROM VIEW_RFI003(:CD_EMPRESA, :DT_INICIAL, :DT_FINAL, :TP_LIVRO,
:ISQL_SALDO, :ISQL_IMPOSTO, :ISQL_CUPOM,
:ST_QUEBRAMES, :ST_INUTILIZADAS, :TP_MODELO) X
ORDER BY CD_MESQUEBRA, DT_EMISSAO, NR_NOTAFISCAL, NR_LANCAMENTO,
CD_CFO, TP_IMPOSTO, PC_IMPOSTO, VL_BASE

Modelo 2: Recapagem Lider​

Quando usado: cmbMODELO.Value = 'O' (item "Modelo 2" do combobox). Layout customizado para a recapadora Lider. Para Entradas gera o RAF RFI003_1 (via Relatorio2), para Saidas gera RFI003_2 (via Relatorio3). Na montagem do ORDER BY adiciona CASE WHEN X.NR_NOTAFISCAL IS NULL THEN 1 ELSE 0 END para empurrar NFs nulas ao final. Desabilita automaticamente o grupo Opcoes (sem quebra mensal, sem demonstrativos, sem termos).

SQL Base: mesma VIEW_RFI003 do Modelo 1, com ORDER BY ligeiramente diferente.

SELECT X.CD_EMPRESA, X.NM_EMPRESA, ... /* mesmas colunas do Modelo 1 */
FROM VIEW_RFI003(:CD_EMPRESA, :DT_INICIAL, :DT_FINAL, :TP_LIVRO,
:ISQL_SALDO, :ISQL_IMPOSTO, :ISQL_CUPOM,
:ST_QUEBRAMES, :ST_INUTILIZADAS, :TP_MODELO) X
ORDER BY DT_EMISSAOORDER, NR_NOTAFISCALORDER,
CASE DS_TPIMPOSTO WHEN 'ICMS' THEN 1 WHEN 'ST' THEN 2
WHEN 'IPI' THEN 3 END,
CASE WHEN X.NR_NOTAFISCAL IS NULL THEN 1 ELSE 0 END,
X.ORDENACAO, X.NR_LANCAMENTO DESC, X.CD_MESQUEBRA,
X.NR_NOTAFISCAL DESC, X.NR_LANCAMENTO, X.CD_CFO,
X.TP_IMPOSTO, X.PC_IMPOSTO, X.VL_BASE

Modelo 3: Recapadora (VIEW_RFI003_V2)​

Quando usado: cmbMODELO.Value = 'P' (item "Modelo 3" do combobox). Usa a view V2 (VIEW_RFI003_V2) para atender regras especificas de recapadora (tratamento de IPI zerado em entradas: quando TP_NOTA='E' a procedure e chamada com tpLivro='P' em vez de 'E'). Entradas renderiza o RAF RFI003_3, Saidas renderiza RFI003_4.

SQL Base (Entradas):

SELECT V.CD_EMPRESA, V.NM_EMPRESA, V.NR_CNPJCPF, V.NR_INSCEST,
V.TP_NOTA, V.TP_IMPOSTO, V.NR_NOTAFISCAL, V.NR_LANCAMENTO,
V.DT_EMISSAO, V.DT_SAIDANF, V.CD_ESPECIE, V.CD_SERIE,
V.NR_CNPJCPFNF, V.NM_PESSOA, V.SG_ESTADO, V.VL_CONTABIL,
V.CD_CFO, V.CD_VALORFISCAL, V.DT_DIAEMISSAO,
V.VL_BASE, V.PC_IMPOSTO, V.VL_OUTRAS, V.VL_ISENTO,
IIF(V.TP_IMPOSTO = 'P', V.VL_IMPOSTO, 0) VL_IPI,
IIF(V.TP_IMPOSTO = 'I', V.VL_IMPOSTO, 0) VL_ICMS,
V.VL_IMPOSTO, V.CD_MOVIMENTACAO, V.DT_DIAEMISSAONF,
V.DS_TPIMPOSTO, COALESCE(V.DS_OBSERVACAO, '') DS_OBSERVACAO,
V.VL_BASEICMS, V.VL_IMPOSTOICMS, V.VL_ISENTOICMS, V.VL_OUTRASICMS,
V.VL_BASEIPI, V.VL_IMPOSTOIPI, V.VL_ISENTOIPI, V.VL_OUTRASIPI,
V.VL_ICMS_1, V.VL_ICMS_2, V.VL_ICMS_3,
V.VL_IPI_1, V.VL_IPI_2, V.VL_IPI_3
FROM VIEW_RFI003_V2(:CD_EMPRESA, :ISQL_SALDO, :ISQL_IMPOSTO,
:ISQL_CUPOM, 'P') V
ORDER BY V.ORDENACAO, V.NR_LANCAMENTO DESC, V.CD_MESQUEBRA,
V.NR_NOTAFISCAL DESC, V.NR_LANCAMENTO, V.CD_CFO,
V.TP_IMPOSTO, V.PC_IMPOSTO, V.VL_BASE

Modelo 4: Morecap (com Resumos CFOP e UF)​

Quando usado: cmbMODELO.Value = '4' (item "Modelo 4" do combobox). Variante para a Morecap — sempre com quebra mensal (forca DT_PERIODO, DT_EMISSAO, NR_NOTAFISCALORDER no ORDER BY). Gera tres datasets encadeados via TListSQLGeraRelatorio: detalhe do livro + resumo por grupo CFOP + resumo por Unidade de Federacao (contribuinte/nao contribuinte quando saida). Entradas renderiza o RAF RFI003_4E, Saidas renderiza RFI003_4S. Desabilita o grupo Opcoes.

SQL Base do detalhe: mesma VIEW_RFI003 do Modelo 1 (TP_MODELO interno e 4E ou 4S conforme tipo).

SQL Base do resumo CFOP (dataset secundario):

SELECT CASE
WHEN V.CD_CFO BETWEEN 1000 AND 1999 THEN '1000 - Entradas ou Aquisicoes de Serviços do Estado'
WHEN V.CD_CFO BETWEEN 2000 AND 2999 THEN '2000 - Entradas ou Aquisicoes de Serviços de outros Estados'
WHEN V.CD_CFO BETWEEN 3000 AND 3999 THEN '3000 - Entradas ou Aquisicoes de Serviços do Exterior'
WHEN V.CD_CFO BETWEEN 5000 AND 5999 THEN '5000 - Saidas ou Prestacoes de Serviços para o Estado'
WHEN V.CD_CFO BETWEEN 6000 AND 6999 THEN '6000 - Saidas ou Prestacoes de Serviços para outros Estados'
WHEN V.CD_CFO BETWEEN 7000 AND 7999 THEN '7000 - Saidas ou Prestacoes de Serviços para o Exterior'
END DS_GRUPOCFOP,
V.CD_CFO,
SUM(V.VL_TOTAL) VL_TOTAL, SUM(V.VL_BASEICMS) VL_BASEICMS,
SUM(V.VL_BASEICMS1) VL_BASEICMS1, SUM(V.VL_IMPOSTOICMS) VL_IMPOSTOICMS,
SUM(V.VL_ISENTOICMS) VL_ISENTOICMS, SUM(V.VL_OUTRASICMS) VL_OUTRASICMS,
SUM(COALESCE(V.VL_OUTRASICMS, 0) + COALESCE(V.VL_OUTRASIPI, 0)) VL_SUM_OUTRAS,
SUM(V.VL_SUBSTRIB) VL_SUBSTRIB, SUM(V.VL_BASESUBST) VL_BASESUBST,
SUM(V.VL_CONTABIL) VL_CONTABIL
FROM VIEW_RFI003(:CD_EMPRESA, :DT_INICIAL, :DT_FINAL, :TP_LIVRO,
:ISQL_SALDO, :ISQL_IMPOSTO, :ISQL_CUPOM,
:ST_QUEBRAMES, :ST_INUTILIZADAS, :TP_MODELO) V
WHERE PRIMEIRODIAMES(V.DT_PERIODO) = PRIMEIRODIAMES(:DT_PERIODO)
GROUP BY DS_GRUPOCFOP, V.CD_CFO

SQL Base do resumo UF (dataset secundario):

SELECT CASE /* apenas para Saidas; em Entradas e literal unico */
WHEN V.NR_INSCEST IS NOT NULL THEN 'Totais por Unidade de Federacao - Contribuinte'
WHEN V.NR_INSCEST IS NULL THEN 'Totais por Unidade de Federacao - Nao Contribuinte'
END DS_GRUPOCONTR,
V.SG_ESTADO,
SUM(V.VL_TOTAL) VL_TOTAL, SUM(V.VL_BASEICMS) VL_BASEICMS,
SUM(V.VL_BASEICMS1) VL_BASEICMS1, SUM(V.VL_IMPOSTOICMS) VL_IMPOSTOICMS,
SUM(V.VL_ISENTOICMS) VL_ISENTOICMS, SUM(V.VL_OUTRASICMS) VL_OUTRASICMS,
SUM(COALESCE(V.VL_OUTRASICMS, 0) + COALESCE(V.VL_OUTRASIPI, 0)) VL_SUM_OUTRAS,
SUM(V.VL_SUBSTRIB) VL_SUBSTRIB, SUM(V.VL_CONTABIL) VL_CONTABIL
FROM VIEW_RFI003(:CD_EMPRESA, :DT_INICIAL, :DT_FINAL, :TP_LIVRO,
:ISQL_SALDO, :ISQL_IMPOSTO, :ISQL_CUPOM,
:ST_QUEBRAMES, :ST_INUTILIZADAS, :TP_MODELO) V
WHERE PRIMEIRODIAMES(V.DT_PERIODO) = PRIMEIRODIAMES(:DT_PERIODO)
GROUP BY DS_GRUPOCONTR, V.SG_ESTADO

Demonstrativos e Termos (sub-relatorios — Modelo 1)​

Quando marcadas as opcoes de Emitir Demonstrativo por Estado, Emitir Lista de Codigos Emitentes, Emitir Demonstrativo por Municipio e Emitir Termo de Abertura/Encerramento, os seguintes SQL auxiliares sao montados (todos partem do mesmo VIEW_LIVROFISCAL(isqlSALDO, isqlIMPOSTO, isqlCUPOM)):

  • Demonstrativo por Estado: montado em ppGroupFooterBand1BeforePrint com quebra por mes via extract(month from V.DT_EMISSAO) e JOIN em ESTADO (usa VIEW_LIVROFISCAL).
  • Lista de Emitentes: SELECT DISTINCT E.CD_EMPRESA, E.NM_EMPRESA, PE.NR_CNPJCPF, EE.NR_INSCEST, V.NM_PESSOA, V.SG_ESTADO, V.NR_CNPJCPF, V.NR_INSCEST FROM VIEW_LIVROFISCAL(...) V INNER JOIN EMPRESA E ON (V.CD_EMPRESA = E.CD_EMPRESA) INNER JOIN PESSOA PE ON (E.CD_PESSOA = PE.CD_PESSOA) INNER JOIN ENDERECOPESSOA EE ON primeiro endereco da pessoa.
  • Demonstrativo por Municipio: SELECT V.DS_MUNICIPIO||'-'||V.SG_ESTADO, V.NR_CNPJCPF, V.NR_INSCEST, SUM(VL_TOTAL/BASE/IMPOSTO/ISENTO/OUTRAS/SUBSTRIB) FROM VIEW_LIVROFISCAL(...) V GROUP BY V.DS_MUNICIPIO, V.SG_ESTADO, V.NR_CNPJCPF, V.NR_INSCEST.
  • Termos de Abertura/Encerramento: SELECT FIRST 1 E.NM_EMPRESA, EP.DS_ENDERECO, M.DS_MUNICIPIO, M.SG_ESTADO, EP.NR_CEP, E.NR_REGISTROJUNTA, E.DT_REGISTROJUNTA, EP.NR_INSCEST, P.NR_CNPJCPF, E.NR_INSCMUNICIPAL, PS.NM_PESSOA (socio responsavel), T.DS_TIPOSOCIO, PC.NM_PESSOA (contador), C.NR_CRCCONTADOR FROM EMPRESA E JOIN PESSOA P JOIN ENDERECOPESSOA EP JOIN MUNICIPIO M LEFT JOIN SOCIO S (ST_RESPONSAVEL='S') JOIN PESSOA PS JOIN TIPOSOCIO T LEFT JOIN CONTADOR C JOIN PESSOA PC.