Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

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

Postado

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...

  • Fundadores
Postado

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.

Postado

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.

Postado

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.

  • Fundadores
Postado

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.

Postado

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.

  • Fundadores
Postado

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.

Postado

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?

Postado

Ok, so que eu passo o subtotal do ecf mas mesmo assim, nao funciona.

vc tentou fazer como ta no exemplo passo-a-passo que vc me pedio...

tenta simular igualzinho. pra ver..

  • Membros Pro
Postado

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.

  • 1 ano depois...
Postado (editado)

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
  • 2 semanas depois ...
  • Fundadores
Postado

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.

Postado

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

  • 6 meses depois ...
  • Membros Pro
Postado

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

  • Membros Pro
Postado

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.

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