Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado
Estou tendo problema com o componente quando ocorre o cancelamento da ultima venda e vem o retorno 7007 que pode não é permitido cancelar por tempo superior a 30 minutos, quando ocorre isso existe uma gambiarra no código para tentar identificar se esta utilizando  SAT Kryptus e muda o prefixo a variavel do  fsPrefixoCFe = 'Cfe' depois disso se tentar cancelar qualquer outro cupom não que esteja dentro do tempo não será mais possível.
 
Estou utilizando SAT da DIMEP, para resolver comentei a parte da gambiarra do código.
 
Sugestão: Para este tipo de caso seria interessante criar um parâmetro no componente identificando o fabricante para tratar casos específicos.
 
Segue a função e a parte do código que comentei.
 
function TACBrSAT.CancelarUltimaVenda(chave, dadosCancelamento : AnsiString
  ) : String ;
var
  XMLRecebido, NomeCFe, ChaveAntiga: String;
begin
  fsComandoLog := 'CancelarUltimaVenda( '+chave+', '+dadosCancelamento+' )';
 
  if Trim(chave) = '' then
     raise EACBrSATErro.Create('Parâmetro: "chave" não informado');
 
  if Trim(dadosCancelamento) = '' then
     raise EACBrSATErro.Create('Parâmetro: "dadosCancelamento" não informado');
 
  if SalvarCFes then
  begin
    ForceDirectories( PastaCFeCancelamento );
    NomeCFe := PastaCFeCancelamento + PathDelim + chave + '-can-env.xml';
    WriteToTXT(NomeCFe, dadosCancelamento, False, False);
  end;
 
  IniciaComando;
  Result := FinalizaComando( fsSATClass.CancelarUltimaVenda(chave, dadosCancelamento) ) ;
 
  {// Workaround para SAT Kryptus, que usa o prefixo como: "Cfe" ao inves de "CFe"
  if (fsResposta.codigoDeRetorno = 7007) and (LeftStr(chave,3) = CPREFIXO_CFe) then
  begin
    fsPrefixoCFe      := 'Cfe';                      // Ajusta o Prefixo
    ChaveAntiga       := chave;
    chave             := fsPrefixoCFe + copy(chave,4,Length(chave));
    dadosCancelamento := StringReplace( dadosCancelamento, ChaveAntiga, chave, [rfReplaceAll] );
    CancelarUltimaVenda( chave, dadosCancelamento);  // Tenta novamente
    exit;                                            // cai fora por já tratou na chamada acima
  end;}
 
  if fsResposta.codigoDeRetorno = 7000 then
  begin
     XMLRecebido := DecodeBase64(fsResposta.RetornoLst[6]);
     CFeCanc.AsXMLString := XMLRecebido;
 
     if SalvarCFes then
     begin
       NomeCFe := PastaCFeCancelamento + PathDelim + chave + '-can.xml';
       WriteToTXT(NomeCFe, XMLRecebido, False, False);
     end;
  end;
end ;
  • Curtir 1

João Paulo F. Bellucci

Analista e Programador

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