Ir para conteúdo
  • Cadastre-se

dev botao

Duplicidade cte Stat 204


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

Recommended Posts

Boa tarde pessoal,

Já faz uns bons anos que venho com esse problema, e venho aqui pedir ajuda... Alguns clientes meu a minoria pelo menos 1 ou 2 vezes na semana acontece aquele famoso aviso: Rejeição Duplicidade de CT-e [nProt: xxxxxxxx].

Esse erro sempre acontece com meus clientes que tem uma internet com o ping alto, ou cliente com internet via rádio, por exemplo tenho outro cliente que já emitiu mais de 20 mil ct-e no meu sistema e nunca aconteceu essa duplicidade.

E por conta desses erros dessa minoria sempre tenho que arrumar manualmente: O que eu faço? Entro no site do sefaz digito a chave do ct-e e faço o download e corrijo o meu sistema.

Gostaria de saber se tem alguma solução para que o meu próprio cliente possa arrumar sem depender de mim e que seja automático pelo o meu sistema, depois de tanto fuçar na internet achei essa dica (que quase resolveu o meu problema)

         if (ACBrCTe1.Conhecimentos.Items[0].CTe.procCTe.cStat = 204) then begin
           if (Application.MessageBox('Deseja Tentar Corrigir a Duplicidade do CT-e?','Pergunta',MB_YESNO+MB_ICONQUESTION) = IDYES) then begin
             ACBrCTe1.WebServices.Consulta.CTeChave := ACBrCTe1.WebServices.Retorno.CTeRetorno.ProtCTe.Items[0].chCTe;
             ACBrCTe1.WebServices.Consulta.Executar;
           end;
         end;

Ele baixa um novo XML da um erro: DigestValue do documento número da chave não confere.

Mas se eu visualizo o XML ele dá aquela mensagem quase no rodapé: CT-e não Enviado para o Sefaz

Alguém tem uma dica/solução para me ajudar?

Grato,

Wagner

Link para o comentário
Compartilhar em outros sites

Nessa situação eu faço diferente. Criei uma rotina no sistema que faz o seguinte e pra mim funciona.

 

1) Abre um FileDialog para o usuário escolher o arquivo XML que ja está gravado (mas nao autorizado) no proprio computador. E carrego o XML do CTE nao autorizado para o componente ;

var
  sSubstitui, sArquivo, sPathdoArquivo, vChave: String;
begin
  if trim(dm1.NotaARQUIVO.AsString) <> '' then
  begin
    if not(InputQuery('Caminho já existe ', 'Substitui ?  SIM ou NAO ?',
      sSubstitui)) then
      exit;
  end
  else
    sSubstitui := 'SIM';
  if UpperCase(sSubstitui) = 'SIM' then
  Begin
    vChave := dm1.NotaCHAVECTE.AsString;

    OpenDialog1.Title := 'Selecione o CTe';
    OpenDialog1.DefaultExt := '-cte.xml';
    sArquivo := vChave + '-cte.xml';
    if FileExists(sArquivo) then
      OpenDialog1.FileName := sArquivo;

    OpenDialog1.Filter :=
      'Arquivos CTe (*-cte.xml)|*-cte.xml|Arquivos XML (*.xml)|*.xml|Todos os Arquivos (*.*)|*.*';
    // OpenDialog1.InitialDir := CTE.Configuracoes.Geral.PathSalvar;
    OpenDialog1.InitialDir := dm1.CadFilPATHCTE2.AsString;
    if OpenDialog1.Execute() then
    begin
      sPathdoArquivo := OpenDialog1.FileName;
      dm1.Nota.Edit;
      dm1.NotaARQUIVO.AsString := trim(sPathdoArquivo);
      dm1.Nota.Post;
    end
  end
 

2) Depois disso pego a chave do CTe baseado no nome do XML e Consulto a Chave

  sArquivo := dm1.NotaARQUIVO.AsString;
  if sArquivo <> '' then
  begin
    s1 := RightStr(sArquivo, 52);
    sNovaChave := LeftStr(s1, 44);
  end;

  if sNovaChave <> dm1.NotaCHAVECTE.AsString then
    if dm1.NotaCHAVECTE.AsString <> '' then
      showmessage('A chave não confere com o arquivo XML, favor verificar !!!');

  if not(InputQuery('Nova Chave ', 'Digite a Nova Chave ?', sNovaChave)) then
    exit;

  if sNovaChave <> '' then
  begin
    if Length(sNovaChave) < 44 then
    begin
      showmessage('Chave foi digitada errada !!');
    end
    else
    begin

      if (CTE.Configuracoes.Certificados.NumeroSerie = '') then
      // se nao tiver certificado busque
      begin
        sCertificado := CTE.SSL.SelecionarCertificado;
        CTE.Configuracoes.Certificados.NumeroSerie := sCertificado;
      end;

      Screen.Cursor := HourGlassCursor;

      //
      PathMensal := CTE.Configuracoes.Arquivos.GetPathCTe
        (dm1.NotaCDATA.AsDateTime);
      //CTE.Configuracoes.Arquivos.PathSalvar := PathMensal;

      CTE.WebServices.Consulta.CTeChave := sNovaChave;
      CTE.WebServices.Consulta.Executar;

      MemoResp.Lines.Text := UTF8Encode(CTE.WebServices.Consulta.RetWS);
      memoRespWS.Lines.Text := UTF8Encode(CTE.WebServices.Consulta.RetornoWS);
      LoadXML(MemoResp, WBResposta);

      iProtINI := Pos('<nProt>', MemoResp.Lines.Text) + 7;
      iProtFIM := Pos('</nProt>', MemoResp.Lines.Text);
      iProtSIZE := iProtFIM - iProtINI;
      sProtocolo := Copy(MemoResp.Lines.Text, iProtINI, iProtSIZE);

      if dm1.NotaCHAVECTE.AsString = '' then // se a chave tiver em branco
      begin
        dm1.Nota.Edit;
        if sProtocolo <> '' then
          dm1.NotaPROTOC.AsString := sProtocolo;
        dm1.NotaCHAVECTE.AsString := sNovaChave;
        dm1.Nota.Post;
      end;

      if dm1.NotaPROTOC.AsString = '' then
      // se protocolo tiver em branco adiciona
      begin
        dm1.Nota.Edit;
        dm1.NotaPROTOC.AsString := sProtocolo;
        dm1.NotaCHAVECTE.AsString := sNovaChave;
        dm1.Nota.Post;
      end;
      CTE.Conhecimentos.ImprimirPDF; // atualiza o PDF
      Screen.Cursor := crDefault;

    end;
 

 

 

Link para o comentário
Compartilhar em outros sites

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