RFI001 — Leitura X / Reducao Z
Fonte
- Form:
source/RFI001/URFI001.pas - Design:
source/RFI001/URFI001.dfm - Pacote:
source/RFI001/RFI001.dpk
Objetivo
Tela utilitaria que opera o Equipamento de Cupom Fiscal (ECF) via biblioteca ACBr: emite a Leitura X (relatorio de movimento sem zerar contadores) e a Reducao Z (fechamento do dia, que grava a apuracao de tributos na tabela CUPOMFISCAL para o registro Sintegra) e oferece comandos utilitarios de programacao e manutencao da impressora fiscal (verificacao de status, correcao de estado de erro, abertura de gaveta, programacao de aliquotas, comprovantes nao fiscais, formas de pagamento, autenticacao de documentos e espelho da MFD).
Modelos de Relatorio
A tela nao usa combobox de modelo: cada botao aciona diretamente um comando ACBr na impressora fiscal, com a configuracao do equipamento lida do par PARMUSUARIO + IMPRESSORA + TIPOIMPRESSORA pela funcao Modelo_Cupom.
Modelo 1: Leitura X
Quando usado: clique no botao "Leitura X" na aba Relatorios. Emite o relatorio de posicao do ECF sem zerar totalizadores. Nao persiste nada no banco.
SQL Base: apenas leitura dos parametros do modelo da impressora do usuario.
SELECT T.TP_TIPOIMPRESSORA, T.TP_MODELO, T.DS_PORTA, T.ST_EXIBEMENSAGEM,
T.NR_TIMEOUT, T.NR_BAUDRATE
FROM PARMUSUARIO P
INNER JOIN IMPRESSORA I ON I.CD_IMPRESSORA = P.CD_IMPNOTA
INNER JOIN TIPOIMPRESSORA T ON T.CD_TIPOIMPRESSORA = I.CD_TIPOIMPRESSORA
WHERE P.CD_EMPRESA = :CD_EMPRESA
AND P.CD_USUARIO = :CD_USUARIO
Apos carregar os parametros, chama ECF.LeituraX (ACBr). Valida que TP_TIPOIMPRESSORA='F' (Cupom Fiscal); caso contrario, bloqueia a operacao.
Modelo 2: Reducao Z
Quando usado: clique no botao "Reducao Z" na aba Relatorios. Executa o fechamento do dia: coleta os dados Sintegra da MFD (numero de serie, numero do ECF, COO inicial/final, numero do CRZ, CRO de reinicio, Grande Total, Venda Bruta), monta um array com totais de descontos, cancelamentos, isencoes, nao tributados, substituicao tributaria, ISS e aliquotas ICMS, chama ECF.ReducaoZ na impressora e grava cada linha de tributo na tabela CUPOMFISCAL.
Leitura previa: serie do cupom (default '2D' quando nao parametrizado).
SELECT P.CD_SERIECUPOM
FROM PARMCUPOM P
WHERE P.CD_EMPRESA = :CD_EMPRESA
Limpeza (idempotencia): antes do INSERT, remove linha previa do mesmo equipamento/data/tributacao.
DELETE FROM CUPOMFISCAL
WHERE CD_EMPRESA = :CD_EMPRESA
AND DT_EMISSAO = :DT_EMISSAO
AND NR_SERIE = :NR_SERIE
AND NR_EQUIPAMENTO = :NR_EQUIPAMENTO
AND TP_TRIBUTACAO = :TP_TRIBUTACAO
Gravacao do Sintegra (uma linha por tributo):
INSERT INTO CUPOMFISCAL (
CD_EMPRESA, DT_EMISSAO, NR_SERIE, NR_EQUIPAMENTO,
CD_MODELO, NR_COOINICIAL, NR_COOFINAL, NR_REDUCAO,
NR_OPERACAO, VL_VENDABRUTA, VL_TOTALGERAL,
TP_TRIBUTACAO, VL_TRIBUTACAO, VL_BASE, DT_REGISTRO)
VALUES (
:CD_EMPRESA, :DT_EMISSAO, :NR_SERIE, :NR_EQUIPAMENTO,
:CD_MODELO, :NR_COOINICIAL, :NR_COOFINAL, :NR_REDUCAO,
:NR_OPERACAO, :VL_VENDABRUTA, :VL_TOTALGERAL,
:TP_TRIBUTACAO, :VL_TRIBUTACAO, NULLIF(:VL_BASE,0),
'NOW')
Valores possiveis de TP_TRIBUTACAO: DESC (descontos), CANC (cancelamentos), I (isento), N (nao tributado), F (substituicao tributaria), ISS (serviços), ou a aliquota ICMS formatada NN.NN sem virgula (ex: 18.00, 12.00). O commit e feito na sequencia, consolidando toda a apuracao.
Filtros
Campos simples: a tela nao possui campos de filtro. O contexto da operacao e derivado automaticamente da sessao (empresa logada, usuario logado, data do sistema) e da leitura do proprio ECF via ACBr.
Excecao: o utilitario "Espelho Reducao Z" (aba Utilitarios) solicita via InputBox a Data da Reducao Z no formato dd/mm/yyyy.
Filtros de grid (multi-selecao via F9): nao ha.
Parametros que Influenciam
| Tabela | Campo | Efeito |
|---|---|---|
| PARMUSUARIO | CD_IMPNOTA | Código da impressora associada ao usuario logado. Sem valor => JException "O Usuario nao possui cadastro nos Parametros de Usuario [ADM012]". |
| IMPRESSORA | CD_TIPOIMPRESSORA | Liga a impressora do usuario ao tipo/modelo cadastrado em TIPOIMPRESSORA. |
| TIPOIMPRESSORA | TP_TIPOIMPRESSORA | Deve ser 'F' (Cupom Fiscal). Qualquer outro valor bloqueia a Leitura X / Reducao Z. |
| TIPOIMPRESSORA | TP_MODELO | Define a classe ACBr a instanciar (0=Nenhum, 2=Bematech, 3=Sweda, 4=Daruma, 5=Schalter, 6=Mecaf, 7=Yanco, 8=DataRegis, 9=Urano, 10=ICash, 11=Quattro, 12=FiscNET, 13=Epson, 14=NCR). |
| TIPOIMPRESSORA | DS_PORTA | Porta serial/USB usada para falar com o ECF (COM1, COM2, ...). |
| TIPOIMPRESSORA | ST_EXIBEMENSAGEM | N suprime popups do ACBr; qualquer outro valor exibe as mensagens do driver. |
| TIPOIMPRESSORA | NR_TIMEOUT | Timeout (segundos) da comunicacao com a impressora. Default 3 quando vazio. |
| PARMCUPOM | CD_SERIECUPOM | Código da serie/modelo ECF gravado em CUPOMFISCAL.CD_MODELO na Reducao Z. Default '2D' quando nao parametrizado. |
Regras de Negocio
- Validacao de parametro de usuario: a funcao
Modelo_CupomexigePARMUSUARIO.CD_IMPNOTAcadastrado para o par empresa/usuario — sem isso,JException "O Usuario ... nao possui cadastro nos Parametros de Usuario para a Empresa ... [ADM012]". - Impressora deve ser ECF: se
TIPOIMPRESSORA.TP_TIPOIMPRESSORA <> 'F', a operacao e bloqueada com "A Impressora da Nota Fiscal nao e do Tipo Cupom Fiscal". A tela so trabalha com impressoras fiscais. - Confirmacao antes de Reducao Z: a pergunta exibe aviso explicito "A Reducao Z pode Bloquear o Equipamento de Cupom Fiscal (ECF) ate as 23:59" — o operador precisa confirmar.
- Status do ECF (botao "Verifica Impressora"):
Valida_ECFexige que a Data de Movimento da impressora = Data do sistema e que o equipamento esteja EmLinha (tampa fechada, ligado) — senao devolve mensagem de erro sem executar comandos. - Idempotencia da Reducao Z: o
DELETEantes doINSERTemCUPOMFISCALpermite reemitir/corrigir a gravacao do mesmo dia+ECF+tributacao sem duplicar linhas no Sintegra. - Somente tributos com valor > 0 gravam: linhas com
VL_TRIBUTACAO <= 0sao puladas no loop de gravacao. - VL_BASE nulo: a base de calculo entra na tabela com
NULLIF(:valor, 0)— zero e persistido como NULL. - Programacao de aliquota (
btnICMS): percentual > 100 => "Valor Maior que 100%"; tipo diferente deT(ICMS) ouS(ISS) => "O Tipo da Aliquota deve ser 'T' ou 'S'". So programa a aliquota se ainda nao existir no ECF. - Programacao de forma de pagamento (
btnProgFormaPagto): a descricao e sempre gravada em UpperCase. Se ja existe no ECF (match case-insensitive pela descricao), pula a programacao. - Comprovante nao fiscal nao vinculado (
btnComprovante): valor <= 0 bloqueia com "O Valor deve ser maior que Zero"; se a forma de pagamento nao existir, programa antes de emitir. Limitacao: a emissao do comando serial so suportaTIPOIMPRESSORA.TP_MODELO = ecfDaruma— outros modelos retornam "Modelo de Impressora Fiscal nao configurado". - Autenticacao de documento (
btnAutentica): idem, so suporta Daruma; usa oNM_EMPRESAda sessao truncado a 13 caracteres no comando ESC-Y. - Espelho MFD (
btnEspelho): hoje a chamadaECF.PafMF_MFD_Espelhoesta comentada no codigo — o botao gera apenas o caminho do arquivo emsessao.Path + 'Arquivos\MFD_Espelho_ddmmyyyy.txt'e exibe mensagem de sucesso, sem efetivamente gerar o arquivo. Ponto de atencao para manutencao. - Cancelar Cupom (
btnCancelar) e Espelho Reducao Z (btnEspelho) estao comVisible = Falseno DFM — nao aparecem ao operador, mas o handler existe.
Datasets e SQL
Esta tela nao possui TFDQuery persistente — toda a interacao com o banco e feita via ExecutaConsulta / ExecUpdate usando a TFDTransaction local, sem DataModule separado.
- transaction (
TFDTransaction): transacao unica reutilizada em cada botao. Padrao:Rollbackse ativa ->StartTransaction-> operacao ->Commit(apenas na Reducao Z, que grava) ou descartada implicitamente peloFormClose. - ECF (
TACBrECF): componente ACBr que encapsula toda a comunicacao serial com a impressora fiscal (propriedadesModelo,Porta,TimeOut,ExibeMensagem; metodosLeituraX,ReducaoZ,DadosReducaoZ,LerTotaisAliquota,CancelaCupom,CorrigeEstadoErro,AbreGaveta,ProgramaAliquota,ProgramaFormaPagamento,ProgramaComprovanteNaoFiscal,CarregaAliquotas,CarregaFormasPagamento,CarregaComprovantesNaoFiscais,EnviaComando,EfetuaPagamento,PafMF_MFD_Espelho). - fdCon (
TFDConnection): conexao compartilhada viaSharedCliHandle := sessao.connection.CliHandlenoiniciar.
Perguntas Frequentes
P: O sistema apresentou a mensagem "O Usuário não possui cadastro nos Parâmetros de Usuário para a Empresa". Como devo proceder? R: Este erro ocorre porque o usuário logado não possui configuração de impressora nos Parâmetros de Usuário para a empresa selecionada. Para corrigir, acesse a tela Parâmetros de Usuário (ADM012) e cadastre a impressora de Nota Fiscal para o usuário e empresa em questão.
P: Recebi a mensagem "A Impressora da Nota Fiscal não é do Tipo Cupom Fiscal. Verifique!". O que significa? R: Este erro indica que a impressora configurada nos Parâmetros de Usuário não é do tipo Cupom Fiscal (tipo "F"). Acesse a tela Parâmetros de Usuário (ADM012) e verifique se a impressora atribuída ao usuário é do tipo Fiscal.
P: O sistema exibe a mensagem "A Data de Movimento da Impressora Fiscal está diferente da Data do Sistema". O que devo fazer? R: Este erro ocorre quando a data configurada na impressora fiscal (ECF) está diferente da data do computador. Verifique se a data do sistema operacional está correta e se a impressora fiscal está com a data sincronizada. Caso necessário, ajuste a data no equipamento.
P: Recebi a mensagem "Cupom Fiscal: Verifique se a Impressora Fiscal está Ligada e a Tampa está Fechada!". Como resolver? R: O sistema detectou que a impressora fiscal não está respondendo. Verifique se o equipamento está ligado, conectado corretamente ao computador, e se a tampa da impressora está devidamente fechada.
P: Ao tentar programar uma alíquota, o sistema apresenta "Valor Maior que 100%" ou "O Percentual Informado é Inválido". O que isso significa? R: Ao programar uma alíquota no ECF, o percentual informado deve ser um valor numérico válido entre 0 e 100. Certifique-se de informar um número válido e que não exceda 100%.
P: Ao programar uma alíquota, recebi a mensagem "O Tipo da Alíquota deve ser 'T' ou 'S'. Verifique". O que devo fazer? R: O tipo da alíquota deve ser informado como "T" para ICMS ou "S" para ISS. Qualquer outro valor será recusado pelo sistema.
P: Ao emitir um comprovante não fiscal, o sistema exibe "É obrigatório informar a Descrição da Forma de Pagamento". Como proceder? R: Para emitir um comprovante não fiscal não vinculado, é obrigatório preencher o campo de Descrição da Forma de Pagamento. Informe a descrição e tente novamente.
P: Recebi a mensagem "O Valor deve ser maior que Zero" ao emitir comprovante não fiscal. O que fazer? R: O valor do comprovante não fiscal deve ser um número positivo maior que zero. Informe um valor válido e tente novamente.
P: O sistema exibe "Modelo de Impressora Fiscal não configurado. Autenticação Cancelada." ao tentar autenticar documento. Por quê? R: A funcionalidade de autenticação de documento está disponível apenas para impressoras do modelo Daruma. Verifique se a impressora configurada nos Parâmetros de Usuário é deste modelo.
P: Ao tentar programar um comprovante não fiscal, o sistema informa "É Obrigatório informar a Descrição do Comprovante não Fiscal" e "O Tipo do Comprovante não Fiscal deve ser '+' ou '-'. Verifique". O que isso significa? R: A descrição do comprovante é obrigatória e o tipo deve ser "+" (soma/entrada) ou "-" (diminui/saída). Preencha os campos corretamente e tente novamente.
P: O que é a Redução Z e por que o sistema avisa que pode bloquear o ECF até as 23:59? R: A Redução Z é um relatório fiscal obrigatório emitido pelo equipamento ECF ao final do dia. Após sua emissão, o equipamento fica bloqueado para novas operações até o dia seguinte (23:59). Certifique-se de emitir a Redução Z apenas ao encerrar as operações do dia.
P: Ao gerar o espelho da Redução Z, recebi "É obrigatório informar uma Data Válida. Verifique". O que fazer? R: Informe a data da Redução Z no formato dd/mm/yyyy (dia/mês/ano). A data deve ser válida para que o sistema localize o arquivo correspondente.
P: Para que serve o botão "Leitura X"? R: A Leitura X é um relatório gerencial que apresenta os totais acumulados no equipamento ECF desde a última Redução Z. Pode ser emitida a qualquer momento durante o dia sem bloquear o equipamento.
P: Para que serve o botão "Status" na tela RFI001? R: O botão Status verifica se a impressora fiscal está ligada, conectada e liberada para uso. Caso esteja tudo correto, será exibida a mensagem "Impressora Fiscal Ligada e Liberada".
P: Para que serve a opção "Programar Forma de Pagamento"? R: Esta opção permite cadastrar novas formas de pagamento diretamente no equipamento ECF. Informe a descrição da forma de pagamento desejada. Se ela já existir no equipamento, não será duplicada.
Tabelas de Escrita (INSERT/UPDATE/DELETE)
| Tabela | Operacoes |
|---|---|
| CUPOMFISCAL | DELETE, INSERT |
Tabelas de Leitura (SELECT)
| Tabela | Operacoes |
|---|---|
| CUPOMFISCAL | SELECT (indireto via DELETE WHERE) |
| IMPRESSORA | SELECT |
| PARMCUPOM | SELECT |
| PARMUSUARIO | SELECT |
| TIPOIMPRESSORA | SELECT |
Procedures Chamadas
Nao ha stored procedures chamadas por esta tela.
Tabelas via Procedures (acesso indireto)
Nao ha acesso indireto via procedures.
Dependencias Aferentes (quem alimenta esta tela)
Telas que escrevem em tabelas lidas por RFI001 (quem cadastra impressora/usuario/parametros/cupons que essa tela le).
| Tela | Título | Tabelas em Comum |
|---|---|---|
| MFI005 | Cupom Fiscal | CUPOMFISCAL |
| TRD006 | (sem titulo no menu) | CUPOMFISCAL |
| ADM008 | Impressoras | IMPRESSORA |
| ADM009 | Tipo de Impressoras | TIPOIMPRESSORA |
| ADM012 | Parametros de Usuarios | PARMUSUARIO |
| ADM013 | Duplicacao | PARMUSUARIO |
| MFI003 | Parametros Fiscais | PARMCUPOM |
| OFI001 | Parametros de Oficina | PARMUSUARIO |
Dependencias Eferentes (quem consome dados desta tela)
Telas que leem CUPOMFISCAL (tabela escrita pela Reducao Z desta tela).
| Tela | Título | Tabelas em Comum |
|---|---|---|
| MFI005 | Cupom Fiscal | CUPOMFISCAL |
| RFI031 | Sped Fiscal (EFD) | CUPOMFISCAL |
| TRD006 | (sem titulo no menu) | CUPOMFISCAL |
Modelos de Relatório
A tela nao usa combobox de modelo: cada botao aciona diretamente um comando ACBr na impressora fiscal, com a configuracao do equipamento lida do par PARMUSUARIO + IMPRESSORA + TIPOIMPRESSORA pela funcao Modelo_Cupom.
Modelo 1: Leitura X
Quando usado: clique no botao "Leitura X" na aba Relatórios. Emite o relatorio de posicao do ECF sem zerar totalizadores. Nao persiste nada no banco.
SQL Base: apenas leitura dos parametros do modelo da impressora do usuario.
SELECT T.TP_TIPOIMPRESSORA, T.TP_MODELO, T.DS_PORTA, T.ST_EXIBEMENSAGEM,
T.NR_TIMEOUT, T.NR_BAUDRATE
FROM PARMUSUARIO P
INNER JOIN IMPRESSORA I ON I.CD_IMPRESSORA = P.CD_IMPNOTA
INNER JOIN TIPOIMPRESSORA T ON T.CD_TIPOIMPRESSORA = I.CD_TIPOIMPRESSORA
WHERE P.CD_EMPRESA = :CD_EMPRESA
AND P.CD_USUARIO = :CD_USUARIO
Apos carregar os parametros, chama ECF.LeituraX (ACBr). Valida que TP_TIPOIMPRESSORA='F' (Cupom Fiscal); caso contrario, bloqueia a operacao.
Modelo 2: Reducao Z
Quando usado: clique no botao "Reducao Z" na aba Relatórios. Executa o fechamento do dia: coleta os dados Sintegra da MFD (numero de serie, numero do ECF, COO inicial/final, numero do CRZ, CRO de reinicio, Grande Total, Venda Bruta), monta um array com totais de descontos, cancelamentos, isencoes, nao tributados, substituicao tributaria, ISS e aliquotas ICMS, chama ECF.ReducaoZ na impressora e grava cada linha de tributo na tabela CUPOMFISCAL.
Leitura previa: serie do cupom (default '2D' quando nao parametrizado).
SELECT P.CD_SERIECUPOM
FROM PARMCUPOM P
WHERE P.CD_EMPRESA = :CD_EMPRESA
Limpeza (idempotencia): antes do INSERT, remove linha previa do mesmo equipamento/data/tributacao.
DELETE FROM CUPOMFISCAL
WHERE CD_EMPRESA = :CD_EMPRESA
AND DT_EMISSAO = :DT_EMISSAO
AND NR_SERIE = :NR_SERIE
AND NR_EQUIPAMENTO = :NR_EQUIPAMENTO
AND TP_TRIBUTACAO = :TP_TRIBUTACAO
Gravacao do Sintegra (uma linha por tributo):
INSERT INTO CUPOMFISCAL (
CD_EMPRESA, DT_EMISSAO, NR_SERIE, NR_EQUIPAMENTO,
CD_MODELO, NR_COOINICIAL, NR_COOFINAL, NR_REDUCAO,
NR_OPERACAO, VL_VENDABRUTA, VL_TOTALGERAL,
TP_TRIBUTACAO, VL_TRIBUTACAO, VL_BASE, DT_REGISTRO)
VALUES (
:CD_EMPRESA, :DT_EMISSAO, :NR_SERIE, :NR_EQUIPAMENTO,
:CD_MODELO, :NR_COOINICIAL, :NR_COOFINAL, :NR_REDUCAO,
:NR_OPERACAO, :VL_VENDABRUTA, :VL_TOTALGERAL,
:TP_TRIBUTACAO, :VL_TRIBUTACAO, NULLIF(:VL_BASE,0),
'NOW')
Valores possiveis de TP_TRIBUTACAO: DESC (descontos), CANC (cancelamentos), I (isento), N (nao tributado), F (substituicao tributaria), ISS (serviços), ou a aliquota ICMS formatada NN.NN sem virgula (ex: 18.00, 12.00). O commit e feito na sequencia, consolidando toda a apuracao.