No passo anterior, realizamos uma venda de cupom fiscal com pagamento em cartão e fizemos nossa primeira transação TEF com impressão do comprovante. Agora, precisamos validar esta transação!
Vamos criar duas funções para isso:
- uma para confirmar a transação TEF (ConfirmaTransacao) e;
- outra para não confirmar a transação TEF (NaoConfirmaTransacao).
Ou seja, precisamos controlar estes dois processos, pois estaremos enfrentando situações onde a impressora passará por erros de comunicação (desligamentos) ou quedas de energia (veremos isso nas próximas edições).
Estaremos visualizando este código em dois exemplos básicos. Um desenvolvido em Delphi e outro em Visual Basic.
- Exemplo em Delphi
//////////////////////////////////////////////////////////
// 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' );
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' );
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