Ir para conteúdo
  • Cadastre-se

dev botao

TEF menssagem multiplos cartoes.


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

Recommended Posts

Bom dia amigos, estou com uma problema mas acho que pode ser na minha logica.

preciso de uma ajudo dos amigos novamente. segue a imagem com a menssagem que

esta ocorrendo quando uso multiplos cartoes.

uma compra de 2,00

faço assim.

Na primera vez

1,00 tef

subtotalizo cupom,

efetuaPgto cupom

na ecf ok

quando vou fazer o outro cartao do mesmo jeito.

1,00 tef

aqui ja retorna a menssagem que esta na imagem em anexo..

o engraçado que no DemoTEFD tb faz o mesmo... igualzinho..

segue a imagem tb..

fico no aguardo dos amigos..

Obs:

AutoEfetuaPgto = falso

AutoFinalizaCupom = falso

MuntiplosCartoes = true

no componente.

post-155-13548988223461.jpg

post-155-1354898822377.jpg

post-155-13548988223461.jpg

post-155-1354898822377.jpg

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Confere novamente

mas você está passado 1 real para pagar em seu sistema

e no TEFdemo você está pagando o total que é 2 reais

então ele não vai fechar e consequente vai dar erro ao tentar finalizar

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

Juliomar Marchetti

no demo é outro valor

4,00 foi registrado no ecf

fiz pgto com tef 2,00

quando vou fazer outro

pgto com tef de 2,00 para totalizar 4,00 que foi registrado ele me da aquela msg.. que motra

na imagem do tefdemo.

ou seja ele nao ta me deixando fazer o outro pgto do restante em tef...

dei uma olha da onde ele gera a msg no unit

aqui ta o codigo

Procedure TACBrTEFDClass.VerificarTransacaoPagamento(Valor : Double );

var

SaldoAPagar : Double ;

begin

Valor := RoundTo( Valor, -2);

if (Valor <= 0) then

raise Exception.Create( ACBrStr( 'Valor inválido' ) );

{ Lendo o SubTotal do ECF }

with TACBrTEFD(Owner) do

begin

if not (EstadoECF in ['V','P','N']) then

raise Exception.Create(

ACBrStr('ECF deve estar em Estado de "Venda", "Pagamento" ou "Não Fiscal"') );

SaldoAPagar := InfoECFAsDouble(ineSubTotal) ;

SaldoAPagar := SaldoAPagar - InfoECFAsDouble(ineTotalAPagar,0);

RespostasPendentes.SaldoAPagar := SaldoAPagar ;

if TrocoMaximo <= 0 then

begin !! sera que aqui deveria ser saldoApagar !!

if (Valor > RespostasPendentes.SaldoRestante ) then

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

'Saldo restante a Pagar' ) );

end

else

begin !! sera que aqui deveria ser saldoApagar !!

if (Valor > RespostasPendentes.SaldoRestante + TrocoMaximo ) then

raise Exception.Create( ACBrStr( 'Operação TEF permite '+

'Troco Máximo de '+FormatCurr('0,00',TrocoMaximo) ) );

end ;

if MultiplosCartoes and (NumeroMaximoCartoes > 0) and // Tem multiplos Cartoes ?

!! sera que aqui deveria ser saldoApagar !! (Valor <> RespostasPendentes.SaldoRestante) and // Valor é diferente do Saldo Restante a Pagar ?

((NumeroMaximoCartoes - RespostasPendentes.Count) <= 1) then // Está no último cartão ?

raise Exception.Create( ACBrStr( 'Multiplos Cartões Limitado a '+

IntToStr(NumeroMaximoCartoes)+' operações.'+sLineBreak+

'Esta Operação TEF deve ser igual ao Saldo a Pagar' ) );

end;

end;

quando eu altero para ''RespostasPendentes.SaldoApagar ai sim funciona certinho...

Link para o comentário
Compartilhar em outros sites

  • Fundadores

O problema é como você informa para o componente em "ineSubtotal" e "ineTotalAPagar"... Por favor estude detalhadamente o Demo...

Notei que aparentemente você não está "buferizando" os pagamentos... isso não permitirá a implementação de Cielo Premia... leia as mudanças no ACBrTEFD-Change-Log.txt

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.

Link para o comentário
Compartilhar em outros sites

Boa tarde. Daniel Simoes

Nao to entendendo o seguinte:

O meu evento oninfoecf do tef esta igual ao do demo.

se vc reparar na imagem postada que eu fiz com o demo logo acima tb esta dando a mesma coisa.

segue o trecho do meu codigo:

procedure TFrm_MainP.iTEFInfoECF(Operacao: TACBrTEFDInfoECF;

var RetornoECF: String);

var

ASubTotal: Double;

begin

try

case Operacao of

ineSubTotal : begin

ASubTotal := ImpFiscal.Subtotal;

ASubTotal := ASubTotal - ImpFiscal.TotalPago;

RetornoECF := FloatToStr( ASubTotal );

end;

ineTotalAPagar : begin

RetornoECF := '0';

end;

ineEstadoECF : begin

Case ImpFiscal.Estado of

estLivre : RetornoECF := 'L';

estVenda : RetornoECF := 'V';

estPagamento : RetornoECF := 'P';

estRelatorio : RetornoECF := 'R';

estNaoFiscal : RetornoECF := 'N';

else

RetornoECF := 'O';

end;

end;

end;

finally

Application.ProcessMessages;

end;

end;

segue o do demo tb:

procedure TForm1.ACBrTEFD1InfoECF(Operacao : TACBrTEFDInfoECF;

var RetornoECF : String );

var

ASubTotal: Double;

begin

try

if not ACBrECF1.Ativo then

ACBrECF1.Ativar ;

except

{ Para CliSiTEF ou V&SPague aplique o IF abaixo em sua aplicação, que

permite saber se o Cupom foi concluido mesmo com o ECF desligado }

if (not ACBrTEFD1.TEF.Inicializado) and { Está na inicialização ? }

(Operacao = ineEstadoECF) and { Quer Saber o estado do ECF ? (mas se chegou aqui é pq o ECF já está com problemas) }

(ACBrTEFD1.GPAtual in [gpCliSiTef,gpVeSPague]) then

begin

{ Leia o último Documento Gravado no seu Banco de Dados, e verifique

se o Cupom já foi finalizado,ou se já foi aberto um CCD ou Gerencial...

Exemplo:

Documento.Le(0);

if (Documento.Finalizado) or (pos(Documento.Denominacao,'CC|RG') > 0) then

RetornoECF := 'R'

else

RetornoECF := 'O' ;

}

//RetornoECF := 'O'; // Executará CancelarTransacoesPendentes;

RetornoECF := 'R'; // Executará ConfirmarESolicitarImpressaoTransacoesPendentes;

exit ;

end ;

raise ;

end;

case Operacao of

ineSubTotal :

begin

ASubTotal := ACBrECF1.Subtotal ;

ASubTotal := ASubTotal - ACBrECF1.TotalPago +

StringToFloatDef(edValorDescAcre.Text, 0);

RetornoECF := FloatToStr( ASubTotal ) ;

end;

ineTotalAPagar :

RetornoECF := FloatToStr( CalculaTotalPago );

ineEstadoECF :

begin

Case ACBrECF1.Estado of

estLivre : RetornoECF := 'L' ;

estVenda : RetornoECF := 'V' ;

estPagamento : RetornoECF := 'P' ;

estRelatorio : RetornoECF := 'R' ;

estNaoFiscal : RetornoECF := 'N' ;

else

RetornoECF := 'O' ;

end;

end;

end;

end;

tem alguma coisa de errado com meu codigo.

Link para o comentário
Compartilhar em outros sites

ok. Daniel Simoes

segue um roteiro pelo DemoTefd

Parametros do TEF

ckAutoEfetuarPagamento : falso

ckAutoFinalizarCupom : falso

ckMultiplosCartoes : true

Iniciar venda

ACBrECF1.AbreCupom;

ACBrECF1.VendeItem('12345','PRODUTO TESTE','NN',1,Valor);

ACBrECF1.VendeItem('12345','PRODUTO TESTE','NN',1,Valor);

chama tef. no valor de 1,00

ACBrTEFD1.CRT( StringToFloatDef(edValorTEF.Text, 0) ,edFPGCartao.Text, ACBrECF1.NumCOO);

trz ok

ACBrECF1.SubtotalizaCupom ;

ACBrECF1.EfetuaPagamento( CodFormaPagamento, StringToFloatDef(edValorECF.Text, 0) );

impressora

tef 1,00

falta 1,00

chama tef. no valor de 1,00

ACBrTEFD1.CRT( StringToFloatDef(edValorTEF.Text, 0) ,edFPGCartao.Text, ACBrECF1.NumCOO);

trz ok

ACBrECF1.SubtotalizaCupom ;

ACBrECF1.EfetuaPagamento( CodFormaPagamento, StringToFloatDef(edValorECF.Text, 0) );

ACBrECF1.FechaCupom('Projeto ACBr|http://acbr.sf.net');

ACBrTEFD1.ImprimirTransacoesPendentes;

esta é a sequencia que faço no demoe tb no meu pdv.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Não compreendi... você chama ACBrECF1.SubtotalizaCupom 2 vezes ??

além do mais, de acordo com o Cielo Premia, você não pode subtotalizar o cupom até ter todos os pagamentos definidos (em buffer)

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.

Link para o comentário
Compartilhar em outros sites

Opa, colei errado..

segue denovo o exemplo.

Sobre o Cielo premio eu ainda nao vou homologar...

Iniciar venda

ACBrECF1.AbreCupom;

ACBrECF1.VendeItem('12345','PRODUTO TESTE','NN',1,Valor);

ACBrECF1.VendeItem('12345','PRODUTO TESTE','NN',1,Valor);

chama tef. no valor de 1,00

ACBrTEFD1.CRT( StringToFloatDef(edValorTEF.Text, 0) ,edFPGCartao.Text, ACBrECF1.NumCOO);

trz ok

ACBrECF1.SubtotalizaCupom ;

ACBrECF1.EfetuaPagamento( CodFormaPagamento, StringToFloatDef(edValorECF.Text, 0) );

impressora

tef 1,00

falta 1,00

chama tef. no valor de 1,00

ACBrTEFD1.CRT( StringToFloatDef(edValorTEF.Text, 0) ,edFPGCartao.Text, ACBrECF1.NumCOO);

trz ok

ACBrECF1.EfetuaPagamento( CodFormaPagamento, StringToFloatDef(edValorECF.Text, 0) );

ACBrECF1.FechaCupom('Projeto ACBr|http://acbr.sf.net');

ACBrTEFD1.ImprimirTransacoesPendentes;

é assim que faço no demo.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Por que você está imprimindo as Formas de Pagamento de Cartão ? geralmente o próprio componente que fará isso... e como eu disse antes, você não pode imprimir os pagamentos ou subtotalizar o cupom até ter o total dos pagamentos... isso porque qualquer uma das transações TEF podem conter Descontos do Cielo Premia, que devem ser aplicados na Subtotalização do cupom

  • Curtir 1
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.

Link para o comentário
Compartilhar em outros sites

Ok,

eu entendi..

quando homologuei pela primeira vez o tef sempre fiz desta forma.

eu que jogo na ecf o subtotaliza eo efetuapgto apos a trz ok

e nao o componente. {sempre deu certo com exessção da vinda do cielo premia}.

mas se eu quiser usar desta forma como estou fazendo.. oq devo fazer para nao dar

a msg:

''Operação TEF deve ser limitada ao '+'Saldo restante a Pagar''

existe alguma coisa que posso alterar ou tenho mesmo que armazenar em tempo execução e depois lançar todas na ecf?

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

amigo faz asssim ai

tipo:

total da compra: 100,00

Dinheiro 70,00 (mais não manda para a ECF) somente bufferiza

Cartão 30,00 (chama o CRT)

pode ver que não contem subtotal

ai voce programa os eventos para imprimir as formas de pagamento conforme

OnComandaECF programe esse evento "opeImprimePagamentos :" conforme o exemplo.

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Por que você está imprimindo as Formas de Pagamento de Cartão ? geralmente o próprio componente que fará isso... e como eu disse antes, você não pode imprimir os pagamentos ou subtotalizar o cupom até ter o total dos pagamentos... isso porque qualquer uma das transações TEF podem conter Descontos do Cielo Premia, que devem ser aplicados na Subtotalização do cupom

Olá Daniel como vai?

Bom, estou seguindo seu conselho nesse post. 

 

Seguinte esta é a minha primeira homologação TEF e estou adaptando meu PAF-ECF pra isso. Tenho uma pequena dúvida. 

Fiz todo o ritual de venda.

 

ABRE CUPOM

VENDE ITEN

 

blz

 

estou gravando os pagamentos em buffer.

 

estou fazendo teste por enquanto com 1 plano só por enquanto e estou enganchado.

 

ao finalizar a venda ele passa no InfoECF e esta me retornando a mensagem de: Operação TEF deve ser limitada ao Saldo restante a Pagar.

Sendo que tenho apenas o valor do tef pendente no ECF não entendo por que ele esta retornando isso.

 

Não subtotalizei, informei pagamento nem nada, deixei pro componente auto finalizar.

 

Sinceramente vendo o demo e vendo o que estou fazendo não estou conseguindo ver  que detalhe esta faltando.

 

log:

 

-- 07/02 01:00:41:571 - InfoECF: ineEstadoECF
-- 07/02 01:00:41:879 -     Ret: V
-- 07/02 01:00:41:892 - InfoECF: ineSubTotal
-- 07/02 01:01:26:342 -     Ret: 145
-- 07/02 01:02:04:985 - InfoECF: ineTotalAPagar
-- 07/02 01:02:04:988 -     Ret: 145
-- 07/02 01:11:24:582 - InfoECF: ineEstadoECF
-- 07/02 01:11:24:871 -     Ret: V
-- 07/02 01:11:24:874 - InfoECF: ineSubTotal
-- 07/02 01:11:30:418 -     Ret: 145

Descobri que no evento InfoECF na verificação:

     ineTotalAPagar :
       RetornoECF := FloatToStr( vTotalPagoTEF );

minha variável vTotalPagoTEF estava zerada. Passei o valor pra ela mas mesmo assim retorna a mesma mensagem 

Operação TEF deve ser limitada ao Saldo restante a Pagar.

 

atualização do log.

-- 07/02 01:27:22:444 - InfoECF: ineEstadoECF
-- 07/02 01:27:22:756 -     Ret: V
-- 07/02 01:27:22:781 - InfoECF: ineSubTotal
-- 07/02 01:28:33:576 -     Ret: 145
-- 07/02 01:28:36:036 - InfoECF: ineTotalAPagar
-- 07/02 01:28:36:042 -     Ret: 145
-- 07/02 01:31:20:568 - InfoECF: ineEstadoECF
-- 07/02 01:31:20:863 -     Ret: V
-- 07/02 01:31:20:868 - InfoECF: ineSubTotal
-- 07/02 01:31:33:821 -     Ret: 145
-- 07/02 01:32:05:687 - InfoECF: ineTotalAPagar
-- 07/02 01:32:05:690 -     Ret: 145
-- 07/02 01:37:18:375 - InfoECF: ineEstadoECF
-- 07/02 01:37:18:598 -     Ret: V
-- 07/02 01:37:18:601 - InfoECF: ineSubTotal
-- 07/02 01:37:27:770 -     Ret: 145
-- 07/02 01:37:30:830 - InfoECF: ineTotalAPagar
-- 07/02 01:37:37:675 -     Ret: 145
-- 07/02 01:38:24:761 - InfoECF: ineEstadoECF
-- 07/02 01:38:25:023 -     Ret: V
-- 07/02 01:38:25:026 - InfoECF: ineSubTotal
-- 07/02 01:38:28:886 -     Ret: 145
-- 07/02 01:38:34:333 - InfoECF: ineTotalAPagar
-- 07/02 01:38:45:613 -     Ret: 145

:shock:

 

 

 

Editado por CleitonMaciel
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Fundadores

O valor do InfoECF é você que calcula e passa... (provavelmente na resposta a ele que você está errando)

Tudo que o componente está dizendo é que você está tentando fazer um pagamento com o valor inferior ao valor que vc mesmo informou como sendo o Total...

 

Estude os fontes do Demo com atenção... existem muitos comentários nos fontes com esclarecimentos...

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.

Link para o comentário
Compartilhar em outros sites

  • 6 meses depois ...

Obrigado Daniel, mexi mexi olhei olhei, depurei um monte mas achei.

 

Muito sutil o erro, 

ineTotalAPagar :
       RetornoECF := FloatToStr( vTotalPagoTEF ); 
// não pode passar valor na variável pois o tef será do saldo residual do ecf

Comi muita mosca mas desengasguei.

 

Obrigado.

 

:-P

Bom dia CleitonMaciel,

 

Você disse que não pode passar valor pra variável, mas qual delas ? Pelo que entendi você está se referindo à RetornoECF, correto ?

Então você quer dizer que eu não passaria nada mesmo que o ineTotalAPagar fosse setado ?

 

Att.:

Adriano Quintino

Link para o comentário
Compartilhar em outros sites

Olá,

 

Conseguimos resolver, o nosso problema estava realmente no totalizador, o valor que o sistema estava enviando pra finalizar o pagamento pelo TEF não estava batendo com o valor informado no totalizador por causa de arredondamento. Estávamos com uma diferença mínima de 0,02 centavos.

 

A correção foi colocar o campo Preço de Venda da tabela de itens como Numeric(12, 2)  -  duas casas decimais   -  E funcionou blz...

 

Abraços.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3510 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.

The popup will be closed in 10 segundos...