Tratando a situação de queda de energia
Conforme mencionamos na passo anterior, nesta edição estaremos tratando a situação de queda de energia, quando ocorre durante a impressão da transação TEF e o quê 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 em Delphi e Visual Basic.
// 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;
‘ Form Load
Private Sub Form_Load()
Dim cArquivoTEF As String
Dim iRetorno As Integer
‘ Verifica se existe o arquivo TEF.TXT, indicando que há uma
‘ transação pendente.
cArquivoTEF = Dir(App.Path & "\TEF.TXT")
If cArquivoTEF <> "" Then
iRetorno = Bematech_FI_FechaComprovanteNaoFiscalVinculado()
NaoConfirmaTransacao
cArquivoTEF = ""
cArquivoTEF = Dir(App.Path & "\TEF.TXT")
If cArquivoTEF <> "" Then
Kill App.Path & "\TEF.TXT"
End If
End If
End Sub
‘ 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 As String, cValorPago As String, _
cCOO As String, cIdentificacao As String) As Integer
Dim cLinhaArquivo As String
Dim cLinha As String
Dim cSaltaLinha As String
Dim cConteudo As String
Dim iVezes As Integer
Dim iImprimeTransacao As Integer
‘ 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.
Open App.Path & "\TEF.TXT" For Binary As #1
Close #1
iImprimeTransacao = 1
‘ Bloqueia o teclado e o mouse para a impressão do TEF
iRetorno = Bematech_FI_IniciaModoTEF()
cArquivoTemp = Dir(App.Path & "\IMPRIME.TXT")
If cArquivoTemp <> "" Then
&
nbsp; iRetorno = Bematech_FI_AbreComprovanteNaoFiscalVinculado(cFormaPGTO, _
cValorPago, cCOO)
VerificaRetornoFuncaoImpressora (iRetorno)
End If
.
.
.
‘ 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() As Boolean
Dim cLinhaArquivo As String
Dim cConteudo As String
Dim cArquivoTEF As String
cLinhaArquivo = ""
cConteudo = ""
Open "C:\TEF_DIAL\RESP\INTPOS.001" For Input As #1
Do While Not EOF(1)
Line Input #1, cLinhaArquivo
If (Mid(cLinhaArquivo, 1, 3) = "001") Or _
(Mid(cLinhaArquivo, 1, 3) = "002") Or _
(Mid(cLinhaArquivo, 1, 3) = "010") Or _
(Mid(cLinhaArquivo, 1, 3) = "012") Or _
(Mid(cLinhaArquivo, 1, 3) = "027") Then
cConteudo = cConteudo + cLinhaArquivo + Chr(13) + Chr(10)
End If
If (Mid(cLinhaArquivo, 1, 3) = "999") Then
cConteudo = cConteudo + cLinhaArquivo
End If
Loop
Close #1
cConteudo = "000-000 = CNF" + Chr(13) + Chr(10) + cConteudo
Open App.Path & "\INTPOS.001" For Binary As #1 Put #1, , cConteudo
Close #1
FileCopy App.Path & "\INTPOS.001", "C:\TEF_DIAL\REQ\INTPOS.001"
Kill App.Path & "\INTPOS.001"
cArquivoSTS = Dir("C:\TEF_DIAL\RESP\INTPOS.STS")
If (cArquivoSTS <> "") Then
Kill "C:\TEF_DIAL\RESP\INTPOS.STS"
End If
cArquivoINTPOS = Dir("C:\TEF_DIAL\RESP\INTPOS.001")
If (cArquivoSTS <> "") Then
Kill "C:\TEF_DIAL\RESP\INTPOS.001"
End If
’ Se o arquivo TEF.TXT, que identifica que houve uma transação impressa
’ existir, o mesmo será exluído.
cArquivoTEF = ""
cArquivoTEF = Dir(App.Path & "\TEF.TXT")
If cArquivoTEF <> "" Then
Kill App.Path & "\TEF.TXT"
End If
End Function
‘ Função: NaoConfirmaTransacao
‘ Objetivo: Confirmar a Transação TEF
‘ Parâmetros: não há
‘ Retorno: True para OK ou False para não OK
Function NaoConfirmaTransacao() As Boolean
Dim cLinhaArquivo As String, cConteudo As String
Dim cValor As String, cNomeRede As String, cNSU As String
cLinhaArquivo = ""
cConteudo = ""
Open "C:\TEF_DIAL\RESP\INTPOS.001" For Input As #1
Do While Not EOF(1)
Line Input #1, cLinhaArquivo
If (Mid(cLinhaArquivo, 1, 3) = "001") Then
cConteudo = cConteudo + cLinhaArquivo + Chr(13) + Chr(10)
End If
If (Mid(cLinhaArquivo, 1, 3) = "003") Then
cValor = Mid(cLinhaArquivo, 11, Len(cLinhaArquivo) – 10)
End If
If (Mid(cLinhaArquivo, 1, 3) = "010") Then
cConteudo = cConteudo + cLinhaArquivo + Chr(13) + Chr(10)
cNomeRede = Mid(cLinhaArquivo, 11, Len(cLinhaArquivo) – 10)
End If
If (Mid(cLinhaArquivo, 1, 3) = "012") Then
cConteudo = cConteudo + cLinhaArquivo + Chr(13) + Chr(10)
cNSU = Mid(cLinhaArquivo, 11, Len(cLinhaArquivo) – 10)
End If
If (Mid(cLinhaArquivo, 1, 3) = "027") Then
cConteudo = cConteudo + cLinhaArquivo + Chr(13) + Chr(10)
End If
If (Mid(cLinhaArquivo, 1, 3) = "999") Then
cConteudo = cConteudo + cLinhaArquivo
End If
Loop
Close #1
cConteudo = "000-000 = NCN" + Chr(13) + Chr(10) + cConteudo
Open App.Path & "\INTPOS.001" For Binary As #1
Put #1, , cConteudo
Close #1
FileCopy App.Path & "\INTPOS.001", "C:\TEF_DIAL\REQ\INTPOS.001"
Kill App.Path & "\INTPOS.001"
cArquivoSTS = Dir("C:\TEF_DIAL\RESP\INTPOS.STS")
If (cArquivoSTS <> "") Then
Kill "C:\TEF_DIAL\RESP\INTPOS.STS"
End If
cArquivoINTPOS = Dir("C:\TEF_DIAL\RESP\INTPOS.001")
If (cArquivoSTS <> "") Then
Kill "C:\TEF_DIAL\RESP\INTPOS.001"
End If
’ Se o arquivo TEF.TXT, que identifica que houve uma transação impressa
’ existir, o mesmo será exluído.
cArquivoTEF = ""
cArquivoTEF = Dir(App.Path & "\TEF.TXT")
If cArquivoTEF <> "" Then
Kill App.Path & "\TEF.TXT"
End If
MsgBox "Cancelada a Transação" + Chr(13) + Chr(13) + "Rede: " + _
cNomeRede + Chr(13) + "Doc Nº: " + cNSU + Chr(13) + "Valor: " + _
Format(cValor / 100, "#,##0.00"), vbInformation + vbOKOnly, "Atenção"
End Function
<
/font>Boas implementações!
Related posts:
- Edição 40 – Criando a primeira aplicação com o Eclipse Caro parceiro, Na edição 35 de nosso Flash Tip para...
- Transferência Eletrônica de Fundos (T.E.F.) – Discado – Passo 4/10 Confirmando uma transação TEF No passo anterior, realizamos uma venda...
- Edição 45 – Acessando periféricos Caro parceiro, Na edição 44 de nosso Flash Tip, criamos...
- Edição 52 – Agilizando a busca no retorno de status nas impressoras fiscais Bematech Prezado parceiro, Primeiramente, gostaríamos de desejar a você um excelente...
- Edição 72 – Cupom Mania e Portaria CAT-52 Caro Partner e Desenvolvedor, Nesta edição de nosso Flash Tip,...