Ir para conteúdo
  • Cadastre-se

dev botao

Consultar Forma de Pagamento


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

Recommended Posts

Boa tarde colegas!

Só pra ter certeza, não existe comando pra consultar quais as formas de pagamento já foram registradas pelas ecf certo?

Procurei no ECFTeste e também dei uma olhada nos fontes e a princípio não encontrei.

Só consigo saber quanto já foi registrado, pelo ACBrECF1.TotalPago correto?

Att.

Giuliano Naspolini Ribeiro

Automalog Consultoria e Sistemas Ltda

Link para o comentário
Compartilhar em outros sites

Giuliano

Existe sim como consultar as formas de pagamentos do ECF. Veja no ECFTeste (menu Variáveis / Formas de Pagamento / Carrega Formas de Pagamento)

procedure TForm1.FormasdePagamento1Click(Sender: TObject);

var A : Integer ;

begin

  ACBrECF1.CarregaFormasPagamento ;


  for A := 0 to ACBrECF1.FormasPagamento.Count -1 do

  begin

     if ACBrECF1.FormasPagamento[A].Descricao <> '' then

        mResp.Lines.Add( 'Forma Pagto: '+ACBrECF1.FormasPagamento[A].Indice+' -> '+

           ACBrECF1.FormasPagamento[A].Descricao+'  Permite Vinculado: '+

           IfThen( ACBrECF1.FormasPagamento[A].PermiteVinculado,'S','N'));

  end ;

  mResp.Lines.Add('---------------------------------');

end;

Leandro Gobbo

Link para o comentário
Compartilhar em outros sites

Ou entendendo melhor a sua dúvida...

Você quer saber quais formas de pagamento já foram registradas "durante a venda" ???

ACBrECF1.SubtotalizaCupom( X, '' );

ACBrECF1.EfetuaPagamento( '01', X-Y, '' , '' ); => dinheiro

ACBrECF1.EfetuaPagamento( '02', Y, '' , '' ); => cartao

=> aqui você quer saber quais foram as formas de pagamento já registradas?

ACBrECF1.FechaCupom( '', 0 );

Leandro Gobbo

Link para o comentário
Compartilhar em outros sites

Ou entendendo melhor a sua dúvida...

Você quer saber quais formas de pagamento já foram registradas "durante a venda" ???

ACBrECF1.SubtotalizaCupom( X, '' );

ACBrECF1.EfetuaPagamento( '01', X-Y, '' , '' ); => dinheiro

ACBrECF1.EfetuaPagamento( '02', Y, '' , '' ); => cartao

=> aqui você quer saber quais foram as formas de pagamento já registradas?

ACBrECF1.FechaCupom( '', 0 );

Isso mesmo Gobbo! Durante a venda.

Quando vou mandar as formas de pagamento, faço um loop e vou enviando uma a uma, mas caso ocorra a perda da comunicação com a ecf, falta de energia, etc, quero saber realmente quais formas de pagamento já foram registradas, para tratar de forma adequada a sequência.

Att.

Giuliano Naspolini Ribeiro

Automalog Consultoria e Sistemas Ltda

Link para o comentário
Compartilhar em outros sites

No meu caso funciona assim:

1. As formas de pagamento selecionadas pelo operador de caixa são gravadas numa "tabela temporária" no banco de dados (não são enviadas pro ECF ainda);

2. Quando o operador confirma a finalização do cupom com todas as formas de pagamento que ele desejar (e o cliente solicitar), eu mando estas formas de pagamento pro ECF uma a uma;

3. Para cada forma de pagamento que seja registrada com sucesso no ECF, os dados desta forma de pagamento são gravados numa outra tabela (Registros R07), útil para a geração do menu fiscal "Movimento por ECF".

Caso haja algum problema, consigo cancelar o cupom, estornando as formas de pagamento registradas, e reiniciar um novo cupom aproveitando os dados deste último cancelado.

Veja uma imagem da minha tela de finalização de venda:

post-373-13548987859765.jpg

Leandro Gobbo

Link para o comentário
Compartilhar em outros sites

No meu caso funciona assim:

1. As formas de pagamento selecionadas pelo operador de caixa são gravadas numa "tabela temporária" no banco de dados (não são enviadas pro ECF ainda);

2. Quando o operador confirma a finalização do cupom com todas as formas de pagamento que ele desejar (e o cliente solicitar), eu mando estas formas de pagamento pro ECF uma a uma;

3. Para cada forma de pagamento que seja registrada com sucesso no ECF, os dados desta forma de pagamento são gravados numa outra tabela (Registros R07), útil para a geração do menu fiscal "Movimento por ECF".

Caso haja algum problema, consigo cancelar o cupom, estornando as formas de pagamento registradas, e reiniciar um novo cupom aproveitando os dados deste último cancelado.

Veja uma imagem da minha tela de finalização de venda:

É mas no meu caso estamos falando de um PDV pra supermercado que não faz DAV, nem pré-venda e normalmente tem compras com 300, 350, 400 itens.

Cancelar o cupom e passar tudo isso de novo seria um grande transtorno, retirando todos os produtos já das bolsas e passando novamente, gerando fila, etc.

Alias qualquer problema na finalização da venda já gera transtorno, e por isso que estou tentando fazer um tratamento adequado e o mais automático possível pra isso.

O problema o ocorre quando por exemplo a ecf é desligada exatamente quando envio uma forma de pagamento e não tenho o retorno se a mesma foi realmente registrada na ecf.

No itens do cupom esse tratamento é fácil pois dá pra consultar o último item registrado na ecf.

Mas no caso das formas de pagamento, até o onde eu vi aqui, só consigo consultar o total pago.

Mas obrigado!

Vou continuar tentando fazer esse tratamento pelo total pago.

Att.

Giuliano Naspolini Ribeiro

Automalog Consultoria e Sistemas Ltda

Link para o comentário
Compartilhar em outros sites

  • Fundadores

O Total Pago é o suficiente se você tem uma Tabela com os Pagamentos a serem enviados...

Você pode varrer sua Tabela interna de Pagamentos a Efetuar, até que a somatória deles iguale ao Valor Total Pago... pronto, os próximos itens da sua Tabela de Pagamentos a fazer, ainda não foram enviados para o ECF

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

O Total Pago é o suficiente se você tem uma Tabela com os Pagamentos a serem enviados...

Você pode varrer sua Tabela interna de Pagamentos a Efetuar, até que a somatória deles iguale ao Valor Total Pago... pronto, os próximos itens da sua Tabela de Pagamentos a fazer, ainda não foram enviados para o ECF

Foi exatamente o que eu fiz Daniel.

Só que tem um probleminha.

O retorno do TotalPago não está vindo corretamente.

Estou usando a classe SWEDA e notei que quando a primeira forma de pagamento é enviada, o TotalPago é alimentado consultando a ECF, mas a partir da segunda forma de pagamento esse total é acrescido diretamente com o valor enviado ao método EfetuaPagamento, não consultando mais a ecf dai pra frente.

Se eu desligar a ecf examente no envio de qualquer forma de pagamento a partir da 2a., ocorre o erro, não chegando assim no ponto em que o TotalPago é acrescido, ou seja, a partir dai o TotalPago está com o valor diferente do que realmente está na ecf.

Para testar, alterei o fonte ali pra que o TotalPago fosse retornado sempre consultando a ECF e ai funcionou certinho.

Mas creio que não seja o ideal, já que essa variável é utilizada em vários métodos da classe.

Att.

Giuliano Naspolini Ribeiro

Automalog Consultoria e Sistemas Ltda

Link para o comentário
Compartilhar em outros sites

Segue os métodos da classe TACBrECFSweda

procedure TACBrECFSweda.EfetuaPagamento(CodFormaPagto: String;

  Valor: Double; Observacao: AnsiString; ImprimeVinculado: Boolean);

Var Espera : Integer ;

begin

  if ImprimeVinculado then

     if (fsVersaoSweda < swdD) and (fsVinculado > 0) then

        raise Exception.Create(ACBrStr('Já existe Forma de Pagamento com '+sLineBreak+

                       'comprovante NAO fiscal vinculado pendente. '+sLineBreak+

                       'Impressora: '+fpModeloStr+' Modelo: '+fsModeloSweda+sLineBreak+

                       ' aceita apenas 1 Compr.NAO Fiscal Viculado por Cupom.'))

     else

        fsVinculado := fsVinculado + 1 ;


  If (fsVersaoSweda < swdB) or (Length(Trim(Observacao)) = 0) then

     Observacao := ''

  else

     Observacao := '{' + copy(Observacao,1,80) ;


  AguardaImpressao := ((fsModeloSweda = 'C') or (fsModeloSweda = 'B')) ;

  EnviaComando('10' + CodFormaPagto + IntToStrZero( Round(Valor*100) ,12) +

                     Observacao );

 ////////////////////////////////////////////////////////////////////////////////////////////////// Desligando a ecf aqui

 { Sweda pode demorar um pouco para entrar no estado de Pagmento, se tentar

    fechar o Cupom antes, o ECF pode para de responder }

  if fsTotalPago <= 0 then         // É o primeiro pagamento ?

  begin

     if fsVersaoSweda < swdST then

     begin

        Espera := 0 ;

        try

           while (TotalPago = 0 ) and (Espera < 10) do

           begin

              sleep( 200 ) ;

              Inc(Espera) ;

           end;

        except

        end;

     end;


     fsTotalPago := 0 ;

  end ;

  ///////////////////////////////////////////////////////////////////////////////////////////////////// Não soma aqui

  fsTotalPago := fsTotalPago + Valor ;

end;
function TACBrECFSweda.GetTotalPago: Double;

Var RetCmd, Status : AnsiString ;

    SubTot, Falta : Double ;

    P : Integer ;

begin

  //////////////////////////////////////////////////////////////////////// Retorna o valor incorreto 

  if fsTotalPago >= 0 then  // Possui TotalPago acumulado ?

  begin

     Result := fsTotalPago ;

     exit ;

  end ;


  Result := 0 ;

  RetCmd := EnviaComando('28') ;

  If fsVersaoSweda > swdA then P := 10 else P := 07 ;

  { Status pode ser: C - concluida, P - Pendente, E - Erro no Comando }

  Status  := UpperCase(copy(RetCmd,P,1)) ;


  if Status = 'P' then

  begin

     P := pos('!',RetCmd) ;

     if P > 0 then

     begin

        SubTot := RoundTo(StrToFloatDef(copy(RetCmd,P-24,12),0) / 100, -2) ;

        Falta  := RoundTo(StrToFloatDef(copy(RetCmd,P+52,12),0) / 100, -2) ;

        Result := max( RoundTo(SubTot - Falta,-2) ,0) ; { evitar negativo }

     end ;

  end ;

end;

Giuliano Naspolini Ribeiro

Automalog Consultoria e Sistemas Ltda

Link para o comentário
Compartilhar em outros sites

Use o modelo ecfSwedaSTX

A classe ecfSweda é legada para Matriciais

Bem que eu queria Daniel, mas a maioria dos meus clientes, usa a leitura de CMC7 dos cheques pela ecf, modelos ST1000 e ST2000.

E essa leitura só está implementada nada classe ecfSweda.

Já tentei sem sucesso fazer essa implementação na classe ecfSwedaSTX :(

Att.

Giuliano Naspolini Ribeiro

Automalog Consultoria e Sistemas Ltda

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Acho que não deve ser muito difícil... posso tentar lhe ajudar se tiver alguma dúvida...

Tem o manual de comunicação direta da STX ? Ele está na pasta TOOLS do repositório (troque /trunk por /tools na linha do SVN)

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

  • 4 meses depois ...
  • Este tópico foi criado há 4267 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.