Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 3458 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Olá pessoal, boa tarde.

A propriedade Saque funciona?

Ou temos que fazer baseado no ValorTotal?

Alguém teve problema fazendo multiplos cartões e saque ao mesmo tempo?

Obrigado,

Edvaldo

  • Fundadores
Postado

A Saque funciona em alguns TEFs... como por exemplo do TEF dedicado, que tem campo específico para isso...

No TEF discado ela não existe, use a propriedade ValorTotal e compare com o Valor que vc enviou...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Nesse caso, considere o seguinte:

Venda R$3,00

1) Pagamento Cartão R$1,00, com saque R$1,00 (ValorTotal = R$2,00)

2) Pagamento Cartão R$2,00 (diferença)

No segundo pagamento ao chamar a procedure: VerificarTransacaoPagamento

(...)

if (Valor > RespostasPendentes.SaldoRestante ) then

       raise Exception.Create( ACBrStr( 'Operação TEF deve ser igual ao '+

                                        'Saldo a Pagar' ) );

(...)
Da erro porque a propriedade SaldoRestante, retorna R$1,00, ja que a propriedade Saque esta Zero.
function TACBrTEFDRespostasPendentes.GetSaldoRestante : Double;

var

   I : Integer;

   TotalPagoENaoImpresso : Double ;

begin

  TotalPagoENaoImpresso := 0 ;

  For I := 0 to Count-1 do

  begin

     with TACBrTEFDResp(Items[I]) do

     begin

        if OrdemPagamento = 0 then  // Ainda nao imprimiu no ECF ?

           TotalPagoENaoImpresso := TotalPagoENaoImpresso + (ValorTotal - Saque) ;

     end ;

  end;


  TotalPagoENaoImpresso := RoundTo( TotalPagoENaoImpresso, -2);


  Result := RoundTo( SaldoAPagar - TotalPagoENaoImpresso, -2) ;

end;

Aqui eu ja homologuei, só estou postando caso alguém passe pelo mesmo problema que o meu, pra não perder tempo no dia da homologação, apenas mudei a propriedade Saque que era readonly, e abasteci ao final de cada CRT, quando verifico se o valorTotal é maior que o valor solicitado.

Seria muito complicado adicionar esse Saque pra ser preenchido no discado também?

Um abraço,

Edvaldo

  • Fundadores
Postado

Se desejar sugerir mudanças nos fontes, por favor anexe a Unit ou um patch para ser analisado...

Este problema que você relatou, só ocorrerá se a propriedade AutoEfetuarPagamento = True, o que deve ser evitado...

Pois quando essa propriedade é ativada, em alguns ECFs (como por exemplo na Bematech) não será possível abrir vários vinculados com o mesmo índice de forma de pagamento....

Quando AutoEfetuarPagamento = False, o ACBrTEFD imprime apenas um Pagamento de Cartão (com o Valor Total de todas as transações)... Abre apenas 1 vinculado, e imprime todos os comprovantes, de todos os cartões dentro desse vinculado... E também nesse caso, o Valor de Troco para o SAQUE funcionará corretamente

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Eu utilizo AutoEfetuarPagamento = False, e não utilizo o ECF do acbr, utilizo um próprio, sim abro apenas um vinculado.

O problema não esta na hora de imprimir, o problema esta na hora de chamar o segundo cartão

function TACBrTEFDRespostasPendentes.GetSaldoRestante : Double;

var

   I : Integer;

   TotalPagoENaoImpresso : Double ;

begin

  TotalPagoENaoImpresso := 0 ;

  For I := 0 to Count-1 do

  begin

     with TACBrTEFDResp(Items[I]) do

     begin

        if OrdemPagamento = 0 then  // Ainda nao imprimiu no ECF ?

           TotalPagoENaoImpresso := TotalPagoENaoImpresso + (ValorTotal - Saque) ;

     end ;

  end;


  TotalPagoENaoImpresso := RoundTo( TotalPagoENaoImpresso, -2);


  Result := RoundTo( SaldoAPagar - TotalPagoENaoImpresso, -2) ;

end;

Como você disse a propriedade Saque só funciona em alguns TEFs Dedicado, nos outros vai estar com valor Zero, certo? No TEF discado ao chamar o segundo cartão, essa função GetSaldoRestante vai retorna o total ja passado em cartão, mas não vai descontar o valor do Saque que vai estar zero, dando a impressão que você ja passou R$2,00 e não R$1,00 como seria o correto.

  • Fundadores
Postado

Humm... pensando bem, eu apenas homologuei TEF dedicado com o TEFD...

Infelizmente não tenho conhecimento ou motivação para analisar isso a fundo... Acho que você está mais apto do que eu para sugerir modificações nos fontes....

Se desejar, por favor forneça as Unit modificadas ou um Patch

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Membros Pro
Postado

Eu também estou passando dificuldades devido a propriedade SAQUE estar zerada.

Estou tentando fazer uma alteração e não estou tendo sucesso, visto que não entendo sobre criação de componentes, classes, etc...

O que ocorre é o seguinte:

Se você iniciar uma transação com 2,00 e for feito um saque de 3,00 será dado o retorno de 5,00, como se a operação tivesse sido feita com 5,00 quando na realidade é 2,00.

O que eu estou tentando fazer é que dentro da função CRT a mesma guarde em uma variável pública a propriedade valor enviada para a CRT.

O segundo passo é na função CONTEUDOTOPROPERTY quando vier o retorno do CAMPO 003 o valor do saque será o valortotal - o valor armazenado na CRT.

Ex.:

TRANSAÇÃO = 10,00

SAQUE = 5,00

TOTAL = 15,00

1 - Envia CRT(10,00)

2 - CRT armazena varíavel VALORSEMSAQUE = 10,00

3 - Cliente faz saque de 5,00.

4 - CONTEUDOTOPROPERTY faz a seguinte operação:

Campo 003 >>> Valortotal = ValorRetornado

ValorSaque = ValorRetornado - VALORSEMSAQUE

Espero que tenha sido claro. Estou quebrando a cabeça e não consigo fazer este procedimento pois uma classe não enxerga a outra e assim vai.

Postado

Se você quer saber apenas se houve saque e de quanto foi, basta você comparar se o valor que você passou para o CRT for menor que o ValorTotal.

Quanto ao problema do Saque estar zerado, acredito que encontrei uma forma de resolver o problema e ainda corrigir outro provável erro.

Notei que no componente existem as seguintes propriedades:

property SaldoAPagar   : Double read fSaldoAPagar write fSaldoAPagar ;

property SaldoRestante : Double read GetSaldoRestante;


function TACBrTEFDRespostasPendentes.GetSaldoRestante : Double;

var

   I : Integer;

   TotalPagoENaoImpresso : Double ;

begin

  TotalPagoENaoImpresso := 0 ;

  For I := 0 to Count-1 do

  begin

     with TACBrTEFDResp(Items[I]) do

     begin

        if OrdemPagamento = 0 then  // Ainda nao imprimiu no ECF ?

           TotalPagoENaoImpresso := TotalPagoENaoImpresso + (ValorTotal - Saque) ;

     end ;

  end;


  TotalPagoENaoImpresso := RoundTo( TotalPagoENaoImpresso, -2);


  Result := RoundTo( SaldoAPagar - TotalPagoENaoImpresso, -2) ;}

end;

A função GetSaldoRestante não leva em consideração por exemplo o que eu paguei em dinheiro e ainda diminui do SaldoAPagar ficando um valor que não é o que realmente falta ser pago. Por exemplo: Compra R$23,00 Dinheiro R$3,00 1º Cartão R$5,00 Ao chamar o segundo cartão o SaldoAPagar é R$15,00, só que como a Função GetSaldoRestante desconta o TotalPagoENaoImpresso o valor retornado por ela é R$10,00, o que causa um erro aqui:
Procedure TACBrTEFDClass.VerificarTransacaoPagamento(Valor : Double );

(...)

    if (Valor > RespostasPendentes.SaldoRestante ) then

       raise Exception.Create( ACBrStr( 'Operação TEF deve ser igual ao '+

                                        'Saldo a Pagar' ) );

(...)
Uma vez que estou mandando R$15,00 só que a função retorna R$10,00. O que poderia ser feito era remover a propriedade SaldoRestante juntamente com a função GetSaldoRestante, usariámos apenas a propriedade SaldoAPagar, ficando a cargo do usuário passar o valor que realmente falta ser pago através OnInfoECF, como já é feito. Fiz essas modificações aqui e além de resolver o erro relatado acima referente a propriedade Saque, ainda resolveu esse segundo erro. Se quiser fazer um teste sem alterar muito os fontes, altere a função GetSaldoRestante para o seguinte:
function TACBrTEFDRespostasPendentes.GetSaldoRestante : Double;

{var

   I : Integer;

   TotalPagoENaoImpresso : Double ;}

begin

{  TotalPagoENaoImpresso := 0 ;

  For I := 0 to Count-1 do

  begin

     with TACBrTEFDResp(Items[I]) do

     begin

        if OrdemPagamento = 0 then  // Ainda nao imprimiu no ECF ?

           TotalPagoENaoImpresso := TotalPagoENaoImpresso + (ValorTotal - Saque) ;

     end ;

  end;


  TotalPagoENaoImpresso := RoundTo( TotalPagoENaoImpresso, -2);


  Result := RoundTo( SaldoAPagar - TotalPagoENaoImpresso, -2) ;}

  Result := SaldoAPagar;

end;

  • Fundadores
Postado

Para que o TEFD saiba que houve pagamento em dinheiro, é necessário que vc informe o valor correto em OnInfoECF... No demo temos:

     ineSubTotal :
RetornoECF := FloatToStr( ACBrECF1.Subtotal-ACBrECF1.TotalPago ) ;[/code]

Se vc não enviou as Formas de pagamento para o ECF, ou seja, se vc bufferiza os pagamentos, a função acima obviamente não funcionaria... Mas nesse caso, cabe ao programador calcular o valor já pago, e informar apenas o Restante para o parâmetro RetornoECF

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • 4 anos depois...
  • Este tópico foi criado há 3458 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.