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
ppGroupFooterBand1BeforePrintcom quebra por mes viaextract(month from V.DT_EMISSAO)e JOIN emESTADO(usaVIEW_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_BLOQFINALda 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_LIVROa partir deLIVRO(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
LIVROapos 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
RelEmitenteao final. - Emitir Demonstrativo por Estado — default marcado; ativa sub-relatorio
RelResumo(agrupado por SG_ESTADO viaVIEW_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
TermoAna primeira pagina (imprime conteudo legal com socio responsavel e contador). - Emitir Termo de Encerramento — ativa sub-relatorio
TermoFna ultima pagina. - Emitir Demonstrativo por Municipio — exibe sub-relatorio
RelMunicipio. - Mostrar NF-e Inutilizadas — passa
ST_INUTILIZADAS='S'paraVIEW_RFI003.
Filtros de grid (multi-selecao via F9):
- Filtros por Serie (Lista de Serie/Especie) F9 — grid
gridSERIEcom colunas Serie e Especie; lookupSERIEESPECIE; aplicaIN (cd_serie, ...)emN.CD_SERIE. Valida viaMODELONFque a serie gera fiscal (ST_FISCAL <> 'N'). - CFOP (Lista de CFOP) F9 — grid
gridCFOcom colunas CFO e Descricao; lookupCFOP; aplicaIN (cd_cfo, ...)emIT.CD_CFO. Checkbox Excecao inverte paraNOT 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
| Tabela | Campo | Efeito |
|---|---|---|
| PARMCONTABIL | DT_BLOQINICIAL | Preenche o filtro "Periodo De" como default ao abrir a tela. |
| PARMCONTABIL | DT_BLOQFINAL | Preenche o filtro "Periodo Ate" como default ao abrir a tela. |
| PARMSISTEMA | DS_RODAPE | Texto 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)
| Tabela | Operacoes |
|---|---|
| EMPRESA | DELETE, UPDATE |
Nota: as operacoes de escrita em
EMPRESAdetectadas pelo mapper vem de SQL gerados em design-time nodaDataModule1(ReportBuilder) — nao haINSERT/UPDATEreal em tempo de execucao. Esta tela e consumidora para todos os fins praticos de fluxo fiscal.
Tabelas de Leitura (SELECT)
| Tabela | Operacoes |
|---|---|
| LIVRO | SELECT |
| EMPRESA | SELECT |
| PARMSISTEMA | SELECT |
| MODELONF | SELECT |
| CFO | SELECT |
| ESTADO | SELECT |
| PARMCONTABIL | SELECT |
| ENDERECOPESSOA | SELECT |
| PESSOA | SELECT |
| MUNICIPIO | SELECT |
| SOCIO | SELECT |
| TIPOSOCIO | SELECT |
| CONTADOR | SELECT |
| PARMNOTA | SELECT |
Procedures Chamadas
| Procedure | Tabelas Acessadas |
|---|---|
| RETORNA_DATACABECALHO | (formata descricao textual do periodo) |
| VIEW_LIVROFISCAL | NOTA, ITEMNOTA, IMPOSTO, EMPRESA, PESSOA, ENDERECOPESSOA, MUNICIPIO, CFO, ESTADO, MODELONF, CUPOMFISCAL, PARMFISCAL, PARMCUPOM (SELECT) |
| VIEW_RAZAOCONTABIL | MOVTOCONTABIL, HISTORICOCONTABIL, NOTACTB, ITEMNOTACTB, IMPOSTONOTACTB, IMPOSTONOTACTBDIA, CONTASPESSOA, PARMNOTACTB (SELECT) |
| VIEW_RFI003 | NOTA, ITEMNOTA, IMPOSTO, CUPOMFISCAL, ITEM, MOVIMENTACAO, EMPRESA, PESSOA, ENDERECOPESSOA, CFO, MODELONF, INUTNFE, PARMFISCAL, PARMCUPOM (SELECT) |
| VIEW_RFI003_V2 | NOTA, ITEMNOTA, IMPOSTO, ITEM, MOVIMENTACAO, EMPRESA, PESSOA, CFO, MODELONF, PARMFISCAL (SELECT) |
Tabelas via Procedures (acesso indireto)
| Tabela | Operacoes |
|---|---|
| CFO | SELECT |
| CONTASPESSOA | SELECT |
| CUPOMFISCAL | SELECT |
| EMPRESA | SELECT |
| ENDERECOPESSOA | SELECT |
| ESTADO | SELECT |
| HISTORICOCONTABIL | SELECT |
| IMPOSTO | SELECT |
| IMPOSTONOTACTB | SELECT |
| IMPOSTONOTACTBDIA | SELECT |
| INUTNFE | SELECT |
| ITEM | SELECT |
| ITEMNOTA | SELECT |
| ITEMNOTACTB | SELECT |
| LIVRO | SELECT |
| MODELONF | SELECT |
| MOVIMENTACAO | SELECT |
| MOVTOCONTABIL | SELECT |
| MUNICIPIO | SELECT |
| NOTA | SELECT |
| NOTACTB | SELECT |
| PARMCUPOM | SELECT |
| PARMFISCAL | SELECT |
| PARMNOTACTB | SELECT |
| PESSOA | SELECT |
Dependencias Aferentes (quem alimenta esta tela)
Telas que escrevem em tabelas lidas por RFI003. Principais produtoras de dados fiscais/cadastrais consumidos aqui:
| Tela | Título | Tabelas em Comum |
|---|---|---|
| MNF001 | Manutencao de Nota Fiscal de Entrada | NOTA, ITEMNOTA, IMPOSTO (via VIEW_RFI003/VIEW_LIVROFISCAL) |
| MNF002 | Manutencao de Nota Fiscal de Saida | NOTA, ITEMNOTA, IMPOSTO (via VIEW_RFI003/VIEW_LIVROFISCAL) |
| TFI013 | Atualizacao do Livro Fiscal | NOTA, ITEMNOTA, LIVRO, NR_LANCAMENTO |
| ADM002 | Cadastro de Empresas | EMPRESA, ENDERECOPESSOA, PESSOA |
| TPO002 | Cadastro de Pessoas | PESSOA, ENDERECOPESSOA |
| TFI002 | Cadastro de CFOP | CFO |
| TFI007 | Cadastro de Serie e Especie (Modelo NF) | MODELONF |
| MCB001 | Parametros Contábeis | PARMCONTABIL |
| MFA002 | Parametros de Nota Fiscal | PARMNOTA |
| FER003 | Parametros do Sistema | PARMSISTEMA |
| ADM005 | Cadastro de Socios / Responsaveis | SOCIO, TIPOSOCIO |
| ADM006 | Cadastro de Contador | CONTADOR |
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
ppGroupFooterBand1BeforePrintcom quebra por mes viaextract(month from V.DT_EMISSAO)e JOIN emESTADO(usaVIEW_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.