Tratando a situação de falta de comunicação com o ECF
Neste passo, vamos desenvolver as rotinas de tratamento de erro de comunicação com a impressora, onde estaremos utilizando parte das rotinas anteriores (funções ImprimeTEF e ImprimeGerencial), apenas destacando as implementações do tratamento.
procedure TfrmPrincipal.cmdVendaCupomTEFClick(Sender: TObject);
var cCodigoProduto, cDescricaoProduto, cAliquota, cTipoQtde,
cQtde, cTipoDesconto, cValorItem, cValorDesconto,
cAcrescimoDesconto, cTipoAcrescimoDesconto,
cValorAcrescimoDesconto, cFormaPGTO, cMSGPromocional,
cValorPago, cNumeroCupom, cSaltaLinha: string;
iTEF: integer;
cIdentificacao: TDateTime;
begin
// Abre Cupom Fiscal, Vende o Item e Fecha Cupom Fiscal
iRetorno := Bematech_FI_AbreCupom( pchar( ” ) );
if ( VerificaRetornoFuncaoImpressora( iRetorno ) ) then
begin cCodigoProduto := ’1234567890123′;
cDescricaoProduto := ‘Teste de Venda de Item…’;
cAliquota := ‘II’; cTipoQtde := ‘I’; cQtde := ’1′;
cValorItem := ’1,00′; cTipoDesconto := ‘%’;
cValorDesconto := ’00,00′;
iRetorno := Bematech_FI_VendeItem( pchar( cCodigoProduto ),
pchar( cDescricaoProduto ), pchar( cAliquota ),
pchar( cTipoQtde ), pchar( cQtde ), 2, pchar( cValorItem ),
pchar( cTipoDesconto ), pchar( cValorDesconto ) );
if ( VerificaRetornoFuncaoImpressora( iRetorno ) ) then
begin
cAcrescimoDesconto := ‘A’;
cTipoAcrescimoDesconto := ‘%’;
cValorAcrescimoDesconto := ’00,00′;
iRetorno := Bematech_FI_IniciaFechamentoCupom(
pchar( cAcrescimoDesconto ),
pchar( cTipoAcrescimoDesconto ),
pchar( cValorAcrescimoDesconto ) );
if ( VerificaRetornoFuncaoImpressora( iRetorno ) ) then
begin
cFormaPGTO := ‘Cartao Credito’;
cValorPago := ’1,00′;
SetLength( cNumeroCupom, 6 );
iRetorno := Bematech_FI_NumeroCupom( cNumeroCupom );
VerificaRetornoFuncaoImpressora( iRetorno );
cIdentificacao := Time;
iTEF := RealizaTransacao( cIdentificacao,
cNumeroCupom, FormatFloat( cValorPago, 0 ) );
if ( iTEF = 1 ) then
begin iRetorno := Bematech_FI_EfetuaFormaPagamento(
pchar( cFormaPGTO ), pchar( cValorPago ) );
if ( VerificaRetornoFuncaoImpressora( iRetorno ) )
then
begin
cMSGPromocional := ‘Obrigado, volte sempre !!!’;
iRetorno := Bematech_FI_TerminaFechamentoCupom(
pchar( cMSGPromocional ) );
VerificaRetornoFuncaoImpressora( iRetorno );
if not ( ImprimeTransacao( cFormaPGTO,
cValorPago, cNumeroCupom,
cIdentificacao ) ) then
NaoConfirmaTransacao
else
ConfirmaTransacao;
end;
end;
if ( iTEF = -1 ) then
Application.MessageBox(
‘Gerencial Padrão não está ativo !’, ‘Atenção’,
MB_IconError + MB_OK );
&nbs
p; // Se a transação não for aprovada, deve-se permitir
// a escolha de outra forma de pagamento. Neste caso,
// está sendo utilizado "Dinheiro" como exemplo.
if ( iTEF = -2 ) or ( iTEF = 0 ) then
begin
cFormaPGTO := ‘Dinheiro’;
iRetorno := Bematech_FI_EfetuaFormaPagamento(
pchar( cFormaPGTO ), pchar( cValorPago ) );
if ( VerificaRetornoFuncaoImpressora( iRetorno ) )
then
begin
cMSGPromocional :=
‘Obrigado, volte sempre !!!’;
iRetorno :=
Bematech_FI_TerminaFechamentoCupom(
pchar( cMSGPromocional ) );
VerificaRetornoFuncaoImpressora(
iRetorno );
end;
end;
end;
end;
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
// 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 ) );
VerificaRetornoFuncaoImpressora( iRetorno )
end;
AssignFile( cArquivo, ‘IMPRIME.TXT’ );
begin
Reset( cArquivo );
cConteudo := ”;
cLinha := ”;
while not EOF( cArquivo ) do
begin
ReadLn( cArquivo, cLinha );
cConteudo := cConteudo + cLinha + #13 + #10;
iRetorno := Bematech_FI_UsaComprovanteNaoFiscalVinculado( pchar(
cLinha ) + #13 );
// Aqui é feito o tratamento de erro de comunicação com a
// impressora (desligamento da impressora durante a impressão do
// comprovante).
if not ( VerificaRetornoFuncaoImpressora( iRetorno ) ) then
begin
iRetorno := Bematech_FI_FinalizaModoTEF();
if ( Application.MessageBox( ‘A impressora não responde!’ +
#13 + ‘Deseja imprimir novamente?’, ‘Atenção’,
MB_IconInformation + MB_YESNO ) = IDYES ) then
begin
CloseFile( cArquivo );
iRetorno:=Bematech_FI_FechaComprovanteNaoFiscalVinculado;
if ( ImprimeGerencial = 1 ) then
begin
&nb
sp; result := true; exit;
end
else
begin
result := false; exit;
end;
end
else
begin
CloseFile( cArquivo );
iRetorno := Bematech_FI_FechaComprovanteNaoFiscalVinculado;
result := false; exit;
end;
end
else
if EOF( cArquivo ) then
begin
.
.
.
////////////////////////////////////////////////////////////////////////////////
// Função: ImprimeGerencial
// Objetivo: Imprimir através do Relatório Gerencial a transação efetuada.
// Retorno: 1 para OK ou diferente de 1 para não OK
////////////////////////////////////////////////////////////////////////////////
function ImprimeGerencial: integer;
var cConteudo, cLinha, cSaltaLinha, cLinhaArquivo: string;
cArquivo : TextFile;
iTentativas, iVezes: integer;
cMensagem : TForm;
bTransacao: boolean;
begin
if FileExists( ‘IMPRIME.TXT’) then
DeleteFile( ‘IMPRIME.TXT’ );
result := 1;
for iTentativas := 1 to 7 do
begin
.
.
.
// Bloqueia o teclado e o mouse para a impressão do TEF
iRetorno := Bematech_FI_IniciaModoTEF();
if FileExists( ‘IMPRIME.TXT’) then
begin
AssignFile( cArquivo, ‘IMPRIME.TXT’ );
Reset( cArquivo );
cConteudo := ”;
cLinha := ”;
while not EOF( cArquivo ) do
begin
ReadLn( cArquivo, cLinha );
cConteudo := cConteudo + cLinha + #13 + #10;
iRetorno := Bematech_FI_RelatorioGerencial( pchar( cLinha )
+ #13 );
// Aqui é feito o tratamento de erro de comunicação com a impressora
// (desligamento da impressora durante a impressão do comprovante).
if not ( VerificaRetornoFuncaoImpressora( iRetorno ) ) then
begin
iRetorno := Bematech_FI_FinalizaModoTEF();
if ( Application.MessageBox( ‘A impressora não responde!’ +
#13 + ‘Deseja imprimir novamente?’, ‘Atenção’,
MB_IconInformation + MB_YESNO ) = IDYES ) then
begin
CloseFile( cArquivo );
iRetorno := Bematech_FI_FechaRelatorioGerencial;
ImprimeGerencial;
exit;
end
else
begin
CloseFile( cArquivo );
iRetorno := Bematech_FI_FechaRelatorioGerencial;
result := 0;
exit;
end;
end;
.
.
.
Private Sub cmdVendaTEF_Click()
Dim cIdentificacao As String, cNumeroCupom As String, cValorPago As String
Dim cFormaPGTO As String
‘ Abre Cupom Fiscal, Vende o Item e Fecha Cupom Fiscal
iRetorno = Bematech_FI_AbreCupom("")
If (VerificaRetornoFuncaoImpressora(iRetorno)) Then
iRetorno = Bematech_FI_VendeItem("1234567890123", _
"Teste de Venda de Item…", _
"II", "I", "1", 2, "1,00", "%", "00,00")
If (VerificaRetornoFuncaoImpressora(iRetorno)) Then
iRetorno = Bematech_FI_IniciaFechamentoCupom("A", "%", "00,00")
If (VerificaRetornoFuncaoImpressora(iRetorno)) Then
cFormaPGTO = "Cartao Credito"
cValorPago = "100"
cNumeroCupom = Space(6)
iRetorno = Bematech_FI_NumeroCupom(cNumeroCupom)
VerificaRetornoFuncaoImpressora (iRetorno)
cIdentificacao = Time()
iTEF = RealizaTransacao(cIdentificacao, cNumeroCupom, cValorPago)
If (iTEF = 1) Then
iRetorno = Bematech_FI_EfetuaFormaPagamento(cFormaPGTO, _
cValorPago)
If (VerificaRetornoFuncaoImpressora(iRetorno)) Then
cMSGPromocional = "Obrigado, volte sempre !!!"
iRetorno = Bematech_FI_TerminaFechamentoCupom(cMSGPromocional)
VerificaRetornoFuncaoImpressora (iRetorno)
If (ImprimeTransacao(cFormaPGTO, cValorPago, cNumeroCupom, _
cIdentificacao)) Then
ConfirmaTransacao
Else
NaoConfirmaTransacao
End If
End If
End If
If (iTEF = -1) Then
MsgBox "Gerencial Padrão não está ativo !", vbOKOnly + _
vbInformation, "Atenção"
End If
’ Se a transação não for aprovada, deve-se permitir a escolha de
‘ outra forma de pagamento. Neste caso, está sendo utilizado
‘ "Dinheiro" como exemplo
If (iTEF = -2) Or (iTEF = 0) Then
cFormaPGTO = "Dinheiro"
iRetorno = Bematech_FI_EfetuaFormaPagamento(cFormaPGTO, _
cValorPago)
If (VerificaRetornoFuncaoImpressora(iRetorno)) Then
cMSGPromocional = "Obrigado, volte sempre !!!" + Chr(13)
iRetorno = Bematech_FI_TerminaFechamentoCupom(cMSGPromocional)
VerificaRetornoFuncaoImpressora (iRetorno)
End If
End If
End If
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
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
iRetorno = Bematech_FI_AbreComprovanteNaoFiscalVinculado(cFormaPGTO, _
cValorPago, cCOO)
VerificaRetornoFuncaoImpressora (iRetorno)
End If
Open App.Path & "\IMPRIME.TXT" For Input As #1
cConteudo = ""
cLinha = ""
Do While Not EOF(1)
Line Input
#1, cLinha
cConteudo = cConteudo + cLinha + Chr(13) + Chr(10)
iRetorno = Bematech_FI_UsaComprovanteNaoFiscalVinculado(cLinha + Chr(13))
‘ Aqui é feito o tratamento de erro de comunicação com a impressora
‘ (desligamento da impressora durante a impressão do comprovante).
If Not (VerificaRetornoFuncaoImpressora(iRetorno)) Then
iRetorno = Bematech_FI_FinalizaModoTEF()
If MsgBox("A impressora não responde." & Chr(13) & _
"Deseja imprimir novamente ?", vbQuestion + vbYesNo, _
"Atenção") = vbYes Then
Close #1
iRetorno = Bematech_FI_FechaComprovanteNaoFiscalVinculado()
If (ImprimeGerencial) Then
ImprimeTransacao = iImprimeTransacao
Exit Function
Else
iImprimeTransacao = 0
ImprimeTransacao = iImprimeTransacao
Exit Function
End If
Else
Close #1
iRetorno = Bematech_FI_FechaComprovanteNaoFiscalVinculado()
iImprimeTransacao = 0
ImprimeTransacao = iImprimeTransacao
Exit Function
End If
Else
If EOF(1) Then
.
.
.
‘ Função: ImprimeGerencial
‘ Objetivo: Imprimir através do Relatório Gerencial a transação efetuada.
‘ Retorno: 1 para OK ou diferente de 1 para não OK
Function ImprimeGerencial() As Integer
Dim cConteudo As String, cLinha As String, cSaltaLinha As String, _
cLinhaArquivo As String
Dim iTentativas As Integer, iVezes As Integer, _
iImprimeGerencial As Integer
Dim bTransacao As Boolean
cArquivoTemp = Dir(App.Path & "\IMPRIME.TXT")
If cArquivoTemp <> "" Then
Kill App.Path & "\IMPRIME.TXT"
End If
iImprimeGerencial = 1
For iTentativas = 1 To 7
.
.
.
’ 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
Open App.Path & "\IMPRIME.TXT" For Input As #1
cConteudo = ""
cLinha = ""
Do While Not EOF(1)
Line Input #1, cLinha
cConteudo = cConteudo + cLinha + Chr(13) + Chr(10)
iRetorno = Bematech_FI_RelatorioGerencial(cLinha + Chr(13))
‘ Aqui é feito o tratamento de erro de comunicação com a impressora
‘ (desligamento da impressora durante a impressão do comprovante).
If Not (VerificaRetornoFuncaoImpressora(iRetorno)) Then
iRetorno = Bematech_FI_FinalizaModoTEF()
If MsgBox("A impressora não responde." & Chr(13) & _
"Deseja imprimir novamente ?", vbQuestion + vbYesNo, _
"Atenção") = vbYes Then
Close #1
iRetorno = Bematech_FI_FechaRelatorioGerencial()
ImprimeGerencial
ImprimeGerencial = iImprimeGerencial
Exit Function
Else
Close #1
iRetorno = Bematech_FI_FechaRelatorioGerencial()
iImprimeGerencial = 0
ImprimeGerencial = iImprimeGerencial
Exit Function
End If
End If
.
.
.
Boas implementações!
Related posts:
- Identifique seu Cliente através de um Código de Barras Você já imaginou poder identificar seu cliente através de um...
- Bematech FlashTip – 22a. Edição – Criando menus e trabalhando com funções de teclado e entrada de dados Caro parceiro, Na edição passada, preparamos todo o ambiente de...
- Edição 65 – Códigos de Barras no ECF Caro parceiro, Nesta edição de nosso Flash Tip, vamos conhecer...
- Edição 77 – Imprimindo Códigos de Barras na Impressora Não Fiscal Caro Partner e Desenvolvedor, Nesta edição de nosso Flash Tip,...
- Edição 99 – Programando os Relatórios do PAF-ECF Caro Partner e Desenvolvedor de Software, A Bematech criou no...