Nesta parte, 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 e, em anexo, seguirão os códigos completos destas duas funções, em Delphi e Visual Basic.
- Exemplo em Delphi
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 );
// 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
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;
.
.
.
Nenhum comentário:
Postar um comentário