Business - Automação Comercial

Bematech: Explorando a Classe TEF

Ao longo desse mini-curso sobre nossa ferramenta Bematech Flash Builder - em especial a "Classe TEF" - aprendemos algumas particularidades da ferramenta, criamos uma rotina completa de cupom fiscal e transações de venda a cartão, e também acesso ao módulo administrativo das bandeiras.

por Andre Schikovski



Ao longo desse mini-curso sobre nossa ferramenta Bematech Flash Builder - em especial a "Classe TEF" - aprendemos algumas particularidades da ferramenta, criamos uma rotina completa de cupom fiscal e transações de venda a cartão, e também acesso ao módulo administrativo das bandeiras.

Agora, nesse último Flash-Tip da série sobre a "Classe TEF", vamos voltar nosso foco a uma particularidade importante dessa classe que é a possibilidade de modificação no arquivo Intpos.001.

Essa modificação pode ser necessária em alguns testes durante a homologação nas bandeiras, onde pode ser solicitada a alteração do conteúdo do arquivo ou de verificação de divergências do mesmo, por parte da aplicação.

Como já vimos nos Flash-Tips anteriores, o envio da transação é feito antes da execução da forma de pagamento "Cartão" através do método "CriarSolicitacaoCartao", portanto em nosso exemplo vamos implementar os métodos de modificação do arquivo Intpos.001 logo após popularmos o objeto com os dados da transação.

O processo de modificação do arquivo é simples! Como a ferramenta Flash Builder só cria o arquivo Intpos.001, efetivamente no momento da transação, os dados do arquivo ficam armazenados em um ".xml" dentro da pasta da aplicação (TransacoesTEF.xml), permitindo a alteração do conteúdo antes da criação efetiva do arquivo.

Todo este processo é executado com base no objeto criado pelo método "CriarSolicitacaoCartao" (em nosso exemplo, pelo objeto "minhasolicitacaocartao"), através da propriedade Buffer.

Abaixo, podemos ver alguns métodos da propriedade Buffer:

Nessa imagem, temos o método que usaremos para inserir linhas no arquivo Intpos.001.

Vale lembrar que as linhas do arquivo Intpos.001 são contadas a partir da posição 0 (zero), sendo então 0 (zero) a primeira linha do arquivo, 1 (um) a segunda, 2 (dois) a terceira e, assim, sucessivamente.

Modificando o conteúdo do Intpos.001 (inserir e apagar linhas inteiras)

Para modificar uma linha completa no arquivo, podemos usar os dois métodos descritos abaixo:

Insert Método usado para inserir uma linha no arquivo.
minhasolicitacaocartao.Buffer.Insert( 4, "777-777 = ABCDEFG\r\n" )
RemoveAt Método usado para remover uma linha do arquivo.
minhasolicitacaocartao.Buffer.RemoveAt( 1 )

Modificando linhas específicas do arquivo Intpos.001

Além de podermos adicionar ou remover linhas do arquivo Intpos.001, também temos a possibilidade de modificar linhas específicas no arquivo. Abaixo temos as principais modificações que podem ser feitas no arquivo:

Header Linha de cabeçalho do arquivo aonde contém o tipo de transação a ser realizada. Em nosso exemplo, modificamos o tipo de transação de "CRT" (Cartão) para "CHQ" (Cheque).
minhasolicitacaocartao.Header = "CHQ"
Identificacao Linha que armazena o número da transação (NSU). Em nosso exemplo registramos um NSU fictício com 6 posições.
minhasolicitacaocartao.Identificacao = "123456"
CupomVinculado Modificamos o número do cupom dentro do Intpos.001.
minhasolicitacaocartao.CupomVinculado = "999999";

Vamos visualizar na prática, um exemplo de mudança do header do arquivo:

- em C#

private void btnefetuapagamento_Click(object sender, EventArgs e)
{
try
{
// MÉTODO PARA EXECUÇÃO DA FORMA DE PAGAMENTO QUANDO NÃO UTILIZARMOS
// A OPÇÃO DE "Cartao".
if (txtdescforma.Text != "Cartao")
{
BematechFiscal.Cupom.EfetuarPagamento( txtdescforma.Text, Convert.ToDecimal( txtvalorforma.Text ) );
}
else
{
// MÉTODO PARA CRIAÇÃO DA CHAMADA AO MÓDULO DA BANDEIRA,
// PARA EXECUÇÃO DA TRANSAÇÃO TEF

SolicitacaoCartao minhasolicitacaocartao;

minhasolicitacaocartao = BematechFiscal.TEF.CriarSolicitacaoCartao( txtdescforma.Text, Convert.ToDecimal( txtvalorforma.Text ) );

// ALTERAÇÃO DO HEADER DO ARQUIVO

minhasolicitacaocartao.Header = "CHQ";

// MÉTODO PARA ENVIO DA SOLICITAÇÃO (CRIAÇÃO DO OBJETO ENVIAR SOLICITAÇÃO)
// E ENVIO AO GP.

Transacao minhatransacao = BematechFiscal.TEF.EnviarSolicitacao( minhasolicitacaocartao );
if (minhatransacao.Status != "0")
{
MessageBox.Show(minhatransacao.TextoOperador);
return;
}
else
{
MessageBox.Show(minhatransacao.TextoOperador);
}

// EXECUÇÃO DA FORMA DE PAGAMENTO NA IMPRESSORA FISCAL.

BematechFiscal.Cupom.EfetuarPagamento(txtdescforma.Text, Convert.ToDecimal( txtvalorforma.Text ) );
while (true)
{
try
{

// CRIAÇÃO DO OBJETO MINHASOLICITACAOCONFIRMACAO PARA INICIAR A CONFIRMAÇÃO
// DAS TRANSAÇÕES TEF

SolicitacaoConfirmacao minhasolicitacaoconfirmacao = BematechFiscal.TEF.CriarSolicitacaoConfirmacao();
BematechFiscal.TEF.ConfirmarTransacao(minhasolicitacaoconfirmacao);
break;
}
catch (TEFException ErroTEF)
{
MessageBox.Show(ErroTEF.Message);
}
}
}
}
catch (FiscalException MensagemErro)
{
MessageBox.Show("MensagemErro: " + MensagemErro.Message);
}
catch (GerenciadorInativoException MensagemErro)
{
MessageBox.Show("MensagemErro: " + MensagemErro.Message);
}
}

- em VB.NET

Private Sub btnefetuapagamento_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnefetuapagamento.Click
Try
" MÉTODO PARA EXECUÇÃO DA FORMA DE PAGAMENTO QUANDO NÃO UTILIZARMOS
" A OPÇÃO DE "Cartao".

If (txtdescforma.Text <> "Cartao") Then
BematechFiscal.Cupom.EfetuarPagamento( txtdescforma.Text, Convert.ToDecimal( txtvalorforma.Text ) )
Else

" MÉTODO PARA CRIAÇÃO DA CHAMADA AO MÓDULO DA BANDEIRA, PARA EXECUÇÃO
" DA TRANSAÇÃO TEF

Dim minhasolicitacaocartao As SolicitacaoCartao = BematechFiscal.TEF.CriarSolicitacaoCartao(txtdescforma.Text, Convert.ToDecimal( txtvalorforma.Text))

" ALTERAÇÃO DO HEADER DO ARQUIVO

minhasolicitacaocartao.Header = "CHQ"

" MÉTODO PARA ENVIO DA SOLICITAÇÃO (CRIAÇÃO DO OBJETO ENVIAR SOLICITAÇÃO) E ENVIO
" AO GP

Dim minhatransacao As Transacao = BematechFiscal.TEF.EnviarSolicitacao( minhasolicitacaocartao)
If (minhatransacao.Status <> "0") Then
MessageBox.Show(minhatransacao.TextoOperador)
Return
Else
MessageBox.Show(minhatransacao.TextoOperador)
End If

" EXECUÇÃO DA FORMA DE PAGAMENTO NA IMPRESSORA FISCAL

BematechFiscal.Cupom.EfetuarPagamento(txtdescforma.Text, Convert.ToDecimal( txtvalorforma.Text))
While (True)
Try
" CRIAÇÃO DO OBJETO MINHASOLICITACAOCONFIRMACAO PARA INICIAR A CONFIRMACÃO DAS
" TRANSAÇÕES TEF EFETAUDAS

Dim minhasolicitacaoconfirmacao As SolicitacaoConfirmacao = BematechFiscal.TEF.CriarSolicitacaoConfirmacao()
BematechFiscal.TEF.ConfirmarTransacao(minhasolicitacaoconfirmacao)
Exit While
Catch MensagemErro As TEFException
MsgBox("MensagemErro: " + MensagemErro.Message)
End Try
End While
End If
Catch MensagemErro As FiscalException
MsgBox("MensagemErro: " + MensagemErro.Message)
Catch MensagemErro As GerenciadorInativoException
MsgBox("MensagemErro: " + MensagemErro.Message)
End Try
End Sub

Neste exemplo, como estamos fazendo uma venda TEF, o header do arquivo é identificado como "CRT" que indica que a transação executa é do tipo "Cartão":

Nesta imagem, percebemos a modificação do header do arquivo para "CHQ" (Cheque), e na execução do código teremos um alerta de erro, devido à diferença de conteúdo deste arquivo:

Assim, concluindo nosso aprendizado sobre a "Classe TEF" da ferramenta Bematech Flash Builder.

Esperamos que esta edição e todas as demais apresentadas, tenham sido de grande ajuda à você nosso parceiro de software que desenvolve para a plataforma .NET, e que procurava uma ferramenta de altíssimo nível em facilidade de integração, compreensão e rapidez.

Agradecemos muito por sua atenção e nos vemos nos próximos Flash-Tips!

Caso deseja receber os exemplos em C# ou VB.NET apresentados nestas edições, nos envie um email para partners@bematech.com.br.

Boas implementações!

Andre Schikovski

Andre Schikovski