Conforme mencionamos na parte anterior, nesta parte estaremos tratando a situação de queda de energia, quando ocorre durante a impressão da transação TEF e o que devemos fazer.
Quando nos deparamos com esta situação, o importante é verificarmos se existe uma transação pendente, mas como verificar isso se a aplicação foi reinicializada? Simples! Vamos usar uma lógica externa para tratar este tipo de situação, criando o arquivo TEF.TXT, toda a vez que iniciarmos a impressão da transação TEF e elimina-lo quando esta transação for concluída, assim ao entrarmos na aplicação poderemos verificar a existência deste arquivo e não confirmar a transação pendente.
Serão utilizados os códigos já desenvolvidos, incluindo esta nova implementação e, em anexo, seguirão os códigos completos em Delphi e Visual Basic.
- Exemplo em Delphi
// Form Create
procedure TfrmPrincipal.FormCreate(Sender: TObject);
var iRetorno: integer;
begin
// Verifica se existe o arquivo TEF.TXT, indicando que há uma
// transação pendente.
if FileExists( 'TEF.TXT' ) then
begin
iRetorno := Bematech_FI_FechaComprovanteNaoFiscalVinculado;
NaoConfirmaTransacao;
if FileExists( 'TEF.TXT' ) then
DeleteFile( 'TEF.TXT' );
end;
end;
////////////////////////////////////////////////////////////////////////////////
// Função: ImprimeTransacao
// Objetivo: Realiza a impressão da Transação TEF
// Parâmetros: string para a Forma de Pagamento
// string para a Valor da Forma de Pagamento
// string para o Número do Cupom Fiscal (COO)
// TDateTime para identificar o número da transação
// Retorno: True para OK ou False para não OK
////////////////////////////////////////////////////////////////////////////////
function ImprimeTransacao( cFormaPGTO: string; cValorPago: string;
cCOO: string; cIdentificacao: TDateTime ): boolean;
var cLinhaArquivo, cLinha, cSaltaLinha, cConteudo: string;
cMensagem: TForm;
cArquivo : TextFile;
iVezes : integer;
begin
// Neste ponto é criado o arquivo TEF.TXT, indicando que há uma
// operação de TEF sendo realizada. Caso ocorra uma queda de energia,
// no momento da impressão do TEF, e a aplicação for inicializada,
// ao identificar a existência deste arquivo, a transação do TEF
// deverá ser concelada.
AssignFile( cArquivo, 'TEF.TXT');
ReWrite( cArquivo );
CloseFile( cArquivo );
// Bloqueia o teclado e o mouse para a impressão do TEF
iRetorno := Bematech_FI_IniciaModoTEF();
result := true;
if FileExists( 'IMPRIME.TXT') then
begin
iRetorno := Bematech_FI_AbreComprovanteNaoFiscalVinculado( pchar(
cFormaPGTO ), pchar( cValorPago ), pchar( cCOO ) );
.
.
.
////////////////////////////////////////////////////////////////////////////////
// Função: ConfirmaTransacao
// Objetivo: Confirmar a Transação TEF
// Parâmetros: não há
// Retorno: True para OK ou False para não OK
////////////////////////////////////////////////////////////////////////////////
function ConfirmaTransacao: boolean;
var cLinhaArquivo, cConteudo: string;
cArquivo: TextFile;
lFlag : longbool;
begin
cLinhaArquivo := '';
cConteudo := '';
AssignFile( cArquivo, 'C:\TEF_DIAL\RESP\INTPOS.001' );
Reset( cArquivo );
while not EOF( cArquivo ) do
begin
ReadLn( cArquivo, cLinhaArquivo );
if ( copy( cLinhaArquivo, 1, 3 ) = '001' ) or
( copy( cLinhaArquivo, 1, 3 ) = '002' ) or
( copy( cLinhaArquivo, 1, 3 ) = '010' ) or
( copy( cLinhaArquivo, 1, 3 ) = '012' ) or
( copy( cLinhaArquivo, 1, 3 ) = '027' ) then
cConteudo := cConteudo + cLinhaArquivo + #13 + #10;
if ( copy( cLinhaArquivo, 1, 3 ) = '999' ) then
cConteudo := cConteudo + cLinhaArquivo;
end;
CloseFile( cArquivo );
cConteudo := '000-000 = CNF' + #13 + #10 + cConteudo;
AssignFile( cArquivo, 'INTPOS.001' );
ReWrite( cArquivo );
WriteLn( cArquivo, cConteudo );
CloseFile( cArquivo );
CopyFile( pchar( 'INTPOS.001' ), pchar( 'C:\TEF_DIAL\REQ\INTPOS.001' ),
lFlag );
DeleteFile( 'INTPOS.001' );
if ( FileExists( 'C:\TEF_DIAL\RESP\INTPOS.STS' ) ) then
DeleteFile( 'C:\TEF_DIAL\RESP\INTPOS.STS' );
if ( FileExists( 'C:\TEF_DIAL\RESP\INTPOS.001' ) ) then
DeleteFile( 'C:\TEF_DIAL\RESP\INTPOS.001' );
// Se o arquivo TEF.TXT, que identifica que houve uma transação impressa
// existir, o mesmo será exluído.
if ( FileExists( 'TEF.TXT' ) ) then
DeleteFile( 'TEF.TXT' );
end;
////////////////////////////////////////////////////////////////////////////////
// Função: NaoConfirmaTransacao
// Objetivo: Não Confirmar a Transação TEF
// Parâmetros: não há
// Retorno: True para OK ou False para não OK
////////////////////////////////////////////////////////////////////////////////
function NaoConfirmaTransacao: boolean;
var cLinhaArquivo, cConteudo: string;
cArquivo: TextFile;
lFlag : longbool;
cValor, cNomeRede, cNSU: string;
begin
cLinhaArquivo := '';
cConteudo := '';
AssignFile( cArquivo, 'C:\TEF_DIAL\RESP\INTPOS.001' );
Reset( cArquivo );
while not EOF( cArquivo ) do
begin
ReadLn( cArquivo, cLinhaArquivo );
if ( copy( cLinhaArquivo, 1, 3 ) = '001' ) then
cConteudo := cConteudo + cLinhaArquivo + #13 + #10;
if ( copy( cLinhaArquivo, 1, 3 ) = '003' ) then
cValor := copy( cLinhaArquivo, 11, Length( cLinhaArquivo ) - 10 );
if ( copy( cLinhaArquivo, 1, 3 ) = '010' ) then
begin
cConteudo := cConteudo + cLinhaArquivo + #13 + #10;
cNomeRede := copy( cLinhaArquivo, 11, Length( cLinhaArquivo )
- 10 );
end;
if ( copy( cLinhaArquivo, 1, 3 ) = '012' ) then
begin
cConteudo := cConteudo + cLinhaArquivo + #13 + #10;
cNSU := copy( cLinhaArquivo, 11, Length( cLinhaArquivo ) - 10 );
end;
if ( copy( cLinhaArquivo, 1, 3 ) = '027' ) then
cConteudo := cConteudo + cLinhaArquivo + #13 + #10;
if ( copy( cLinhaArquivo, 1, 3 ) = '999' ) then
cConteudo := cConteudo + cLinhaArquivo;
end;
CloseFile( cArquivo );
cConteudo := '000-000 = NCN' + #13 + #10 + cConteudo;
AssignFile( cArquivo, 'INTPOS.001' );
ReWrite( cArquivo );
WriteLn( cArquivo, cConteudo );
CloseFile( cArquivo );
CopyFile( pchar( 'INTPOS.001' ), pchar( 'C:\TEF_DIAL\REQ\INTPOS.001' ),
lFlag );
DeleteFile( 'INTPOS.001' );
if ( FileExists( 'C:\TEF_DIAL\RESP\INTPOS.STS' ) ) then
DeleteFile( 'C:\TEF_DIAL\RESP\INTPOS.STS' );
if ( FileExists( 'C:\TEF_DIAL\RESP\INTPOS.001' ) ) then
DeleteFile( 'C:\TEF_DIAL\RESP\INTPOS.001' );
// Se o arquivo TEF.TXT, que identifica que houve uma transação impressa
// existir, o mesmo será exluído.
if ( FileExists( 'TEF.TXT' ) ) then
DeleteFile( 'TEF.TXT' );
Application.MessageBox( pchar( 'Cancelada a Transação' + #13 + #13 +
'Rede: ' + cNomeRede + #13 + 'Doc Nº: ' + cNSU + #13 + 'Valor: ' +
FormatFloat( '#,##0.00', StrToFloat( cValor ) / 100 ) ), 'Atenção',
MB_IconInformation + MB_OK );
end;
Nenhum comentário:
Postar um comentário