Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Ola, no componente ACBrECF na unit da Daruma tem uma programação para cancelar o CCD (quando necessário) e depois cancelar o cupom fiscal. A programação funciona apenas

quando se tem um CCD depois do cupom fiscal, impossibilitando o cancelamento de cupom fiscal quando se tem mais de um CCD (tef com multiplos cartões). Então, o código era assim:

procedure TACBrECFDaruma.CancelaCupom;

var

  RetCmd : String ;

  NumCupCCD : String ;

  NumCupom: String;

begin

  fsNumCupom := '';

  AguardaImpressao := True ;


  if fpMFD then

  begin

    RetCmd := EnviaComando( FS + 'R' + #200 + '046');  // Verifica se precisa cancelar CCD; Autor: Andre Bohn

    if copy(RetCmd, 6, 1) <> '0' then

    begin

      try

        RetCmd := EnviaComando( FS + 'R' + #200 + '050');

        NumCupCCD := GetNumCupom;

        NumCupom  := copy(RetCmd, 6, 6);

        if NumCupom <> NumCupCCD then

        begin

          EnviaComando(FS + 'F' + #214 , 15); // Fecho o CCD caso ainda não esteja fechado

          EnviaComando(FS + 'F' + #218 + NumCupCCD +#255+#255+#255, 15); // Cancela Conprovante Não Fiscal

          EnviaComando(FS + 'F' + #214 , 15); // Fecha Comprovante de estorno Cancela Conprovante Não Fiscal

        end;

      except

      end;


      EnviaComando(FS + 'F' + #211, 15) ;  // Cancela Cupom


      RespostasComando.Clear;

      RespostasComando.AddField('COO', Copy(fpRespostaComando, 10, 6));

      RespostasComando.AddField('CCF', Copy(fpRespostaComando, 16, 6));

      RespostasComando.AddField('ValorCancelado', Copy(fpRespostaComando, 22, 12));


    end

    else

      raise EACBrECFCMDInvalido.Create( ACBrStr('Não existe documento para cancelar.') );

  end


  else if fsNumVersao = '2000' then

     EnviaComando(ESC + #211, 15)

  else

     EnviaComando(ESC + #206, 15) ;


  ZeraTotalApagar;


  FechaRelatorio ;   { Fecha relatorio se ficou algum aberto (só por garantia)}

end;
e eu alterei para que faça o cancelamento de vários CCDs, ficando assim:
procedure TACBrECFDaruma.CancelaCupom;

var

  RetCmd : String ;

  NumUltimoCupom : String ;

  NumCupomCancelavel: String;

  iNumUltimoCupom, iNumCupomCancelavel: integer;

begin

  fsNumCupom := '';

  AguardaImpressao := True ;


  if fpMFD then

  begin

    RetCmd := EnviaComando( FS + 'R' + #200 + '046');  // Verifica se precisa cancelar CCD;

    if copy(RetCmd, 6, 1) <> '0' then

    begin

      try

        RetCmd := EnviaComando( FS + 'R' + #200 + '050'); // retorna numero do cupom cancelavel

        NumCupomCancelavel  := copy(RetCmd, 6, 6);

        NumUltimoCupom := GetNumCupom;

        iNumUltimoCupom := StrToInt(NumUltimoCupom);

        iNumCupomCancelavel := StrToInt(NumCupomCancelavel);


        while iNumCupomCancelavel < iNumUltimoCupom do

        begin

          NumUltimoCupom := FormatFloat('000000',iNumUltimoCupom);

          EnviaComando(FS + 'F' + #214 , 15); // Fecho o CCD caso ainda não esteja fechado

          EnviaComando(FS + 'F' + #218 + NumUltimoCupom +#255+#255+#255, 15); // Cancela Conprovante Não Fiscal

          EnviaComando(FS + 'F' + #214 , 15); // Fecha Comprovante de estorno Cancela Conprovante Não Fiscal

          dec(iNumUltimoCupom);

        end;


      except

      end;



      EnviaComando(FS + 'F' + #211, 15) ;  // Cancela Cupom


      RespostasComando.Clear;

      RespostasComando.AddField('COO', Copy(fpRespostaComando, 10, 6));

      RespostasComando.AddField('CCF', Copy(fpRespostaComando, 16, 6));

      RespostasComando.AddField('ValorCancelado', Copy(fpRespostaComando, 22, 12));


    end

    else

      raise EACBrECFCMDInvalido.Create( ACBrStr('Não existe documento para cancelar.') );

  end


  else if fsNumVersao = '2000' then

     EnviaComando(ESC + #211, 15)

  else

     EnviaComando(ESC + #206, 15) ;


  ZeraTotalApagar;


  FechaRelatorio ;   { Fecha relatorio se ficou algum aberto (só por garantia)}

end;

Resolveu aqui pra mim, tenho uma FS-600 e testei com até 3 CCDs depois do cupom.

Espero er ajudado

[]'s

Edgar

Delphi Rocks!

  • Fundadores
Postado

Depende Regys... tb é permitido abrir um CCD e imprimir todas as vias de todos os cartoes nele...

Eu particularmente prefiro assim, pq em alguns ECFs, como por exemplo na bematech, não é permitido abrir 2 CDC usando a mesma Forma de Pagamento, no mesmo cupom...

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

Realmente se utilizar formas de pagamentos distintas no ECF faz sentido ter mais de um CCD, entendi Régys. Obrigado.

Homologuei TEF a menos de um mês, só que no meu caso utilizo apenas uma forma de pagamento com a soma dos cartões (Ex: Amex 1,00 e Redecard 3,00, então forma de pagamento: Cartao 4,00), então coloco tudo em um único CCD. Nunca tive problemas com a homologação tratando dessa forma.

Mais uma vez obrigado pelas explicações.

Fabrício Gomes Araújo

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